diff --git a/doc/src/Commands_all.txt b/doc/src/Commands_all.txt index 66c348ee30..52c2e67e2e 100644 --- a/doc/src/Commands_all.txt +++ b/doc/src/Commands_all.txt @@ -83,6 +83,7 @@ An alphabetic list of all general LAMMPS commands. "molecule"_molecule.html, "ndx2group"_group2ndx.html, "neb"_neb.html, +"neb_spin"_neb_spin.html, "neigh_modify"_neigh_modify.html, "neighbor"_neighbor.html, "newton"_newton.html, diff --git a/doc/src/Commands_category.txt b/doc/src/Commands_category.txt index 134dae82bb..14a328b227 100644 --- a/doc/src/Commands_category.txt +++ b/doc/src/Commands_category.txt @@ -116,6 +116,7 @@ Actions: "minimize"_minimize.html, "neb"_neb.html, +"neb_spin"_neb_spin.html, "prd"_prd.html, "rerun"_rerun.html, "run"_run.html, diff --git a/doc/src/Commands_fix.txt b/doc/src/Commands_fix.txt index 14de1d06dd..d2d781d4b2 100644 --- a/doc/src/Commands_fix.txt +++ b/doc/src/Commands_fix.txt @@ -107,6 +107,7 @@ OPT. "mvv/edpd"_fix_mvv_dpd.html, "mvv/tdpd"_fix_mvv_dpd.html, "neb"_fix_neb.html, +"neb_spin"_fix_neb_spin.html, "nph (ko)"_fix_nh.html, "nph/asphere (o)"_fix_nph_asphere.html, "nph/body"_fix_nph_body.html, diff --git a/doc/src/Eqs/neb_spin_angle.jpg b/doc/src/Eqs/neb_spin_angle.jpg new file mode 100644 index 0000000000..b7021c4f62 Binary files /dev/null and b/doc/src/Eqs/neb_spin_angle.jpg differ diff --git a/doc/src/Eqs/neb_spin_angle.tex b/doc/src/Eqs/neb_spin_angle.tex new file mode 100644 index 0000000000..03b133cd77 --- /dev/null +++ b/doc/src/Eqs/neb_spin_angle.tex @@ -0,0 +1,15 @@ +\documentclass[preview]{standalone} +\usepackage{varwidth} +\usepackage[utf8x]{inputenc} +\usepackage{amsmath, amssymb, graphics, setspace} + +\begin{document} +\begin{varwidth}{50in} + \begin{equation} + \omega_i^{\nu} = + (\nu - 1) \Delta \omega_i + {\rm ~~and~~} \Delta \omega_i = \frac{\omega_i}{Q-1} + , \nonumber + \end{equation} +\end{varwidth} +\end{document} diff --git a/doc/src/Eqs/neb_spin_k.jpg b/doc/src/Eqs/neb_spin_k.jpg new file mode 100644 index 0000000000..add309694f Binary files /dev/null and b/doc/src/Eqs/neb_spin_k.jpg differ diff --git a/doc/src/Eqs/neb_spin_k.tex b/doc/src/Eqs/neb_spin_k.tex new file mode 100644 index 0000000000..f0ce8e180e --- /dev/null +++ b/doc/src/Eqs/neb_spin_k.tex @@ -0,0 +1,16 @@ +\documentclass[preview]{standalone} +\usepackage{varwidth} +\usepackage[utf8x]{inputenc} +\usepackage{amsmath, amssymb, graphics, setspace} + +\begin{document} +\begin{varwidth}{50in} + \begin{equation} + \vec{k}_i = + \frac{\vec{m}_i^I \times \vec{m}_i^F}{\left|\vec{m}_i^I + \times \vec{m}_i^F\right|} + %&{\rm ~if~}& \vec{m}_i^I \times \vec{m}_i^F + , \nonumber + \end{equation} +\end{varwidth} +\end{document} diff --git a/doc/src/Eqs/neb_spin_rodrigues_formula.jpg b/doc/src/Eqs/neb_spin_rodrigues_formula.jpg new file mode 100644 index 0000000000..66070f7bc5 Binary files /dev/null and b/doc/src/Eqs/neb_spin_rodrigues_formula.jpg differ diff --git a/doc/src/Eqs/neb_spin_rodrigues_formula.tex b/doc/src/Eqs/neb_spin_rodrigues_formula.tex new file mode 100644 index 0000000000..4a8347cd79 --- /dev/null +++ b/doc/src/Eqs/neb_spin_rodrigues_formula.tex @@ -0,0 +1,16 @@ +\documentclass[preview]{standalone} +\usepackage{varwidth} +\usepackage[utf8x]{inputenc} +\usepackage{amsmath, amssymb, graphics, setspace} + +\begin{document} +\begin{varwidth}{50in} + \begin{equation} + \vec{m}_i^{\nu} = \vec{m}_i^{I} \cos(\omega_i^{\nu}) + + (\vec{k}_i \times \vec{m}_i^{I}) \sin(\omega_i^{\nu}) + + (1.0-\cos(\omega_i^{\nu})) \vec{k}_i (\vec{k}_i\cdot + \vec{m}_i^{I}) + , \nonumber + \end{equation} +\end{varwidth} +\end{document} diff --git a/doc/src/Howto_replica.txt b/doc/src/Howto_replica.txt index 29d1aa02fd..505967c1b8 100644 --- a/doc/src/Howto_replica.txt +++ b/doc/src/Howto_replica.txt @@ -17,6 +17,7 @@ periodically. These are the relevant commands: "neb"_neb.html for nudged elastic band calculations +"neb_spin"_neb_spin.html for magnetic nudged elastic band calculations "prd"_prd.html for parallel replica dynamics "tad"_tad.html for temperature accelerated dynamics "temper"_temper.html for parallel tempering diff --git a/doc/src/Packages_details.txt b/doc/src/Packages_details.txt index 0ab1b5e4fd..352a38af84 100644 --- a/doc/src/Packages_details.txt +++ b/doc/src/Packages_details.txt @@ -918,6 +918,7 @@ src/SPIN: filenames -> commands "fix nve/spin"_fix_nve_spin.html "fix precession/spin"_fix_precession_spin.html "compute spin"_compute_spin.html +"neb/spin"_neb_spin.html examples/SPIN :ul :line diff --git a/doc/src/commands_list.txt b/doc/src/commands_list.txt index 6f90d9c93a..cf716df9ac 100644 --- a/doc/src/commands_list.txt +++ b/doc/src/commands_list.txt @@ -67,6 +67,7 @@ Commands :h1 minimize molecule neb + neb_spin neigh_modify neighbor newton diff --git a/doc/src/fix_neb.txt b/doc/src/fix_neb.txt index 410ab3d4d1..87292bb5cd 100644 --- a/doc/src/fix_neb.txt +++ b/doc/src/fix_neb.txt @@ -97,7 +97,7 @@ Note that in this case the specified {Kspring} is in force/distance units. With a value of {ideal}, the spring force is computed as suggested in -"(WeinenE)"_#WeinenE : +"(WeinanE)"_#WeinanE : Fnudge_parallel = -{Kspring} * (RD-RDideal) / (2 * meanDist) :pre @@ -224,8 +224,8 @@ specified (no inter-replica force on the end replicas). [(Henkelman2)] Henkelman, Uberuaga, Jonsson, J Chem Phys, 113, 9901-9904 (2000). -:link(WeinenE) -[(WeinenE)] E, Ren, Vanden-Eijnden, Phys Rev B, 66, 052301 (2002). +:link(WeinanE) +[(WeinanE)] E, Ren, Vanden-Eijnden, Phys Rev B, 66, 052301 (2002). :link(Jonsson) [(Jonsson)] Jonsson, Mills and Jacobsen, in Classical and Quantum diff --git a/doc/src/fix_neb_spin.txt b/doc/src/fix_neb_spin.txt new file mode 100644 index 0000000000..89420f451c --- /dev/null +++ b/doc/src/fix_neb_spin.txt @@ -0,0 +1,76 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Commands_all.html) + +:line + +fix neb/spin command :h3 + +[Syntax:] + +fix ID group-ID neb/spin Kspring :pre + +ID, group-ID are documented in "fix"_fix.html command :ulb,l +neb/spin = style name of this fix command :l +Kspring = spring constant for parallel nudging force +(force/distance units or force units, see parallel keyword) :pre,ule + +[Examples:] + +fix 1 active neb/spin 1.0 + +[Description:] + +Add nudging forces to spins in the group for a multi-replica +simulation run via the "neb/spin"_neb_spin.html command to perform a +geodesic nudged elastic band (GNEB) calculation for finding the +transition state. +Hi-level explanations of GNEB are given with the +"neb/spin"_neb_spin.html command and on the +"Howto replica"_Howto_replica.html doc page. +The fix neb/spin command must be used with the "neb/spin" command and +defines how inter-replica nudging forces are computed. A GNEB +calculation is divided in two stages. In the first stage n replicas +are relaxed toward a MEP until convergence. In the second stage, the +climbing image scheme is enabled, so that the replica having the highest +energy relaxes toward the saddle point (i.e. the point of highest energy +along the MEP), and a second relaxation is performed. + +The nudging forces are calculated as explained in +"(BessarabB)"_#BessarabB). +See this reference for more explanation about their expression. + +[Restart, fix_modify, output, run start/stop, minimize info:] + +No information about this fix is written to "binary restart +files"_restart.html. None of the "fix_modify"_fix_modify.html options +are relevant to this fix. No global or per-atom quantities are stored +by this fix for access by various "output commands"_Howto_output.html. +No parameter of this fix can be used with the {start/stop} keywords of +the "run"_run.html command. + +The forces due to this fix are imposed during an energy minimization, +as invoked by the "minimize"_minimize.html command via the +"neb/spin"_neb_spin.html command. + +[Restrictions:] + +This command can only be used if LAMMPS was built with the SPIN +package. See the "Build package"_Build_package.html doc +page for more info. + +[Related commands:] + +"neb_spin"_neb_spin.html + +[Default:] + +none + +:line + +:link(BessarabB) +[(BessarabB)] Bessarab, Uzdin, Jonsson, Comp Phys Comm, 196, +335-347 (2015). diff --git a/doc/src/fix_precession_spin.txt b/doc/src/fix_precession_spin.txt index f16522c7b6..05814931ea 100644 --- a/doc/src/fix_precession_spin.txt +++ b/doc/src/fix_precession_spin.txt @@ -31,7 +31,7 @@ fix 1 all precession/spin zeeman 0.1 0.0 0.0 1.0 anisotropy 0.001 0.0 0.0 1.0 :p [Description:] -Impose a force torque to each magnetic spin in the group. +This fix applies a precession torque to each magnetic spin in the group. Style {zeeman} is used for the simulation of the interaction between the magnetic spins in the defined group and an external diff --git a/doc/src/fixes.txt b/doc/src/fixes.txt index d77acf946d..d966b9a225 100644 --- a/doc/src/fixes.txt +++ b/doc/src/fixes.txt @@ -84,6 +84,7 @@ Fixes :h1 fix_msst fix_mvv_dpd fix_neb + fix_neb_spin fix_nh fix_nh_eff fix_nh_uef diff --git a/doc/src/lammps.book b/doc/src/lammps.book index e97ef4b994..500690597d 100644 --- a/doc/src/lammps.book +++ b/doc/src/lammps.book @@ -179,6 +179,7 @@ min_spin.html minimize.html molecule.html neb.html +neb_spin.html neigh_modify.html neighbor.html newton.html @@ -309,6 +310,7 @@ fix_mscg.html fix_msst.html fix_mvv_dpd.html fix_neb.html +fix_neb_spin.html fix_nh.html fix_nh_eff.html fix_nph_asphere.html diff --git a/doc/src/neb_spin.txt b/doc/src/neb_spin.txt new file mode 100644 index 0000000000..70c0fe2ab5 --- /dev/null +++ b/doc/src/neb_spin.txt @@ -0,0 +1,375 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Commands_all.html) + +:line + +neb command :h3 + +[Syntax:] + +neb/spin etol ttol N1 N2 Nevery file-style arg keyword :pre + +etol = stopping tolerance for energy (energy units) :ulb,l +ttol = stopping tolerance for torque ( units) :l +N1 = max # of iterations (timesteps) to run initial NEB :l +N2 = max # of iterations (timesteps) to run barrier-climbing NEB :l +Nevery = print replica energies and reaction coordinates every this many timesteps :l +file-style = {final} or {each} or {none} :l + {final} arg = filename + filename = file with initial coords for final replica + coords for intermediate replicas are linearly interpolated + between first and last replica + {each} arg = filename + filename = unique filename for each replica (except first) + with its initial coords + {none} arg = no argument all replicas assumed to already have + their initial coords :pre +keyword = {verbose} +:ule + +[Examples:] + +neb/spin 0.1 0.0 1000 500 50 final coords.final +neb/spin 0.0 0.001 1000 500 50 each coords.initial.$i +neb/spin 0.0 0.001 1000 500 50 none verbose :pre + +[Description:] + +Perform a geodesic nudged elastic band (GNEB) calculation using multiple +replicas of a system. Two or more replicas must be used; the first +and last are the end points of the transition path. + +GNEB is a method for finding both the spin configurations and height +of the energy barrier associated with a transition state, e.g. +spins to perform a collective rotation from one energy basin to +another. +The implementation in LAMMPS follows the discussion in the +following paper: "(BessarabA)"_#BessarabA. + +Each replica runs on a partition of one or more processors. Processor +partitions are defined at run-time using the "-partition command-line +switch"_Run_options.html. Note that if you have MPI installed, you +can run a multi-replica simulation with more replicas (partitions) +than you have physical processors, e.g you can run a 10-replica +simulation on just one or two processors. You will simply not get the +performance speed-up you would see with one or more physical +processors per replica. See the "Howto replica"_Howto_replica.html +doc page for further discussion. + +NOTE: As explained below, a GNEB calculation performs a damped dynamics +minimization across all the replicas. The "spin"_min_spin.html +style minimizer has to be defined in your input script. + +When a GNEB calculation is performed, it is assumed that each replica +is running the same system, though LAMMPS does not check for this. +I.e. the simulation domain, the number of magnetic atoms, the +interaction potentials, and the starting configuration when the neb +command is issued should be the same for every replica. + +In a GNEB calculation each replica is connected to other replicas by +inter-replica nudging forces. These forces are imposed by the "fix +neb/spin"_fix_neb_spin.html command, which must be used in conjunction +with the neb command. +The group used to define the fix neb/spin command defines the +GNEB magnetic atoms which are the only ones that inter-replica springs +are applied to. +If the group does not include all magnetic atoms, then non-GNEB +magnetic atoms have no inter-replica springs and the torques they feel +and their precession motion is computed in the usual way due only +to other magnetic atoms within their replica. +Conceptually, the non-GNEB atoms provide a background force field for +the GNEB atoms. +Their magnetic spins can be allowed to evolve during the GNEB +minimization procedure. + +The initial spin configuration for each of the replicas can be +specified in different manners via the {file-style} setting, as +discussed below. Only atomic spins whose initial coordinates should +differ from the current configuration need to be specified. + +Conceptually, the initial and final configurations for the first +replica should be states on either side of an energy barrier. + +As explained below, the initial configurations of intermediate +replicas can be spin coordinates interpolated in a linear fashion +between the first and last replicas. This is often adequate for +simple transitions. For more complex transitions, it may lead to slow +convergence or even bad results if the minimum energy path (MEP, see +below) of states over the barrier cannot be correctly converged to +from such an initial path. In this case, you will want to generate +initial states for the intermediate replicas that are geometrically +closer to the MEP and read them in. + +:line + +For a {file-style} setting of {final}, a filename is specified which +contains atomic and spin coordinates for zero or more atoms, in the +format described below. +For each atom that appears in the file, the new coordinates are +assigned to that atom in the final replica. Each intermediate replica +also assigns a new spin to that atom in an interpolated manner. +This is done by using the current direction of the spin at the starting +point and the read-in direction as the final point. +The "angular distance" between them is calculated, and the new direction +is assigned to be a fraction of the angular distance. + +NOTE: The "angular distance" between the starting and final point is +evaluated in the geodesic sense, as described in +"(BessarabA)"_#BessarabA. + +NOTE: The angular interpolation between the starting and final point +is achieved using Rodrigues formula: + +:c,image(Eqs/neb_spin_rodrigues_formula.jpg) + +where m_i^I is the initial spin configuration for the spin i, +omega_i^nu is a rotation angle defined as: + +:c,image(Eqs/neb_spin_angle.jpg) + +with nu the image number, Q the total number of images, and +omega_i the total rotation between the initial and final spins. +k_i defines a rotation axis such as: + +:c,image(Eqs/neb_spin_k.jpg) + +if the initial and final spins are not aligned. +If the initial and final spins are aligned, then their cross +product is null, and the expression above does not apply. +If they point toward the same direction, the intermediate images +conserve the same orientation. +If the initial and final spins are aligned, but point toward +opposite directions, an arbitrary rotation vector belonging to +the plane perpendicular to initial and final spins is chosen. +In this case, a warning message is displayed. + +For a {file-style} setting of {each}, a filename is specified which is +assumed to be unique to each replica. +See the "neb"_neb.html documentation page for more information about this +option. + +For a {file-style} setting of {none}, no filename is specified. Each +replica is assumed to already be in its initial configuration at the +time the neb command is issued. This allows each replica to define +its own configuration by reading a replica-specific data or restart or +dump file, via the "read_data"_read_data.html, +"read_restart"_read_restart.html, or "read_dump"_read_dump.html +commands. The replica-specific names of these files can be specified +as in the discussion above for the {each} file-style. Also see the +section below for how a NEB calculation can produce restart files, so +that a long calculation can be restarted if needed. + +NOTE: None of the {file-style} settings change the initial +configuration of any atom in the first replica. The first replica +must thus be in the correct initial configuration at the time the neb +command is issued. + +:line + +A NEB calculation proceeds in two stages, each of which is a +minimization procedure, performed via damped dynamics. To enable +this, you must first define a damped spin dynamics +"min_style"_min_style.html, using the {spin} style (see +"min_spin"_min_spin.html for more information). +The other styles cannot be used, since they relax the lattice +degrees of freedom instead of the spins. + +The minimizer tolerances for energy and force are set by {etol} and +{ttol}, the same as for the "minimize"_minimize.html command. + +A non-zero {etol} means that the GNEB calculation will terminate if the +energy criterion is met by every replica. The energies being compared +to {etol} do not include any contribution from the inter-replica +nudging forces, since these are non-conservative. A non-zero {ttol} +means that the GNEB calculation will terminate if the torque criterion +is met by every replica. The torques being compared to {ttol} include +the inter-replica nudging forces. + +The maximum number of iterations in each stage is set by {N1} and +{N2}. These are effectively timestep counts since each iteration of +damped dynamics is like a single timestep in a dynamics +"run"_run.html. During both stages, the potential energy of each +replica and its normalized distance along the reaction path (reaction +coordinate RD) will be printed to the screen and log file every +{Nevery} timesteps. The RD is 0 and 1 for the first and last replica. +For intermediate replicas, it is the cumulative angular distance +(normalized by the total cumulative angular distance) between adjacent +replicas, where "distance" is defined as the length of the 3N-vector of +the geodesic distances in spin coordinates, with N the number of +GNEB spins involved (see equation (13) in "(BessarabA)"_#BessarabA). +These outputs allow you to monitor NEB's progress in +finding a good energy barrier. {N1} and {N2} must both be multiples +of {Nevery}. + +In the first stage of GNEB, the set of replicas should converge toward +a minimum energy path (MEP) of conformational states that transition +over a barrier. The MEP for a transition is defined as a sequence of +3N-dimensional spin states, each of which has a potential energy +gradient parallel to the MEP itself. +The configuration of highest energy along a MEP corresponds to a saddle +point. The replica states will also be roughly equally spaced along +the MEP due to the inter-replica nudging force added by the +"fix neb"_fix_neb.html command. + +In the second stage of GNEB, the replica with the highest energy is +selected and the inter-replica forces on it are converted to a force +that drives its spin coordinates to the top or saddle point of the +barrier, via the barrier-climbing calculation described in +"(BessarabA)"_#BessarabA. As before, the other replicas rearrange +themselves along the MEP so as to be roughly equally spaced. + +When both stages are complete, if the GNEB calculation was successful, +the configurations of the replicas should be along (close to) the MEP +and the replica with the highest energy should be a spin +configuration at (close to) the saddle point of the transition. The +potential energies for the set of replicas represents the energy +profile of the transition along the MEP. + +:line + +An atom map must be defined which it is not by default for "atom_style +atomic"_atom_style.html problems. The "atom_modify +map"_atom_modify.html command can be used to do this. + +An initial value can be defined for the timestep. Although, the {spin} +minimization algorithm is an adaptive timestep methodology, so that +this timestep is likely to evolve during the calculation. + +The minimizers in LAMMPS operate on all spins in your system, even +non-GNEB atoms, as defined above. + +:line + +Each file read by the neb/spin command containing spin coordinates used +to initialize one or more replicas must be formatted as follows. + +The file can be ASCII text or a gzipped text file (detected by a .gz +suffix). The file can contain initial blank lines or comment lines +starting with "#" which are ignored. The first non-blank, non-comment +line should list N = the number of lines to follow. The N successive +lines contain the following information: + +ID1 g1 x1 y1 z1 sx1 sy1 sz1 +ID2 g2 x2 y2 z2 sx2 sy2 sz2 +... +IDN gN yN zN sxN syN szN :pre + +The fields are the atom ID, the norm of the associated magnetic spin, +followed by the {x,y,z} coordinates and the {sx,sy,sz} spin coordinates. +The lines can be listed in any order. Additional trailing information on +the line is OK, such as a comment. + +Note that for a typical GNEB calculation you do not need to specify +initial spin coordinates for very many atoms to produce differing starting +and final replicas whose intermediate replicas will converge to the +energy barrier. Typically only new spin coordinates for atoms +geometrically near the barrier need be specified. + +Also note there is no requirement that the atoms in the file +correspond to the GNEB atoms in the group defined by the "fix +neb"_fix_neb.html command. Not every GNEB atom need be in the file, +and non-GNEB atoms can be listed in the file. + +:line + +Four kinds of output can be generated during a GNEB calculation: energy +barrier statistics, thermodynamic output by each replica, dump files, +and restart files. + +When running with multiple partitions (each of which is a replica in +this case), the print-out to the screen and master log.lammps file +contains a line of output, printed once every {Nevery} timesteps. It +contains the timestep, the maximum torque per replica, the maximum +torque per atom (in any replica), potential gradients in the initial, +final, and climbing replicas, the forward and backward energy +barriers, the total reaction coordinate (RDT), and the normalized +reaction coordinate and potential energy of each replica. + +The "maximum torque per replica" is the two-norm of the +3N-length vector given by the cross product of a spin by its +precession vector omega, in each replica, maximized across replicas, +which is what the {ttol} setting is checking against. In this case, N is +all the atoms in each replica. The "maximum torque per atom" is the +maximum torque component of any atom in any replica. The potential +gradients are the two-norm of the 3N-length magnetic precession vector +solely due to the interaction potential i.e. without adding in +inter-replica forces, and projected along the path tangent (as detailed +in Appendix D of "(BessarabA)"_#BessarabA). + +The "reaction coordinate" (RD) for each replica is the two-norm of the +3N-length vector of geodesic distances between its spins and the preceding +replica's spins (see equation (13) of "(BessarabA)"_#BessarabA), added to +the RD of the preceding replica. The RD of the first replica RD1 = 0.0; +the RD of the final replica RDN = RDT, the total reaction coordinate. +The normalized RDs are divided by RDT, so that they form a monotonically +increasing sequence from zero to one. When computing RD, N only includes +the spins being operated on by the fix neb/spin command. + +The forward (reverse) energy barrier is the potential energy of the +highest replica minus the energy of the first (last) replica. + +Supplementary information for all replicas can be printed out to the +screen and master log.lammps file by adding the verbose keyword. This +information include the following. +The "GradVidottan" are the projections of the potential gradient for +the replica i on its tangent vector (as detailed in Appendix D of +"(BessarabA)"_#BessarabA). +The "DNi" are the non normalized geodesic distances (see equation (13) +of "(BessarabA)"_#BessarabA), between a replica i and the next replica +i+1. For the last replica, this distance is not defined and a "NAN" +value is the corresponding output. + +When a NEB calculation does not converge properly, the supplementary +information can help understanding what is going wrong. + +When running on multiple partitions, LAMMPS produces additional log +files for each partition, e.g. log.lammps.0, log.lammps.1, etc. For a +GNEB calculation, these contain the thermodynamic output for each +replica. + +If "dump"_dump.html commands in the input script define a filename +that includes a {universe} or {uloop} style "variable"_variable.html, +then one dump file (per dump command) will be created for each +replica. At the end of the GNEB calculation, the final snapshot in +each file will contain the sequence of snapshots that transition the +system over the energy barrier. Earlier snapshots will show the +convergence of the replicas to the MEP. + +Likewise, "restart"_restart.html filenames can be specified with a +{universe} or {uloop} style "variable"_variable.html, to generate +restart files for each replica. These may be useful if the GNEB +calculation fails to converge properly to the MEP, and you wish to +restart the calculation from an intermediate point with altered +parameters. + +A c file script in provided in the tool/spin/interpolate_gneb +directory, that interpolates the MEP given the information provided +by the verbose output option (as detailed in Appendix D of +"(BessarabA)"_#BessarabA). + +:line + +[Restrictions:] + +This command can only be used if LAMMPS was built with the SPIN +package. See the "Build package"_Build_package.html doc +page for more info. + +:line + +[Related commands:] + +"min/spin"_min_spin.html, "fix neb/spin"_fix_neb_spin.html + +[Default:] + +none + +:line + +:link(BessarabA) +[(BessarabA)] Bessarab, Uzdin, Jonsson, Comp Phys Comm, 196, +335-347 (2015). diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index a845673715..7160800c50 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -200,6 +200,7 @@ Berkowitz berlin Berne Bertotti +Bessarab Beutler bgq Bh @@ -592,6 +593,7 @@ Dmax dmg dmi dnf +DNi Dobson Dodds dodgerblue @@ -963,6 +965,8 @@ gmail gmake gmask Gmask +gneb +GNEB googlemail Gordan GPa @@ -2368,6 +2372,7 @@ rNEMD ro Rochus Rockett +Rodrigues Rohart Ronchetti Rosati @@ -2772,6 +2777,7 @@ tt Tt TThis ttm +ttol tu Tuckerman tue @@ -2844,6 +2850,7 @@ utsa Uttormark uvm uwo +Uzdin vacf valent Valeriu @@ -2943,7 +2950,7 @@ wB Wbody webpage Weckner -WeinenE +WeinanE Wennberg Westview wget diff --git a/examples/SPIN/gneb/README b/examples/SPIN/gneb/README new file mode 100644 index 0000000000..9d43c775b6 --- /dev/null +++ b/examples/SPIN/gneb/README @@ -0,0 +1,13 @@ +Perform geodesic NEB calculations for spin configurations. +The two examples are: +- the magnetic switching of an iron nanoisland +- the collapse of a magnetic skyrmion + +Run those examples as: + +mpirun -np 3 lmp_mpi -in in.gneb.iron -partition 3x1 + +You should be able to use any number of replicas >= 3. + +In the interpolate/ directory, a c routine is provided to +interpolate the MEP. diff --git a/examples/SPIN/gneb/iron/final.iron_spin b/examples/SPIN/gneb/iron/final.iron_spin new file mode 100644 index 0000000000..aa1cbae770 --- /dev/null +++ b/examples/SPIN/gneb/iron/final.iron_spin @@ -0,0 +1,68 @@ +32 +1 2.2000000000000002e+00 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +2 2.2000000000000002e+00 1.4332499999999999e+00 1.4332499999999999e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +3 2.2000000000000002e+00 2.8664999999999998e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +4 2.2000000000000002e+00 4.2997499999999995e+00 1.4332499999999999e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +5 2.2000000000000002e+00 5.7329999999999997e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +6 2.2000000000000002e+00 7.1662499999999998e+00 1.4332499999999999e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +7 2.2000000000000002e+00 8.5994999999999990e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +8 2.2000000000000002e+00 1.0032750000000000e+01 1.4332499999999999e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +9 2.2000000000000002e+00 0.0000000000000000e+00 2.8664999999999998e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +10 2.2000000000000002e+00 2.8664999999999998e+00 2.8664999999999998e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +11 2.2000000000000002e+00 5.7329999999999997e+00 2.8664999999999998e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +12 2.2000000000000002e+00 8.5994999999999990e+00 2.8664999999999998e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +13 2.2000000000000002e+00 1.4332499999999999e+00 4.2997499999999995e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +14 2.2000000000000002e+00 4.2997499999999995e+00 4.2997499999999995e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +15 2.2000000000000002e+00 7.1662499999999998e+00 4.2997499999999995e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +16 2.2000000000000002e+00 1.0032750000000000e+01 4.2997499999999995e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +17 2.2000000000000002e+00 0.0000000000000000e+00 5.7329999999999997e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +18 2.2000000000000002e+00 1.4332499999999999e+00 7.1662499999999998e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +19 2.2000000000000002e+00 2.8664999999999998e+00 5.7329999999999997e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +20 2.2000000000000002e+00 4.2997499999999995e+00 7.1662499999999998e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +21 2.2000000000000002e+00 5.7329999999999997e+00 5.7329999999999997e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +22 2.2000000000000002e+00 7.1662499999999998e+00 7.1662499999999998e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +23 2.2000000000000002e+00 8.5994999999999990e+00 5.7329999999999997e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +24 2.2000000000000002e+00 1.0032750000000000e+01 7.1662499999999998e+00 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +25 2.2000000000000002e+00 0.0000000000000000e+00 8.5994999999999990e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +26 2.2000000000000002e+00 2.8664999999999998e+00 8.5994999999999990e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +27 2.2000000000000002e+00 5.7329999999999997e+00 8.5994999999999990e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +28 2.2000000000000002e+00 8.5994999999999990e+00 8.5994999999999990e+00 0.0000000000000000e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +29 2.2000000000000002e+00 1.4332499999999999e+00 1.0032750000000000e+01 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +30 2.2000000000000002e+00 4.2997499999999995e+00 1.0032750000000000e+01 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +31 2.2000000000000002e+00 7.1662499999999998e+00 1.0032750000000000e+01 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +32 2.2000000000000002e+00 1.0032750000000000e+01 1.0032750000000000e+01 1.4332499999999999e+00 -1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/SPIN/gneb/iron/in.gneb.iron b/examples/SPIN/gneb/iron/in.gneb.iron new file mode 100644 index 0000000000..95e7071cb0 --- /dev/null +++ b/examples/SPIN/gneb/iron/in.gneb.iron @@ -0,0 +1,50 @@ + +units metal +dimension 3 +boundary p p f +atom_style spin + +# necessary for the serial algorithm (sametag) +atom_modify map array + +# setting mass, mag. moments, and interactions for bcc iron +# (mass not necessary for fixed lattice calculation) + +read_data initial.iron_spin +mass 1 55.845 + +pair_style spin/exchange 3.5 +pair_coeff * * exchange 3.4 0.02726 0.2171 1.841 + +neighbor 0.1 bin +neigh_modify every 10 check yes delay 20 + +fix 1 all precession/spin zeeman 0.1 0.0 0.0 1.0 anisotropy 0.0001 1.0 0.0 0.0 +fix_modify 1 energy yes +fix 3 all neb/spin 1.0 + +timestep 0.0001 +thermo 100 + +compute out_mag all spin +compute out_pe all pe +compute out_ke all ke +compute out_temp all temp + +variable magx equal c_out_mag[1] +variable magy equal c_out_mag[2] +variable magz equal c_out_mag[3] +variable magnorm equal c_out_mag[4] +variable emag equal c_out_mag[5] + +thermo 100 +thermo_style custom step time v_magx v_magz v_magnorm etotal +thermo_modify format float %20.15g + +compute outsp all property/atom spx spy spz sp fmx fmy fmz +variable u universe 1 2 3 4 +dump 1 all custom 200 dump.$u type x y z c_outsp[1] c_outsp[2] c_outsp[3] + +min_style spin +min_modify alpha_damp 1.0 discrete_factor 10.0 +neb/spin 1.0e-12 1.0e-12 200000 100000 1000 final final.iron_spin verbose diff --git a/examples/SPIN/gneb/iron/initial.iron_spin b/examples/SPIN/gneb/iron/initial.iron_spin new file mode 100644 index 0000000000..1d28afe400 --- /dev/null +++ b/examples/SPIN/gneb/iron/initial.iron_spin @@ -0,0 +1,82 @@ +LAMMPS data file via write_data, version 4 Jan 2019, timestep = 0 + +32 atoms +1 atom types + +0.0000000000000000e+00 1.1465999999999999e+01 xlo xhi +0.0000000000000000e+00 1.1465999999999999e+01 ylo yhi +0.0000000000000000e+00 2.8664999999999998e+00 zlo zhi + +Masses + +1 55.845 + +Atoms # spin + +1 1 2.2000000000000002e+00 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +2 1 2.2000000000000002e+00 1.4332499999999999e+00 1.4332499999999999e+00 1.4332499999999999e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +3 1 2.2000000000000002e+00 2.8664999999999998e+00 0.0000000000000000e+00 0.0000000000000000e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +4 1 2.2000000000000002e+00 4.2997499999999995e+00 1.4332499999999999e+00 1.4332499999999999e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +5 1 2.2000000000000002e+00 5.7329999999999997e+00 0.0000000000000000e+00 0.0000000000000000e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +6 1 2.2000000000000002e+00 7.1662499999999998e+00 1.4332499999999999e+00 1.4332499999999999e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +7 1 2.2000000000000002e+00 8.5994999999999990e+00 0.0000000000000000e+00 0.0000000000000000e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +8 1 2.2000000000000002e+00 1.0032750000000000e+01 1.4332499999999999e+00 1.4332499999999999e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +9 1 2.2000000000000002e+00 0.0000000000000000e+00 2.8664999999999998e+00 0.0000000000000000e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +11 1 2.2000000000000002e+00 2.8664999999999998e+00 2.8664999999999998e+00 0.0000000000000000e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +13 1 2.2000000000000002e+00 5.7329999999999997e+00 2.8664999999999998e+00 0.0000000000000000e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +15 1 2.2000000000000002e+00 8.5994999999999990e+00 2.8664999999999998e+00 0.0000000000000000e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +10 1 2.2000000000000002e+00 1.4332499999999999e+00 4.2997499999999995e+00 1.4332499999999999e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +12 1 2.2000000000000002e+00 4.2997499999999995e+00 4.2997499999999995e+00 1.4332499999999999e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +14 1 2.2000000000000002e+00 7.1662499999999998e+00 4.2997499999999995e+00 1.4332499999999999e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +16 1 2.2000000000000002e+00 1.0032750000000000e+01 4.2997499999999995e+00 1.4332499999999999e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +17 1 2.2000000000000002e+00 0.0000000000000000e+00 5.7329999999999997e+00 0.0000000000000000e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +18 1 2.2000000000000002e+00 1.4332499999999999e+00 7.1662499999999998e+00 1.4332499999999999e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +19 1 2.2000000000000002e+00 2.8664999999999998e+00 5.7329999999999997e+00 0.0000000000000000e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +20 1 2.2000000000000002e+00 4.2997499999999995e+00 7.1662499999999998e+00 1.4332499999999999e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +21 1 2.2000000000000002e+00 5.7329999999999997e+00 5.7329999999999997e+00 0.0000000000000000e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +22 1 2.2000000000000002e+00 7.1662499999999998e+00 7.1662499999999998e+00 1.4332499999999999e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +23 1 2.2000000000000002e+00 8.5994999999999990e+00 5.7329999999999997e+00 0.0000000000000000e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +24 1 2.2000000000000002e+00 1.0032750000000000e+01 7.1662499999999998e+00 1.4332499999999999e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +25 1 2.2000000000000002e+00 0.0000000000000000e+00 8.5994999999999990e+00 0.0000000000000000e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +27 1 2.2000000000000002e+00 2.8664999999999998e+00 8.5994999999999990e+00 0.0000000000000000e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +29 1 2.2000000000000002e+00 5.7329999999999997e+00 8.5994999999999990e+00 0.0000000000000000e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +31 1 2.2000000000000002e+00 8.5994999999999990e+00 8.5994999999999990e+00 0.0000000000000000e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +26 1 2.2000000000000002e+00 1.4332499999999999e+00 1.0032750000000000e+01 1.4332499999999999e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +28 1 2.2000000000000002e+00 4.2997499999999995e+00 1.0032750000000000e+01 1.4332499999999999e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +30 1 2.2000000000000002e+00 7.1662499999999998e+00 1.0032750000000000e+01 1.4332499999999999e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +32 1 2.2000000000000002e+00 1.0032750000000000e+01 1.0032750000000000e+01 1.4332499999999999e+00 1.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 + +Velocities + +1 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +2 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +3 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +4 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +5 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +6 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +7 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +8 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +9 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +11 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +13 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +15 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +10 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +12 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +14 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +16 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +17 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +18 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +19 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +20 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +21 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +22 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +23 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +24 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +25 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +27 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +29 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +31 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +26 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +28 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +30 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +32 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 diff --git a/examples/SPIN/gneb/skyrmion/final.skyrmion b/examples/SPIN/gneb/skyrmion/final.skyrmion new file mode 100644 index 0000000000..4ff51f6376 --- /dev/null +++ b/examples/SPIN/gneb/skyrmion/final.skyrmion @@ -0,0 +1,401 @@ +400 +1 2.5 0.0 0.0 0.0 0.0 0.0 1.0 +2 2.5 0.0 3.0 0.0 0.0 0.0 1.0 +3 2.5 0.0 6.0 0.0 0.0 0.0 1.0 +4 2.5 0.0 9.0 0.0 0.0 0.0 1.0 +5 2.5 0.0 12.0 0.0 0.0 0.0 1.0 +6 2.5 0.0 15.0 0.0 0.0 0.0 1.0 +7 2.5 0.0 18.0 0.0 0.0 0.0 1.0 +8 2.5 0.0 21.0 0.0 0.0 0.0 1.0 +9 2.5 0.0 24.0 0.0 0.0 0.0 1.0 +10 2.5 0.0 27.0 0.0 0.0 0.0 1.0 +11 2.5 0.0 30.0 0.0 0.0 0.0 1.0 +12 2.5 0.0 33.0 0.0 0.0 0.0 1.0 +13 2.5 0.0 36.0 0.0 0.0 0.0 1.0 +14 2.5 0.0 39.0 0.0 0.0 0.0 1.0 +15 2.5 0.0 42.0 0.0 0.0 0.0 1.0 +16 2.5 0.0 45.0 0.0 0.0 0.0 1.0 +17 2.5 0.0 48.0 0.0 0.0 0.0 1.0 +18 2.5 0.0 51.0 0.0 0.0 0.0 1.0 +19 2.5 0.0 54.0 0.0 0.0 0.0 1.0 +20 2.5 0.0 57.0 0.0 0.0 0.0 1.0 +21 2.5 3.0 0.0 0.0 0.0 0.0 1.0 +22 2.5 3.0 3.0 0.0 0.0 0.0 1.0 +23 2.5 3.0 6.0 0.0 0.0 0.0 1.0 +24 2.5 3.0 9.0 0.0 0.0 0.0 1.0 +25 2.5 3.0 12.0 0.0 0.0 0.0 1.0 +26 2.5 3.0 15.0 0.0 0.0 0.0 1.0 +27 2.5 3.0 18.0 0.0 0.0 0.0 1.0 +28 2.5 3.0 21.0 0.0 0.0 0.0 1.0 +29 2.5 3.0 24.0 0.0 0.0 0.0 1.0 +30 2.5 3.0 27.0 0.0 0.0 0.0 1.0 +31 2.5 3.0 30.0 0.0 0.0 0.0 1.0 +32 2.5 3.0 33.0 0.0 0.0 0.0 1.0 +33 2.5 3.0 36.0 0.0 0.0 0.0 1.0 +34 2.5 3.0 39.0 0.0 0.0 0.0 1.0 +35 2.5 3.0 42.0 0.0 0.0 0.0 1.0 +36 2.5 3.0 45.0 0.0 0.0 0.0 1.0 +37 2.5 3.0 48.0 0.0 0.0 0.0 1.0 +38 2.5 3.0 51.0 0.0 0.0 0.0 1.0 +39 2.5 3.0 54.0 0.0 0.0 0.0 1.0 +40 2.5 3.0 57.0 0.0 0.0 0.0 1.0 +41 2.5 6.0 0.0 0.0 0.0 0.0 1.0 +42 2.5 6.0 3.0 0.0 0.0 0.0 1.0 +43 2.5 6.0 6.0 0.0 0.0 0.0 1.0 +44 2.5 6.0 9.0 0.0 0.0 0.0 1.0 +45 2.5 6.0 12.0 0.0 0.0 0.0 1.0 +46 2.5 6.0 15.0 0.0 0.0 0.0 1.0 +47 2.5 6.0 18.0 0.0 0.0 0.0 1.0 +48 2.5 6.0 21.0 0.0 0.0 0.0 1.0 +49 2.5 6.0 24.0 0.0 0.0 0.0 1.0 +50 2.5 6.0 27.0 0.0 0.0 0.0 1.0 +51 2.5 6.0 30.0 0.0 0.0 0.0 1.0 +52 2.5 6.0 33.0 0.0 0.0 0.0 1.0 +53 2.5 6.0 36.0 0.0 0.0 0.0 1.0 +54 2.5 6.0 39.0 0.0 0.0 0.0 1.0 +55 2.5 6.0 42.0 0.0 0.0 0.0 1.0 +56 2.5 6.0 45.0 0.0 0.0 0.0 1.0 +57 2.5 6.0 48.0 0.0 0.0 0.0 1.0 +58 2.5 6.0 51.0 0.0 0.0 0.0 1.0 +59 2.5 6.0 54.0 0.0 0.0 0.0 1.0 +60 2.5 6.0 57.0 0.0 0.0 0.0 1.0 +61 2.5 9.0 0.0 0.0 0.0 0.0 1.0 +62 2.5 9.0 3.0 0.0 0.0 0.0 1.0 +63 2.5 9.0 6.0 0.0 0.0 0.0 1.0 +64 2.5 9.0 9.0 0.0 0.0 0.0 1.0 +65 2.5 9.0 12.0 0.0 0.0 0.0 1.0 +66 2.5 9.0 15.0 0.0 0.0 0.0 1.0 +67 2.5 9.0 18.0 0.0 0.0 0.0 1.0 +68 2.5 9.0 21.0 0.0 0.0 0.0 1.0 +69 2.5 9.0 24.0 0.0 0.0 0.0 1.0 +70 2.5 9.0 27.0 0.0 0.0 0.0 1.0 +71 2.5 9.0 30.0 0.0 0.0 0.0 1.0 +72 2.5 9.0 33.0 0.0 0.0 0.0 1.0 +73 2.5 9.0 36.0 0.0 0.0 0.0 1.0 +74 2.5 9.0 39.0 0.0 0.0 0.0 1.0 +75 2.5 9.0 42.0 0.0 0.0 0.0 1.0 +76 2.5 9.0 45.0 0.0 0.0 0.0 1.0 +77 2.5 9.0 48.0 0.0 0.0 0.0 1.0 +78 2.5 9.0 51.0 0.0 0.0 0.0 1.0 +79 2.5 9.0 54.0 0.0 0.0 0.0 1.0 +80 2.5 9.0 57.0 0.0 0.0 0.0 1.0 +81 2.5 12.0 0.0 0.0 0.0 0.0 1.0 +82 2.5 12.0 3.0 0.0 0.0 0.0 1.0 +83 2.5 12.0 6.0 0.0 0.0 0.0 1.0 +84 2.5 12.0 9.0 0.0 0.0 0.0 1.0 +85 2.5 12.0 12.0 0.0 0.0 0.0 1.0 +86 2.5 12.0 15.0 0.0 0.0 0.0 1.0 +87 2.5 12.0 18.0 0.0 0.0 0.0 1.0 +88 2.5 12.0 21.0 0.0 0.0 0.0 1.0 +89 2.5 12.0 24.0 0.0 0.0 0.0 1.0 +90 2.5 12.0 27.0 0.0 0.0 0.0 1.0 +91 2.5 12.0 30.0 0.0 0.0 0.0 1.0 +92 2.5 12.0 33.0 0.0 0.0 0.0 1.0 +93 2.5 12.0 36.0 0.0 0.0 0.0 1.0 +94 2.5 12.0 39.0 0.0 0.0 0.0 1.0 +95 2.5 12.0 42.0 0.0 0.0 0.0 1.0 +96 2.5 12.0 45.0 0.0 0.0 0.0 1.0 +97 2.5 12.0 48.0 0.0 0.0 0.0 1.0 +98 2.5 12.0 51.0 0.0 0.0 0.0 1.0 +99 2.5 12.0 54.0 0.0 0.0 0.0 1.0 +100 2.5 12.0 57.0 0.0 0.0 0.0 1.0 +101 2.5 15.0 0.0 0.0 0.0 0.0 1.0 +102 2.5 15.0 3.0 0.0 0.0 0.0 1.0 +103 2.5 15.0 6.0 0.0 0.0 0.0 1.0 +104 2.5 15.0 9.0 0.0 0.0 0.0 1.0 +105 2.5 15.0 12.0 0.0 0.0 0.0 1.0 +106 2.5 15.0 15.0 0.0 0.0 0.0 1.0 +107 2.5 15.0 18.0 0.0 0.0 0.0 1.0 +108 2.5 15.0 21.0 0.0 0.0 0.0 1.0 +109 2.5 15.0 24.0 0.0 0.0 0.0 1.0 +110 2.5 15.0 27.0 0.0 0.0 0.0 1.0 +111 2.5 15.0 30.0 0.0 0.0 0.0 1.0 +112 2.5 15.0 33.0 0.0 0.0 0.0 1.0 +113 2.5 15.0 36.0 0.0 0.0 0.0 1.0 +114 2.5 15.0 39.0 0.0 0.0 0.0 1.0 +115 2.5 15.0 42.0 0.0 0.0 0.0 1.0 +116 2.5 15.0 45.0 0.0 0.0 0.0 1.0 +117 2.5 15.0 48.0 0.0 0.0 0.0 1.0 +118 2.5 15.0 51.0 0.0 0.0 0.0 1.0 +119 2.5 15.0 54.0 0.0 0.0 0.0 1.0 +120 2.5 15.0 57.0 0.0 0.0 0.0 1.0 +121 2.5 18.0 0.0 0.0 0.0 0.0 1.0 +122 2.5 18.0 3.0 0.0 0.0 0.0 1.0 +123 2.5 18.0 6.0 0.0 0.0 0.0 1.0 +124 2.5 18.0 9.0 0.0 0.0 0.0 1.0 +125 2.5 18.0 12.0 0.0 0.0 0.0 1.0 +126 2.5 18.0 15.0 0.0 0.0 0.0 1.0 +127 2.5 18.0 18.0 0.0 0.0 0.0 1.0 +128 2.5 18.0 21.0 0.0 0.0 0.0 1.0 +129 2.5 18.0 24.0 0.0 0.0 0.0 1.0 +130 2.5 18.0 27.0 0.0 0.0 0.0 1.0 +131 2.5 18.0 30.0 0.0 0.0 0.0 1.0 +132 2.5 18.0 33.0 0.0 0.0 0.0 1.0 +133 2.5 18.0 36.0 0.0 0.0 0.0 1.0 +134 2.5 18.0 39.0 0.0 0.0 0.0 1.0 +135 2.5 18.0 42.0 0.0 0.0 0.0 1.0 +136 2.5 18.0 45.0 0.0 0.0 0.0 1.0 +137 2.5 18.0 48.0 0.0 0.0 0.0 1.0 +138 2.5 18.0 51.0 0.0 0.0 0.0 1.0 +139 2.5 18.0 54.0 0.0 0.0 0.0 1.0 +140 2.5 18.0 57.0 0.0 0.0 0.0 1.0 +141 2.5 21.0 0.0 0.0 0.0 0.0 1.0 +142 2.5 21.0 3.0 0.0 0.0 0.0 1.0 +143 2.5 21.0 6.0 0.0 0.0 0.0 1.0 +144 2.5 21.0 9.0 0.0 0.0 0.0 1.0 +145 2.5 21.0 12.0 0.0 0.0 0.0 1.0 +146 2.5 21.0 15.0 0.0 0.0 0.0 1.0 +147 2.5 21.0 18.0 0.0 0.0 0.0 1.0 +148 2.5 21.0 21.0 0.0 0.0 0.0 1.0 +149 2.5 21.0 24.0 0.0 0.0 0.0 1.0 +150 2.5 21.0 27.0 0.0 0.0 0.0 1.0 +151 2.5 21.0 30.0 0.0 0.0 0.0 1.0 +152 2.5 21.0 33.0 0.0 0.0 0.0 1.0 +153 2.5 21.0 36.0 0.0 0.0 0.0 1.0 +154 2.5 21.0 39.0 0.0 0.0 0.0 1.0 +155 2.5 21.0 42.0 0.0 0.0 0.0 1.0 +156 2.5 21.0 45.0 0.0 0.0 0.0 1.0 +157 2.5 21.0 48.0 0.0 0.0 0.0 1.0 +158 2.5 21.0 51.0 0.0 0.0 0.0 1.0 +159 2.5 21.0 54.0 0.0 0.0 0.0 1.0 +160 2.5 21.0 57.0 0.0 0.0 0.0 1.0 +161 2.5 24.0 0.0 0.0 0.0 0.0 1.0 +162 2.5 24.0 3.0 0.0 0.0 0.0 1.0 +163 2.5 24.0 6.0 0.0 0.0 0.0 1.0 +164 2.5 24.0 9.0 0.0 0.0 0.0 1.0 +165 2.5 24.0 12.0 0.0 0.0 0.0 1.0 +166 2.5 24.0 15.0 0.0 0.0 0.0 1.0 +167 2.5 24.0 18.0 0.0 0.0 0.0 1.0 +168 2.5 24.0 21.0 0.0 0.0 0.0 1.0 +169 2.5 24.0 24.0 0.0 0.0 0.0 1.0 +170 2.5 24.0 27.0 0.0 0.0 0.0 1.0 +171 2.5 24.0 30.0 0.0 0.0 0.0 1.0 +172 2.5 24.0 33.0 0.0 0.0 0.0 1.0 +173 2.5 24.0 36.0 0.0 0.0 0.0 1.0 +174 2.5 24.0 39.0 0.0 0.0 0.0 1.0 +175 2.5 24.0 42.0 0.0 0.0 0.0 1.0 +176 2.5 24.0 45.0 0.0 0.0 0.0 1.0 +177 2.5 24.0 48.0 0.0 0.0 0.0 1.0 +178 2.5 24.0 51.0 0.0 0.0 0.0 1.0 +179 2.5 24.0 54.0 0.0 0.0 0.0 1.0 +180 2.5 24.0 57.0 0.0 0.0 0.0 1.0 +181 2.5 27.0 0.0 0.0 0.0 0.0 1.0 +182 2.5 27.0 3.0 0.0 0.0 0.0 1.0 +183 2.5 27.0 6.0 0.0 0.0 0.0 1.0 +184 2.5 27.0 9.0 0.0 0.0 0.0 1.0 +185 2.5 27.0 12.0 0.0 0.0 0.0 1.0 +186 2.5 27.0 15.0 0.0 0.0 0.0 1.0 +187 2.5 27.0 18.0 0.0 0.0 0.0 1.0 +188 2.5 27.0 21.0 0.0 0.0 0.0 1.0 +189 2.5 27.0 24.0 0.0 0.0 0.0 1.0 +190 2.5 27.0 27.0 0.0 0.0 0.0 1.0 +191 2.5 27.0 30.0 0.0 0.0 0.0 1.0 +192 2.5 27.0 33.0 0.0 0.0 0.0 1.0 +193 2.5 27.0 36.0 0.0 0.0 0.0 1.0 +194 2.5 27.0 39.0 0.0 0.0 0.0 1.0 +195 2.5 27.0 42.0 0.0 0.0 0.0 1.0 +196 2.5 27.0 45.0 0.0 0.0 0.0 1.0 +197 2.5 27.0 48.0 0.0 0.0 0.0 1.0 +198 2.5 27.0 51.0 0.0 0.0 0.0 1.0 +199 2.5 27.0 54.0 0.0 0.0 0.0 1.0 +200 2.5 27.0 57.0 0.0 0.0 0.0 1.0 +201 2.5 30.0 0.0 0.0 0.0 0.0 1.0 +202 2.5 30.0 3.0 0.0 0.0 0.0 1.0 +203 2.5 30.0 6.0 0.0 0.0 0.0 1.0 +204 2.5 30.0 9.0 0.0 0.0 0.0 1.0 +205 2.5 30.0 12.0 0.0 0.0 0.0 1.0 +206 2.5 30.0 15.0 0.0 0.0 0.0 1.0 +207 2.5 30.0 18.0 0.0 0.0 0.0 1.0 +208 2.5 30.0 21.0 0.0 0.0 0.0 1.0 +209 2.5 30.0 24.0 0.0 0.0 0.0 1.0 +210 2.5 30.0 27.0 0.0 0.0 0.0 1.0 +211 2.5 30.0 30.0 0.0 0.0 0.0 1.0 +212 2.5 30.0 33.0 0.0 0.0 0.0 1.0 +213 2.5 30.0 36.0 0.0 0.0 0.0 1.0 +214 2.5 30.0 39.0 0.0 0.0 0.0 1.0 +215 2.5 30.0 42.0 0.0 0.0 0.0 1.0 +216 2.5 30.0 45.0 0.0 0.0 0.0 1.0 +217 2.5 30.0 48.0 0.0 0.0 0.0 1.0 +218 2.5 30.0 51.0 0.0 0.0 0.0 1.0 +219 2.5 30.0 54.0 0.0 0.0 0.0 1.0 +220 2.5 30.0 57.0 0.0 0.0 0.0 1.0 +221 2.5 33.0 0.0 0.0 0.0 0.0 1.0 +222 2.5 33.0 3.0 0.0 0.0 0.0 1.0 +223 2.5 33.0 6.0 0.0 0.0 0.0 1.0 +224 2.5 33.0 9.0 0.0 0.0 0.0 1.0 +225 2.5 33.0 12.0 0.0 0.0 0.0 1.0 +226 2.5 33.0 15.0 0.0 0.0 0.0 1.0 +227 2.5 33.0 18.0 0.0 0.0 0.0 1.0 +228 2.5 33.0 21.0 0.0 0.0 0.0 1.0 +229 2.5 33.0 24.0 0.0 0.0 0.0 1.0 +230 2.5 33.0 27.0 0.0 0.0 0.0 1.0 +231 2.5 33.0 30.0 0.0 0.0 0.0 1.0 +232 2.5 33.0 33.0 0.0 0.0 0.0 1.0 +233 2.5 33.0 36.0 0.0 0.0 0.0 1.0 +234 2.5 33.0 39.0 0.0 0.0 0.0 1.0 +235 2.5 33.0 42.0 0.0 0.0 0.0 1.0 +236 2.5 33.0 45.0 0.0 0.0 0.0 1.0 +237 2.5 33.0 48.0 0.0 0.0 0.0 1.0 +238 2.5 33.0 51.0 0.0 0.0 0.0 1.0 +239 2.5 33.0 54.0 0.0 0.0 0.0 1.0 +240 2.5 33.0 57.0 0.0 0.0 0.0 1.0 +241 2.5 36.0 0.0 0.0 0.0 0.0 1.0 +242 2.5 36.0 3.0 0.0 0.0 0.0 1.0 +243 2.5 36.0 6.0 0.0 0.0 0.0 1.0 +244 2.5 36.0 9.0 0.0 0.0 0.0 1.0 +245 2.5 36.0 12.0 0.0 0.0 0.0 1.0 +246 2.5 36.0 15.0 0.0 0.0 0.0 1.0 +247 2.5 36.0 18.0 0.0 0.0 0.0 1.0 +248 2.5 36.0 21.0 0.0 0.0 0.0 1.0 +249 2.5 36.0 24.0 0.0 0.0 0.0 1.0 +250 2.5 36.0 27.0 0.0 0.0 0.0 1.0 +251 2.5 36.0 30.0 0.0 0.0 0.0 1.0 +252 2.5 36.0 33.0 0.0 0.0 0.0 1.0 +253 2.5 36.0 36.0 0.0 0.0 0.0 1.0 +254 2.5 36.0 39.0 0.0 0.0 0.0 1.0 +255 2.5 36.0 42.0 0.0 0.0 0.0 1.0 +256 2.5 36.0 45.0 0.0 0.0 0.0 1.0 +257 2.5 36.0 48.0 0.0 0.0 0.0 1.0 +258 2.5 36.0 51.0 0.0 0.0 0.0 1.0 +259 2.5 36.0 54.0 0.0 0.0 0.0 1.0 +260 2.5 36.0 57.0 0.0 0.0 0.0 1.0 +261 2.5 39.0 0.0 0.0 0.0 0.0 1.0 +262 2.5 39.0 3.0 0.0 0.0 0.0 1.0 +263 2.5 39.0 6.0 0.0 0.0 0.0 1.0 +264 2.5 39.0 9.0 0.0 0.0 0.0 1.0 +265 2.5 39.0 12.0 0.0 0.0 0.0 1.0 +266 2.5 39.0 15.0 0.0 0.0 0.0 1.0 +267 2.5 39.0 18.0 0.0 0.0 0.0 1.0 +268 2.5 39.0 21.0 0.0 0.0 0.0 1.0 +269 2.5 39.0 24.0 0.0 0.0 0.0 1.0 +270 2.5 39.0 27.0 0.0 0.0 0.0 1.0 +271 2.5 39.0 30.0 0.0 0.0 0.0 1.0 +272 2.5 39.0 33.0 0.0 0.0 0.0 1.0 +273 2.5 39.0 36.0 0.0 0.0 0.0 1.0 +274 2.5 39.0 39.0 0.0 0.0 0.0 1.0 +275 2.5 39.0 42.0 0.0 0.0 0.0 1.0 +276 2.5 39.0 45.0 0.0 0.0 0.0 1.0 +277 2.5 39.0 48.0 0.0 0.0 0.0 1.0 +278 2.5 39.0 51.0 0.0 0.0 0.0 1.0 +279 2.5 39.0 54.0 0.0 0.0 0.0 1.0 +280 2.5 39.0 57.0 0.0 0.0 0.0 1.0 +281 2.5 42.0 0.0 0.0 0.0 0.0 1.0 +282 2.5 42.0 3.0 0.0 0.0 0.0 1.0 +283 2.5 42.0 6.0 0.0 0.0 0.0 1.0 +284 2.5 42.0 9.0 0.0 0.0 0.0 1.0 +285 2.5 42.0 12.0 0.0 0.0 0.0 1.0 +286 2.5 42.0 15.0 0.0 0.0 0.0 1.0 +287 2.5 42.0 18.0 0.0 0.0 0.0 1.0 +288 2.5 42.0 21.0 0.0 0.0 0.0 1.0 +289 2.5 42.0 24.0 0.0 0.0 0.0 1.0 +290 2.5 42.0 27.0 0.0 0.0 0.0 1.0 +291 2.5 42.0 30.0 0.0 0.0 0.0 1.0 +292 2.5 42.0 33.0 0.0 0.0 0.0 1.0 +293 2.5 42.0 36.0 0.0 0.0 0.0 1.0 +294 2.5 42.0 39.0 0.0 0.0 0.0 1.0 +295 2.5 42.0 42.0 0.0 0.0 0.0 1.0 +296 2.5 42.0 45.0 0.0 0.0 0.0 1.0 +297 2.5 42.0 48.0 0.0 0.0 0.0 1.0 +298 2.5 42.0 51.0 0.0 0.0 0.0 1.0 +299 2.5 42.0 54.0 0.0 0.0 0.0 1.0 +300 2.5 42.0 57.0 0.0 0.0 0.0 1.0 +301 2.5 45.0 0.0 0.0 0.0 0.0 1.0 +302 2.5 45.0 3.0 0.0 0.0 0.0 1.0 +303 2.5 45.0 6.0 0.0 0.0 0.0 1.0 +304 2.5 45.0 9.0 0.0 0.0 0.0 1.0 +305 2.5 45.0 12.0 0.0 0.0 0.0 1.0 +306 2.5 45.0 15.0 0.0 0.0 0.0 1.0 +307 2.5 45.0 18.0 0.0 0.0 0.0 1.0 +308 2.5 45.0 21.0 0.0 0.0 0.0 1.0 +309 2.5 45.0 24.0 0.0 0.0 0.0 1.0 +310 2.5 45.0 27.0 0.0 0.0 0.0 1.0 +311 2.5 45.0 30.0 0.0 0.0 0.0 1.0 +312 2.5 45.0 33.0 0.0 0.0 0.0 1.0 +313 2.5 45.0 36.0 0.0 0.0 0.0 1.0 +314 2.5 45.0 39.0 0.0 0.0 0.0 1.0 +315 2.5 45.0 42.0 0.0 0.0 0.0 1.0 +316 2.5 45.0 45.0 0.0 0.0 0.0 1.0 +317 2.5 45.0 48.0 0.0 0.0 0.0 1.0 +318 2.5 45.0 51.0 0.0 0.0 0.0 1.0 +319 2.5 45.0 54.0 0.0 0.0 0.0 1.0 +320 2.5 45.0 57.0 0.0 0.0 0.0 1.0 +321 2.5 48.0 0.0 0.0 0.0 0.0 1.0 +322 2.5 48.0 3.0 0.0 0.0 0.0 1.0 +323 2.5 48.0 6.0 0.0 0.0 0.0 1.0 +324 2.5 48.0 9.0 0.0 0.0 0.0 1.0 +325 2.5 48.0 12.0 0.0 0.0 0.0 1.0 +326 2.5 48.0 15.0 0.0 0.0 0.0 1.0 +327 2.5 48.0 18.0 0.0 0.0 0.0 1.0 +328 2.5 48.0 21.0 0.0 0.0 0.0 1.0 +329 2.5 48.0 24.0 0.0 0.0 0.0 1.0 +330 2.5 48.0 27.0 0.0 0.0 0.0 1.0 +331 2.5 48.0 30.0 0.0 0.0 0.0 1.0 +332 2.5 48.0 33.0 0.0 0.0 0.0 1.0 +333 2.5 48.0 36.0 0.0 0.0 0.0 1.0 +334 2.5 48.0 39.0 0.0 0.0 0.0 1.0 +335 2.5 48.0 42.0 0.0 0.0 0.0 1.0 +336 2.5 48.0 45.0 0.0 0.0 0.0 1.0 +337 2.5 48.0 48.0 0.0 0.0 0.0 1.0 +338 2.5 48.0 51.0 0.0 0.0 0.0 1.0 +339 2.5 48.0 54.0 0.0 0.0 0.0 1.0 +340 2.5 48.0 57.0 0.0 0.0 0.0 1.0 +341 2.5 51.0 0.0 0.0 0.0 0.0 1.0 +342 2.5 51.0 3.0 0.0 0.0 0.0 1.0 +343 2.5 51.0 6.0 0.0 0.0 0.0 1.0 +344 2.5 51.0 9.0 0.0 0.0 0.0 1.0 +345 2.5 51.0 12.0 0.0 0.0 0.0 1.0 +346 2.5 51.0 15.0 0.0 0.0 0.0 1.0 +347 2.5 51.0 18.0 0.0 0.0 0.0 1.0 +348 2.5 51.0 21.0 0.0 0.0 0.0 1.0 +349 2.5 51.0 24.0 0.0 0.0 0.0 1.0 +350 2.5 51.0 27.0 0.0 0.0 0.0 1.0 +351 2.5 51.0 30.0 0.0 0.0 0.0 1.0 +352 2.5 51.0 33.0 0.0 0.0 0.0 1.0 +353 2.5 51.0 36.0 0.0 0.0 0.0 1.0 +354 2.5 51.0 39.0 0.0 0.0 0.0 1.0 +355 2.5 51.0 42.0 0.0 0.0 0.0 1.0 +356 2.5 51.0 45.0 0.0 0.0 0.0 1.0 +357 2.5 51.0 48.0 0.0 0.0 0.0 1.0 +358 2.5 51.0 51.0 0.0 0.0 0.0 1.0 +359 2.5 51.0 54.0 0.0 0.0 0.0 1.0 +360 2.5 51.0 57.0 0.0 0.0 0.0 1.0 +361 2.5 54.0 0.0 0.0 0.0 0.0 1.0 +362 2.5 54.0 3.0 0.0 0.0 0.0 1.0 +363 2.5 54.0 6.0 0.0 0.0 0.0 1.0 +364 2.5 54.0 9.0 0.0 0.0 0.0 1.0 +365 2.5 54.0 12.0 0.0 0.0 0.0 1.0 +366 2.5 54.0 15.0 0.0 0.0 0.0 1.0 +367 2.5 54.0 18.0 0.0 0.0 0.0 1.0 +368 2.5 54.0 21.0 0.0 0.0 0.0 1.0 +369 2.5 54.0 24.0 0.0 0.0 0.0 1.0 +370 2.5 54.0 27.0 0.0 0.0 0.0 1.0 +371 2.5 54.0 30.0 0.0 0.0 0.0 1.0 +372 2.5 54.0 33.0 0.0 0.0 0.0 1.0 +373 2.5 54.0 36.0 0.0 0.0 0.0 1.0 +374 2.5 54.0 39.0 0.0 0.0 0.0 1.0 +375 2.5 54.0 42.0 0.0 0.0 0.0 1.0 +376 2.5 54.0 45.0 0.0 0.0 0.0 1.0 +377 2.5 54.0 48.0 0.0 0.0 0.0 1.0 +378 2.5 54.0 51.0 0.0 0.0 0.0 1.0 +379 2.5 54.0 54.0 0.0 0.0 0.0 1.0 +380 2.5 54.0 57.0 0.0 0.0 0.0 1.0 +381 2.5 57.0 0.0 0.0 0.0 0.0 1.0 +382 2.5 57.0 3.0 0.0 0.0 0.0 1.0 +383 2.5 57.0 6.0 0.0 0.0 0.0 1.0 +384 2.5 57.0 9.0 0.0 0.0 0.0 1.0 +385 2.5 57.0 12.0 0.0 0.0 0.0 1.0 +386 2.5 57.0 15.0 0.0 0.0 0.0 1.0 +387 2.5 57.0 18.0 0.0 0.0 0.0 1.0 +388 2.5 57.0 21.0 0.0 0.0 0.0 1.0 +389 2.5 57.0 24.0 0.0 0.0 0.0 1.0 +390 2.5 57.0 27.0 0.0 0.0 0.0 1.0 +391 2.5 57.0 30.0 0.0 0.0 0.0 1.0 +392 2.5 57.0 33.0 0.0 0.0 0.0 1.0 +393 2.5 57.0 36.0 0.0 0.0 0.0 1.0 +394 2.5 57.0 39.0 0.0 0.0 0.0 1.0 +395 2.5 57.0 42.0 0.0 0.0 0.0 1.0 +396 2.5 57.0 45.0 0.0 0.0 0.0 1.0 +397 2.5 57.0 48.0 0.0 0.0 0.0 1.0 +398 2.5 57.0 51.0 0.0 0.0 0.0 1.0 +399 2.5 57.0 54.0 0.0 0.0 0.0 1.0 +400 2.5 57.0 57.0 0.0 0.0 0.0 1.0 diff --git a/examples/SPIN/gneb/skyrmion/in.gneb.skyrmion b/examples/SPIN/gneb/skyrmion/in.gneb.skyrmion new file mode 100644 index 0000000000..37075c2e30 --- /dev/null +++ b/examples/SPIN/gneb/skyrmion/in.gneb.skyrmion @@ -0,0 +1,47 @@ + +units metal +dimension 3 +boundary p p f +atom_style spin + +# necessary for the serial algorithm (sametag) +atom_modify map array + +# setting mass, mag. moments, and interactions for bcc iron +# (mass not necessary for fixed lattice calculation) + +read_data initial.skyrmion +mass 1 55.845 + +pair_style hybrid/overlay spin/exchange 3.1 spin/dmi 3.1 +pair_coeff * * spin/exchange exchange 3.1 0.01593 0.06626915552 1.211 +pair_coeff * * spin/dmi dmi 3.1 0.12e-03 0.0 0.0 1.0 + +neighbor 0.1 bin +neigh_modify every 10 check yes delay 20 + +fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 anisotropy 5e-05 0.0 0.0 1.0 +fix_modify 1 energy yes +fix 2 all langevin/spin 0.0 0.0 21 +fix 3 all neb/spin 1.0 + +timestep 0.0001 + +compute out_mag all spin +variable magx equal c_out_mag[1] +variable magy equal c_out_mag[2] +variable magz equal c_out_mag[3] +variable magnorm equal c_out_mag[4] +variable emag equal c_out_mag[5] + +thermo 100 +thermo_style custom step time v_magx v_magz v_magnorm etotal +thermo_modify format float %20.15g + +compute outsp all property/atom spx spy spz sp fmx fmy fmz +variable u universe 1 2 3 4 +dump 1 all custom 1 dump.$u type x y z c_outsp[1] c_outsp[2] c_outsp[3] + +min_style spin +min_modify alpha_damp 1.0 discrete_factor 10.0 +neb/spin 1.0e-9 1.0e-9 10000 10000 10 final final.skyrmion diff --git a/examples/SPIN/gneb/skyrmion/initial.skyrmion b/examples/SPIN/gneb/skyrmion/initial.skyrmion new file mode 100644 index 0000000000..f940aee182 --- /dev/null +++ b/examples/SPIN/gneb/skyrmion/initial.skyrmion @@ -0,0 +1,818 @@ +LAMMPS data file via write_data, version 28 Feb 2019, timestep = 6 + +400 atoms +1 atom types + +0.0000000000000000e+00 6.0000000000000000e+01 xlo xhi +0.0000000000000000e+00 6.0000000000000000e+01 ylo yhi +0.0000000000000000e+00 3.0000000000000000e+00 zlo zhi + +Masses + +1 55.845 + +Atoms # spin + +1 1 2.5000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -3.9693242391277868e-03 -3.9693242391277929e-03 9.9998424434096433e-01 0 0 0 +21 1 2.5000000000000000e+00 3.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1.1868011343002482e-02 -4.8145058779812530e-03 9.9991798205648519e-01 0 0 0 +41 1 2.5000000000000000e+00 6.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1.9561861499557517e-02 -6.5828744882500201e-03 9.9978697697966845e-01 0 0 0 +61 1 2.5000000000000000e+00 9.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -2.6644762521588476e-02 -9.3989438861432541e-03 9.9960077855311480e-01 0 0 0 +81 1 2.5000000000000000e+00 1.2000000000000000e+01 0.0000000000000000e+00 0.0000000000000000e+00 -3.2364838887478299e-02 -1.3362272507461704e-02 9.9938679542868891e-01 0 0 0 +101 1 2.5000000000000000e+00 1.5000000000000000e+01 0.0000000000000000e+00 0.0000000000000000e+00 -3.5634992015801843e-02 -1.8429703183501425e-02 9.9919492261750509e-01 0 0 0 +121 1 2.5000000000000000e+00 1.8000000000000000e+01 0.0000000000000000e+00 0.0000000000000000e+00 -3.5235119566844247e-02 -2.4270277420221115e-02 9.9908430073895971e-01 0 0 0 +141 1 2.5000000000000000e+00 2.1000000000000000e+01 0.0000000000000000e+00 0.0000000000000000e+00 -3.0237916900163156e-02 -3.0163850736159143e-02 9.9908748890690546e-01 0 0 0 +161 1 2.5000000000000000e+00 2.4000000000000000e+01 0.0000000000000000e+00 0.0000000000000000e+00 -2.0551704657275890e-02 -3.5058787503171429e-02 9.9917391321755789e-01 0 0 0 +181 1 2.5000000000000000e+00 2.7000000000000000e+01 0.0000000000000000e+00 0.0000000000000000e+00 -7.2971667669136115e-03 -3.7860607272964066e-02 9.9925638640646097e-01 0 0 0 +201 1 2.5000000000000000e+00 3.0000000000000000e+01 0.0000000000000000e+00 0.0000000000000000e+00 7.2971667669136028e-03 -3.7860607272964066e-02 9.9925638640646086e-01 0 0 0 +221 1 2.5000000000000000e+00 3.3000000000000000e+01 0.0000000000000000e+00 0.0000000000000000e+00 2.0551704657275901e-02 -3.5058787503171443e-02 9.9917391321755789e-01 0 0 0 +241 1 2.5000000000000000e+00 3.6000000000000000e+01 0.0000000000000000e+00 0.0000000000000000e+00 3.0237916900163156e-02 -3.0163850736159153e-02 9.9908748890690535e-01 0 0 0 +261 1 2.5000000000000000e+00 3.9000000000000000e+01 0.0000000000000000e+00 0.0000000000000000e+00 3.5235119566844234e-02 -2.4270277420221108e-02 9.9908430073895960e-01 0 0 0 +281 1 2.5000000000000000e+00 4.2000000000000000e+01 0.0000000000000000e+00 0.0000000000000000e+00 3.5634992015801829e-02 -1.8429703183501414e-02 9.9919492261750498e-01 0 0 0 +301 1 2.5000000000000000e+00 4.5000000000000000e+01 0.0000000000000000e+00 0.0000000000000000e+00 3.2364838887478306e-02 -1.3362272507461704e-02 9.9938679542868891e-01 0 0 0 +321 1 2.5000000000000000e+00 4.8000000000000000e+01 0.0000000000000000e+00 0.0000000000000000e+00 2.6644762521588494e-02 -9.3989438861432611e-03 9.9960077855311491e-01 0 0 0 +341 1 2.5000000000000000e+00 5.1000000000000000e+01 0.0000000000000000e+00 0.0000000000000000e+00 1.9561861499557517e-02 -6.5828744882500201e-03 9.9978697697966856e-01 0 0 0 +361 1 2.5000000000000000e+00 5.4000000000000000e+01 0.0000000000000000e+00 0.0000000000000000e+00 1.1868011343002482e-02 -4.8145058779812547e-03 9.9991798205648508e-01 0 0 0 +381 1 2.5000000000000000e+00 5.7000000000000000e+01 0.0000000000000000e+00 0.0000000000000000e+00 3.9693242391277929e-03 -3.9693242391277937e-03 9.9998424434096445e-01 0 0 0 +2 1 2.5000000000000000e+00 0.0000000000000000e+00 3.0000000000000000e+00 0.0000000000000000e+00 -4.8145058779812512e-03 -1.1868011343002475e-02 9.9991798205648519e-01 0 0 0 +22 1 2.5000000000000000e+00 3.0000000000000000e+00 3.0000000000000000e+00 0.0000000000000000e+00 -1.4489047587394138e-02 -1.4489047587394138e-02 9.9979004545955574e-01 0 0 0 +42 1 2.5000000000000000e+00 6.0000000000000000e+00 3.0000000000000000e+00 0.0000000000000000e+00 -2.4184841732588187e-02 -2.0009637034407928e-02 9.9950723251816487e-01 0 0 0 +62 1 2.5000000000000000e+00 9.0000000000000000e+00 3.0000000000000000e+00 0.0000000000000000e+00 -3.3534698701154796e-02 -2.8894018478272422e-02 9.9901979944303421e-01 0 0 0 +82 1 2.5000000000000000e+00 1.2000000000000000e+01 3.0000000000000000e+00 0.0000000000000000e+00 -4.1631298256624205e-02 -4.1569375222726884e-02 9.9826791095830603e-01 0 0 0 +102 1 2.5000000000000000e+00 1.5000000000000000e+01 3.0000000000000000e+00 0.0000000000000000e+00 -4.6947676140268457e-02 -5.8031121465001792e-02 9.9721026100143129e-01 0 0 0 +122 1 2.5000000000000000e+00 1.8000000000000000e+01 3.0000000000000000e+00 0.0000000000000000e+00 -4.7535409319668050e-02 -7.7312985281705895e-02 9.9587302763336383e-01 0 0 0 +142 1 2.5000000000000000e+00 2.1000000000000000e+01 3.0000000000000000e+00 0.0000000000000000e+00 -4.1653952417990837e-02 -9.7059251840902777e-02 9.9440658177630958e-01 0 0 0 +162 1 2.5000000000000000e+00 2.4000000000000000e+01 3.0000000000000000e+00 0.0000000000000000e+00 -2.8752729368399305e-02 -1.1365104497068100e-01 9.9310458690459180e-01 0 0 0 +182 1 2.5000000000000000e+00 2.7000000000000000e+01 3.0000000000000000e+00 0.0000000000000000e+00 -1.0293413501576094e-02 -1.2321728304286263e-01 9.9232633079951105e-01 0 0 0 +202 1 2.5000000000000000e+00 3.0000000000000000e+01 3.0000000000000000e+00 0.0000000000000000e+00 1.0293413501576086e-02 -1.2321728304286261e-01 9.9232633079951116e-01 0 0 0 +222 1 2.5000000000000000e+00 3.3000000000000000e+01 3.0000000000000000e+00 0.0000000000000000e+00 2.8752729368399291e-02 -1.1365104497068100e-01 9.9310458690459180e-01 0 0 0 +242 1 2.5000000000000000e+00 3.6000000000000000e+01 3.0000000000000000e+00 0.0000000000000000e+00 4.1653952417990824e-02 -9.7059251840902777e-02 9.9440658177630958e-01 0 0 0 +262 1 2.5000000000000000e+00 3.9000000000000000e+01 3.0000000000000000e+00 0.0000000000000000e+00 4.7535409319668057e-02 -7.7312985281705895e-02 9.9587302763336383e-01 0 0 0 +282 1 2.5000000000000000e+00 4.2000000000000000e+01 3.0000000000000000e+00 0.0000000000000000e+00 4.6947676140268443e-02 -5.8031121465001792e-02 9.9721026100143140e-01 0 0 0 +302 1 2.5000000000000000e+00 4.5000000000000000e+01 3.0000000000000000e+00 0.0000000000000000e+00 4.1631298256624191e-02 -4.1569375222726877e-02 9.9826791095830592e-01 0 0 0 +322 1 2.5000000000000000e+00 4.8000000000000000e+01 3.0000000000000000e+00 0.0000000000000000e+00 3.3534698701154809e-02 -2.8894018478272433e-02 9.9901979944303410e-01 0 0 0 +342 1 2.5000000000000000e+00 5.1000000000000000e+01 3.0000000000000000e+00 0.0000000000000000e+00 2.4184841732588204e-02 -2.0009637034407945e-02 9.9950723251816487e-01 0 0 0 +362 1 2.5000000000000000e+00 5.4000000000000000e+01 3.0000000000000000e+00 0.0000000000000000e+00 1.4489047587394149e-02 -1.4489047587394138e-02 9.9979004545955585e-01 0 0 0 +382 1 2.5000000000000000e+00 5.7000000000000000e+01 3.0000000000000000e+00 0.0000000000000000e+00 4.8145058779812547e-03 -1.1868011343002482e-02 9.9991798205648519e-01 0 0 0 +3 1 2.5000000000000000e+00 0.0000000000000000e+00 6.0000000000000000e+00 0.0000000000000000e+00 -6.5828744882500158e-03 -1.9561861499557527e-02 9.9978697697966856e-01 0 0 0 +23 1 2.5000000000000000e+00 3.0000000000000000e+00 6.0000000000000000e+00 0.0000000000000000e+00 -2.0009637034407932e-02 -2.4184841732588200e-02 9.9950723251816498e-01 0 0 0 +43 1 2.5000000000000000e+00 6.0000000000000000e+00 6.0000000000000000e+00 0.0000000000000000e+00 -3.4047077037887570e-02 -3.4047077037887577e-02 9.9884012388887977e-01 0 0 0 +63 1 2.5000000000000000e+00 9.0000000000000000e+00 6.0000000000000000e+00 0.0000000000000000e+00 -4.8498220596720307e-02 -5.0241530269051260e-02 9.9755887607457838e-01 0 0 0 +83 1 2.5000000000000000e+00 1.2000000000000000e+01 6.0000000000000000e+00 0.0000000000000000e+00 -6.2196104012276265e-02 -7.3954811425103587e-02 9.9532021506285684e-01 0 0 0 +103 1 2.5000000000000000e+00 1.5000000000000000e+01 6.0000000000000000e+00 0.0000000000000000e+00 -7.2649992877525826e-02 -1.0567933713226435e-01 9.9174283775491956e-01 0 0 0 +123 1 2.5000000000000000e+00 1.8000000000000000e+01 6.0000000000000000e+00 0.0000000000000000e+00 -7.6126593015943808e-02 -1.4398087111736477e-01 9.8664798717073865e-01 0 0 0 +143 1 2.5000000000000000e+00 2.1000000000000000e+01 6.0000000000000000e+00 0.0000000000000000e+00 -6.8709104650143085e-02 -1.8428174194944069e-01 9.8046891767268973e-01 0 0 0 +163 1 2.5000000000000000e+00 2.4000000000000000e+01 6.0000000000000000e+00 0.0000000000000000e+00 -4.8457456104349643e-02 -2.1884669159068457e-01 9.7455528346405618e-01 0 0 0 +183 1 2.5000000000000000e+00 2.7000000000000000e+01 6.0000000000000000e+00 0.0000000000000000e+00 -1.7543173966404597e-02 -2.3902270727461428e-01 9.7085548999544657e-01 0 0 0 +203 1 2.5000000000000000e+00 3.0000000000000000e+01 6.0000000000000000e+00 0.0000000000000000e+00 1.7543173966404587e-02 -2.3902270727461422e-01 9.7085548999544646e-01 0 0 0 +223 1 2.5000000000000000e+00 3.3000000000000000e+01 6.0000000000000000e+00 0.0000000000000000e+00 4.8457456104349608e-02 -2.1884669159068454e-01 9.7455528346405618e-01 0 0 0 +243 1 2.5000000000000000e+00 3.6000000000000000e+01 6.0000000000000000e+00 0.0000000000000000e+00 6.8709104650143044e-02 -1.8428174194944069e-01 9.8046891767268962e-01 0 0 0 +263 1 2.5000000000000000e+00 3.9000000000000000e+01 6.0000000000000000e+00 0.0000000000000000e+00 7.6126593015943766e-02 -1.4398087111736474e-01 9.8664798717073865e-01 0 0 0 +283 1 2.5000000000000000e+00 4.2000000000000000e+01 6.0000000000000000e+00 0.0000000000000000e+00 7.2649992877525826e-02 -1.0567933713226434e-01 9.9174283775491956e-01 0 0 0 +303 1 2.5000000000000000e+00 4.5000000000000000e+01 6.0000000000000000e+00 0.0000000000000000e+00 6.2196104012276258e-02 -7.3954811425103573e-02 9.9532021506285673e-01 0 0 0 +323 1 2.5000000000000000e+00 4.8000000000000000e+01 6.0000000000000000e+00 0.0000000000000000e+00 4.8498220596720307e-02 -5.0241530269051260e-02 9.9755887607457838e-01 0 0 0 +343 1 2.5000000000000000e+00 5.1000000000000000e+01 6.0000000000000000e+00 0.0000000000000000e+00 3.4047077037887577e-02 -3.4047077037887577e-02 9.9884012388887966e-01 0 0 0 +363 1 2.5000000000000000e+00 5.4000000000000000e+01 6.0000000000000000e+00 0.0000000000000000e+00 2.0009637034407942e-02 -2.4184841732588211e-02 9.9950723251816498e-01 0 0 0 +383 1 2.5000000000000000e+00 5.7000000000000000e+01 6.0000000000000000e+00 0.0000000000000000e+00 6.5828744882500201e-03 -1.9561861499557531e-02 9.9978697697966856e-01 0 0 0 +4 1 2.5000000000000000e+00 0.0000000000000000e+00 9.0000000000000000e+00 0.0000000000000000e+00 -9.3989438861432524e-03 -2.6644762521588497e-02 9.9960077855311480e-01 0 0 0 +24 1 2.5000000000000000e+00 3.0000000000000000e+00 9.0000000000000000e+00 0.0000000000000000e+00 -2.8894018478272426e-02 -3.3534698701154803e-02 9.9901979944303410e-01 0 0 0 +44 1 2.5000000000000000e+00 6.0000000000000000e+00 9.0000000000000000e+00 0.0000000000000000e+00 -5.0241530269051232e-02 -4.8498220596720286e-02 9.9755887607457827e-01 0 0 0 +64 1 2.5000000000000000e+00 9.0000000000000000e+00 9.0000000000000000e+00 0.0000000000000000e+00 -7.3771080474423129e-02 -7.3771080474423115e-02 9.9454293792237669e-01 0 0 0 +84 1 2.5000000000000000e+00 1.2000000000000000e+01 9.0000000000000000e+00 0.0000000000000000e+00 -9.8127311868331568e-02 -1.1214098437153223e-01 9.8883539089662387e-01 0 0 0 +104 1 2.5000000000000000e+00 1.5000000000000000e+01 9.0000000000000000e+00 0.0000000000000000e+00 -1.1922421797550638e-01 -1.6561310406555055e-01 9.7895755046370747e-01 0 0 0 +124 1 2.5000000000000000e+00 1.8000000000000000e+01 9.0000000000000000e+00 0.0000000000000000e+00 -1.2975986317850730e-01 -2.3284022614534144e-01 9.6381938504912923e-01 0 0 0 +144 1 2.5000000000000000e+00 2.1000000000000000e+01 9.0000000000000000e+00 0.0000000000000000e+00 -1.2090775615411226e-01 -3.0602867088565672e-01 9.4431338394504205e-01 0 0 0 +164 1 2.5000000000000000e+00 2.4000000000000000e+01 9.0000000000000000e+00 0.0000000000000000e+00 -8.7191355151399766e-02 -3.7026717261459724e-01 9.2482424734154478e-01 0 0 0 +184 1 2.5000000000000000e+00 2.7000000000000000e+01 9.0000000000000000e+00 0.0000000000000000e+00 -3.1922103301157183e-02 -4.0821375936870385e-01 9.1232806927272614e-01 0 0 0 +204 1 2.5000000000000000e+00 3.0000000000000000e+01 9.0000000000000000e+00 0.0000000000000000e+00 3.1922103301157155e-02 -4.0821375936870385e-01 9.1232806927272625e-01 0 0 0 +224 1 2.5000000000000000e+00 3.3000000000000000e+01 9.0000000000000000e+00 0.0000000000000000e+00 8.7191355151399724e-02 -3.7026717261459718e-01 9.2482424734154478e-01 0 0 0 +244 1 2.5000000000000000e+00 3.6000000000000000e+01 9.0000000000000000e+00 0.0000000000000000e+00 1.2090775615411219e-01 -3.0602867088565661e-01 9.4431338394504194e-01 0 0 0 +264 1 2.5000000000000000e+00 3.9000000000000000e+01 9.0000000000000000e+00 0.0000000000000000e+00 1.2975986317850724e-01 -2.3284022614534142e-01 9.6381938504912912e-01 0 0 0 +284 1 2.5000000000000000e+00 4.2000000000000000e+01 9.0000000000000000e+00 0.0000000000000000e+00 1.1922421797550635e-01 -1.6561310406555052e-01 9.7895755046370747e-01 0 0 0 +304 1 2.5000000000000000e+00 4.5000000000000000e+01 9.0000000000000000e+00 0.0000000000000000e+00 9.8127311868331568e-02 -1.1214098437153228e-01 9.8883539089662398e-01 0 0 0 +324 1 2.5000000000000000e+00 4.8000000000000000e+01 9.0000000000000000e+00 0.0000000000000000e+00 7.3771080474423129e-02 -7.3771080474423142e-02 9.9454293792237669e-01 0 0 0 +344 1 2.5000000000000000e+00 5.1000000000000000e+01 9.0000000000000000e+00 0.0000000000000000e+00 5.0241530269051253e-02 -4.8498220596720314e-02 9.9755887607457827e-01 0 0 0 +364 1 2.5000000000000000e+00 5.4000000000000000e+01 9.0000000000000000e+00 0.0000000000000000e+00 2.8894018478272443e-02 -3.3534698701154816e-02 9.9901979944303410e-01 0 0 0 +384 1 2.5000000000000000e+00 5.7000000000000000e+01 9.0000000000000000e+00 0.0000000000000000e+00 9.3989438861432611e-03 -2.6644762521588494e-02 9.9960077855311480e-01 0 0 0 +5 1 2.5000000000000000e+00 0.0000000000000000e+00 1.2000000000000000e+01 0.0000000000000000e+00 -1.3362272507461699e-02 -3.2364838887478299e-02 9.9938679542868880e-01 0 0 0 +25 1 2.5000000000000000e+00 3.0000000000000000e+00 1.2000000000000000e+01 0.0000000000000000e+00 -4.1569375222726863e-02 -4.1631298256624198e-02 9.9826791095830603e-01 0 0 0 +45 1 2.5000000000000000e+00 6.0000000000000000e+00 1.2000000000000000e+01 0.0000000000000000e+00 -7.3954811425103559e-02 -6.2196104012276245e-02 9.9532021506285673e-01 0 0 0 +65 1 2.5000000000000000e+00 9.0000000000000000e+00 1.2000000000000000e+01 0.0000000000000000e+00 -1.1214098437153225e-01 -9.8127311868331554e-02 9.8883539089662398e-01 0 0 0 +85 1 2.5000000000000000e+00 1.2000000000000000e+01 1.2000000000000000e+01 0.0000000000000000e+00 -1.5508313718777630e-01 -1.5508313718777628e-01 9.7565282817198595e-01 0 0 0 +105 1 2.5000000000000000e+00 1.5000000000000000e+01 1.2000000000000000e+01 0.0000000000000000e+00 -1.9646003525323200e-01 -2.3830565311068275e-01 9.5111191257590177e-01 0 0 0 +125 1 2.5000000000000000e+00 1.8000000000000000e+01 1.2000000000000000e+01 0.0000000000000000e+00 -2.2234110900479689e-01 -3.4758786972735528e-01 9.1090455266450188e-01 0 0 0 +145 1 2.5000000000000000e+00 2.1000000000000000e+01 1.2000000000000000e+01 0.0000000000000000e+00 -2.1357380845070773e-01 -4.7013886220911955e-01 8.5636188529416402e-01 0 0 0 +165 1 2.5000000000000000e+00 2.4000000000000000e+01 1.2000000000000000e+01 0.0000000000000000e+00 -1.5692234237038313e-01 -5.7886257432716870e-01 8.0018341554190886e-01 0 0 0 +185 1 2.5000000000000000e+00 2.7000000000000000e+01 1.2000000000000000e+01 0.0000000000000000e+00 -5.7920936211537863e-02 -6.4295931380698856e-01 7.6370706814669809e-01 0 0 0 +205 1 2.5000000000000000e+00 3.0000000000000000e+01 1.2000000000000000e+01 0.0000000000000000e+00 5.7920936211537793e-02 -6.4295931380698856e-01 7.6370706814669809e-01 0 0 0 +225 1 2.5000000000000000e+00 3.3000000000000000e+01 1.2000000000000000e+01 0.0000000000000000e+00 1.5692234237038311e-01 -5.7886257432716881e-01 8.0018341554190908e-01 0 0 0 +245 1 2.5000000000000000e+00 3.6000000000000000e+01 1.2000000000000000e+01 0.0000000000000000e+00 2.1357380845070767e-01 -4.7013886220911949e-01 8.5636188529416413e-01 0 0 0 +265 1 2.5000000000000000e+00 3.9000000000000000e+01 1.2000000000000000e+01 0.0000000000000000e+00 2.2234110900479689e-01 -3.4758786972735528e-01 9.1090455266450188e-01 0 0 0 +285 1 2.5000000000000000e+00 4.2000000000000000e+01 1.2000000000000000e+01 0.0000000000000000e+00 1.9646003525323205e-01 -2.3830565311068283e-01 9.5111191257590177e-01 0 0 0 +305 1 2.5000000000000000e+00 4.5000000000000000e+01 1.2000000000000000e+01 0.0000000000000000e+00 1.5508313718777633e-01 -1.5508313718777636e-01 9.7565282817198595e-01 0 0 0 +325 1 2.5000000000000000e+00 4.8000000000000000e+01 1.2000000000000000e+01 0.0000000000000000e+00 1.1214098437153229e-01 -9.8127311868331610e-02 9.8883539089662398e-01 0 0 0 +345 1 2.5000000000000000e+00 5.1000000000000000e+01 1.2000000000000000e+01 0.0000000000000000e+00 7.3954811425103614e-02 -6.2196104012276265e-02 9.9532021506285684e-01 0 0 0 +365 1 2.5000000000000000e+00 5.4000000000000000e+01 1.2000000000000000e+01 0.0000000000000000e+00 4.1569375222726898e-02 -4.1631298256624198e-02 9.9826791095830603e-01 0 0 0 +385 1 2.5000000000000000e+00 5.7000000000000000e+01 1.2000000000000000e+01 0.0000000000000000e+00 1.3362272507461706e-02 -3.2364838887478299e-02 9.9938679542868891e-01 0 0 0 +6 1 2.5000000000000000e+00 0.0000000000000000e+00 1.5000000000000000e+01 0.0000000000000000e+00 -1.8429703183501404e-02 -3.5634992015801836e-02 9.9919492261750509e-01 0 0 0 +26 1 2.5000000000000000e+00 3.0000000000000000e+00 1.5000000000000000e+01 0.0000000000000000e+00 -5.8031121465001771e-02 -4.6947676140268457e-02 9.9721026100143140e-01 0 0 0 +46 1 2.5000000000000000e+00 6.0000000000000000e+00 1.5000000000000000e+01 0.0000000000000000e+00 -1.0567933713226434e-01 -7.2649992877525812e-02 9.9174283775491956e-01 0 0 0 +66 1 2.5000000000000000e+00 9.0000000000000000e+00 1.5000000000000000e+01 0.0000000000000000e+00 -1.6561310406555055e-01 -1.1922421797550634e-01 9.7895755046370747e-01 0 0 0 +86 1 2.5000000000000000e+00 1.2000000000000000e+01 1.5000000000000000e+01 0.0000000000000000e+00 -2.3830565311068275e-01 -1.9646003525323197e-01 9.5111191257590177e-01 0 0 0 +106 1 2.5000000000000000e+00 1.5000000000000000e+01 1.5000000000000000e+01 0.0000000000000000e+00 -3.1460569929723275e-01 -3.1460569929723275e-01 8.9557049300398384e-01 0 0 0 +126 1 2.5000000000000000e+00 1.8000000000000000e+01 1.5000000000000000e+01 0.0000000000000000e+00 -3.6852592591640337e-01 -4.7476254409897906e-01 7.9924287212844281e-01 0 0 0 +146 1 2.5000000000000000e+00 2.1000000000000000e+01 1.5000000000000000e+01 0.0000000000000000e+00 -3.6081689881382256e-01 -6.5421949001862334e-01 6.6468641058031896e-01 0 0 0 +166 1 2.5000000000000000e+00 2.4000000000000000e+01 1.5000000000000000e+01 0.0000000000000000e+00 -2.6598547494087149e-01 -8.0744368404029232e-01 5.2657993146712301e-01 0 0 0 +186 1 2.5000000000000000e+00 2.7000000000000000e+01 1.5000000000000000e+01 0.0000000000000000e+00 -9.7873033584060118e-02 -8.9330169771966939e-01 4.3867179775797049e-01 0 0 0 +206 1 2.5000000000000000e+00 3.0000000000000000e+01 1.5000000000000000e+01 0.0000000000000000e+00 9.7873033584060007e-02 -8.9330169771966939e-01 4.3867179775797044e-01 0 0 0 +226 1 2.5000000000000000e+00 3.3000000000000000e+01 1.5000000000000000e+01 0.0000000000000000e+00 2.6598547494087138e-01 -8.0744368404029232e-01 5.2657993146712301e-01 0 0 0 +246 1 2.5000000000000000e+00 3.6000000000000000e+01 1.5000000000000000e+01 0.0000000000000000e+00 3.6081689881382251e-01 -6.5421949001862334e-01 6.6468641058031896e-01 0 0 0 +266 1 2.5000000000000000e+00 3.9000000000000000e+01 1.5000000000000000e+01 0.0000000000000000e+00 3.6852592591640337e-01 -4.7476254409897911e-01 7.9924287212844303e-01 0 0 0 +286 1 2.5000000000000000e+00 4.2000000000000000e+01 1.5000000000000000e+01 0.0000000000000000e+00 3.1460569929723281e-01 -3.1460569929723281e-01 8.9557049300398361e-01 0 0 0 +306 1 2.5000000000000000e+00 4.5000000000000000e+01 1.5000000000000000e+01 0.0000000000000000e+00 2.3830565311068277e-01 -1.9646003525323205e-01 9.5111191257590177e-01 0 0 0 +326 1 2.5000000000000000e+00 4.8000000000000000e+01 1.5000000000000000e+01 0.0000000000000000e+00 1.6561310406555055e-01 -1.1922421797550636e-01 9.7895755046370736e-01 0 0 0 +346 1 2.5000000000000000e+00 5.1000000000000000e+01 1.5000000000000000e+01 0.0000000000000000e+00 1.0567933713226439e-01 -7.2649992877525854e-02 9.9174283775491956e-01 0 0 0 +366 1 2.5000000000000000e+00 5.4000000000000000e+01 1.5000000000000000e+01 0.0000000000000000e+00 5.8031121465001820e-02 -4.6947676140268485e-02 9.9721026100143140e-01 0 0 0 +386 1 2.5000000000000000e+00 5.7000000000000000e+01 1.5000000000000000e+01 0.0000000000000000e+00 1.8429703183501425e-02 -3.5634992015801836e-02 9.9919492261750498e-01 0 0 0 +7 1 2.5000000000000000e+00 0.0000000000000000e+00 1.8000000000000000e+01 0.0000000000000000e+00 -2.4270277420221083e-02 -3.5235119566844234e-02 9.9908430073895960e-01 0 0 0 +27 1 2.5000000000000000e+00 3.0000000000000000e+00 1.8000000000000000e+01 0.0000000000000000e+00 -7.7312985281705854e-02 -4.7535409319668043e-02 9.9587302763336372e-01 0 0 0 +47 1 2.5000000000000000e+00 6.0000000000000000e+00 1.8000000000000000e+01 0.0000000000000000e+00 -1.4398087111736474e-01 -7.6126593015943766e-02 9.8664798717073854e-01 0 0 0 +67 1 2.5000000000000000e+00 9.0000000000000000e+00 1.8000000000000000e+01 0.0000000000000000e+00 -2.3284022614534147e-01 -1.2975986317850727e-01 9.6381938504912923e-01 0 0 0 +87 1 2.5000000000000000e+00 1.2000000000000000e+01 1.8000000000000000e+01 0.0000000000000000e+00 -3.4758786972735523e-01 -2.2234110900479681e-01 9.1090455266450177e-01 0 0 0 +107 1 2.5000000000000000e+00 1.5000000000000000e+01 1.8000000000000000e+01 0.0000000000000000e+00 -4.7476254409897900e-01 -3.6852592591640326e-01 7.9924287212844292e-01 0 0 0 +127 1 2.5000000000000000e+00 1.8000000000000000e+01 1.8000000000000000e+01 0.0000000000000000e+00 -5.6571145299922609e-01 -5.6571145299922598e-01 5.9995091790163058e-01 0 0 0 +147 1 2.5000000000000000e+00 2.1000000000000000e+01 1.8000000000000000e+01 0.0000000000000000e+00 -5.4725458628470525e-01 -7.6968694425946660e-01 3.2877716713129740e-01 0 0 0 +167 1 2.5000000000000000e+00 2.4000000000000000e+01 1.8000000000000000e+01 0.0000000000000000e+00 -3.9048923819288139e-01 -9.1777534868081290e-01 7.2156525757244322e-02 0 0 0 +187 1 2.5000000000000000e+00 2.7000000000000000e+01 1.8000000000000000e+01 0.0000000000000000e+00 -1.3991724696158017e-01 -9.8714633419212083e-01 -7.7235217962726241e-02 0 0 0 +207 1 2.5000000000000000e+00 3.0000000000000000e+01 1.8000000000000000e+01 0.0000000000000000e+00 1.3991724696158006e-01 -9.8714633419212106e-01 -7.7235217962726241e-02 0 0 0 +227 1 2.5000000000000000e+00 3.3000000000000000e+01 1.8000000000000000e+01 0.0000000000000000e+00 3.9048923819288128e-01 -9.1777534868081279e-01 7.2156525757244322e-02 0 0 0 +247 1 2.5000000000000000e+00 3.6000000000000000e+01 1.8000000000000000e+01 0.0000000000000000e+00 5.4725458628470514e-01 -7.6968694425946649e-01 3.2877716713129734e-01 0 0 0 +267 1 2.5000000000000000e+00 3.9000000000000000e+01 1.8000000000000000e+01 0.0000000000000000e+00 5.6571145299922621e-01 -5.6571145299922609e-01 5.9995091790163035e-01 0 0 0 +287 1 2.5000000000000000e+00 4.2000000000000000e+01 1.8000000000000000e+01 0.0000000000000000e+00 4.7476254409897917e-01 -3.6852592591640337e-01 7.9924287212844281e-01 0 0 0 +307 1 2.5000000000000000e+00 4.5000000000000000e+01 1.8000000000000000e+01 0.0000000000000000e+00 3.4758786972735534e-01 -2.2234110900479692e-01 9.1090455266450188e-01 0 0 0 +327 1 2.5000000000000000e+00 4.8000000000000000e+01 1.8000000000000000e+01 0.0000000000000000e+00 2.3284022614534147e-01 -1.2975986317850732e-01 9.6381938504912912e-01 0 0 0 +347 1 2.5000000000000000e+00 5.1000000000000000e+01 1.8000000000000000e+01 0.0000000000000000e+00 1.4398087111736477e-01 -7.6126593015943808e-02 9.8664798717073854e-01 0 0 0 +367 1 2.5000000000000000e+00 5.4000000000000000e+01 1.8000000000000000e+01 0.0000000000000000e+00 7.7312985281705909e-02 -4.7535409319668064e-02 9.9587302763336372e-01 0 0 0 +387 1 2.5000000000000000e+00 5.7000000000000000e+01 1.8000000000000000e+01 0.0000000000000000e+00 2.4270277420221129e-02 -3.5235119566844247e-02 9.9908430073895971e-01 0 0 0 +8 1 2.5000000000000000e+00 0.0000000000000000e+00 2.1000000000000000e+01 0.0000000000000000e+00 -3.0163850736159105e-02 -3.0237916900163149e-02 9.9908748890690535e-01 0 0 0 +28 1 2.5000000000000000e+00 3.0000000000000000e+00 2.1000000000000000e+01 0.0000000000000000e+00 -9.7059251840902722e-02 -4.1653952417990810e-02 9.9440658177630958e-01 0 0 0 +48 1 2.5000000000000000e+00 6.0000000000000000e+00 2.1000000000000000e+01 0.0000000000000000e+00 -1.8428174194944064e-01 -6.8709104650143071e-02 9.8046891767268973e-01 0 0 0 +68 1 2.5000000000000000e+00 9.0000000000000000e+00 2.1000000000000000e+01 0.0000000000000000e+00 -3.0602867088565666e-01 -1.2090775615411221e-01 9.4431338394504205e-01 0 0 0 +88 1 2.5000000000000000e+00 1.2000000000000000e+01 2.1000000000000000e+01 0.0000000000000000e+00 -4.7013886220911943e-01 -2.1357380845070767e-01 8.5636188529416413e-01 0 0 0 +108 1 2.5000000000000000e+00 1.5000000000000000e+01 2.1000000000000000e+01 0.0000000000000000e+00 -6.5421949001862312e-01 -3.6081689881382245e-01 6.6468641058031908e-01 0 0 0 +128 1 2.5000000000000000e+00 1.8000000000000000e+01 2.1000000000000000e+01 0.0000000000000000e+00 -7.6968694425946649e-01 -5.4725458628470514e-01 3.2877716713129745e-01 0 0 0 +148 1 2.5000000000000000e+00 2.1000000000000000e+01 2.1000000000000000e+01 0.0000000000000000e+00 -7.0472416296125850e-01 -7.0472416296125850e-01 -8.2022608329090224e-02 0 0 0 +168 1 2.5000000000000000e+00 2.4000000000000000e+01 2.1000000000000000e+01 0.0000000000000000e+00 -4.6907708232882805e-01 -7.8303583820847300e-01 -4.0843795968914098e-01 0 0 0 +188 1 2.5000000000000000e+00 2.7000000000000000e+01 2.1000000000000000e+01 0.0000000000000000e+00 -1.6077801357100108e-01 -8.0506391360620255e-01 -5.7098382232881861e-01 0 0 0 +208 1 2.5000000000000000e+00 3.0000000000000000e+01 2.1000000000000000e+01 0.0000000000000000e+00 1.6077801357100094e-01 -8.0506391360620255e-01 -5.7098382232881872e-01 0 0 0 +228 1 2.5000000000000000e+00 3.3000000000000000e+01 2.1000000000000000e+01 0.0000000000000000e+00 4.6907708232882789e-01 -7.8303583820847278e-01 -4.0843795968914093e-01 0 0 0 +248 1 2.5000000000000000e+00 3.6000000000000000e+01 2.1000000000000000e+01 0.0000000000000000e+00 7.0472416296125839e-01 -7.0472416296125850e-01 -8.2022608329090321e-02 0 0 0 +268 1 2.5000000000000000e+00 3.9000000000000000e+01 2.1000000000000000e+01 0.0000000000000000e+00 7.6968694425946660e-01 -5.4725458628470514e-01 3.2877716713129729e-01 0 0 0 +288 1 2.5000000000000000e+00 4.2000000000000000e+01 2.1000000000000000e+01 0.0000000000000000e+00 6.5421949001862334e-01 -3.6081689881382256e-01 6.6468641058031885e-01 0 0 0 +308 1 2.5000000000000000e+00 4.5000000000000000e+01 2.1000000000000000e+01 0.0000000000000000e+00 4.7013886220911955e-01 -2.1357380845070770e-01 8.5636188529416402e-01 0 0 0 +328 1 2.5000000000000000e+00 4.8000000000000000e+01 2.1000000000000000e+01 0.0000000000000000e+00 3.0602867088565666e-01 -1.2090775615411227e-01 9.4431338394504194e-01 0 0 0 +348 1 2.5000000000000000e+00 5.1000000000000000e+01 2.1000000000000000e+01 0.0000000000000000e+00 1.8428174194944072e-01 -6.8709104650143099e-02 9.8046891767268962e-01 0 0 0 +368 1 2.5000000000000000e+00 5.4000000000000000e+01 2.1000000000000000e+01 0.0000000000000000e+00 9.7059251840902791e-02 -4.1653952417990824e-02 9.9440658177630958e-01 0 0 0 +388 1 2.5000000000000000e+00 5.7000000000000000e+01 2.1000000000000000e+01 0.0000000000000000e+00 3.0163850736159153e-02 -3.0237916900163146e-02 9.9908748890690535e-01 0 0 0 +9 1 2.5000000000000000e+00 0.0000000000000000e+00 2.4000000000000000e+01 0.0000000000000000e+00 -3.5058787503171387e-02 -2.0551704657275887e-02 9.9917391321755789e-01 0 0 0 +29 1 2.5000000000000000e+00 3.0000000000000000e+00 2.4000000000000000e+01 0.0000000000000000e+00 -1.1365104497068090e-01 -2.8752729368399281e-02 9.9310458690459180e-01 0 0 0 +49 1 2.5000000000000000e+00 6.0000000000000000e+00 2.4000000000000000e+01 0.0000000000000000e+00 -2.1884669159068454e-01 -4.8457456104349608e-02 9.7455528346405629e-01 0 0 0 +69 1 2.5000000000000000e+00 9.0000000000000000e+00 2.4000000000000000e+01 0.0000000000000000e+00 -3.7026717261459713e-01 -8.7191355151399724e-02 9.2482424734154478e-01 0 0 0 +89 1 2.5000000000000000e+00 1.2000000000000000e+01 2.4000000000000000e+01 0.0000000000000000e+00 -5.7886257432716870e-01 -1.5692234237038305e-01 8.0018341554190908e-01 0 0 0 +109 1 2.5000000000000000e+00 1.5000000000000000e+01 2.4000000000000000e+01 0.0000000000000000e+00 -8.0744368404029221e-01 -2.6598547494087144e-01 5.2657993146712301e-01 0 0 0 +129 1 2.5000000000000000e+00 1.8000000000000000e+01 2.4000000000000000e+01 0.0000000000000000e+00 -9.1777534868081279e-01 -3.9048923819288128e-01 7.2156525757244433e-02 0 0 0 +149 1 2.5000000000000000e+00 2.1000000000000000e+01 2.4000000000000000e+01 0.0000000000000000e+00 -7.8303583820847289e-01 -4.6907708232882789e-01 -4.0843795968914071e-01 0 0 0 +169 1 2.5000000000000000e+00 2.4000000000000000e+01 2.4000000000000000e+01 0.0000000000000000e+00 -4.8741359543182999e-01 -4.8741359543182988e-01 -7.2446944309365668e-01 0 0 0 +189 1 2.5000000000000000e+00 2.7000000000000000e+01 2.4000000000000000e+01 0.0000000000000000e+00 -1.6115060626850930e-01 -4.8338466373268979e-01 -8.6044741208706443e-01 0 0 0 +209 1 2.5000000000000000e+00 3.0000000000000000e+01 2.4000000000000000e+01 0.0000000000000000e+00 1.6115060626850913e-01 -4.8338466373268968e-01 -8.6044741208706432e-01 0 0 0 +229 1 2.5000000000000000e+00 3.3000000000000000e+01 2.4000000000000000e+01 0.0000000000000000e+00 4.8741359543182988e-01 -4.8741359543182988e-01 -7.2446944309365668e-01 0 0 0 +249 1 2.5000000000000000e+00 3.6000000000000000e+01 2.4000000000000000e+01 0.0000000000000000e+00 7.8303583820847289e-01 -4.6907708232882789e-01 -4.0843795968914098e-01 0 0 0 +269 1 2.5000000000000000e+00 3.9000000000000000e+01 2.4000000000000000e+01 0.0000000000000000e+00 9.1777534868081290e-01 -3.9048923819288139e-01 7.2156525757244280e-02 0 0 0 +289 1 2.5000000000000000e+00 4.2000000000000000e+01 2.4000000000000000e+01 0.0000000000000000e+00 8.0744368404029232e-01 -2.6598547494087149e-01 5.2657993146712290e-01 0 0 0 +309 1 2.5000000000000000e+00 4.5000000000000000e+01 2.4000000000000000e+01 0.0000000000000000e+00 5.7886257432716870e-01 -1.5692234237038313e-01 8.0018341554190908e-01 0 0 0 +329 1 2.5000000000000000e+00 4.8000000000000000e+01 2.4000000000000000e+01 0.0000000000000000e+00 3.7026717261459713e-01 -8.7191355151399724e-02 9.2482424734154478e-01 0 0 0 +349 1 2.5000000000000000e+00 5.1000000000000000e+01 2.4000000000000000e+01 0.0000000000000000e+00 2.1884669159068457e-01 -4.8457456104349622e-02 9.7455528346405618e-01 0 0 0 +369 1 2.5000000000000000e+00 5.4000000000000000e+01 2.4000000000000000e+01 0.0000000000000000e+00 1.1365104497068097e-01 -2.8752729368399291e-02 9.9310458690459180e-01 0 0 0 +389 1 2.5000000000000000e+00 5.7000000000000000e+01 2.4000000000000000e+01 0.0000000000000000e+00 3.5058787503171436e-02 -2.0551704657275904e-02 9.9917391321755789e-01 0 0 0 +10 1 2.5000000000000000e+00 0.0000000000000000e+00 2.7000000000000000e+01 0.0000000000000000e+00 -3.7860607272964017e-02 -7.2971667669136089e-03 9.9925638640646097e-01 0 0 0 +30 1 2.5000000000000000e+00 3.0000000000000000e+00 2.7000000000000000e+01 0.0000000000000000e+00 -1.2321728304286257e-01 -1.0293413501576077e-02 9.9232633079951116e-01 0 0 0 +50 1 2.5000000000000000e+00 6.0000000000000000e+00 2.7000000000000000e+01 0.0000000000000000e+00 -2.3902270727461422e-01 -1.7543173966404584e-02 9.7085548999544669e-01 0 0 0 +70 1 2.5000000000000000e+00 9.0000000000000000e+00 2.7000000000000000e+01 0.0000000000000000e+00 -4.0821375936870385e-01 -3.1922103301157141e-02 9.1232806927272625e-01 0 0 0 +90 1 2.5000000000000000e+00 1.2000000000000000e+01 2.7000000000000000e+01 0.0000000000000000e+00 -6.4295931380698856e-01 -5.7920936211537787e-02 7.6370706814669798e-01 0 0 0 +110 1 2.5000000000000000e+00 1.5000000000000000e+01 2.7000000000000000e+01 0.0000000000000000e+00 -8.9330169771966939e-01 -9.7873033584060035e-02 4.3867179775797044e-01 0 0 0 +130 1 2.5000000000000000e+00 1.8000000000000000e+01 2.7000000000000000e+01 0.0000000000000000e+00 -9.8714633419212094e-01 -1.3991724696158003e-01 -7.7235217962726088e-02 0 0 0 +150 1 2.5000000000000000e+00 2.1000000000000000e+01 2.7000000000000000e+01 0.0000000000000000e+00 -8.0506391360620255e-01 -1.6077801357100097e-01 -5.7098382232881850e-01 0 0 0 +170 1 2.5000000000000000e+00 2.4000000000000000e+01 2.7000000000000000e+01 0.0000000000000000e+00 -4.8338466373268996e-01 -1.6115060626850919e-01 -8.6044741208706443e-01 0 0 0 +190 1 2.5000000000000000e+00 2.7000000000000000e+01 2.7000000000000000e+01 0.0000000000000000e+00 -1.5704482464087621e-01 -1.5704482464087605e-01 -9.7502504896388853e-01 0 0 0 +210 1 2.5000000000000000e+00 3.0000000000000000e+01 2.7000000000000000e+01 0.0000000000000000e+00 1.5704482464087599e-01 -1.5704482464087605e-01 -9.7502504896388842e-01 0 0 0 +230 1 2.5000000000000000e+00 3.3000000000000000e+01 2.7000000000000000e+01 0.0000000000000000e+00 4.8338466373268973e-01 -1.6115060626850916e-01 -8.6044741208706443e-01 0 0 0 +250 1 2.5000000000000000e+00 3.6000000000000000e+01 2.7000000000000000e+01 0.0000000000000000e+00 8.0506391360620255e-01 -1.6077801357100097e-01 -5.7098382232881861e-01 0 0 0 +270 1 2.5000000000000000e+00 3.9000000000000000e+01 2.7000000000000000e+01 0.0000000000000000e+00 9.8714633419212106e-01 -1.3991724696158012e-01 -7.7235217962726269e-02 0 0 0 +290 1 2.5000000000000000e+00 4.2000000000000000e+01 2.7000000000000000e+01 0.0000000000000000e+00 8.9330169771966950e-01 -9.7873033584060062e-02 4.3867179775797038e-01 0 0 0 +310 1 2.5000000000000000e+00 4.5000000000000000e+01 2.7000000000000000e+01 0.0000000000000000e+00 6.4295931380698856e-01 -5.7920936211537821e-02 7.6370706814669798e-01 0 0 0 +330 1 2.5000000000000000e+00 4.8000000000000000e+01 2.7000000000000000e+01 0.0000000000000000e+00 4.0821375936870391e-01 -3.1922103301157183e-02 9.1232806927272614e-01 0 0 0 +350 1 2.5000000000000000e+00 5.1000000000000000e+01 2.7000000000000000e+01 0.0000000000000000e+00 2.3902270727461428e-01 -1.7543173966404597e-02 9.7085548999544657e-01 0 0 0 +370 1 2.5000000000000000e+00 5.4000000000000000e+01 2.7000000000000000e+01 0.0000000000000000e+00 1.2321728304286259e-01 -1.0293413501576086e-02 9.9232633079951105e-01 0 0 0 +390 1 2.5000000000000000e+00 5.7000000000000000e+01 2.7000000000000000e+01 0.0000000000000000e+00 3.7860607272964045e-02 -7.2971667669136028e-03 9.9925638640646086e-01 0 0 0 +11 1 2.5000000000000000e+00 0.0000000000000000e+00 3.0000000000000000e+01 0.0000000000000000e+00 -3.7860607272964017e-02 7.2971667669136028e-03 9.9925638640646086e-01 0 0 0 +31 1 2.5000000000000000e+00 3.0000000000000000e+00 3.0000000000000000e+01 0.0000000000000000e+00 -1.2321728304286254e-01 1.0293413501576089e-02 9.9232633079951105e-01 0 0 0 +51 1 2.5000000000000000e+00 6.0000000000000000e+00 3.0000000000000000e+01 0.0000000000000000e+00 -2.3902270727461422e-01 1.7543173966404594e-02 9.7085548999544657e-01 0 0 0 +71 1 2.5000000000000000e+00 9.0000000000000000e+00 3.0000000000000000e+01 0.0000000000000000e+00 -4.0821375936870374e-01 3.1922103301157183e-02 9.1232806927272625e-01 0 0 0 +91 1 2.5000000000000000e+00 1.2000000000000000e+01 3.0000000000000000e+01 0.0000000000000000e+00 -6.4295931380698856e-01 5.7920936211537842e-02 7.6370706814669798e-01 0 0 0 +111 1 2.5000000000000000e+00 1.5000000000000000e+01 3.0000000000000000e+01 0.0000000000000000e+00 -8.9330169771966950e-01 9.7873033584060118e-02 4.3867179775797055e-01 0 0 0 +131 1 2.5000000000000000e+00 1.8000000000000000e+01 3.0000000000000000e+01 0.0000000000000000e+00 -9.8714633419212083e-01 1.3991724696158012e-01 -7.7235217962726102e-02 0 0 0 +151 1 2.5000000000000000e+00 2.1000000000000000e+01 3.0000000000000000e+01 0.0000000000000000e+00 -8.0506391360620255e-01 1.6077801357100108e-01 -5.7098382232881850e-01 0 0 0 +171 1 2.5000000000000000e+00 2.4000000000000000e+01 3.0000000000000000e+01 0.0000000000000000e+00 -4.8338466373268996e-01 1.6115060626850930e-01 -8.6044741208706443e-01 0 0 0 +191 1 2.5000000000000000e+00 2.7000000000000000e+01 3.0000000000000000e+01 0.0000000000000000e+00 -1.5704482464087621e-01 1.5704482464087616e-01 -9.7502504896388853e-01 0 0 0 +211 1 2.5000000000000000e+00 3.0000000000000000e+01 3.0000000000000000e+01 0.0000000000000000e+00 1.5704482464087602e-01 1.5704482464087616e-01 -9.7502504896388842e-01 0 0 0 +231 1 2.5000000000000000e+00 3.3000000000000000e+01 3.0000000000000000e+01 0.0000000000000000e+00 4.8338466373268985e-01 1.6115060626850930e-01 -8.6044741208706443e-01 0 0 0 +251 1 2.5000000000000000e+00 3.6000000000000000e+01 3.0000000000000000e+01 0.0000000000000000e+00 8.0506391360620266e-01 1.6077801357100105e-01 -5.7098382232881861e-01 0 0 0 +271 1 2.5000000000000000e+00 3.9000000000000000e+01 3.0000000000000000e+01 0.0000000000000000e+00 9.8714633419212094e-01 1.3991724696158014e-01 -7.7235217962726227e-02 0 0 0 +291 1 2.5000000000000000e+00 4.2000000000000000e+01 3.0000000000000000e+01 0.0000000000000000e+00 8.9330169771966950e-01 9.7873033584060118e-02 4.3867179775797049e-01 0 0 0 +311 1 2.5000000000000000e+00 4.5000000000000000e+01 3.0000000000000000e+01 0.0000000000000000e+00 6.4295931380698867e-01 5.7920936211537849e-02 7.6370706814669809e-01 0 0 0 +331 1 2.5000000000000000e+00 4.8000000000000000e+01 3.0000000000000000e+01 0.0000000000000000e+00 4.0821375936870391e-01 3.1922103301157183e-02 9.1232806927272614e-01 0 0 0 +351 1 2.5000000000000000e+00 5.1000000000000000e+01 3.0000000000000000e+01 0.0000000000000000e+00 2.3902270727461428e-01 1.7543173966404590e-02 9.7085548999544657e-01 0 0 0 +371 1 2.5000000000000000e+00 5.4000000000000000e+01 3.0000000000000000e+01 0.0000000000000000e+00 1.2321728304286261e-01 1.0293413501576086e-02 9.9232633079951116e-01 0 0 0 +391 1 2.5000000000000000e+00 5.7000000000000000e+01 3.0000000000000000e+01 0.0000000000000000e+00 3.7860607272964052e-02 7.2971667669136046e-03 9.9925638640646097e-01 0 0 0 +12 1 2.5000000000000000e+00 0.0000000000000000e+00 3.3000000000000000e+01 0.0000000000000000e+00 -3.5058787503171387e-02 2.0551704657275897e-02 9.9917391321755789e-01 0 0 0 +32 1 2.5000000000000000e+00 3.0000000000000000e+00 3.3000000000000000e+01 0.0000000000000000e+00 -1.1365104497068096e-01 2.8752729368399288e-02 9.9310458690459191e-01 0 0 0 +52 1 2.5000000000000000e+00 6.0000000000000000e+00 3.3000000000000000e+01 0.0000000000000000e+00 -2.1884669159068451e-01 4.8457456104349615e-02 9.7455528346405618e-01 0 0 0 +72 1 2.5000000000000000e+00 9.0000000000000000e+00 3.3000000000000000e+01 0.0000000000000000e+00 -3.7026717261459707e-01 8.7191355151399710e-02 9.2482424734154478e-01 0 0 0 +92 1 2.5000000000000000e+00 1.2000000000000000e+01 3.3000000000000000e+01 0.0000000000000000e+00 -5.7886257432716870e-01 1.5692234237038316e-01 8.0018341554190908e-01 0 0 0 +112 1 2.5000000000000000e+00 1.5000000000000000e+01 3.3000000000000000e+01 0.0000000000000000e+00 -8.0744368404029210e-01 2.6598547494087149e-01 5.2657993146712301e-01 0 0 0 +132 1 2.5000000000000000e+00 1.8000000000000000e+01 3.3000000000000000e+01 0.0000000000000000e+00 -9.1777534868081267e-01 3.9048923819288134e-01 7.2156525757244433e-02 0 0 0 +152 1 2.5000000000000000e+00 2.1000000000000000e+01 3.3000000000000000e+01 0.0000000000000000e+00 -7.8303583820847311e-01 4.6907708232882811e-01 -4.0843795968914082e-01 0 0 0 +172 1 2.5000000000000000e+00 2.4000000000000000e+01 3.3000000000000000e+01 0.0000000000000000e+00 -4.8741359543183005e-01 4.8741359543182999e-01 -7.2446944309365657e-01 0 0 0 +192 1 2.5000000000000000e+00 2.7000000000000000e+01 3.3000000000000000e+01 0.0000000000000000e+00 -1.6115060626850930e-01 4.8338466373268979e-01 -8.6044741208706432e-01 0 0 0 +212 1 2.5000000000000000e+00 3.0000000000000000e+01 3.3000000000000000e+01 0.0000000000000000e+00 1.6115060626850916e-01 4.8338466373268979e-01 -8.6044741208706443e-01 0 0 0 +232 1 2.5000000000000000e+00 3.3000000000000000e+01 3.3000000000000000e+01 0.0000000000000000e+00 4.8741359543182988e-01 4.8741359543182999e-01 -7.2446944309365657e-01 0 0 0 +252 1 2.5000000000000000e+00 3.6000000000000000e+01 3.3000000000000000e+01 0.0000000000000000e+00 7.8303583820847278e-01 4.6907708232882794e-01 -4.0843795968914076e-01 0 0 0 +272 1 2.5000000000000000e+00 3.9000000000000000e+01 3.3000000000000000e+01 0.0000000000000000e+00 9.1777534868081279e-01 3.9048923819288139e-01 7.2156525757244377e-02 0 0 0 +292 1 2.5000000000000000e+00 4.2000000000000000e+01 3.3000000000000000e+01 0.0000000000000000e+00 8.0744368404029221e-01 2.6598547494087149e-01 5.2657993146712301e-01 0 0 0 +312 1 2.5000000000000000e+00 4.5000000000000000e+01 3.3000000000000000e+01 0.0000000000000000e+00 5.7886257432716870e-01 1.5692234237038316e-01 8.0018341554190908e-01 0 0 0 +332 1 2.5000000000000000e+00 4.8000000000000000e+01 3.3000000000000000e+01 0.0000000000000000e+00 3.7026717261459713e-01 8.7191355151399738e-02 9.2482424734154467e-01 0 0 0 +352 1 2.5000000000000000e+00 5.1000000000000000e+01 3.3000000000000000e+01 0.0000000000000000e+00 2.1884669159068457e-01 4.8457456104349622e-02 9.7455528346405618e-01 0 0 0 +372 1 2.5000000000000000e+00 5.4000000000000000e+01 3.3000000000000000e+01 0.0000000000000000e+00 1.1365104497068099e-01 2.8752729368399295e-02 9.9310458690459180e-01 0 0 0 +392 1 2.5000000000000000e+00 5.7000000000000000e+01 3.3000000000000000e+01 0.0000000000000000e+00 3.5058787503171422e-02 2.0551704657275897e-02 9.9917391321755777e-01 0 0 0 +13 1 2.5000000000000000e+00 0.0000000000000000e+00 3.6000000000000000e+01 0.0000000000000000e+00 -3.0163850736159126e-02 3.0237916900163156e-02 9.9908748890690546e-01 0 0 0 +33 1 2.5000000000000000e+00 3.0000000000000000e+00 3.6000000000000000e+01 0.0000000000000000e+00 -9.7059251840902735e-02 4.1653952417990817e-02 9.9440658177630958e-01 0 0 0 +53 1 2.5000000000000000e+00 6.0000000000000000e+00 3.6000000000000000e+01 0.0000000000000000e+00 -1.8428174194944066e-01 6.8709104650143071e-02 9.8046891767268973e-01 0 0 0 +73 1 2.5000000000000000e+00 9.0000000000000000e+00 3.6000000000000000e+01 0.0000000000000000e+00 -3.0602867088565661e-01 1.2090775615411221e-01 9.4431338394504194e-01 0 0 0 +93 1 2.5000000000000000e+00 1.2000000000000000e+01 3.6000000000000000e+01 0.0000000000000000e+00 -4.7013886220911938e-01 2.1357380845070770e-01 8.5636188529416413e-01 0 0 0 +113 1 2.5000000000000000e+00 1.5000000000000000e+01 3.6000000000000000e+01 0.0000000000000000e+00 -6.5421949001862323e-01 3.6081689881382251e-01 6.6468641058031896e-01 0 0 0 +133 1 2.5000000000000000e+00 1.8000000000000000e+01 3.6000000000000000e+01 0.0000000000000000e+00 -7.6968694425946660e-01 5.4725458628470525e-01 3.2877716713129751e-01 0 0 0 +153 1 2.5000000000000000e+00 2.1000000000000000e+01 3.6000000000000000e+01 0.0000000000000000e+00 -7.0472416296125850e-01 7.0472416296125850e-01 -8.2022608329090127e-02 0 0 0 +173 1 2.5000000000000000e+00 2.4000000000000000e+01 3.6000000000000000e+01 0.0000000000000000e+00 -4.6907708232882805e-01 7.8303583820847300e-01 -4.0843795968914076e-01 0 0 0 +193 1 2.5000000000000000e+00 2.7000000000000000e+01 3.6000000000000000e+01 0.0000000000000000e+00 -1.6077801357100108e-01 8.0506391360620244e-01 -5.7098382232881861e-01 0 0 0 +213 1 2.5000000000000000e+00 3.0000000000000000e+01 3.6000000000000000e+01 0.0000000000000000e+00 1.6077801357100091e-01 8.0506391360620277e-01 -5.7098382232881861e-01 0 0 0 +233 1 2.5000000000000000e+00 3.3000000000000000e+01 3.6000000000000000e+01 0.0000000000000000e+00 4.6907708232882794e-01 7.8303583820847300e-01 -4.0843795968914076e-01 0 0 0 +253 1 2.5000000000000000e+00 3.6000000000000000e+01 3.6000000000000000e+01 0.0000000000000000e+00 7.0472416296125850e-01 7.0472416296125850e-01 -8.2022608329090210e-02 0 0 0 +273 1 2.5000000000000000e+00 3.9000000000000000e+01 3.6000000000000000e+01 0.0000000000000000e+00 7.6968694425946649e-01 5.4725458628470525e-01 3.2877716713129740e-01 0 0 0 +293 1 2.5000000000000000e+00 4.2000000000000000e+01 3.6000000000000000e+01 0.0000000000000000e+00 6.5421949001862323e-01 3.6081689881382251e-01 6.6468641058031896e-01 0 0 0 +313 1 2.5000000000000000e+00 4.5000000000000000e+01 3.6000000000000000e+01 0.0000000000000000e+00 4.7013886220911949e-01 2.1357380845070775e-01 8.5636188529416413e-01 0 0 0 +333 1 2.5000000000000000e+00 4.8000000000000000e+01 3.6000000000000000e+01 0.0000000000000000e+00 3.0602867088565661e-01 1.2090775615411223e-01 9.4431338394504194e-01 0 0 0 +353 1 2.5000000000000000e+00 5.1000000000000000e+01 3.6000000000000000e+01 0.0000000000000000e+00 1.8428174194944069e-01 6.8709104650143099e-02 9.8046891767268973e-01 0 0 0 +373 1 2.5000000000000000e+00 5.4000000000000000e+01 3.6000000000000000e+01 0.0000000000000000e+00 9.7059251840902763e-02 4.1653952417990830e-02 9.9440658177630947e-01 0 0 0 +393 1 2.5000000000000000e+00 5.7000000000000000e+01 3.6000000000000000e+01 0.0000000000000000e+00 3.0163850736159133e-02 3.0237916900163159e-02 9.9908748890690535e-01 0 0 0 +14 1 2.5000000000000000e+00 0.0000000000000000e+00 3.9000000000000000e+01 0.0000000000000000e+00 -2.4270277420221101e-02 3.5235119566844240e-02 9.9908430073895960e-01 0 0 0 +34 1 2.5000000000000000e+00 3.0000000000000000e+00 3.9000000000000000e+01 0.0000000000000000e+00 -7.7312985281705854e-02 4.7535409319668036e-02 9.9587302763336372e-01 0 0 0 +54 1 2.5000000000000000e+00 6.0000000000000000e+00 3.9000000000000000e+01 0.0000000000000000e+00 -1.4398087111736474e-01 7.6126593015943766e-02 9.8664798717073854e-01 0 0 0 +74 1 2.5000000000000000e+00 9.0000000000000000e+00 3.9000000000000000e+01 0.0000000000000000e+00 -2.3284022614534142e-01 1.2975986317850727e-01 9.6381938504912923e-01 0 0 0 +94 1 2.5000000000000000e+00 1.2000000000000000e+01 3.9000000000000000e+01 0.0000000000000000e+00 -3.4758786972735517e-01 2.2234110900479689e-01 9.1090455266450199e-01 0 0 0 +114 1 2.5000000000000000e+00 1.5000000000000000e+01 3.9000000000000000e+01 0.0000000000000000e+00 -4.7476254409897917e-01 3.6852592591640326e-01 7.9924287212844314e-01 0 0 0 +134 1 2.5000000000000000e+00 1.8000000000000000e+01 3.9000000000000000e+01 0.0000000000000000e+00 -5.6571145299922609e-01 5.6571145299922598e-01 5.9995091790163058e-01 0 0 0 +154 1 2.5000000000000000e+00 2.1000000000000000e+01 3.9000000000000000e+01 0.0000000000000000e+00 -5.4725458628470514e-01 7.6968694425946649e-01 3.2877716713129751e-01 0 0 0 +174 1 2.5000000000000000e+00 2.4000000000000000e+01 3.9000000000000000e+01 0.0000000000000000e+00 -3.9048923819288139e-01 9.1777534868081279e-01 7.2156525757244475e-02 0 0 0 +194 1 2.5000000000000000e+00 2.7000000000000000e+01 3.9000000000000000e+01 0.0000000000000000e+00 -1.3991724696158014e-01 9.8714633419212094e-01 -7.7235217962726074e-02 0 0 0 +214 1 2.5000000000000000e+00 3.0000000000000000e+01 3.9000000000000000e+01 0.0000000000000000e+00 1.3991724696158006e-01 9.8714633419212106e-01 -7.7235217962726074e-02 0 0 0 +234 1 2.5000000000000000e+00 3.3000000000000000e+01 3.9000000000000000e+01 0.0000000000000000e+00 3.9048923819288128e-01 9.1777534868081290e-01 7.2156525757244516e-02 0 0 0 +254 1 2.5000000000000000e+00 3.6000000000000000e+01 3.9000000000000000e+01 0.0000000000000000e+00 5.4725458628470502e-01 7.6968694425946649e-01 3.2877716713129757e-01 0 0 0 +274 1 2.5000000000000000e+00 3.9000000000000000e+01 3.9000000000000000e+01 0.0000000000000000e+00 5.6571145299922598e-01 5.6571145299922598e-01 5.9995091790163058e-01 0 0 0 +294 1 2.5000000000000000e+00 4.2000000000000000e+01 3.9000000000000000e+01 0.0000000000000000e+00 4.7476254409897917e-01 3.6852592591640337e-01 7.9924287212844292e-01 0 0 0 +314 1 2.5000000000000000e+00 4.5000000000000000e+01 3.9000000000000000e+01 0.0000000000000000e+00 3.4758786972735523e-01 2.2234110900479689e-01 9.1090455266450188e-01 0 0 0 +334 1 2.5000000000000000e+00 4.8000000000000000e+01 3.9000000000000000e+01 0.0000000000000000e+00 2.3284022614534150e-01 1.2975986317850730e-01 9.6381938504912923e-01 0 0 0 +354 1 2.5000000000000000e+00 5.1000000000000000e+01 3.9000000000000000e+01 0.0000000000000000e+00 1.4398087111736474e-01 7.6126593015943780e-02 9.8664798717073843e-01 0 0 0 +374 1 2.5000000000000000e+00 5.4000000000000000e+01 3.9000000000000000e+01 0.0000000000000000e+00 7.7312985281705868e-02 4.7535409319668070e-02 9.9587302763336383e-01 0 0 0 +394 1 2.5000000000000000e+00 5.7000000000000000e+01 3.9000000000000000e+01 0.0000000000000000e+00 2.4270277420221108e-02 3.5235119566844240e-02 9.9908430073895971e-01 0 0 0 +15 1 2.5000000000000000e+00 0.0000000000000000e+00 4.2000000000000000e+01 0.0000000000000000e+00 -1.8429703183501411e-02 3.5634992015801829e-02 9.9919492261750498e-01 0 0 0 +35 1 2.5000000000000000e+00 3.0000000000000000e+00 4.2000000000000000e+01 0.0000000000000000e+00 -5.8031121465001799e-02 4.6947676140268450e-02 9.9721026100143129e-01 0 0 0 +55 1 2.5000000000000000e+00 6.0000000000000000e+00 4.2000000000000000e+01 0.0000000000000000e+00 -1.0567933713226436e-01 7.2649992877525812e-02 9.9174283775491956e-01 0 0 0 +75 1 2.5000000000000000e+00 9.0000000000000000e+00 4.2000000000000000e+01 0.0000000000000000e+00 -1.6561310406555052e-01 1.1922421797550635e-01 9.7895755046370747e-01 0 0 0 +95 1 2.5000000000000000e+00 1.2000000000000000e+01 4.2000000000000000e+01 0.0000000000000000e+00 -2.3830565311068272e-01 1.9646003525323200e-01 9.5111191257590177e-01 0 0 0 +115 1 2.5000000000000000e+00 1.5000000000000000e+01 4.2000000000000000e+01 0.0000000000000000e+00 -3.1460569929723275e-01 3.1460569929723275e-01 8.9557049300398384e-01 0 0 0 +135 1 2.5000000000000000e+00 1.8000000000000000e+01 4.2000000000000000e+01 0.0000000000000000e+00 -3.6852592591640337e-01 4.7476254409897900e-01 7.9924287212844303e-01 0 0 0 +155 1 2.5000000000000000e+00 2.1000000000000000e+01 4.2000000000000000e+01 0.0000000000000000e+00 -3.6081689881382245e-01 6.5421949001862312e-01 6.6468641058031908e-01 0 0 0 +175 1 2.5000000000000000e+00 2.4000000000000000e+01 4.2000000000000000e+01 0.0000000000000000e+00 -2.6598547494087144e-01 8.0744368404029221e-01 5.2657993146712301e-01 0 0 0 +195 1 2.5000000000000000e+00 2.7000000000000000e+01 4.2000000000000000e+01 0.0000000000000000e+00 -9.7873033584060104e-02 8.9330169771966939e-01 4.3867179775797061e-01 0 0 0 +215 1 2.5000000000000000e+00 3.0000000000000000e+01 4.2000000000000000e+01 0.0000000000000000e+00 9.7873033584060048e-02 8.9330169771966939e-01 4.3867179775797061e-01 0 0 0 +235 1 2.5000000000000000e+00 3.3000000000000000e+01 4.2000000000000000e+01 0.0000000000000000e+00 2.6598547494087144e-01 8.0744368404029221e-01 5.2657993146712312e-01 0 0 0 +255 1 2.5000000000000000e+00 3.6000000000000000e+01 4.2000000000000000e+01 0.0000000000000000e+00 3.6081689881382245e-01 6.5421949001862323e-01 6.6468641058031908e-01 0 0 0 +275 1 2.5000000000000000e+00 3.9000000000000000e+01 4.2000000000000000e+01 0.0000000000000000e+00 3.6852592591640332e-01 4.7476254409897917e-01 7.9924287212844303e-01 0 0 0 +295 1 2.5000000000000000e+00 4.2000000000000000e+01 4.2000000000000000e+01 0.0000000000000000e+00 3.1460569929723275e-01 3.1460569929723275e-01 8.9557049300398373e-01 0 0 0 +315 1 2.5000000000000000e+00 4.5000000000000000e+01 4.2000000000000000e+01 0.0000000000000000e+00 2.3830565311068272e-01 1.9646003525323200e-01 9.5111191257590177e-01 0 0 0 +335 1 2.5000000000000000e+00 4.8000000000000000e+01 4.2000000000000000e+01 0.0000000000000000e+00 1.6561310406555046e-01 1.1922421797550636e-01 9.7895755046370747e-01 0 0 0 +355 1 2.5000000000000000e+00 5.1000000000000000e+01 4.2000000000000000e+01 0.0000000000000000e+00 1.0567933713226434e-01 7.2649992877525826e-02 9.9174283775491967e-01 0 0 0 +375 1 2.5000000000000000e+00 5.4000000000000000e+01 4.2000000000000000e+01 0.0000000000000000e+00 5.8031121465001792e-02 4.6947676140268464e-02 9.9721026100143140e-01 0 0 0 +395 1 2.5000000000000000e+00 5.7000000000000000e+01 4.2000000000000000e+01 0.0000000000000000e+00 1.8429703183501421e-02 3.5634992015801836e-02 9.9919492261750509e-01 0 0 0 +16 1 2.5000000000000000e+00 0.0000000000000000e+00 4.5000000000000000e+01 0.0000000000000000e+00 -1.3362272507461697e-02 3.2364838887478299e-02 9.9938679542868891e-01 0 0 0 +36 1 2.5000000000000000e+00 3.0000000000000000e+00 4.5000000000000000e+01 0.0000000000000000e+00 -4.1569375222726877e-02 4.1631298256624177e-02 9.9826791095830592e-01 0 0 0 +56 1 2.5000000000000000e+00 6.0000000000000000e+00 4.5000000000000000e+01 0.0000000000000000e+00 -7.3954811425103587e-02 6.2196104012276252e-02 9.9532021506285684e-01 0 0 0 +76 1 2.5000000000000000e+00 9.0000000000000000e+00 4.5000000000000000e+01 0.0000000000000000e+00 -1.1214098437153222e-01 9.8127311868331527e-02 9.8883539089662387e-01 0 0 0 +96 1 2.5000000000000000e+00 1.2000000000000000e+01 4.5000000000000000e+01 0.0000000000000000e+00 -1.5508313718777622e-01 1.5508313718777625e-01 9.7565282817198595e-01 0 0 0 +116 1 2.5000000000000000e+00 1.5000000000000000e+01 4.5000000000000000e+01 0.0000000000000000e+00 -1.9646003525323200e-01 2.3830565311068266e-01 9.5111191257590189e-01 0 0 0 +136 1 2.5000000000000000e+00 1.8000000000000000e+01 4.5000000000000000e+01 0.0000000000000000e+00 -2.2234110900479692e-01 3.4758786972735517e-01 9.1090455266450188e-01 0 0 0 +156 1 2.5000000000000000e+00 2.1000000000000000e+01 4.5000000000000000e+01 0.0000000000000000e+00 -2.1357380845070770e-01 4.7013886220911938e-01 8.5636188529416413e-01 0 0 0 +176 1 2.5000000000000000e+00 2.4000000000000000e+01 4.5000000000000000e+01 0.0000000000000000e+00 -1.5692234237038313e-01 5.7886257432716870e-01 8.0018341554190919e-01 0 0 0 +196 1 2.5000000000000000e+00 2.7000000000000000e+01 4.5000000000000000e+01 0.0000000000000000e+00 -5.7920936211537842e-02 6.4295931380698867e-01 7.6370706814669809e-01 0 0 0 +216 1 2.5000000000000000e+00 3.0000000000000000e+01 4.5000000000000000e+01 0.0000000000000000e+00 5.7920936211537780e-02 6.4295931380698856e-01 7.6370706814669798e-01 0 0 0 +236 1 2.5000000000000000e+00 3.3000000000000000e+01 4.5000000000000000e+01 0.0000000000000000e+00 1.5692234237038313e-01 5.7886257432716870e-01 8.0018341554190919e-01 0 0 0 +256 1 2.5000000000000000e+00 3.6000000000000000e+01 4.5000000000000000e+01 0.0000000000000000e+00 2.1357380845070764e-01 4.7013886220911938e-01 8.5636188529416402e-01 0 0 0 +276 1 2.5000000000000000e+00 3.9000000000000000e+01 4.5000000000000000e+01 0.0000000000000000e+00 2.2234110900479681e-01 3.4758786972735523e-01 9.1090455266450177e-01 0 0 0 +296 1 2.5000000000000000e+00 4.2000000000000000e+01 4.5000000000000000e+01 0.0000000000000000e+00 1.9646003525323197e-01 2.3830565311068272e-01 9.5111191257590177e-01 0 0 0 +316 1 2.5000000000000000e+00 4.5000000000000000e+01 4.5000000000000000e+01 0.0000000000000000e+00 1.5508313718777625e-01 1.5508313718777628e-01 9.7565282817198595e-01 0 0 0 +336 1 2.5000000000000000e+00 4.8000000000000000e+01 4.5000000000000000e+01 0.0000000000000000e+00 1.1214098437153222e-01 9.8127311868331568e-02 9.8883539089662398e-01 0 0 0 +356 1 2.5000000000000000e+00 5.1000000000000000e+01 4.5000000000000000e+01 0.0000000000000000e+00 7.3954811425103573e-02 6.2196104012276258e-02 9.9532021506285684e-01 0 0 0 +376 1 2.5000000000000000e+00 5.4000000000000000e+01 4.5000000000000000e+01 0.0000000000000000e+00 4.1569375222726877e-02 4.1631298256624191e-02 9.9826791095830603e-01 0 0 0 +396 1 2.5000000000000000e+00 5.7000000000000000e+01 4.5000000000000000e+01 0.0000000000000000e+00 1.3362272507461703e-02 3.2364838887478306e-02 9.9938679542868891e-01 0 0 0 +17 1 2.5000000000000000e+00 0.0000000000000000e+00 4.8000000000000000e+01 0.0000000000000000e+00 -9.3989438861432541e-03 2.6644762521588483e-02 9.9960077855311480e-01 0 0 0 +37 1 2.5000000000000000e+00 3.0000000000000000e+00 4.8000000000000000e+01 0.0000000000000000e+00 -2.8894018478272422e-02 3.3534698701154803e-02 9.9901979944303410e-01 0 0 0 +57 1 2.5000000000000000e+00 6.0000000000000000e+00 4.8000000000000000e+01 0.0000000000000000e+00 -5.0241530269051239e-02 4.8498220596720300e-02 9.9755887607457838e-01 0 0 0 +77 1 2.5000000000000000e+00 9.0000000000000000e+00 4.8000000000000000e+01 0.0000000000000000e+00 -7.3771080474423129e-02 7.3771080474423115e-02 9.9454293792237680e-01 0 0 0 +97 1 2.5000000000000000e+00 1.2000000000000000e+01 4.8000000000000000e+01 0.0000000000000000e+00 -9.8127311868331568e-02 1.1214098437153222e-01 9.8883539089662398e-01 0 0 0 +117 1 2.5000000000000000e+00 1.5000000000000000e+01 4.8000000000000000e+01 0.0000000000000000e+00 -1.1922421797550634e-01 1.6561310406555049e-01 9.7895755046370736e-01 0 0 0 +137 1 2.5000000000000000e+00 1.8000000000000000e+01 4.8000000000000000e+01 0.0000000000000000e+00 -1.2975986317850727e-01 2.3284022614534133e-01 9.6381938504912912e-01 0 0 0 +157 1 2.5000000000000000e+00 2.1000000000000000e+01 4.8000000000000000e+01 0.0000000000000000e+00 -1.2090775615411221e-01 3.0602867088565655e-01 9.4431338394504194e-01 0 0 0 +177 1 2.5000000000000000e+00 2.4000000000000000e+01 4.8000000000000000e+01 0.0000000000000000e+00 -8.7191355151399738e-02 3.7026717261459713e-01 9.2482424734154467e-01 0 0 0 +197 1 2.5000000000000000e+00 2.7000000000000000e+01 4.8000000000000000e+01 0.0000000000000000e+00 -3.1922103301157183e-02 4.0821375936870380e-01 9.1232806927272625e-01 0 0 0 +217 1 2.5000000000000000e+00 3.0000000000000000e+01 4.8000000000000000e+01 0.0000000000000000e+00 3.1922103301157141e-02 4.0821375936870391e-01 9.1232806927272625e-01 0 0 0 +237 1 2.5000000000000000e+00 3.3000000000000000e+01 4.8000000000000000e+01 0.0000000000000000e+00 8.7191355151399710e-02 3.7026717261459707e-01 9.2482424734154489e-01 0 0 0 +257 1 2.5000000000000000e+00 3.6000000000000000e+01 4.8000000000000000e+01 0.0000000000000000e+00 1.2090775615411221e-01 3.0602867088565661e-01 9.4431338394504205e-01 0 0 0 +277 1 2.5000000000000000e+00 3.9000000000000000e+01 4.8000000000000000e+01 0.0000000000000000e+00 1.2975986317850727e-01 2.3284022614534139e-01 9.6381938504912912e-01 0 0 0 +297 1 2.5000000000000000e+00 4.2000000000000000e+01 4.8000000000000000e+01 0.0000000000000000e+00 1.1922421797550634e-01 1.6561310406555052e-01 9.7895755046370747e-01 0 0 0 +317 1 2.5000000000000000e+00 4.5000000000000000e+01 4.8000000000000000e+01 0.0000000000000000e+00 9.8127311868331568e-02 1.1214098437153222e-01 9.8883539089662398e-01 0 0 0 +337 1 2.5000000000000000e+00 4.8000000000000000e+01 4.8000000000000000e+01 0.0000000000000000e+00 7.3771080474423115e-02 7.3771080474423129e-02 9.9454293792237680e-01 0 0 0 +357 1 2.5000000000000000e+00 5.1000000000000000e+01 4.8000000000000000e+01 0.0000000000000000e+00 5.0241530269051225e-02 4.8498220596720300e-02 9.9755887607457838e-01 0 0 0 +377 1 2.5000000000000000e+00 5.4000000000000000e+01 4.8000000000000000e+01 0.0000000000000000e+00 2.8894018478272426e-02 3.3534698701154796e-02 9.9901979944303410e-01 0 0 0 +397 1 2.5000000000000000e+00 5.7000000000000000e+01 4.8000000000000000e+01 0.0000000000000000e+00 9.3989438861432593e-03 2.6644762521588490e-02 9.9960077855311480e-01 0 0 0 +18 1 2.5000000000000000e+00 0.0000000000000000e+00 5.1000000000000000e+01 0.0000000000000000e+00 -6.5828744882500166e-03 1.9561861499557524e-02 9.9978697697966856e-01 0 0 0 +38 1 2.5000000000000000e+00 3.0000000000000000e+00 5.1000000000000000e+01 0.0000000000000000e+00 -2.0009637034407939e-02 2.4184841732588204e-02 9.9950723251816498e-01 0 0 0 +58 1 2.5000000000000000e+00 6.0000000000000000e+00 5.1000000000000000e+01 0.0000000000000000e+00 -3.4047077037887570e-02 3.4047077037887563e-02 9.9884012388887966e-01 0 0 0 +78 1 2.5000000000000000e+00 9.0000000000000000e+00 5.1000000000000000e+01 0.0000000000000000e+00 -4.8498220596720300e-02 5.0241530269051239e-02 9.9755887607457827e-01 0 0 0 +98 1 2.5000000000000000e+00 1.2000000000000000e+01 5.1000000000000000e+01 0.0000000000000000e+00 -6.2196104012276252e-02 7.3954811425103573e-02 9.9532021506285684e-01 0 0 0 +118 1 2.5000000000000000e+00 1.5000000000000000e+01 5.1000000000000000e+01 0.0000000000000000e+00 -7.2649992877525812e-02 1.0567933713226434e-01 9.9174283775491956e-01 0 0 0 +138 1 2.5000000000000000e+00 1.8000000000000000e+01 5.1000000000000000e+01 0.0000000000000000e+00 -7.6126593015943753e-02 1.4398087111736468e-01 9.8664798717073843e-01 0 0 0 +158 1 2.5000000000000000e+00 2.1000000000000000e+01 5.1000000000000000e+01 0.0000000000000000e+00 -6.8709104650143085e-02 1.8428174194944066e-01 9.8046891767268962e-01 0 0 0 +178 1 2.5000000000000000e+00 2.4000000000000000e+01 5.1000000000000000e+01 0.0000000000000000e+00 -4.8457456104349608e-02 2.1884669159068451e-01 9.7455528346405618e-01 0 0 0 +198 1 2.5000000000000000e+00 2.7000000000000000e+01 5.1000000000000000e+01 0.0000000000000000e+00 -1.7543173966404604e-02 2.3902270727461422e-01 9.7085548999544669e-01 0 0 0 +218 1 2.5000000000000000e+00 3.0000000000000000e+01 5.1000000000000000e+01 0.0000000000000000e+00 1.7543173966404566e-02 2.3902270727461419e-01 9.7085548999544657e-01 0 0 0 +238 1 2.5000000000000000e+00 3.3000000000000000e+01 5.1000000000000000e+01 0.0000000000000000e+00 4.8457456104349608e-02 2.1884669159068451e-01 9.7455528346405618e-01 0 0 0 +258 1 2.5000000000000000e+00 3.6000000000000000e+01 5.1000000000000000e+01 0.0000000000000000e+00 6.8709104650143071e-02 1.8428174194944066e-01 9.8046891767268962e-01 0 0 0 +278 1 2.5000000000000000e+00 3.9000000000000000e+01 5.1000000000000000e+01 0.0000000000000000e+00 7.6126593015943766e-02 1.4398087111736474e-01 9.8664798717073843e-01 0 0 0 +298 1 2.5000000000000000e+00 4.2000000000000000e+01 5.1000000000000000e+01 0.0000000000000000e+00 7.2649992877525799e-02 1.0567933713226434e-01 9.9174283775491956e-01 0 0 0 +318 1 2.5000000000000000e+00 4.5000000000000000e+01 5.1000000000000000e+01 0.0000000000000000e+00 6.2196104012276245e-02 7.3954811425103587e-02 9.9532021506285684e-01 0 0 0 +338 1 2.5000000000000000e+00 4.8000000000000000e+01 5.1000000000000000e+01 0.0000000000000000e+00 4.8498220596720293e-02 5.0241530269051232e-02 9.9755887607457827e-01 0 0 0 +358 1 2.5000000000000000e+00 5.1000000000000000e+01 5.1000000000000000e+01 0.0000000000000000e+00 3.4047077037887570e-02 3.4047077037887570e-02 9.9884012388887977e-01 0 0 0 +378 1 2.5000000000000000e+00 5.4000000000000000e+01 5.1000000000000000e+01 0.0000000000000000e+00 2.0009637034407935e-02 2.4184841732588200e-02 9.9950723251816487e-01 0 0 0 +398 1 2.5000000000000000e+00 5.7000000000000000e+01 5.1000000000000000e+01 0.0000000000000000e+00 6.5828744882500193e-03 1.9561861499557524e-02 9.9978697697966856e-01 0 0 0 +19 1 2.5000000000000000e+00 0.0000000000000000e+00 5.4000000000000000e+01 0.0000000000000000e+00 -4.8145058779812486e-03 1.1868011343002475e-02 9.9991798205648519e-01 0 0 0 +39 1 2.5000000000000000e+00 3.0000000000000000e+00 5.4000000000000000e+01 0.0000000000000000e+00 -1.4489047587394143e-02 1.4489047587394136e-02 9.9979004545955585e-01 0 0 0 +59 1 2.5000000000000000e+00 6.0000000000000000e+00 5.4000000000000000e+01 0.0000000000000000e+00 -2.4184841732588200e-02 2.0009637034407932e-02 9.9950723251816498e-01 0 0 0 +79 1 2.5000000000000000e+00 9.0000000000000000e+00 5.4000000000000000e+01 0.0000000000000000e+00 -3.3534698701154803e-02 2.8894018478272433e-02 9.9901979944303421e-01 0 0 0 +99 1 2.5000000000000000e+00 1.2000000000000000e+01 5.4000000000000000e+01 0.0000000000000000e+00 -4.1631298256624205e-02 4.1569375222726870e-02 9.9826791095830603e-01 0 0 0 +119 1 2.5000000000000000e+00 1.5000000000000000e+01 5.4000000000000000e+01 0.0000000000000000e+00 -4.6947676140268450e-02 5.8031121465001771e-02 9.9721026100143129e-01 0 0 0 +139 1 2.5000000000000000e+00 1.8000000000000000e+01 5.4000000000000000e+01 0.0000000000000000e+00 -4.7535409319668043e-02 7.7312985281705840e-02 9.9587302763336372e-01 0 0 0 +159 1 2.5000000000000000e+00 2.1000000000000000e+01 5.4000000000000000e+01 0.0000000000000000e+00 -4.1653952417990810e-02 9.7059251840902694e-02 9.9440658177630958e-01 0 0 0 +179 1 2.5000000000000000e+00 2.4000000000000000e+01 5.4000000000000000e+01 0.0000000000000000e+00 -2.8752729368399278e-02 1.1365104497068095e-01 9.9310458690459180e-01 0 0 0 +199 1 2.5000000000000000e+00 2.7000000000000000e+01 5.4000000000000000e+01 0.0000000000000000e+00 -1.0293413501576094e-02 1.2321728304286254e-01 9.9232633079951105e-01 0 0 0 +219 1 2.5000000000000000e+00 3.0000000000000000e+01 5.4000000000000000e+01 0.0000000000000000e+00 1.0293413501576077e-02 1.2321728304286257e-01 9.9232633079951116e-01 0 0 0 +239 1 2.5000000000000000e+00 3.3000000000000000e+01 5.4000000000000000e+01 0.0000000000000000e+00 2.8752729368399284e-02 1.1365104497068095e-01 9.9310458690459180e-01 0 0 0 +259 1 2.5000000000000000e+00 3.6000000000000000e+01 5.4000000000000000e+01 0.0000000000000000e+00 4.1653952417990817e-02 9.7059251840902749e-02 9.9440658177630958e-01 0 0 0 +279 1 2.5000000000000000e+00 3.9000000000000000e+01 5.4000000000000000e+01 0.0000000000000000e+00 4.7535409319668036e-02 7.7312985281705868e-02 9.9587302763336383e-01 0 0 0 +299 1 2.5000000000000000e+00 4.2000000000000000e+01 5.4000000000000000e+01 0.0000000000000000e+00 4.6947676140268443e-02 5.8031121465001785e-02 9.9721026100143129e-01 0 0 0 +319 1 2.5000000000000000e+00 4.5000000000000000e+01 5.4000000000000000e+01 0.0000000000000000e+00 4.1631298256624191e-02 4.1569375222726877e-02 9.9826791095830603e-01 0 0 0 +339 1 2.5000000000000000e+00 4.8000000000000000e+01 5.4000000000000000e+01 0.0000000000000000e+00 3.3534698701154803e-02 2.8894018478272433e-02 9.9901979944303410e-01 0 0 0 +359 1 2.5000000000000000e+00 5.1000000000000000e+01 5.4000000000000000e+01 0.0000000000000000e+00 2.4184841732588204e-02 2.0009637034407932e-02 9.9950723251816498e-01 0 0 0 +379 1 2.5000000000000000e+00 5.4000000000000000e+01 5.4000000000000000e+01 0.0000000000000000e+00 1.4489047587394145e-02 1.4489047587394140e-02 9.9979004545955585e-01 0 0 0 +399 1 2.5000000000000000e+00 5.7000000000000000e+01 5.4000000000000000e+01 0.0000000000000000e+00 4.8145058779812486e-03 1.1868011343002480e-02 9.9991798205648519e-01 0 0 0 +20 1 2.5000000000000000e+00 0.0000000000000000e+00 5.7000000000000000e+01 0.0000000000000000e+00 -3.9693242391277937e-03 3.9693242391277764e-03 9.9998424434096445e-01 0 0 0 +40 1 2.5000000000000000e+00 3.0000000000000000e+00 5.7000000000000000e+01 0.0000000000000000e+00 -1.1868011343002482e-02 4.8145058779812460e-03 9.9991798205648519e-01 0 0 0 +60 1 2.5000000000000000e+00 6.0000000000000000e+00 5.7000000000000000e+01 0.0000000000000000e+00 -1.9561861499557517e-02 6.5828744882500097e-03 9.9978697697966856e-01 0 0 0 +80 1 2.5000000000000000e+00 9.0000000000000000e+00 5.7000000000000000e+01 0.0000000000000000e+00 -2.6644762521588487e-02 9.3989438861432437e-03 9.9960077855311491e-01 0 0 0 +100 1 2.5000000000000000e+00 1.2000000000000000e+01 5.7000000000000000e+01 0.0000000000000000e+00 -3.2364838887478306e-02 1.3362272507461690e-02 9.9938679542868891e-01 0 0 0 +120 1 2.5000000000000000e+00 1.5000000000000000e+01 5.7000000000000000e+01 0.0000000000000000e+00 -3.5634992015801822e-02 1.8429703183501404e-02 9.9919492261750509e-01 0 0 0 +140 1 2.5000000000000000e+00 1.8000000000000000e+01 5.7000000000000000e+01 0.0000000000000000e+00 -3.5235119566844240e-02 2.4270277420221090e-02 9.9908430073895971e-01 0 0 0 +160 1 2.5000000000000000e+00 2.1000000000000000e+01 5.7000000000000000e+01 0.0000000000000000e+00 -3.0237916900163146e-02 3.0163850736159105e-02 9.9908748890690546e-01 0 0 0 +180 1 2.5000000000000000e+00 2.4000000000000000e+01 5.7000000000000000e+01 0.0000000000000000e+00 -2.0551704657275894e-02 3.5058787503171394e-02 9.9917391321755789e-01 0 0 0 +200 1 2.5000000000000000e+00 2.7000000000000000e+01 5.7000000000000000e+01 0.0000000000000000e+00 -7.2971667669136028e-03 3.7860607272964010e-02 9.9925638640646086e-01 0 0 0 +220 1 2.5000000000000000e+00 3.0000000000000000e+01 5.7000000000000000e+01 0.0000000000000000e+00 7.2971667669136037e-03 3.7860607272964024e-02 9.9925638640646097e-01 0 0 0 +240 1 2.5000000000000000e+00 3.3000000000000000e+01 5.7000000000000000e+01 0.0000000000000000e+00 2.0551704657275890e-02 3.5058787503171394e-02 9.9917391321755777e-01 0 0 0 +260 1 2.5000000000000000e+00 3.6000000000000000e+01 5.7000000000000000e+01 0.0000000000000000e+00 3.0237916900163159e-02 3.0163850736159115e-02 9.9908748890690535e-01 0 0 0 +280 1 2.5000000000000000e+00 3.9000000000000000e+01 5.7000000000000000e+01 0.0000000000000000e+00 3.5235119566844234e-02 2.4270277420221094e-02 9.9908430073895960e-01 0 0 0 +300 1 2.5000000000000000e+00 4.2000000000000000e+01 5.7000000000000000e+01 0.0000000000000000e+00 3.5634992015801836e-02 1.8429703183501414e-02 9.9919492261750498e-01 0 0 0 +320 1 2.5000000000000000e+00 4.5000000000000000e+01 5.7000000000000000e+01 0.0000000000000000e+00 3.2364838887478299e-02 1.3362272507461701e-02 9.9938679542868891e-01 0 0 0 +340 1 2.5000000000000000e+00 4.8000000000000000e+01 5.7000000000000000e+01 0.0000000000000000e+00 2.6644762521588480e-02 9.3989438861432611e-03 9.9960077855311480e-01 0 0 0 +360 1 2.5000000000000000e+00 5.1000000000000000e+01 5.7000000000000000e+01 0.0000000000000000e+00 1.9561861499557527e-02 6.5828744882500097e-03 9.9978697697966845e-01 0 0 0 +380 1 2.5000000000000000e+00 5.4000000000000000e+01 5.7000000000000000e+01 0.0000000000000000e+00 1.1868011343002492e-02 4.8145058779812391e-03 9.9991798205648519e-01 0 0 0 +400 1 2.5000000000000000e+00 5.7000000000000000e+01 5.7000000000000000e+01 0.0000000000000000e+00 3.9693242391277937e-03 3.9693242391277851e-03 9.9998424434096445e-01 0 0 0 + +Velocities + +1 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +21 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +41 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +61 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +81 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +101 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +121 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +141 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +161 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +181 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +201 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +221 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +241 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +261 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +281 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +301 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +321 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +341 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +361 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +381 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +2 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +22 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +42 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +62 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +82 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +102 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +122 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +142 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +162 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +182 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +202 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +222 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +242 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +262 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +282 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +302 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +322 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +342 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +362 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +382 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +3 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +23 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +43 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +63 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +83 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +103 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +123 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +143 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +163 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +183 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +203 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +223 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +243 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +263 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +283 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +303 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +323 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +343 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +363 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +383 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +4 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +24 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +44 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +64 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +84 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +104 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +124 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +144 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +164 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +184 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +204 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +224 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +244 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +264 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +284 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +304 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +324 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +344 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +364 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +384 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +5 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +25 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +45 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +65 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +85 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +105 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +125 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +145 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +165 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +185 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +205 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +225 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +245 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +265 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +285 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +305 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +325 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +345 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +365 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +385 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +6 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +26 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +46 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +66 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +86 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +106 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +126 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +146 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +166 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +186 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +206 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +226 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +246 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +266 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +286 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +306 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +326 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +346 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +366 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +386 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +7 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +27 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +47 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +67 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +87 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +107 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +127 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +147 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +167 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +187 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +207 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +227 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +247 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +267 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +287 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +307 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +327 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +347 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +367 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +387 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +8 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +28 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +48 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +68 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +88 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +108 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +128 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +148 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +168 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +188 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +208 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +228 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +248 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +268 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +288 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +308 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +328 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +348 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +368 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +388 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +9 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +29 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +49 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +69 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +89 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +109 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +129 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +149 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +169 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +189 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +209 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +229 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +249 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +269 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +289 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +309 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +329 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +349 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +369 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +389 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +10 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +30 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +50 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +70 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +90 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +110 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +130 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +150 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +170 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +190 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +210 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +230 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +250 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +270 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +290 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +310 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +330 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +350 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +370 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +390 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +11 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +31 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +51 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +71 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +91 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +111 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +131 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +151 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +171 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +191 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +211 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +231 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +251 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +271 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +291 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +311 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +331 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +351 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +371 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +391 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +12 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +32 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +52 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +72 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +92 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +112 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +132 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +152 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +172 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +192 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +212 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +232 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +252 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +272 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +292 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +312 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +332 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +352 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +372 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +392 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +13 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +33 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +53 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +73 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +93 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +113 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +133 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +153 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +173 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +193 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +213 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +233 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +253 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +273 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +293 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +313 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +333 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +353 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +373 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +393 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +14 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +34 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +54 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +74 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +94 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +114 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +134 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +154 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +174 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +194 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +214 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +234 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +254 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +274 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +294 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +314 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +334 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +354 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +374 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +394 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +15 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +35 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +55 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +75 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +95 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +115 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +135 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +155 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +175 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +195 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +215 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +235 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +255 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +275 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +295 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +315 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +335 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +355 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +375 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +395 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +16 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +36 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +56 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +76 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +96 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +116 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +136 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +156 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +176 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +196 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +216 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +236 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +256 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +276 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +296 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +316 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +336 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +356 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +376 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +396 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +17 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +37 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +57 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +77 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +97 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +117 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +137 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +157 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +177 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +197 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +217 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +237 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +257 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +277 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +297 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +317 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +337 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +357 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +377 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +397 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +18 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +38 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +58 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +78 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +98 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +118 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +138 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +158 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +178 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +198 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +218 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +238 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +258 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +278 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +298 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +318 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +338 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +358 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +378 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +398 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +19 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +39 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +59 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +79 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +99 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +119 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +139 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +159 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +179 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +199 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +219 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +239 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +259 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +279 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +299 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +319 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +339 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +359 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +379 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +399 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +20 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +40 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +60 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +80 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +100 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +120 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +140 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +160 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +180 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +200 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +220 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +240 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +260 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +280 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +300 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +320 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +340 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +360 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +380 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +400 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 diff --git a/examples/SPIN/read_restart/in.spin.read_data b/examples/SPIN/read_restart/in.spin.read_data index 17343994b5..a450421699 100644 --- a/examples/SPIN/read_restart/in.spin.read_data +++ b/examples/SPIN/read_restart/in.spin.read_data @@ -40,6 +40,6 @@ thermo_style custom step time v_magnorm v_emag v_tmag temp etotal thermo_modify format float %20.15g compute outsp all property/atom spx spy spz sp fmx fmy fmz -dump 10 all custom 1 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] c_outsp[4] c_outsp[5] c_outsp[6] c_outsp[7] +dump 1 all custom 1 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] c_outsp[4] c_outsp[5] c_outsp[6] c_outsp[7] run 100 diff --git a/src/SPIN/README b/src/SPIN/README index 53e456bacb..a4eb4ff22b 100644 --- a/src/SPIN/README +++ b/src/SPIN/README @@ -8,6 +8,8 @@ atom in the system * integrating the equations of motion for the coupled spin-lattice system * implementing magnetic pair interactions and magnetic forces * thermostating and applying a transverse damping to the magnetic spins +* minimizing spin configurations with an adaptive timestep scheme +* performing geodesic NEB calculations * computing and outputing magnetic quantities * minimizing the energy or total torque of a magnetic system @@ -15,7 +17,8 @@ The different options provided by this package are explained in the LAMMPS documentation. Once you have successfully built LAMMPS with this package, you can test -it using one of the input files provided from the examples/SPIN dir: +it using one of the input files provided from the examples/SPIN dir. +For example: ./lmp_serial < lammps/examples/SPIN/cobalt_hcp/in.spin.cobalt_hcp diff --git a/src/SPIN/atom_vec_spin.cpp b/src/SPIN/atom_vec_spin.cpp index 24c4480e04..a6c0430940 100644 --- a/src/SPIN/atom_vec_spin.cpp +++ b/src/SPIN/atom_vec_spin.cpp @@ -943,6 +943,10 @@ bigint AtomVecSpin::memory_usage() return bytes; } +/* ---------------------------------------------------------------------- + clear all forces (mech and mag) +------------------------------------------------------------------------- */ + void AtomVecSpin::force_clear(int /*n*/, size_t nbytes) { memset(&atom->f[0][0],0,3*nbytes); diff --git a/src/SPIN/fix_neb_spin.cpp b/src/SPIN/fix_neb_spin.cpp new file mode 100644 index 0000000000..a8cb0cd2ca --- /dev/null +++ b/src/SPIN/fix_neb_spin.cpp @@ -0,0 +1,1014 @@ +/* ---------------------------------------------------------------------- + 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 authors: Julien Tranchida (SNL) + + Please cite the related publication: + Bessarab, P. F., Uzdin, V. M., & Jónsson, H. (2015). + Method for finding mechanism and activation energy of magnetic transitions, + applied to skyrmion and antivortex annihilation. + Computer Physics Communications, 196, 335-347. +------------------------------------------------------------------------- */ + +#include +#include +#include +#include +#include "fix_neb_spin.h" +#include "universe.h" +#include "update.h" +#include "atom.h" +#include "domain.h" +#include "comm.h" +#include "modify.h" +#include "compute.h" +#include "group.h" +#include "memory.h" +#include "error.h" +#include "force.h" +#include "math_const.h" + +using namespace LAMMPS_NS; +using namespace FixConst; +using namespace MathConst; + +enum{SINGLE_PROC_DIRECT,SINGLE_PROC_MAP,MULTI_PROC}; + +#define BUFSIZE 8 + +/* ---------------------------------------------------------------------- */ + +FixNEBSpin::FixNEBSpin(LAMMPS *lmp, int narg, char **arg) : + Fix(lmp, narg, arg), id_pe(NULL), pe(NULL), nlenall(NULL), xprev(NULL), + xnext(NULL), fnext(NULL), spprev(NULL), spnext(NULL), fmnext(NULL), springF(NULL), + tangent(NULL), xsend(NULL), xrecv(NULL), fsend(NULL), frecv(NULL), spsend(NULL), + sprecv(NULL), fmsend(NULL), fmrecv(NULL), tagsend(NULL), tagrecv(NULL), + xsendall(NULL), xrecvall(NULL), fsendall(NULL), frecvall(NULL), spsendall(NULL), + sprecvall(NULL), fmsendall(NULL), fmrecvall(NULL), tagsendall(NULL), tagrecvall(NULL), + counts(NULL), displacements(NULL) +{ + + if (narg < 4) error->all(FLERR,"Illegal fix neb_spin command"); + + kspring = force->numeric(FLERR,arg[3]); + if (kspring <= 0.0) error->all(FLERR,"Illegal fix neb command"); + + // optional params + + NEBLongRange = false; // see if needed (comb. with pppm/spin?) + StandardNEB = true; // only option for now + PerpSpring = FreeEndIni = FreeEndFinal = false; + FreeEndFinalWithRespToEIni = FinalAndInterWithRespToEIni = false; + kspringPerp = 0.0; + kspringIni = 1.0; + kspringFinal = 1.0; + SpinLattice = false; // no spin-lattice neb for now + + // no available fix neb/spin options for now + + int iarg = 4; + while (iarg < narg) { + if (strcmp(arg[iarg],"parallel") == 0) { + error->all(FLERR,"Illegal fix neb command"); + iarg += 2; + } else if (strcmp(arg[iarg],"perp") == 0) { + error->all(FLERR,"Illegal fix neb command"); + iarg += 2; + } else if (strcmp (arg[iarg],"end") == 0) { + iarg += 3; + } else if (strcmp (arg[iarg],"lattice") == 0) { + iarg += 2; + } else error->all(FLERR,"Illegal fix neb command"); + } + + // nreplica = number of partitions + // ireplica = which world I am in universe + // nprocs_universe = # of procs in all replicase + // procprev,procnext = root proc in adjacent replicas + + me = comm->me; + nprocs = comm->nprocs; + + nprocs_universe = universe->nprocs; + nreplica = universe->nworlds; + ireplica = universe->iworld; + + if (ireplica > 0) procprev = universe->root_proc[ireplica-1]; + else procprev = -1; + if (ireplica < nreplica-1) procnext = universe->root_proc[ireplica+1]; + else procnext = -1; + + uworld = universe->uworld; + int *iroots = new int[nreplica]; + MPI_Group uworldgroup,rootgroup; + if (NEBLongRange) { + for (int i=0; iroot_proc[i]; + MPI_Comm_group(uworld, &uworldgroup); + MPI_Group_incl(uworldgroup, nreplica, iroots, &rootgroup); + MPI_Comm_create(uworld, rootgroup, &rootworld); + } + delete [] iroots; + + // create a new compute pe style + // id = fix-ID + pe, compute group = all + + int n = strlen(id) + 4; + id_pe = new char[n]; + strcpy(id_pe,id); + strcat(id_pe,"_pe"); + + char **newarg = new char*[3]; + newarg[0] = id_pe; + newarg[1] = (char *) "all"; + newarg[2] = (char *) "pe"; + modify->add_compute(3,newarg); + delete [] newarg; + + // initialize local storage + + maxlocal = -1; + ntotal = -1; +} + +/* ---------------------------------------------------------------------- */ + +FixNEBSpin::~FixNEBSpin() +{ + modify->delete_compute(id_pe); + delete [] id_pe; + + // memory destroy of all spin and lattice arrays + + memory->destroy(xprev); + memory->destroy(xnext); + memory->destroy(tangent); + memory->destroy(fnext); + memory->destroy(spprev); + memory->destroy(spnext); + memory->destroy(fmnext); + memory->destroy(springF); + memory->destroy(xsend); + memory->destroy(xrecv); + memory->destroy(fsend); + memory->destroy(frecv); + memory->destroy(spsend); + memory->destroy(sprecv); + memory->destroy(fmsend); + memory->destroy(fmrecv); + memory->destroy(tagsend); + memory->destroy(tagrecv); + + memory->destroy(xsendall); + memory->destroy(xrecvall); + memory->destroy(fsendall); + memory->destroy(frecvall); + memory->destroy(spsendall); + memory->destroy(sprecvall); + memory->destroy(fmsendall); + memory->destroy(fmrecvall); + memory->destroy(tagsendall); + memory->destroy(tagrecvall); + + memory->destroy(counts); + memory->destroy(displacements); + + if (NEBLongRange) { + if (rootworld != MPI_COMM_NULL) MPI_Comm_free(&rootworld); + memory->destroy(nlenall); + } +} + +/* ---------------------------------------------------------------------- */ + +int FixNEBSpin::setmask() +{ + int mask = 0; + mask |= MIN_POST_FORCE; + return mask; +} + +/* ---------------------------------------------------------------------- */ + +void FixNEBSpin::init() +{ + int icompute = modify->find_compute(id_pe); + if (icompute < 0) + error->all(FLERR,"Potential energy ID for fix neb does not exist"); + pe = modify->compute[icompute]; + + // turn off climbing mode, NEB command turns it on after init() + + rclimber = -1; + + // nebatoms = # of atoms in fix group = atoms with inter-replica forces + + bigint count = group->count(igroup); + if (count > MAXSMALLINT) error->all(FLERR,"Too many active NEB atoms"); + nebatoms = count; + + // comm mode for inter-replica exchange of coords + + if (nreplica == nprocs_universe && + nebatoms == atom->natoms && atom->sortfreq == 0) + cmode = SINGLE_PROC_DIRECT; + else if (nreplica == nprocs_universe) cmode = SINGLE_PROC_MAP; + else cmode = MULTI_PROC; + + // ntotal = total # of atoms in system, NEB atoms or not + + if (atom->natoms > MAXSMALLINT) error->all(FLERR,"Too many atoms for NEB"); + ntotal = atom->natoms; + + if (atom->nmax > maxlocal) reallocate(); + + if (MULTI_PROC && counts == NULL) { + memory->create(xsendall,ntotal,3,"neb:xsendall"); + memory->create(xrecvall,ntotal,3,"neb:xrecvall"); + memory->create(fsendall,ntotal,3,"neb:fsendall"); + memory->create(frecvall,ntotal,3,"neb:frecvall"); + memory->create(tagsendall,ntotal,"neb:tagsendall"); + memory->create(tagrecvall,ntotal,"neb:tagrecvall"); + memory->create(spsendall,ntotal,3,"neb:xsendall"); + memory->create(sprecvall,ntotal,3,"neb:xrecvall"); + memory->create(fmsendall,ntotal,3,"neb:fsendall"); + memory->create(fmrecvall,ntotal,3,"neb:frecvall"); + memory->create(counts,nprocs,"neb:counts"); + memory->create(displacements,nprocs,"neb:displacements"); + } +} + +/* ---------------------------------------------------------------------- */ + +void FixNEBSpin::min_setup(int vflag) +{ + min_post_force(vflag); + + // trigger potential energy computation on next timestep + + pe->addstep(update->ntimestep+1); +} + +/* ---------------------------------------------------------------------- */ + +void FixNEBSpin::min_post_force(int /*vflag*/) +{ + double vprev,vnext; + double delspxp,delspyp,delspzp; + double delspxn,delspyn,delspzn; + double templen; + double vIni=0.0; + double spi[3],spj[3]; + + vprev = vnext = veng = pe->compute_scalar(); + + if (ireplica < nreplica-1 && me == 0) + MPI_Send(&veng,1,MPI_DOUBLE,procnext,0,uworld); + if (ireplica > 0 && me == 0) + MPI_Recv(&vprev,1,MPI_DOUBLE,procprev,0,uworld,MPI_STATUS_IGNORE); + + if (ireplica > 0 && me == 0) + MPI_Send(&veng,1,MPI_DOUBLE,procprev,0,uworld); + if (ireplica < nreplica-1 && me == 0) + MPI_Recv(&vnext,1,MPI_DOUBLE,procnext,0,uworld,MPI_STATUS_IGNORE); + + if (cmode == MULTI_PROC) { + MPI_Bcast(&vprev,1,MPI_DOUBLE,0,world); + MPI_Bcast(&vnext,1,MPI_DOUBLE,0,world); + } + + if (FreeEndFinal && ireplica == nreplica-1 && (update->ntimestep == 0)) + error->all(FLERR,"NEBSpin Free End option not yet active"); + + if (ireplica == 0) vIni=veng; + + if (FreeEndFinalWithRespToEIni) + error->all(FLERR,"NEBSpin Free End option not yet active"); + + if (FreeEndIni && ireplica == 0 && (update->ntimestep == 0)) + error->all(FLERR,"NEBSpin Free End option not yet active"); + + + // communicate atoms to/from adjacent replicas to fill xprev,xnext + + inter_replica_comm(); + + // trigger potential energy computation on next timestep + + pe->addstep(update->ntimestep+1); + + int nlocal = atom->nlocal; + int *mask = atom->mask; + double **sp = atom->sp; + double dot = 0.0; + double prefactor = 0.0; + double **fm = atom->fm; + + //calculating separation between images + + plen = 0.0; + nlen = 0.0; + double tlen = 0.0; + double gradnextlen = 0.0; + double delndots = 0.0; + double delpdots = 0.0; + + dotgrad = gradlen = dotpath = dottangrad = 0.0; + + // computation of the tangent vector + + if (ireplica == nreplica-1) { // final replica + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) { + + // tangent vector + + delspxp = sp[i][0] - spprev[i][0]; + delspyp = sp[i][1] - spprev[i][1]; + delspzp = sp[i][2] - spprev[i][2]; + + // project delp vector on tangent space + + delpdots = delspxp*sp[i][0]+delspyp*sp[i][1]+delspzp*sp[i][2]; + delspxp -= delpdots*sp[i][0]; + delspyp -= delpdots*sp[i][1]; + delspzp -= delpdots*sp[i][2]; + + // calc. geodesic length + + spi[0] = sp[i][0]; + spi[1] = sp[i][1]; + spi[2] = sp[i][2]; + spj[0] = spprev[i][0]; + spj[1] = spprev[i][1]; + spj[2] = spprev[i][2]; + templen = geodesic_distance(spi,spj); + plen += templen*templen; + dottangrad += delspxp*fm[i][0]+ delspyp*fm[i][1]+delspzp*fm[i][2]; + gradlen += fm[i][0]*fm[i][0] + fm[i][1]*fm[i][1] + fm[i][2]*fm[i][2]; + + // no free end option for now + + if (FreeEndFinal||FreeEndFinalWithRespToEIni) + error->all(FLERR,"Free End option not yet active"); + + } + } else if (ireplica == 0) { // initial replica + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) { + + // tangent vector + + delspxn = spnext[i][0]- sp[i][0]; + delspyn = spnext[i][1]- sp[i][1]; + delspzn = spnext[i][2]- sp[i][2]; + + // project deln vector on tangent space + + delndots = delspxn*sp[i][0]+delspyn*sp[i][1]+delspzn*sp[i][2]; + delspxn -= delndots*sp[i][0]; + delspyn -= delndots*sp[i][1]; + delspzn -= delndots*sp[i][2]; + + // calc. geodesic length + + spi[0]=sp[i][0]; + spi[1]=sp[i][1]; + spi[2]=sp[i][2]; + spj[0]=spnext[i][0]; + spj[1]=spnext[i][1]; + spj[2]=spnext[i][2]; + templen = geodesic_distance(spi,spj); + nlen += templen*templen; + dottangrad += delspxn*fm[i][0] + delspyn*fm[i][1] + delspzn*fm[i][2]; + gradlen += fm[i][0]*fm[i][0] + fm[i][1]*fm[i][1] + fm[i][2]*fm[i][2]; + + // no free end option for now + + if (FreeEndIni) + error->all(FLERR,"Free End option not yet active"); + + } + } else { // intermediate replica + + double vmax = MAX(fabs(vnext-veng),fabs(vprev-veng)); + double vmin = MIN(fabs(vnext-veng),fabs(vprev-veng)); + + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) { + + // calc. delp vector + + delspxp = sp[i][0] - spprev[i][0]; + delspyp = sp[i][1] - spprev[i][1]; + delspzp = sp[i][2] - spprev[i][2]; + + // project delp vector on tangent space + + delndots = delspxp*sp[i][0]+delspyp*sp[i][1]+delspzp*sp[i][2]; + delspxp -= delpdots*sp[i][0]; + delspyp -= delpdots*sp[i][1]; + delspzp -= delpdots*sp[i][2]; + + // calc. prev. geodesic length + + spi[0]=sp[i][0]; + spi[1]=sp[i][1]; + spi[2]=sp[i][2]; + spj[0]=spprev[i][0]; + spj[1]=spprev[i][1]; + spj[2]=spprev[i][2]; + templen = geodesic_distance(spi, spj); + plen += templen*templen; + + // calc. deln vector + + delspxn = spnext[i][0] - sp[i][0]; + delspyn = spnext[i][1] - sp[i][1]; + delspzn = spnext[i][2] - sp[i][2]; + + // project deln vector on tangent space + + delndots = delspxn*sp[i][0]+delspyn*sp[i][1]+delspzn*sp[i][2]; + delspxn -= delndots*sp[i][0]; + delspyn -= delndots*sp[i][1]; + delspzn -= delndots*sp[i][2]; + + // evaluate best path tangent + + if (vnext > veng && veng > vprev) { + tangent[i][0] = delspxn; + tangent[i][1] = delspyn; + tangent[i][2] = delspzn; + } else if (vnext < veng && veng < vprev) { + tangent[i][0] = delspxp; + tangent[i][1] = delspyp; + tangent[i][2] = delspzp; + } else { + if (vnext > vprev) { + tangent[i][0] = vmax*delspxn + vmin*delspxp; + tangent[i][1] = vmax*delspyn + vmin*delspyp; + tangent[i][2] = vmax*delspzn + vmin*delspzp; + } else if (vnext < vprev) { + tangent[i][0] = vmin*delspxn + vmax*delspxp; + tangent[i][1] = vmin*delspyn + vmax*delspyp; + tangent[i][2] = vmin*delspzn + vmax*delspzp; + } else { // vnext == vprev, e.g. for potentials that do not compute an energy + tangent[i][0] = delspxn + delspxp; + tangent[i][1] = delspyn + delspyp; + tangent[i][2] = delspzn + delspzp; + } + } + + // project tangent vector on tangent space + + double sdottan; + sdottan = sp[i][0]*tangent[i][0] + sp[i][1]*tangent[i][1] + + sp[i][2]*tangent[i][2]; + tangent[i][0] -= sdottan*sp[i][0]; + tangent[i][1] -= sdottan*sp[i][1]; + tangent[i][2] -= sdottan*sp[i][2]; + + // calc. next geodesic length + + spi[0]=sp[i][0]; + spi[1]=sp[i][1]; + spi[2]=sp[i][2]; + spj[0]=spnext[i][0]; + spj[1]=spnext[i][1]; + spj[2]=spnext[i][2]; + templen = geodesic_distance(spi, spj); + nlen += templen*templen; + + tlen += tangent[i][0]*tangent[i][0] + tangent[i][1]*tangent[i][1] + + tangent[i][2]*tangent[i][2]; + gradlen += fm[i][0]*fm[i][0] + fm[i][1]*fm[i][1] + fm[i][2]*fm[i][2]; + dotpath += delspxp*delspxn + delspyp*delspyn + delspzp*delspzn; + dottangrad += tangent[i][0]*fm[i][0] + tangent[i][1]*fm[i][1] + + tangent[i][2]*fm[i][2]; + gradnextlen += fnext[i][0]*fnext[i][0] + fnext[i][1]*fnext[i][1] + + fnext[i][2]*fnext[i][2]; + dotgrad += fm[i][0]*fnext[i][0] + fm[i][1]*fnext[i][1] + + fm[i][2]*fnext[i][2]; + + // no Perpendicular nudging force option active yet + + if (kspringPerp != 0.0) + error->all(FLERR,"NEBSpin Perpendicular spring force not yet active"); + + } + } + + // MPI reduce if more than one proc for world + + double bufin[BUFSIZE], bufout[BUFSIZE]; + bufin[0] = nlen; + bufin[1] = plen; + bufin[2] = tlen; + bufin[3] = gradlen; + bufin[4] = gradnextlen; + bufin[5] = dotpath; + bufin[6] = dottangrad; + bufin[7] = dotgrad; + MPI_Allreduce(bufin,bufout,BUFSIZE,MPI_DOUBLE,MPI_SUM,world); + nlen = sqrt(bufout[0]); + plen = sqrt(bufout[1]); + tlen = sqrt(bufout[2]); + gradlen = sqrt(bufout[3]); + gradnextlen = sqrt(bufout[4]); + dotpath = bufout[5]; + dottangrad = bufout[6]; + dotgrad = bufout[7]; + + // check projection of tangent vector on tangent space + // and normalize it + + double buftan[3]; + double tandots; + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) { + tandots = tangent[i][0]*sp[i][0]+tangent[i][1]*sp[i][1]+ + tangent[i][2]*sp[i][2]; + buftan[0] = tangent[i][0]-tandots*sp[i][0]; + buftan[1] = tangent[i][1]-tandots*sp[i][1]; + buftan[2] = tangent[i][2]-tandots*sp[i][2]; + tangent[i][0] = buftan[0]; + tangent[i][1] = buftan[1]; + tangent[i][2] = buftan[2]; + + if (tlen > 0.0) { + double tleninv = 1.0/tlen; + tangent[i][0] *= tleninv; + tangent[i][1] *= tleninv; + tangent[i][2] *= tleninv; + } + } + + // first or last replica has no change to forces, just return + + if (ireplica > 0 && ireplica < nreplica-1) + dottangrad = dottangrad/(tlen*gradlen); + if (ireplica == 0) + dottangrad = dottangrad/(nlen*gradlen); + if (ireplica == nreplica-1) + dottangrad = dottangrad/(plen*gradlen); + if (ireplica < nreplica-1) + dotgrad = dotgrad /(gradlen*gradnextlen); + + // no Free End options active yet + + if (FreeEndIni && ireplica == 0) + error->all(FLERR,"NEBSpin Free End option not yet active"); + if (FreeEndFinal && ireplica == nreplica -1) + error->all(FLERR,"NEBSpin Free End option not yet active"); + if (FreeEndFinalWithRespToEIni&&ireplica == nreplica -1) + error->all(FLERR,"NEBSpin Free End option not yet active"); + + // no NEBSpin long range option + + if (NEBLongRange) + error->all(FLERR,"NEBSpin long range option not yet active"); + + // exit calc. if first or last replica (no gneb force) + + if (ireplica == 0 || ireplica == nreplica-1) return ; + + dotpath = dotpath/(plen*nlen); + + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) { + dot += fm[i][0]*tangent[i][0] + fm[i][1]*tangent[i][1] + + fm[i][2]*tangent[i][2]; + } + + // gather all dot for this replica + + double dotall; + MPI_Allreduce(&dot,&dotall,1,MPI_DOUBLE,MPI_SUM,world); + dot=dotall; + + // for intermediate replica + // calc. GNEB force prefactor + + if (ireplica == rclimber) prefactor = -2.0*dot; // for climbing replica + else { + if (NEBLongRange) { + error->all(FLERR,"Long Range NEBSpin climber option not yet active"); + } else if (StandardNEB) { + prefactor = -dot + kspring*(nlen-plen); + } + + if (FinalAndInterWithRespToEIni && vengall(FLERR,"Incorrect calc. of geodesic_distance in Fix NEB/spin"); + + dist = atan2(normcross,dots); + + return dist; +} + +/* ---------------------------------------------------------------------- + send/recv NEB atoms to/from adjacent replicas + received atoms matching my local atoms are stored in xprev,xnext + replicas 0 and N-1 send but do not receive any atoms +------------------------------------------------------------------------- */ + +void FixNEBSpin::inter_replica_comm() +{ + int i,m; + MPI_Request request; + MPI_Request requests[2]; + MPI_Status statuses[2]; + + // reallocate memory if necessary + + if (atom->nmax > maxlocal) reallocate(); + + double **x = atom->x; + double **f = atom->f; + double **sp = atom->sp; + double **fm = atom->fm; + tagint *tag = atom->tag; + int *mask = atom->mask; + int nlocal = atom->nlocal; + + // ----------------------------------------------------- + // 3 cases: two for single proc per replica + // one for multiple procs per replica + // ----------------------------------------------------- + + + // case 1 => to be done + + // single proc per replica + // all atoms are NEB atoms and no atom sorting + // direct comm of x -> xprev and x -> xnext + + if (cmode == SINGLE_PROC_DIRECT) { + if (ireplica > 0) { + MPI_Irecv(xprev[0],3*nlocal,MPI_DOUBLE,procprev,0,uworld,&request); + MPI_Irecv(spprev[0],3*nlocal,MPI_DOUBLE,procprev,0,uworld,&request); + } + if (ireplica < nreplica-1) { + MPI_Send(x[0],3*nlocal,MPI_DOUBLE,procnext,0,uworld); + MPI_Send(sp[0],3*nlocal,MPI_DOUBLE,procnext,0,uworld); + } + if (ireplica > 0) MPI_Wait(&request,MPI_STATUS_IGNORE); + if (ireplica < nreplica-1) { + MPI_Irecv(xnext[0],3*nlocal,MPI_DOUBLE,procnext,0,uworld,&request); + MPI_Irecv(spnext[0],3*nlocal,MPI_DOUBLE,procnext,0,uworld,&request); + } + if (ireplica > 0) { + MPI_Send(x[0],3*nlocal,MPI_DOUBLE,procprev,0,uworld); + MPI_Send(sp[0],3*nlocal,MPI_DOUBLE,procprev,0,uworld); + } + if (ireplica < nreplica-1) MPI_Wait(&request,MPI_STATUS_IGNORE); + + if (ireplica < nreplica-1) { + MPI_Irecv(fnext[0],3*nlocal,MPI_DOUBLE,procnext,0,uworld,&request); + MPI_Irecv(fmnext[0],3*nlocal,MPI_DOUBLE,procnext,0,uworld,&request); + } + if (ireplica > 0) { + MPI_Send(f[0],3*nlocal,MPI_DOUBLE,procprev,0,uworld); + MPI_Send(fm[0],3*nlocal,MPI_DOUBLE,procprev,0,uworld); + } + if (ireplica < nreplica-1) MPI_Wait(&request,MPI_STATUS_IGNORE); + + return; + } + + // single proc per replica + // but only some atoms are NEB atoms or atom sorting is enabled + // send atom IDs and coords of only NEB atoms to prev/next proc + // recv procs use atom->map() to match received coords to owned atoms + + if (cmode == SINGLE_PROC_MAP) { + m = 0; + for (i = 0; i < nlocal; i++) + if (mask[i] & groupbit) { + tagsend[m] = tag[i]; + xsend[m][0] = x[i][0]; + xsend[m][1] = x[i][1]; + xsend[m][2] = x[i][2]; + fsend[m][0] = f[i][0]; + fsend[m][1] = f[i][1]; + fsend[m][2] = f[i][2]; + spsend[m][0] = sp[i][0]; + spsend[m][1] = sp[i][1]; + spsend[m][2] = sp[i][2]; + fmsend[m][0] = fm[i][0]; + fmsend[m][1] = fm[i][1]; + fmsend[m][2] = fm[i][2]; + m++; + } + + if (ireplica > 0) { + MPI_Irecv(xrecv[0],3*nebatoms,MPI_DOUBLE,procprev,0,uworld,&requests[0]); + MPI_Irecv(sprecv[0],3*nebatoms,MPI_DOUBLE,procprev,0,uworld,&requests[0]); + MPI_Irecv(tagrecv,nebatoms,MPI_LMP_TAGINT,procprev,0,uworld,&requests[1]); + } + if (ireplica < nreplica-1) { + MPI_Send(xsend[0],3*nebatoms,MPI_DOUBLE,procnext,0,uworld); + MPI_Send(spsend[0],3*nebatoms,MPI_DOUBLE,procnext,0,uworld); + MPI_Send(tagsend,nebatoms,MPI_LMP_TAGINT,procnext,0,uworld); + } + + if (ireplica > 0) { + MPI_Waitall(2,requests,statuses); + for (i = 0; i < nebatoms; i++) { + m = atom->map(tagrecv[i]); + xprev[m][0] = xrecv[i][0]; + xprev[m][1] = xrecv[i][1]; + xprev[m][2] = xrecv[i][2]; + spprev[m][0] = sprecv[i][0]; + spprev[m][1] = sprecv[i][1]; + spprev[m][2] = sprecv[i][2]; + } + } + if (ireplica < nreplica-1) { + MPI_Irecv(xrecv[0],3*nebatoms,MPI_DOUBLE,procnext,0,uworld,&requests[0]); + MPI_Irecv(frecv[0],3*nebatoms,MPI_DOUBLE,procnext,0,uworld,&requests[0]); + MPI_Irecv(sprecv[0],3*nebatoms,MPI_DOUBLE,procnext,0,uworld,&requests[0]); + MPI_Irecv(fmrecv[0],3*nebatoms,MPI_DOUBLE,procnext,0,uworld,&requests[0]); + MPI_Irecv(tagrecv,nebatoms,MPI_LMP_TAGINT,procnext,0,uworld,&requests[1]); + } + if (ireplica > 0) { + MPI_Send(xsend[0],3*nebatoms,MPI_DOUBLE,procprev,0,uworld); + MPI_Send(fsend[0],3*nebatoms,MPI_DOUBLE,procprev,0,uworld); + MPI_Send(spsend[0],3*nebatoms,MPI_DOUBLE,procprev,0,uworld); + MPI_Send(fmsend[0],3*nebatoms,MPI_DOUBLE,procprev,0,uworld); + MPI_Send(tagsend,nebatoms,MPI_LMP_TAGINT,procprev,0,uworld); + } + + if (ireplica < nreplica-1) { + MPI_Waitall(2,requests,statuses); + for (i = 0; i < nebatoms; i++) { + m = atom->map(tagrecv[i]); + xnext[m][0] = xrecv[i][0]; + xnext[m][1] = xrecv[i][1]; + xnext[m][2] = xrecv[i][2]; + fnext[m][0] = frecv[i][0]; + fnext[m][1] = frecv[i][1]; + fnext[m][2] = frecv[i][2]; + spnext[m][0] = sprecv[i][0]; + spnext[m][1] = sprecv[i][1]; + spnext[m][2] = sprecv[i][2]; + fmnext[m][0] = fmrecv[i][0]; + fmnext[m][1] = fmrecv[i][1]; + fmnext[m][2] = fmrecv[i][2]; + } + } + + return; + } + + // multiple procs per replica + // MPI_Gather all coords and atom IDs to root proc of each replica + // send to root of adjacent replicas + // bcast within each replica + // each proc extracts info for atoms it owns via atom->map() + + m = 0; + for (i = 0; i < nlocal; i++) + if (mask[i] & groupbit) { + tagsend[m] = tag[i]; + xsend[m][0] = x[i][0]; + xsend[m][1] = x[i][1]; + xsend[m][2] = x[i][2]; + fsend[m][0] = f[i][0]; + fsend[m][1] = f[i][1]; + fsend[m][2] = f[i][2]; + spsend[m][0] = sp[i][0]; + spsend[m][1] = sp[i][1]; + spsend[m][2] = sp[i][2]; + fmsend[m][0] = fm[i][0]; + fmsend[m][1] = fm[i][1]; + fmsend[m][2] = fm[i][2]; + m++; + } + + MPI_Gather(&m,1,MPI_INT,counts,1,MPI_INT,0,world); + displacements[0] = 0; + for (i = 0; i < nprocs-1; i++) + displacements[i+1] = displacements[i] + counts[i]; + MPI_Gatherv(tagsend,m,MPI_LMP_TAGINT, + tagsendall,counts,displacements,MPI_LMP_TAGINT,0,world); + for (i = 0; i < nprocs; i++) counts[i] *= 3; + for (i = 0; i < nprocs-1; i++) + displacements[i+1] = displacements[i] + counts[i]; + if (xsend) { + MPI_Gatherv(xsend[0],3*m,MPI_DOUBLE, + xsendall[0],counts,displacements,MPI_DOUBLE,0,world); + MPI_Gatherv(fsend[0],3*m,MPI_DOUBLE, + fsendall[0],counts,displacements,MPI_DOUBLE,0,world); + } else { + MPI_Gatherv(NULL,3*m,MPI_DOUBLE, + xsendall[0],counts,displacements,MPI_DOUBLE,0,world); + MPI_Gatherv(NULL,3*m,MPI_DOUBLE, + fsendall[0],counts,displacements,MPI_DOUBLE,0,world); + } + if (spsend) { + MPI_Gatherv(spsend[0],3*m,MPI_DOUBLE, + spsendall[0],counts,displacements,MPI_DOUBLE,0,world); + MPI_Gatherv(fmsend[0],3*m,MPI_DOUBLE, + fmsendall[0],counts,displacements,MPI_DOUBLE,0,world); + } else { + MPI_Gatherv(NULL,3*m,MPI_DOUBLE, + spsendall[0],counts,displacements,MPI_DOUBLE,0,world); + MPI_Gatherv(NULL,3*m,MPI_DOUBLE, + fmsendall[0],counts,displacements,MPI_DOUBLE,0,world); + } + + if (ireplica > 0 && me == 0) { + MPI_Irecv(xrecvall[0],3*nebatoms,MPI_DOUBLE,procprev,0,uworld,&requests[0]); + MPI_Irecv(sprecvall[0],3*nebatoms,MPI_DOUBLE,procprev,0,uworld,&requests[0]); + MPI_Irecv(tagrecvall,nebatoms,MPI_LMP_TAGINT,procprev,0,uworld, + &requests[1]); + } + if (ireplica < nreplica-1 && me == 0) { + MPI_Send(xsendall[0],3*nebatoms,MPI_DOUBLE,procnext,0,uworld); + MPI_Send(spsendall[0],3*nebatoms,MPI_DOUBLE,procnext,0,uworld); + MPI_Send(tagsendall,nebatoms,MPI_LMP_TAGINT,procnext,0,uworld); + } + + if (ireplica > 0) { + if (me == 0) MPI_Waitall(2,requests,statuses); + + MPI_Bcast(tagrecvall,nebatoms,MPI_INT,0,world); + MPI_Bcast(xrecvall[0],3*nebatoms,MPI_DOUBLE,0,world); + MPI_Bcast(sprecvall[0],3*nebatoms,MPI_DOUBLE,0,world); + + for (i = 0; i < nebatoms; i++) { + m = atom->map(tagrecvall[i]); + if (m < 0 || m >= nlocal) continue; + xprev[m][0] = xrecvall[i][0]; + xprev[m][1] = xrecvall[i][1]; + xprev[m][2] = xrecvall[i][2]; + spprev[m][0] = sprecvall[i][0]; + spprev[m][1] = sprecvall[i][1]; + spprev[m][2] = sprecvall[i][2]; + } + } + + if (ireplica < nreplica-1 && me == 0) { + MPI_Irecv(xrecvall[0],3*nebatoms,MPI_DOUBLE,procnext,0,uworld,&requests[0]); + MPI_Irecv(frecvall[0],3*nebatoms,MPI_DOUBLE,procnext,0,uworld,&requests[0]); + MPI_Irecv(sprecvall[0],3*nebatoms,MPI_DOUBLE,procnext,0,uworld,&requests[0]); + MPI_Irecv(sprecvall[0],3*nebatoms,MPI_DOUBLE,procnext,0,uworld,&requests[0]); + MPI_Irecv(tagrecvall,nebatoms,MPI_LMP_TAGINT,procnext,0,uworld, + &requests[1]); + } + if (ireplica > 0 && me == 0) { + MPI_Send(xsendall[0],3*nebatoms,MPI_DOUBLE,procprev,0,uworld); + MPI_Send(fsendall[0],3*nebatoms,MPI_DOUBLE,procprev,0,uworld); + MPI_Send(spsendall[0],3*nebatoms,MPI_DOUBLE,procprev,0,uworld); + MPI_Send(fmsendall[0],3*nebatoms,MPI_DOUBLE,procprev,0,uworld); + MPI_Send(tagsendall,nebatoms,MPI_LMP_TAGINT,procprev,0,uworld); + } + + if (ireplica < nreplica-1) { + if (me == 0) MPI_Waitall(2,requests,statuses); + + MPI_Bcast(tagrecvall,nebatoms,MPI_INT,0,world); + MPI_Bcast(xrecvall[0],3*nebatoms,MPI_DOUBLE,0,world); + MPI_Bcast(frecvall[0],3*nebatoms,MPI_DOUBLE,0,world); + MPI_Bcast(sprecvall[0],3*nebatoms,MPI_DOUBLE,0,world); + MPI_Bcast(fmrecvall[0],3*nebatoms,MPI_DOUBLE,0,world); + + for (i = 0; i < nebatoms; i++) { + m = atom->map(tagrecvall[i]); + if (m < 0 || m >= nlocal) continue; + xnext[m][0] = xrecvall[i][0]; + xnext[m][1] = xrecvall[i][1]; + xnext[m][2] = xrecvall[i][2]; + fnext[m][0] = frecvall[i][0]; + fnext[m][1] = frecvall[i][1]; + fnext[m][2] = frecvall[i][2]; + spnext[m][0] = sprecvall[i][0]; + spnext[m][1] = sprecvall[i][1]; + spnext[m][2] = sprecvall[i][2]; + fmnext[m][0] = fmrecvall[i][0]; + fmnext[m][1] = fmrecvall[i][1]; + fmnext[m][2] = fmrecvall[i][2]; + } + } +} + +/* ---------------------------------------------------------------------- + reallocate xprev,xnext,tangent arrays if necessary + reallocate communication arrays if necessary +------------------------------------------------------------------------- */ + +void FixNEBSpin::reallocate() +{ + maxlocal = atom->nmax; + + memory->destroy(xprev); + memory->destroy(xnext); + memory->destroy(tangent); + memory->destroy(fnext); + memory->destroy(springF); + memory->destroy(spprev); + memory->destroy(spnext); + memory->destroy(fmnext); + + memory->create(xprev,maxlocal,3,"neb:xprev"); + memory->create(xnext,maxlocal,3,"neb:xnext"); + memory->create(tangent,maxlocal,3,"neb:tangent"); + memory->create(fnext,maxlocal,3,"neb:fnext"); + memory->create(springF,maxlocal,3,"neb:springF"); + memory->create(spprev,maxlocal,3,"neb:xprev"); + memory->create(spnext,maxlocal,3,"neb:xnext"); + memory->create(fmnext,maxlocal,3,"neb:fnext"); + + if (cmode != SINGLE_PROC_DIRECT) { + memory->destroy(xsend); + memory->destroy(fsend); + memory->destroy(xrecv); + memory->destroy(frecv); + memory->destroy(spsend); + memory->destroy(fmsend); + memory->destroy(sprecv); + memory->destroy(fmrecv); + memory->destroy(tagsend); + memory->destroy(tagrecv); + memory->create(xsend,maxlocal,3,"neb:xsend"); + memory->create(fsend,maxlocal,3,"neb:fsend"); + memory->create(xrecv,maxlocal,3,"neb:xrecv"); + memory->create(frecv,maxlocal,3,"neb:frecv"); + memory->create(spsend,maxlocal,3,"neb:xsend"); + memory->create(fmsend,maxlocal,3,"neb:fsend"); + memory->create(sprecv,maxlocal,3,"neb:xrecv"); + memory->create(fmrecv,maxlocal,3,"neb:frecv"); + memory->create(tagsend,maxlocal,"neb:tagsend"); + memory->create(tagrecv,maxlocal,"neb:tagrecv"); + } + + if (NEBLongRange) { + memory->destroy(nlenall); + memory->create(nlenall,nreplica,"neb:nlenall"); + } +} diff --git a/src/SPIN/fix_neb_spin.h b/src/SPIN/fix_neb_spin.h new file mode 100644 index 0000000000..7ac83ddce7 --- /dev/null +++ b/src/SPIN/fix_neb_spin.h @@ -0,0 +1,112 @@ +/* -*- c++ -*- ---------------------------------------------------------- + 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 FIX_CLASS + +FixStyle(neb/spin,FixNEBSpin) + +#else + +#ifndef LMP_FIX_NEB_SPIN_H +#define LMP_FIX_NEB_SPIN_H + +#include "fix.h" + +namespace LAMMPS_NS { + +class FixNEBSpin : public Fix { + public: + double veng,plen,nlen,dotpath,dottangrad,gradlen,dotgrad; + int rclimber; + + FixNEBSpin(class LAMMPS *, int, char **); + ~FixNEBSpin(); + int setmask(); + void init(); + void min_setup(int); + void min_post_force(int); + + private: + int me,nprocs,nprocs_universe; + double kspring,kspringIni,kspringFinal,kspringPerp,EIniIni,EFinalIni; + bool StandardNEB,NEBLongRange,PerpSpring,FreeEndIni,FreeEndFinal; + bool FreeEndFinalWithRespToEIni,FinalAndInterWithRespToEIni; + bool SpinLattice; + int ireplica,nreplica; + int procnext,procprev; + int cmode; + MPI_Comm uworld; + MPI_Comm rootworld; + + + char *id_pe; + class Compute *pe; + + int nebatoms; + int ntotal; // total # of atoms, NEB or not + int maxlocal; // size of xprev,xnext,tangent arrays + double *nlenall; + double **xprev,**xnext,**fnext; + double **spprev,**spnext,**fmnext; + double **springF; + double **tangent; + double **xsend,**xrecv; // coords to send/recv to/from other replica + double **fsend,**frecv; // coords to send/recv to/from other replica + double **spsend,**sprecv; // sp to send/recv to/from other replica + double **fmsend,**fmrecv; // fm to send/recv to/from other replica + tagint *tagsend,*tagrecv; // ditto for atom IDs + + // info gathered from all procs in my replica + double **xsendall,**xrecvall; // coords to send/recv to/from other replica + double **fsendall,**frecvall; // force to send/recv to/from other replica + double **spsendall,**sprecvall; // sp to send/recv to/from other replica + double **fmsendall,**fmrecvall; // fm to send/recv to/from other replica + tagint *tagsendall,*tagrecvall; // ditto for atom IDs + + int *counts,*displacements; // used for MPI_Gather + + double geodesic_distance(double *, double *); + void inter_replica_comm(); + void reallocate(); +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Illegal ... command + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +E: Potential energy ID for fix neb does not exist + +Self-explanatory. + +E: Too many active GNEB atoms + +UNDOCUMENTED + +E: Too many atoms for GNEB + +UNDOCUMENTED + +U: Atom count changed in fix neb + +This is not allowed in a GNEB calculation. + +*/ diff --git a/src/SPIN/fix_nve_spin.h b/src/SPIN/fix_nve_spin.h index d497321805..4e135e3c2f 100644 --- a/src/SPIN/fix_nve_spin.h +++ b/src/SPIN/fix_nve_spin.h @@ -27,7 +27,7 @@ FixStyle(nve/spin,FixNVESpin) namespace LAMMPS_NS { class FixNVESpin : public Fix { -friend class PairSpin; +friend class PairSpin; public: FixNVESpin(class LAMMPS *, int, char **); virtual ~FixNVESpin(); diff --git a/src/SPIN/min_spin.h b/src/SPIN/min_spin.h index 224d205000..fbc624a9cc 100644 --- a/src/SPIN/min_spin.h +++ b/src/SPIN/min_spin.h @@ -40,7 +40,7 @@ class MinSpin : public Min { private: // global and spin timesteps - + double dt; double dts; diff --git a/src/SPIN/neb_spin.cpp b/src/SPIN/neb_spin.cpp new file mode 100644 index 0000000000..126cfb09e3 --- /dev/null +++ b/src/SPIN/neb_spin.cpp @@ -0,0 +1,853 @@ +/* ---------------------------------------------------------------------- + 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 authors: Julien Tranchida (SNL) + + Please cite the related publication: + Bessarab, P. F., Uzdin, V. M., & Jónsson, H. (2015). + Method for finding mechanism and activation energy of magnetic transitions, + applied to skyrmion and antivortex annihilation. + Computer Physics Communications, 196, 335-347. +------------------------------------------------------------------------- */ + +// lmptype.h must be first b/c this file uses MAXBIGINT and includes mpi.h +// due to OpenMPI bug which sets INT64_MAX via its mpi.h +// before lmptype.h can set flags to insure it is done correctly + +#include "lmptype.h" +#include +#include +#include +#include +#include "neb_spin.h" +#include "citeme.h" +#include "compute.h" +#include "force.h" +#include "universe.h" +#include "atom.h" +#include "update.h" +#include "domain.h" +#include "comm.h" +#include "min.h" +#include "modify.h" +#include "fix.h" +#include "fix_neb_spin.h" +#include "output.h" +#include "thermo.h" +#include "finish.h" +#include "timer.h" +#include "memory.h" +#include "error.h" +#include "math_const.h" + +using namespace LAMMPS_NS; +using namespace MathConst; + +static const char cite_neb_spin[] = + "neb/spin command:\n\n" + "@article{bessarab2015method,\n" + "title={Method for finding mechanism and activation energy of " + "magnetic transitions, applied to skyrmion and antivortex " + "annihilation},\n" + "author={Bessarab, P.F. and Uzdin, V.M. and J{\'o}nsson, H.},\n" + "journal={Computer Physics Communications},\n" + "volume={196},\n" + "pages={335--347},\n" + "year={2015},\n" + "publisher={Elsevier}\n" + "doi={10.1016/j.cpc.2015.07.001}\n" + "}\n\n"; + +#define MAXLINE 256 +#define CHUNK 1024 +// 8 attributes: tag, spin norm, position (3), spin direction (3) +#define ATTRIBUTE_PERLINE 8 + +/* ---------------------------------------------------------------------- */ + +NEBSpin::NEBSpin(LAMMPS *lmp) : Pointers(lmp) { + if (lmp->citeme) lmp->citeme->add(cite_neb_spin); +} + +/* ---------------------------------------------------------------------- */ + +NEBSpin::~NEBSpin() +{ + MPI_Comm_free(&roots); + memory->destroy(all); + delete [] rdist; +} + +/* ---------------------------------------------------------------------- + perform NEBSpin on multiple replicas +------------------------------------------------------------------------- */ + +void NEBSpin::command(int narg, char **arg) +{ + if (domain->box_exist == 0) + error->all(FLERR,"NEBSpin command before simulation box is defined"); + + if (narg < 6) error->universe_all(FLERR,"Illegal NEBSpin command"); + + etol = force->numeric(FLERR,arg[0]); + ttol = force->numeric(FLERR,arg[1]); + n1steps = force->inumeric(FLERR,arg[2]); + n2steps = force->inumeric(FLERR,arg[3]); + nevery = force->inumeric(FLERR,arg[4]); + + // error checks + + if (etol < 0.0) error->all(FLERR,"Illegal NEBSpin command"); + if (ttol < 0.0) error->all(FLERR,"Illegal NEBSpin command"); + if (nevery <= 0) error->universe_all(FLERR,"Illegal NEBSpin command"); + if (n1steps % nevery || n2steps % nevery) + error->universe_all(FLERR,"Illegal NEBSpin command"); + + // replica info + + nreplica = universe->nworlds; + ireplica = universe->iworld; + me_universe = universe->me; + uworld = universe->uworld; + MPI_Comm_rank(world,&me); + + // check metal units and spin atom/style + + if (!atom->sp_flag) + error->all(FLERR,"neb/spin requires atom/spin style"); + if (strcmp(update->unit_style,"metal") != 0) + error->all(FLERR,"neb/spin simulation requires metal unit style"); + + // error checks + + if (nreplica == 1) error->all(FLERR,"Cannot use NEBSpin with a single replica"); + if (atom->map_style == 0) + error->all(FLERR,"Cannot use NEBSpin unless atom map exists"); + + // process file-style setting to setup initial configs for all replicas + + if (strcmp(arg[5],"final") == 0) { + if (narg != 7 && narg !=8) error->universe_all(FLERR,"Illegal NEBSpin command"); + infile = arg[6]; + readfile(infile,0); + } else if (strcmp(arg[5],"each") == 0) { + if (narg != 7 && narg !=8) error->universe_all(FLERR,"Illegal NEBSpin command"); + infile = arg[6]; + readfile(infile,1); + } else if (strcmp(arg[5],"none") == 0) { + if (narg != 6 && narg !=7) error->universe_all(FLERR,"Illegal NEBSpin command"); + } else error->universe_all(FLERR,"Illegal NEBSpin command"); + + verbose=false; + if (strcmp(arg[narg-1],"verbose") == 0) verbose=true; + + run(); +} + +/* ---------------------------------------------------------------------- + run NEBSpin on multiple replicas +------------------------------------------------------------------------- */ + +void NEBSpin::run() +{ + // create MPI communicator for root proc from each world + + int color; + if (me == 0) color = 0; + else color = 1; + MPI_Comm_split(uworld,color,0,&roots); + + // search for neb_spin fix, allocate it + + int ineb; + for (ineb = 0; ineb < modify->nfix; ineb++) + if (strcmp(modify->fix[ineb]->style,"neb/spin") == 0) break; + if (ineb == modify->nfix) error->all(FLERR,"NEBSpin requires use of fix neb/spin"); + + fneb = (FixNEBSpin *) modify->fix[ineb]; + if (verbose) numall =7; + else numall = 4; + memory->create(all,nreplica,numall,"neb:all"); + rdist = new double[nreplica]; + + // initialize LAMMPS + + update->whichflag = 2; + update->etol = etol; + update->ftol = ttol; // update->ftol is a torque tolerance + update->multireplica = 1; + + lmp->init(); + + // check if correct minimizer is setup + + if (update->minimize->searchflag) + error->all(FLERR,"NEBSpin requires damped dynamics minimizer"); + if (strcmp(update->minimize_style,"spin") != 0) + error->all(FLERR,"NEBSpin requires spin minimizer"); + + // setup regular NEBSpin minimization + + FILE *uscreen = universe->uscreen; + FILE *ulogfile = universe->ulogfile; + + if (me_universe == 0 && uscreen) + fprintf(uscreen,"Setting up regular NEBSpin ...\n"); + + update->beginstep = update->firststep = update->ntimestep; + update->endstep = update->laststep = update->firststep + n1steps; + update->nsteps = n1steps; + update->max_eval = n1steps; + if (update->laststep < 0) + error->all(FLERR,"Too many timesteps for NEBSpin"); + + update->minimize->setup(); + + if (me_universe == 0) { + if (uscreen) { + if (verbose) { + fprintf(uscreen,"Step MaxReplicaTorque MaxAtomTorque " + "GradV0 GradV1 GradVc EBF EBR RDT " + "RD1 PE1 RD2 PE2 ... RDN PEN " + "GradV0dottan DN0 ... GradVNdottan DNN\n"); + } else { + fprintf(uscreen,"Step MaxReplicaTorque MaxAtomTorque " + "GradV0 GradV1 GradVc EBF EBR RDT RD1 PE1 RD2 PE2 ... " + "RDN PEN\n"); + } + } + + if (ulogfile) { + if (verbose) { + fprintf(ulogfile,"Step MaxReplicaTorque MaxAtomTorque " + "GradV0 GradV1 GradVc EBF EBR RDT " + "RD1 PE1 RD2 PE2 ... RDN PEN " + "GradV0dottan DN0 ... GradVNdottan DNN\n"); + } else { + fprintf(ulogfile,"Step MaxReplicaTorque MaxAtomTorque " + "GradV0 GradV1 GradVc EBF EBR RDT RD1 PE1 RD2 PE2 ... " + "RDN PEN\n"); + } + } + } + print_status(); + + // perform regular NEBSpin for n1steps or until replicas converge + // retrieve PE values from fix NEBSpin and print every nevery iterations + // break out of while loop early if converged + // damped dynamic min styles insure all replicas converge together + + timer->init(); + timer->barrier_start(); + + while (update->minimize->niter < n1steps) { + update->minimize->run(nevery); + print_status(); + if (update->minimize->stop_condition) break; + } + + timer->barrier_stop(); + + update->minimize->cleanup(); + + Finish finish(lmp); + finish.end(1); + + // switch fix NEBSpin to climbing mode + // top = replica that becomes hill climber + + double vmax = all[0][0]; + int top = 0; + for (int m = 1; m < nreplica; m++) + if (vmax < all[m][0]) { + vmax = all[m][0]; + top = m; + } + + // setup climbing NEBSpin minimization + // must reinitialize minimizer so it re-creates its fix MINIMIZE + + if (me_universe == 0 && uscreen) + fprintf(uscreen,"Setting up climbing ...\n"); + + if (me_universe == 0) { + if (uscreen) + fprintf(uscreen,"Climbing replica = %d\n",top+1); + if (ulogfile) + fprintf(ulogfile,"Climbing replica = %d\n",top+1); + } + + update->beginstep = update->firststep = update->ntimestep; + update->endstep = update->laststep = update->firststep + n2steps; + update->nsteps = n2steps; + update->max_eval = n2steps; + if (update->laststep < 0) + error->all(FLERR,"Too many timesteps"); + + update->minimize->init(); + fneb->rclimber = top; + update->minimize->setup(); + + if (me_universe == 0) { + if (uscreen) { + if (verbose) { + fprintf(uscreen,"Step MaxReplicaTorque MaxAtomTorque " + "GradV0 GradV1 GradVc EBF EBR RDT " + "RD1 PE1 RD2 PE2 ... RDN PEN " + "GradV0dottan DN0... GradVNdottan DNN\n"); + } else { + fprintf(uscreen,"Step MaxReplicaTorque MaxAtomTorque " + "GradV0 GradV1 GradVc " + "EBF EBR RDT " + "RD1 PE1 RD2 PE2 ... RDN PEN\n"); + } + } + if (ulogfile) { + if (verbose) { + fprintf(ulogfile,"Step MaxReplicaTorque MaxAtomTorque " + "GradV0 GradV1 GradVc EBF EBR RDT " + "RD1 PE1 RD2 PE2 ... RDN PEN " + "GradV0dottan DN0 ... GradVNdottan DNN\n"); + } else { + fprintf(ulogfile,"Step MaxReplicaTorque MaxAtomTorque " + "GradV0 GradV1 GradVc " + "EBF EBR RDT " + "RD1 PE1 RD2 PE2 ... RDN PEN\n"); + } + } + } + print_status(); + + // perform climbing NEBSpin for n2steps or until replicas converge + // retrieve PE values from fix NEBSpin and print every nevery iterations + // break induced if converged + // damped dynamic min styles insure all replicas converge together + + timer->init(); + timer->barrier_start(); + + while (update->minimize->niter < n2steps) { + update->minimize->run(nevery); + print_status(); + if (update->minimize->stop_condition) break; + } + + timer->barrier_stop(); + + update->minimize->cleanup(); + + finish.end(1); + + update->whichflag = 0; + update->multireplica = 0; + update->firststep = update->laststep = 0; + update->beginstep = update->endstep = 0; +} + +/* ---------------------------------------------------------------------- + read initial config atom coords from file + flag = 0 + only first replica opens file and reads it + first replica bcasts lines to all replicas + final replica stores coords + intermediate replicas interpolate from coords + new coord = replica fraction between current and final state + initial replica does nothing + flag = 1 + each replica (except first) opens file and reads it + each replica stores coords + initial replica does nothing +------------------------------------------------------------------------- */ + +void NEBSpin::readfile(char *file, int flag) +{ + int i,j,m,nchunk,eofflag,nlines; + tagint tag; + char *eof,*start,*next,*buf; + char line[MAXLINE]; + double xx,yy,zz; + double musp,spx,spy,spz; + + if (me_universe == 0 && screen) + fprintf(screen,"Reading NEBSpin coordinate file(s) ...\n"); + + // flag = 0, universe root reads header of file, bcast to universe + // flag = 1, each replica's root reads header of file, bcast to world + // but explicitly skip first replica + + if (flag == 0) { + if (me_universe == 0) { + open(file); + while (1) { + eof = fgets(line,MAXLINE,fp); + if (eof == NULL) error->one(FLERR,"Unexpected end of neb/spin file"); + start = &line[strspn(line," \t\n\v\f\r")]; + if (*start != '\0' && *start != '#') break; + } + sscanf(line,"%d",&nlines); + } + MPI_Bcast(&nlines,1,MPI_INT,0,uworld); + + } else { + if (me == 0) { + if (ireplica) { + open(file); + while (1) { + eof = fgets(line,MAXLINE,fp); + if (eof == NULL) error->one(FLERR,"Unexpected end of neb/spin file"); + start = &line[strspn(line," \t\n\v\f\r")]; + if (*start != '\0' && *start != '#') break; + } + sscanf(line,"%d",&nlines); + } else nlines = 0; + } + MPI_Bcast(&nlines,1,MPI_INT,0,world); + } + + char *buffer = new char[CHUNK*MAXLINE]; + char **values = new char*[ATTRIBUTE_PERLINE]; + + double fraction = ireplica/(nreplica-1.0); + + double **x = atom->x; + double **sp = atom->sp; + double spinit[3],spfinal[3]; + int nlocal = atom->nlocal; + + // loop over chunks of lines read from file + // two versions of read_lines_from_file() for world vs universe bcast + // count # of atom coords changed so can check for invalid atom IDs in file + + int ncount = 0; + + int temp_flag,rot_flag; + temp_flag = rot_flag = 0; + int nread = 0; + while (nread < nlines) { + nchunk = MIN(nlines-nread,CHUNK); + if (flag == 0) + eofflag = comm->read_lines_from_file_universe(fp,nchunk,MAXLINE,buffer); + else + eofflag = comm->read_lines_from_file(fp,nchunk,MAXLINE,buffer); + if (eofflag) error->all(FLERR,"Unexpected end of neb/spin file"); + + buf = buffer; + next = strchr(buf,'\n'); + *next = '\0'; + int nwords = atom->count_words(buf); + *next = '\n'; + + if (nwords != ATTRIBUTE_PERLINE) + error->all(FLERR,"Incorrect atom format in neb/spin file"); + + // loop over lines of atom coords + // tokenize the line into values + + for (i = 0; i < nchunk; i++) { + next = strchr(buf,'\n'); + + values[0] = strtok(buf," \t\n\r\f"); + for (j = 1; j < nwords; j++) + values[j] = strtok(NULL," \t\n\r\f"); + + // adjust spin coord based on replica fraction + // for flag = 0, interpolate for intermediate and final replicas + // for flag = 1, replace existing coord with new coord + // ignore image flags of final x + // for interpolation: + // new x is displacement from old x via minimum image convention + // if final x is across periodic boundary: + // new x may be outside box + // will be remapped back into box when simulation starts + // its image flags will then be adjusted + + tag = ATOTAGINT(values[0]); + m = atom->map(tag); + if (m >= 0 && m < nlocal) { + ncount++; + musp = atof(values[1]); + xx = atof(values[2]); + yy = atof(values[3]); + zz = atof(values[4]); + spx = atof(values[5]); + spy = atof(values[6]); + spz = atof(values[7]); + + if (flag == 0) { + + spinit[0] = sp[m][0]; + spinit[1] = sp[m][1]; + spinit[2] = sp[m][2]; + spfinal[0] = spx; + spfinal[1] = spy; + spfinal[2] = spz; + + // interpolate intermediate spin states + + sp[m][3] = musp; + if (fraction == 0.0) { + sp[m][0] = spinit[0]; + sp[m][1] = spinit[1]; + sp[m][2] = spinit[2]; + } else if (fraction == 1.0) { + sp[m][0] = spfinal[0]; + sp[m][1] = spfinal[1]; + sp[m][2] = spfinal[2]; + } else { + temp_flag = initial_rotation(spinit,spfinal,fraction); + rot_flag = MAX(temp_flag,rot_flag); + sp[m][0] = spfinal[0]; + sp[m][1] = spfinal[1]; + sp[m][2] = spfinal[2]; + } + } else { + sp[m][3] = musp; + x[m][0] = xx; + x[m][1] = yy; + x[m][2] = zz; + sp[m][0] = spx; + sp[m][1] = spy; + sp[m][2] = spz; + } + } + + buf = next + 1; + } + + nread += nchunk; + } + + // warning message if one or more couples (spi,spf) were aligned + // this breaks Rodrigues' formula, and an arbitrary rotation + // vector has to be chosen + + if ((rot_flag > 0) && (comm->me == 0)) + error->warning(FLERR,"arbitrary initial rotation of one or more spin(s)"); + + // check that all atom IDs in file were found by a proc + + if (flag == 0) { + int ntotal; + MPI_Allreduce(&ncount,&ntotal,1,MPI_INT,MPI_SUM,uworld); + if (ntotal != nreplica*nlines) + error->universe_all(FLERR,"Invalid atom IDs in neb/spin file"); + } else { + int ntotal; + MPI_Allreduce(&ncount,&ntotal,1,MPI_INT,MPI_SUM,world); + if (ntotal != nlines) + error->all(FLERR,"Invalid atom IDs in neb/spin file"); + } + + // clean up + + delete [] buffer; + delete [] values; + + if (flag == 0) { + if (me_universe == 0) { + if (compressed) pclose(fp); + else fclose(fp); + } + } else { + if (me == 0 && ireplica) { + if (compressed) pclose(fp); + else fclose(fp); + } + } +} + +/* ---------------------------------------------------------------------- + initial configuration of intermediate spins using Rodrigues' formula + interpolates between initial (spi) and final (stored in sploc) +------------------------------------------------------------------------- */ + +int NEBSpin::initial_rotation(double *spi, double *sploc, double fraction) +{ + + // no interpolation for initial and final replica + + if (fraction == 0.0 || fraction == 1.0) return 0; + + int rot_flag = 0; + double kx,ky,kz; + double spix,spiy,spiz,spfx,spfy,spfz; + double kcrossx,kcrossy,kcrossz,knormsq; + double kdots; + double spkx,spky,spkz; + double sidotsf,omega,iknorm,isnorm; + + spix = spi[0]; + spiy = spi[1]; + spiz = spi[2]; + + spfx = sploc[0]; + spfy = sploc[1]; + spfz = sploc[2]; + + kx = spiy*spfz - spiz*spfy; + ky = spiz*spfx - spix*spfz; + kz = spix*spfy - spiy*spfx; + + knormsq = kx*kx+ky*ky+kz*kz; + sidotsf = spix*spfx + spiy*spfy + spiz*spfz; + + // if knormsq == 0.0, init and final spins are aligned + // Rodrigues' formula breaks, needs to define another axis k + + if (knormsq == 0.0) { + if (sidotsf > 0.0) { // spins aligned and in same direction + return 0; + } else if (sidotsf < 0.0) { // spins aligned and in opposite directions + + // defining a rotation axis + // first guess, k = spi x [100] + // second guess, k = spi x [010] + + if (spiy*spiy + spiz*spiz != 0.0) { // spin not along [100] + kx = 0.0; + ky = spiz; + kz = -spiy; + knormsq = ky*ky + kz*kz; + } else if (spix*spix + spiz*spiz != 0.0) { // spin not along [010] + kx = -spiz; + ky = 0.0; + kz = spix; + knormsq = kx*kx + kz*kz; + } else error->all(FLERR,"Incorrect initial rotation operation"); + rot_flag = 1; + } + } + + // knormsq should not be 0 + + if (knormsq == 0.0) + error->all(FLERR,"Incorrect initial rotation operation"); + + // normalize k vector + + iknorm = 1.0/sqrt(knormsq); + kx *= iknorm; + ky *= iknorm; + kz *= iknorm; + + // calc. k x spi and total rotation angle + + kcrossx = ky*spiz - kz*spiy; + kcrossy = kz*spix - kx*spiz; + kcrossz = kx*spiy - ky*spix; + + kdots = kx*spix + ky*spiz + kz*spiz; + + omega = acos(sidotsf); + omega *= fraction; + + // apply Rodrigues' formula + + spkx = spix*cos(omega); + spky = spiy*cos(omega); + spkz = spiz*cos(omega); + + spkx += kcrossx*sin(omega); + spky += kcrossy*sin(omega); + spkz += kcrossz*sin(omega); + + spkx += kx*kdots*(1.0-cos(omega)); + spky += ky*kdots*(1.0-cos(omega)); + spkz += kz*kdots*(1.0-cos(omega)); + + // normalizing resulting spin vector + + isnorm = 1.0/sqrt(spkx*spkx+spky*spky+spkz*spkz); + if (isnorm == 0.0) + error->all(FLERR,"Incorrect initial rotation operation"); + + spkx *= isnorm; + spky *= isnorm; + spkz *= isnorm; + + // returns rotated spin + + sploc[0] = spkx; + sploc[1] = spky; + sploc[2] = spkz; + + return rot_flag; +} + +/* ---------------------------------------------------------------------- + universe proc 0 opens NEBSpin data file + test if gzipped +------------------------------------------------------------------------- */ + +void NEBSpin::open(char *file) +{ + compressed = 0; + char *suffix = file + strlen(file) - 3; + if (suffix > file && strcmp(suffix,".gz") == 0) compressed = 1; + if (!compressed) fp = fopen(file,"r"); + else { +#ifdef LAMMPS_GZIP + char gunzip[128]; + snprintf(gunzip,128,"gzip -c -d %s",file); + +#ifdef _WIN32 + fp = _popen(gunzip,"rb"); +#else + fp = popen(gunzip,"r"); +#endif + +#else + error->one(FLERR,"Cannot open gzipped file"); +#endif + } + + if (fp == NULL) { + char str[128]; + snprintf(str,128,"Cannot open file %s",file); + error->one(FLERR,str); + } +} + +/* ---------------------------------------------------------------------- + query fix NEBSpin for info on each replica + universe proc 0 prints current NEBSpin status +------------------------------------------------------------------------- */ + +void NEBSpin::print_status() +{ + int nlocal = atom->nlocal; + double tx,ty,tz; + double tnorm2,local_norm_inf,temp_inf; + double **sp = atom->sp; + double **fm = atom->fm; + + // calc. magnetic torques + + tnorm2 = local_norm_inf = temp_inf = 0.0; + for (int i = 0; i < nlocal; i++) { + tx = (fm[i][1]*sp[i][2] - fm[i][2]*sp[i][1]); + ty = (fm[i][2]*sp[i][0] - fm[i][0]*sp[i][2]); + tz = (fm[i][0]*sp[i][1] - fm[i][1]*sp[i][0]); + tnorm2 += tx*tx + ty*ty + tz*tz; + temp_inf = MAX(fabs(tx),fabs(ty)); + temp_inf = MAX(fabs(tz),temp_inf); + local_norm_inf = MAX(temp_inf,local_norm_inf); + } + + double fmaxreplica; + MPI_Allreduce(&tnorm2,&fmaxreplica,1,MPI_DOUBLE,MPI_MAX,roots); + + double fnorminf = 0.0; + MPI_Allreduce(&local_norm_inf,&fnorminf,1,MPI_DOUBLE,MPI_MAX,world); + double fmaxatom; + MPI_Allreduce(&fnorminf,&fmaxatom,1,MPI_DOUBLE,MPI_MAX,roots); + + if (verbose) { + freplica = new double[nreplica]; + MPI_Allgather(&tnorm2,1,MPI_DOUBLE,&freplica[0],1,MPI_DOUBLE,roots); + fmaxatomInRepl = new double[nreplica]; + MPI_Allgather(&fnorminf,1,MPI_DOUBLE,&fmaxatomInRepl[0],1,MPI_DOUBLE,roots); + } + + double one[7]; + one[0] = fneb->veng; + one[1] = fneb->plen; + one[2] = fneb->nlen; + one[3] = fneb->gradlen; + + if (verbose) { + one[4] = fneb->dotpath; + one[5] = fneb->dottangrad; + one[6] = fneb->dotgrad; + } + + if (output->thermo->normflag) one[0] /= atom->natoms; + if (me == 0) + MPI_Allgather(one,numall,MPI_DOUBLE,&all[0][0],numall,MPI_DOUBLE,roots); + MPI_Bcast(&all[0][0],numall*nreplica,MPI_DOUBLE,0,world); + + rdist[0] = 0.0; + for (int i = 1; i < nreplica; i++) + rdist[i] = rdist[i-1] + all[i][1]; + double endpt = rdist[nreplica-1] = rdist[nreplica-2] + all[nreplica-2][2]; + for (int i = 1; i < nreplica; i++) + rdist[i] /= endpt; + + // look up GradV for the initial, final, and climbing replicas + // these are identical to fnorm2, but to be safe we + // take them straight from fix_neb + + double gradvnorm0, gradvnorm1, gradvnormc; + + int irep; + irep = 0; + gradvnorm0 = all[irep][3]; + irep = nreplica-1; + gradvnorm1 = all[irep][3]; + irep = fneb->rclimber; + if (irep > -1) { + gradvnormc = all[irep][3]; + ebf = all[irep][0]-all[0][0]; + ebr = all[irep][0]-all[nreplica-1][0]; + } else { + double vmax = all[0][0]; + int top = 0; + for (int m = 1; m < nreplica; m++) + if (vmax < all[m][0]) { + vmax = all[m][0]; + top = m; + } + irep = top; + gradvnormc = all[irep][3]; + ebf = all[irep][0]-all[0][0]; + ebr = all[irep][0]-all[nreplica-1][0]; + } + + if (me_universe == 0) { + FILE *uscreen = universe->uscreen; + FILE *ulogfile = universe->ulogfile; + if (uscreen) { + fprintf(uscreen,BIGINT_FORMAT " %12.8g %12.8g ", + update->ntimestep,fmaxreplica,fmaxatom); + fprintf(uscreen,"%12.8g %12.8g %12.8g ", + gradvnorm0,gradvnorm1,gradvnormc); + fprintf(uscreen,"%12.8g %12.8g %12.8g ",ebf,ebr,endpt); + for (int i = 0; i < nreplica; i++) + fprintf(uscreen,"%12.8g %12.8g ",rdist[i],all[i][0]); + if (verbose) { + for (int i = 0; i < nreplica-1; i++) + fprintf(uscreen,"%12.8g %12.8g ",all[i][2],all[i][5]); + fprintf(uscreen,"%12.8g %12.8g ",NAN,all[nreplica-1][5]); + } + fprintf(uscreen,"\n"); + } + + if (ulogfile) { + fprintf(ulogfile,BIGINT_FORMAT " %12.8g %12.8g ", + update->ntimestep,fmaxreplica,fmaxatom); + fprintf(ulogfile,"%12.8g %12.8g %12.8g ", + gradvnorm0,gradvnorm1,gradvnormc); + fprintf(ulogfile,"%12.8g %12.8g %12.8g ",ebf,ebr,endpt); + for (int i = 0; i < nreplica; i++) + fprintf(ulogfile,"%12.8g %12.8g ",rdist[i],all[i][0]); + if (verbose) { + for (int i = 0; i < nreplica-1; i++) + fprintf(ulogfile,"%12.8g %12.8g ",all[i][2],all[i][5]); + fprintf(ulogfile,"%12.8g %12.8g ",NAN,all[nreplica-1][5]); + } + fprintf(ulogfile,"\n"); + fflush(ulogfile); + } + } +} diff --git a/src/SPIN/neb_spin.h b/src/SPIN/neb_spin.h new file mode 100644 index 0000000000..5acd034e95 --- /dev/null +++ b/src/SPIN/neb_spin.h @@ -0,0 +1,137 @@ +/* -*- c++ -*- ---------------------------------------------------------- + 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 COMMAND_CLASS + +CommandStyle(neb/spin,NEBSpin) + +#else + +#ifndef LMP_NEB_SPIN_H +#define LMP_NEB_SPIN_H + +#include +#include "pointers.h" + +namespace LAMMPS_NS { + +class NEBSpin : protected Pointers { + public: + NEBSpin(class LAMMPS *); + ~NEBSpin(); + void command(int, char **); // process neb/spin command + void run(); // run NEBSpin + + double ebf,ebr; // forward and reverse energy barriers + + private: + int me,me_universe; // my proc ID in world and universe + int ireplica,nreplica; + bool verbose; + MPI_Comm uworld; + MPI_Comm roots; // MPI comm with 1 root proc from each world + FILE *fp; + int compressed; + double etol; // energy tolerance convergence criterion + double ttol; // torque tolerance convergence criterion + int n1steps, n2steps; // number of steps in stage 1 and 2 + int nevery; // output interval + char *infile; // name of file containing final state + + class FixNEBSpin *fneb; + int numall; // per-replica dimension of array all + double **all; // PE,plen,nlen,gradvnorm from each replica + double *rdist; // normalize reaction distance, 0 to 1 + double *freplica; // force on an image + double *fmaxatomInRepl; // force on an image + + void readfile(char *, int); + int initial_rotation(double *, double *, double); + void open(char *); + void print_status(); +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: NEBSpin command before simulation box is defined + +Self-explanatory. + +E: Illegal ... command + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +E: Cannot use NEBSpin with a single replica + +Self-explanatory. + +E: Cannot use NEBSpin unless atom map exists + +Use the atom_modify command to create an atom map. + +E: NEBSpin requires use of fix neb + +Self-explanatory. + +E: NEBSpin requires damped dynamics minimizer + +Use a different minimization style. + +E: Too many timesteps for NEBSpin + +You must use a number of timesteps that fit in a 32-bit integer +for NEBSpin. + +E: Too many timesteps + +The cumulative timesteps must fit in a 64-bit integer. + +E: Unexpected end of neb/spin file + +A read operation from the file failed. + +E: Incorrect atom format in neb/spin file + +The number of fields per line is not what expected. + +E: Invalid atom IDs in neb/spin file + +An ID in the file was not found in the system. + +E: Cannot open gzipped file + +LAMMPS was compiled without support for reading and writing gzipped +files through a pipeline to the gzip program with -DLAMMPS_GZIP. + +E: Cannot open file %s + +The specified file cannot be opened. Check that the path and name are +correct. If the file is a compressed file, also check that the gzip +executable can be found and run. + +U: Can only use NEBSpin with 1-processor replicas + +This is current restriction for NEBSpin as implemented in LAMMPS. + +U: Cannot use NEBSpin with atom_modify sort enabled + +This is current restriction for NEBSpin implemented in LAMMPS. + +*/ diff --git a/src/SPIN/pair_spin_dmi.cpp b/src/SPIN/pair_spin_dmi.cpp index d0506e972d..41430d230f 100644 --- a/src/SPIN/pair_spin_dmi.cpp +++ b/src/SPIN/pair_spin_dmi.cpp @@ -171,10 +171,11 @@ void PairSpinDmi::init_style() int ifix = 0; while (ifix < modify->nfix) { if (strcmp(modify->fix[ifix]->style,"nve/spin") == 0) break; + if (strcmp(modify->fix[ifix]->style,"neb/spin") == 0) break; ifix++; } if ((ifix == modify->nfix) && (comm->me == 0)) - error->warning(FLERR,"Using pair/spin style without nve/spin"); + error->warning(FLERR,"Using pair/spin style without nve/spin or neb/spin"); // get the lattice_flag from nve/spin @@ -430,9 +431,9 @@ void PairSpinDmi::compute_dmi(int i, int j, double eij[3], double fmi[3], double dmiy = eij[2]*v_dmx[itype][jtype] - eij[0]*v_dmz[itype][jtype]; dmiz = eij[0]*v_dmy[itype][jtype] - eij[1]*v_dmx[itype][jtype]; - fmi[0] -= (spj[1]*dmiz - spj[2]*dmiy); - fmi[1] -= (spj[2]*dmix - spj[0]*dmiz); - fmi[2] -= (spj[0]*dmiy - spj[1]*dmix); + fmi[0] -= (dmiy*spj[2] - dmiz*spj[1]); + fmi[1] -= (dmiz*spj[0] - dmix*spj[2]); + fmi[2] -= (dmix*spj[1] - dmiy*spj[0]); } /* ---------------------------------------------------------------------- diff --git a/src/SPIN/pair_spin_exchange.cpp b/src/SPIN/pair_spin_exchange.cpp index cb3242c711..0260a611cf 100644 --- a/src/SPIN/pair_spin_exchange.cpp +++ b/src/SPIN/pair_spin_exchange.cpp @@ -153,15 +153,16 @@ void PairSpinExchange::init_style() neighbor->requests[irequest]->half = 0; neighbor->requests[irequest]->full = 1; - // checking if nve/spin is a listed fix + // checking if nve/spin or neb/spin are a listed fix int ifix = 0; while (ifix < modify->nfix) { if (strcmp(modify->fix[ifix]->style,"nve/spin") == 0) break; + if (strcmp(modify->fix[ifix]->style,"neb/spin") == 0) break; ifix++; } if ((ifix == modify->nfix) && (comm->me == 0)) - error->warning(FLERR,"Using pair/spin style without nve/spin"); + error->warning(FLERR,"Using pair/spin style without nve/spin or neb/spin"); // get the lattice_flag from nve/spin diff --git a/src/SPIN/pair_spin_magelec.cpp b/src/SPIN/pair_spin_magelec.cpp index 6ff003521d..1f1488b93c 100644 --- a/src/SPIN/pair_spin_magelec.cpp +++ b/src/SPIN/pair_spin_magelec.cpp @@ -164,10 +164,11 @@ void PairSpinMagelec::init_style() int ifix = 0; while (ifix < modify->nfix) { if (strcmp(modify->fix[ifix]->style,"nve/spin") == 0) break; + if (strcmp(modify->fix[ifix]->style,"neb/spin") == 0) break; ifix++; } if ((ifix == modify->nfix) && (comm->me == 0)) - error->warning(FLERR,"Using pair/spin style without nve/spin"); + error->warning(FLERR,"Using pair/spin style without nve/spin or neb/spin"); // get the lattice_flag from nve/spin diff --git a/src/SPIN/pair_spin_neel.cpp b/src/SPIN/pair_spin_neel.cpp index a39d6f3461..03041da17f 100644 --- a/src/SPIN/pair_spin_neel.cpp +++ b/src/SPIN/pair_spin_neel.cpp @@ -171,10 +171,11 @@ void PairSpinNeel::init_style() int ifix = 0; while (ifix < modify->nfix) { if (strcmp(modify->fix[ifix]->style,"nve/spin") == 0) break; + if (strcmp(modify->fix[ifix]->style,"neb/spin") == 0) break; ifix++; } if ((ifix == modify->nfix) && (comm->me == 0)) - error->warning(FLERR,"Using pair/spin style without nve/spin"); + error->warning(FLERR,"Using pair/spin style without nve/spin or neb/spin"); // get the lattice_flag from nve/spin diff --git a/tools/spin/interpolate_gneb/README b/tools/spin/interpolate_gneb/README new file mode 100644 index 0000000000..ab30373249 --- /dev/null +++ b/tools/spin/interpolate_gneb/README @@ -0,0 +1,31 @@ +Interpolate.x tries to perform a cubic polynomial interpolation +of the MEP. + +Compile the program with: +gcc interpolate.c -o interpolate.x + +and then run it as: +./interpolate.x + +Enter N-1 (with N the number of replica). +The program reads the "neb_init.dat", in which you need to +replace the current values by your GNEB outputs. + +Each line corresponds to a replica, and has to respectively +contain: + +Reac. coords /tab/ pot. energy /tab/ fm dot tangent /tab/ +geodesic dist to next replica + +All those information can be provided by the verbose output of +a neb/spin calculation + +The progam outputs the interpolation result, and the +interpolated MEP in "interpolation_result.dat". + +This code is a courtesy of Aleksei Ivanov, University of +Iceland. +For more explanation about this calculation, see Appendix D +of the following reference: +Bessarab, P. F., Uzdin, V. M., & Jónsson, H. (2015). +Computer Physics Communications, 196, 335-347. diff --git a/tools/spin/interpolate_gneb/interpolate.c b/tools/spin/interpolate_gneb/interpolate.c new file mode 100644 index 0000000000..32734ee224 --- /dev/null +++ b/tools/spin/interpolate_gneb/interpolate.c @@ -0,0 +1,106 @@ +/* ------------------------------------------------------------------------ + Provide some explanation here +------------------------------------------------------------------------- */ + +/* ------------------------------------------------------------------------ + This program is a courtesy of Aleksei Ivanov (Univ. of Iceland) + Contributing authors: Aleksei Ivanov (Univ. of Iceland), + Julien Tranchida (SNL) +------------------------------------------------------------------------- */ + +#include +#include +#include + +// calculate cubic coefficients + +void count_coefficient(double *V, double *F, double *R, double *a, double *b, + double *c,double *d,int M){ + /* R = square of distance between images*/ + /* V = energy of images */ + /* F = projection of real real forces along the path? */ + int i; + for(i = 0; i < M ; i++) { + a[i] = ( -2.0*(V[i+1]-V[i])/R[i] - F[i] - F[i+1] ) / (R[i]*R[i]); + //a[i] = ( -2.0*(V[i+1]-V[i])/sqrt(R[i]) - F[i] - F[i+1] ) / R[i]; + b[i] = ( 3.0*(V[i+1]-V[i]) + (2.0*F[i]+F[i+1])*R[i] ) / (R[i]*R[i]); + //b[i] = ( 3.0*(V[i+1]-V[i]) + (2.0*F[i]+F[i+1])*sqrt(R[i]) ) / R[i]; + c[i] = -F[i]; + d[i] = V[i]; + } +} + +// cubic spline + +double spline(double a,double b,double c,double d,double x) { + return (a*x*x*x + b*x*x + c*x + d); +} + +int main() { + int M=0; // M+1 = number of images + double *fmdottan; // projection of real forces on tangent path + double *coords; // initial value of reaction coords + double *V; // energy of images + double *dist; // square of the distance between images + double *a, *b, *c, *d ; // coefficients of cubic functions + double x; // reaction coordinate + double A,B; // additional variables for rnd + double length = 0.0; + int i,j; + FILE *data; + + printf("Enter M = number of images - 1 \n"); + scanf("%d",&M); + + // allocating and initializing tables + + a = calloc(M,sizeof(double)); // cubic coefficients + b = calloc(M,sizeof(double)); + c = calloc(M,sizeof(double)); + d = calloc(M,sizeof(double)); + V = calloc((M+1),sizeof(double)); // energies + coords = calloc((M+1),sizeof(double)); // reaction coordinates + fmdottan = calloc((M+1),sizeof(double)); // fm dot tangent + dist = calloc(M+1,sizeof(double)); // distance between images + + // reading input file + + if((data=fopen("neb_init.dat","r")) == NULL) { + printf("Incorrect input file name."); + return 0; + } + + for(j=0; j < M+1; j++) { + fscanf(data,"%lf\t%lf\t%lf\t%lf\n",&coords[j],&V[j],&fmdottan[j],&dist[j]); + length += dist[j]; + printf("%lf %lf %lf %lf\n",coords[j],V[j],fmdottan[j],dist[j]); + } + + if( (fclose(data)) == 0) { + printf("Data stored, input file closed.\n "); + } + + // calculate value of coefficients + + count_coefficient(V,fmdottan,dist,a,b,c,d,M); + + // plot result of the interpolation + + if( ( data=fopen("interpolation_result.dat","w") )== NULL) { + printf("Interpolation file could not be open."); + return 0; + } + + A = B = 0.0; + for(i = 0; i < M ; i++) { + B += dist[i]; + printf("%13le\n",B); + for(j = 0; j <= 1000; j++) { + x = dist[i]*1.0e-3*j; + fprintf(data,"%13lf\t%13le\n",(x+A)/length,spline(a[i],b[i],c[i],d[i],x)); + } + A += dist[i]; + } + + return 0; +} diff --git a/tools/spin/interpolate_gneb/neb_init.dat b/tools/spin/interpolate_gneb/neb_init.dat new file mode 100644 index 0000000000..7a56274a31 --- /dev/null +++ b/tools/spin/interpolate_gneb/neb_init.dat @@ -0,0 +1,8 @@ +0.0000000 -3.915271 3.4995081e-17 2.4573077 +0.14285714 -3.9148148 -0.00059075739 2.4573077 +0.28571429 -3.9136926 -0.00072315767 2.4573077 +0.42857143 -3.9127883 -0.0003191228 2.4573265 +0.57142857 -3.9127883 0.0003191228 2.4403341 +0.71428571 -3.9136926 0.00072315767 2.4044093 +0.85714286 -3.9148148 0.00059075739 2.3766041 +1.0000000 -3.915271 -4.1231828e-17 0.0000000