ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/mattDisertation/oopse.tex
(Generate patch)

Comparing trunk/mattDisertation/oopse.tex (file contents):
Revision 1068 by mmeineke, Wed Feb 25 21:48:44 2004 UTC vs.
Revision 1071 by mmeineke, Thu Feb 26 21:55:43 2004 UTC

# Line 279 | Line 279 | and
279   \epsilon_{ij} = \sqrt{\epsilon_{ii} \epsilon_{jj}}
280   \label{eq:epsilonMix}
281   \end{equation}
282
283
282  
283   \subsection{\label{oopseSec:DUFF}Dipolar Unified-Atom Force Field}
284  
# Line 713 | Line 711 | Every {\sc oopse} simulation begins with a {\sc bass}
711  
712   \subsection{{\sc bass} and Model Files}
713  
714 < Every {\sc oopse} simulation begins with a {\sc bass} file. {\sc bass}
715 < (\underline{B}izarre \underline{A}tom \underline{S}imulation
716 < \underline{S}yntax) is a script syntax that is parsed by {\sc oopse} at
717 < runtime. The {\sc bass} file allows for the user to completely describe the
718 < system they are to simulate, as well as tailor {\sc oopse}'s behavior during
719 < the simulation. {\sc bass} files are denoted with the extension
720 < \texttt{.bass}, an example file is shown in
721 < Fig.~\ref{fig:bassExample}.
714 > Every {\sc oopse} simulation begins with a Bizarre Atom Simulation
715 > Syntax ({\sc bass}) file. {\sc bass} is a script syntax that is parsed
716 > by {\sc oopse} at runtime. The {\sc bass} file allows for the user to
717 > completely describe the system they wish to simulate, as well as tailor
718 > {\sc oopse}'s behavior during the simulation. {\sc bass} files are
719 > denoted with the extension
720 > \texttt{.bass}, an example file is shown in
721 > Scheme~\ref{sch:bassExample}.
722  
723 < \begin{figure}
726 < \centering
727 < \framebox[\linewidth]{\rule{0cm}{0.75\linewidth}I'm a {\sc bass} file!}
728 < \caption{Here is an example \texttt{.bass} file}
729 < \label{fig:bassExample}
730 < \end{figure}
723 > \begin{lstlisting}[float,caption={[An example of a complete {\sc bass} file] An example showing a complete {\sc bass} file.},label={sch:bassExample}]
724  
725 + molecule{
726 +  name = "Ar";
727 +  nAtoms = 1;
728 +  atom[0]{
729 +    type="Ar";
730 +    position( 0.0, 0.0, 0.0 );
731 +  }
732 + }
733 +
734 + nComponents = 1;
735 + component{
736 +  type = "Ar";
737 +  nMol = 108;
738 + }
739 +
740 + initialConfig = "./argon.init";
741 +
742 + forceField = "LJ";
743 + ensemble = "NVE"; // specify the simulation enesemble
744 + dt = 1.0;         // the time step for integration
745 + runTime = 1e3;    // the total simulation run time
746 + sampleTime = 100; // trajectory file frequency
747 + statusTime = 50;  // statistics file frequency
748 +
749 + \end{lstlisting}
750 +
751   Within the \texttt{.bass} file it is necessary to provide a complete
752   description of the molecule before it is actually placed in the
753 < simulation. The {\sc bass} syntax was originally developed with this goal in
754 < mind, and allows for the specification of all the atoms in a molecular
755 < prototype, as well as any bonds, bends, or torsions. These
753 > simulation. The {\sc bass} syntax was originally developed with this
754 > goal in mind, and allows for the specification of all the atoms in a
755 > molecular prototype, as well as any bonds, bends, or torsions. These
756   descriptions can become lengthy for complex molecules, and it would be
757 < inconvenient to duplicate the simulation at the beginning of each {\sc bass}
758 < script. Addressing this issue {\sc bass} allows for the inclusion of model
759 < files at the top of a \texttt{.bass} file. These model files, denoted
760 < with the \texttt{.mdl} extension, allow the user to describe a
761 < molecular prototype once, then simply include it into each simulation
762 < containing that molecule.
757 > inconvenient to duplicate the simulation at the beginning of each {\sc
758 > bass} script. Addressing this issue {\sc bass} allows for the
759 > inclusion of model files at the top of a \texttt{.bass} file. These
760 > model files, denoted with the \texttt{.mdl} extension, allow the user
761 > to describe a molecular prototype once, then simply include it into
762 > each simulation containing that molecule. Returning to the example in
763 > Scheme~\ref{sch:bassExample}, the \texttt{.mdl} file's contents would
764 > be Scheme~\ref{sch:mdlExample}, and the new \texttt{.bass} file would
765 > become Scheme~\ref{sch:bassExPrime}.
766 >
767 > \begin{lstlisting}[float,caption={An example \texttt{.mdl} file.},label={sch:mdlExample}]
768 >
769 > molecule{
770 >  name = "Ar";
771 >  nAtoms = 1;
772 >  atom[0]{
773 >    type="Ar";
774 >    position( 0.0, 0.0, 0.0 );
775 >  }
776 > }
777 >
778 > \end{lstlisting}
779 >
780 > \begin{lstlisting}[float,caption={Revised {\sc bass} example.},label={sch:bassExPrime}]
781 >
782 > #include "argon.mdl"
783 >
784 > molecule{
785 >  name = "Ar";
786 >  nAtoms = 1;
787 >  atom[0]{
788 >    type="Ar";
789 >    position( 0.0, 0.0, 0.0 );
790 >  }
791 > }
792 >
793 > nComponents = 1;
794 > component{
795 >  type = "Ar";
796 >  nMol = 108;
797 > }
798 >
799 > initialConfig = "./argon.init";
800 >
801 > forceField = "LJ";
802 > ensemble = "NVE";
803 > dt = 1.0;
804 > runTime = 1e3;
805 > sampleTime = 100;
806 > statusTime = 50;
807  
808 + \end{lstlisting}
809 +
810   \subsection{\label{oopseSec:coordFiles}Coordinate Files}
811  
812   The standard format for storage of a systems coordinates is a modified
813   xyz-file syntax, the exact details of which can be seen in
814 < App.~\ref{appCoordFormat}. As all bonding and molecular information is
815 < stored in the \texttt{.bass} and \texttt{.mdl} files, the coordinate
816 < files are simply the complete set of coordinates for each atom at a
817 < given simulation time.
814 > Scheme~\ref{sch:dumpFormat}. As all bonding and molecular information
815 > is stored in the \texttt{.bass} and \texttt{.mdl} files, the
816 > coordinate files are simply the complete set of coordinates for each
817 > atom at a given simulation time. One important note, although the
818 > simulation propagates the complete rotation matrix, directional
819 > entities are written out using quanternions, to save space in the
820 > output files.
821  
822 < There are three major files used by {\sc oopse} written in the coordinate
823 < format, they are as follows: the initialization file, the simulation
824 < trajectory file, and the final coordinates of the simulation. The
825 < initialization file is necessary for {\sc oopse} to start the simulation
826 < with the proper coordinates. It is typically denoted with the
827 < extension \texttt{.init}. The trajectory file is created at the
828 < beginning of the simulation, and is used to store snapshots of the
829 < simulation at regular intervals. The first frame is a duplication of
830 < the \texttt{.init} file, and each subsequent frame is appended to the
831 < file at an interval specified in the \texttt{.bass} file. The
832 < trajectory file is given the extension \texttt{.dump}. The final
833 < coordinate file is the end of run or \texttt{.eor} file. The
822 > \begin{lstlisting}[float,caption={[The format of the coordinate files]Shows the format of the coordinate files. The fist line is the number of atoms. The second line begins with the time stamp followed by the three $\mathbf{H}$ column vectors. The next lines are the atomic coordinates for all atoms in the system. First is the name followed by position, velocity, quanternions, and lastly angular momentum.},label=sch:dumpFormat]
823 >
824 > nAtoms
825 > time; Hxx Hyx Hzx; Hxy Hyy Hzy; Hxz Hyz Hzz;
826 > Name1 x y z vx vy vz q0 q1 q2 q3 jx jy jz
827 > Name2 x y z vx vy vz q0 q1 q2 q3 jx jy jz
828 > etc...
829 >
830 > \end{lstlisting}
831 >
832 >
833 > There are three major files used by {\sc oopse} written in the
834 > coordinate format, they are as follows: the initialization file
835 > (\texttt{.init}), the simulation trajectory file (\texttt{.dump}), and
836 > the final coordinates of the simulation. The initialization file is
837 > necessary for {\sc oopse} to start the simulation with the proper
838 > coordinates, and is generated before the simulation run. The
839 > trajectory file is created at the beginning of the simulation, and is
840 > used to store snapshots of the simulation at regular intervals. The
841 > first frame is a duplication of the
842 > \texttt{.init} file, and each subsequent frame is appended to the file
843 > at an interval specified in the \texttt{.bass} file with the
844 > \texttt{sampleTime} flag. The final coordinate file is the end of run file. The
845   \texttt{.eor} file stores the final configuration of the system for a
846   given simulation. The file is updated at the same time as the
847 < \texttt{.dump} file. However, it only contains the most recent
847 > \texttt{.dump} file, however, it only contains the most recent
848   frame. In this way, an \texttt{.eor} file may be used as the
849 < initialization file to a second simulation in order to continue or
850 < recover the previous simulation.
849 > initialization file to a second simulation in order to continue a
850 > simulation or recover one from a processor that has crashed during the
851 > course of the run.
852  
853   \subsection{\label{oopseSec:initCoords}Generation of Initial Coordinates}
854  
855 < As was stated in Sec.~\ref{oopseSec:coordFiles}, an initialization file
856 < is needed to provide the starting coordinates for a simulation. The
857 < {\sc oopse} package provides a program called \texttt{sysBuilder} to aid in
858 < the creation of the \texttt{.init} file. \texttt{sysBuilder} is {\sc bass}
859 < aware, and will recognize arguments and parameters in the
860 < \texttt{.bass} file that would otherwise be ignored by the
861 < simulation. The program itself is under continual development, and is
782 < offered here as a helper tool only.
855 > As was stated in Sec.~\ref{oopseSec:coordFiles}, an initialization
856 > file is needed to provide the starting coordinates for a
857 > simulation. The {\sc oopse} package provides a program called
858 > \texttt{sysBuilder} to aid in the creation of the \texttt{.init}
859 > file. \texttt{sysBuilder} uses {\sc bass}, and will recognize
860 > arguments and parameters in the \texttt{.bass} file that would
861 > otherwise be ignored by the simulation.
862  
863   \subsection{The Statistics File}
864  
865 < The last output file generated by {\sc oopse} is the statistics file. This
866 < file records such statistical quantities as the instantaneous
867 < temperature, volume, pressure, etc. It is written out with the
868 < frequency specified in the \texttt{.bass} file. The file allows the
869 < user to observe the system variables as a function of simulation time
870 < while the simulation is in progress. One useful function the
871 < statistics file serves is to monitor the conserved quantity of a given
872 < simulation ensemble, this allows the user to observe the stability of
873 < the integrator. The statistics file is denoted with the \texttt{.stat}
874 < file extension.
865 > The last output file generated by {\sc oopse} is the statistics
866 > file. This file records such statistical quantities as the
867 > instantaneous temperature, volume, pressure, etc. It is written out
868 > with the frequency specified in the \texttt{.bass} file with the
869 > \texttt{statusTime} keyword. The file allows the user to observe the
870 > system variables as a function of simulation time while the simulation
871 > is in progress. One useful function the statistics file serves is to
872 > monitor the conserved quantity of a given simulation ensemble, this
873 > allows the user to observe the stability of the integrator. The
874 > statistics file is denoted with the \texttt{.stat} file extension.
875  
876   \section{\label{oopseSec:mechanics}Mechanics}
877  
# Line 800 | Line 879 | al.}.\cite{Dullweber1997} The reason for this integrat
879  
880   Integration of the equations of motion was carried out using the
881   symplectic splitting method proposed by Dullweber \emph{et
882 < al.}.\cite{Dullweber1997} The reason for this integrator selection
883 < deals with poor energy conservation of rigid body systems using
884 < quaternions. While quaternions work well for orientational motion in
885 < alternate ensembles, the microcanonical ensemble has a constant energy
886 < requirement that is quite sensitive to errors in the equations of
887 < motion. The original implementation of this code utilized quaternions
888 < for rotational motion propagation; however, a detailed investigation
889 < showed that they resulted in a steady drift in the total energy,
890 < something that has been observed by others.\cite{Laird97}
882 > al.}.\cite{Dullweber1997} The reason for the selection of this
883 > integrator, is the poor energy conservation of rigid body systems
884 > using quaternion dynamics. While quaternions work well for
885 > orientational motion in alternate ensembles, the microcanonical
886 > ensemble has a constant energy requirement that is quite sensitive to
887 > errors in the equations of motion. The original implementation of {\sc
888 > oopse} utilized quaternions for rotational motion propagation;
889 > however, a detailed investigation showed that they resulted in a
890 > steady drift in the total energy, something that has been observed by
891 > others.\cite{Laird97}
892  
893   The key difference in the integration method proposed by Dullweber
894 < \emph{et al.} is that the entire rotation matrix is propagated from
895 < one time step to the next. In the past, this would not have been as
896 < feasible a option, being that the rotation matrix for a single body is
897 < nine elements long as opposed to 3 or 4 elements for Euler angles and
898 < quaternions respectively. System memory has become much less of an
899 < issue in recent times, and this has resulted in substantial benefits
900 < in energy conservation. There is still the issue of 5 or 6 additional
821 < elements for describing the orientation of each particle, which will
822 < increase dump files substantially. Simply translating the rotation
823 < matrix into its component Euler angles or quaternions for storage
824 < purposes relieves this burden.
894 > \emph{et al}.~({\sc dlm}) is that the entire rotation matrix is propagated from
895 > one time step to the next. In the past, this would not have been a
896 > feasible option, since the rotation matrix for a single body is nine
897 > elements long as opposed to three or four elements for Euler angles
898 > and quaternions respectively. System memory has become much less of an
899 > issue in recent times, and the {\sc dlm} method has used memory in
900 > exchange for substantial benefits in energy conservation.
901  
902 < The symplectic splitting method allows for Verlet style integration of
903 < both linear and angular motion of rigid bodies. In the integration
904 < method, the orientational propagation involves a sequence of matrix
902 > The {\sc dlm} method allows for Verlet style integration of both
903 > linear and angular motion of rigid bodies. In the integration method,
904 > the orientational propagation involves a sequence of matrix
905   evaluations to update the rotation matrix.\cite{Dullweber1997} These
906 < matrix rotations end up being more costly computationally than the
907 < simpler arithmetic quaternion propagation. With the same time step, a
908 < 1000 SSD particle simulation shows an average 7\% increase in
909 < computation time using the symplectic step method in place of
910 < quaternions. This cost is more than justified when comparing the
911 < energy conservation of the two methods as illustrated in figure
836 < \ref{timestep}.
906 > matrix rotations are more costly computationally than the simpler
907 > arithmetic quaternion propagation. With the same time step, a 1000 SSD
908 > particle simulation shows an average 7\% increase in computation time
909 > using the {\sc dlm} method in place of quaternions. This cost is more
910 > than justified when comparing the energy conservation of the two
911 > methods as illustrated in Fig.~\ref{timestep}.
912  
913   \begin{figure}
914   \centering
915   \includegraphics[width=\linewidth]{timeStep.eps}
916 < \caption{Energy conservation using quaternion based integration versus
917 < the symplectic step method proposed by Dullweber \emph{et al.} with
916 > \caption[Energy conservation for quaternion versus {\sc dlm} dynamics]{Energy conservation using quaternion based integration versus
917 > the {\sc dlm} method with
918   increasing time step. For each time step, the dotted line is total
919 < energy using the symplectic step integrator, and the solid line comes
919 > energy using the {\sc dlm} integrator, and the solid line comes
920   from the quaternion integrator. The larger time step plots are shifted
921   up from the true energy baseline for clarity.}
922   \label{timestep}
923   \end{figure}
924  
925 < In figure \ref{timestep}, the resulting energy drift at various time
926 < steps for both the symplectic step and quaternion integration schemes
925 > In Fig.~\ref{timestep}, the resulting energy drift at various time
926 > steps for both the {\sc dlm} and quaternion integration schemes
927   is compared. All of the 1000 SSD particle simulations started with the
928   same configuration, and the only difference was the method for
929   handling rotational motion. At time steps of 0.1 and 0.5 fs, both
930   methods for propagating particle rotation conserve energy fairly well,
931   with the quaternion method showing a slight energy drift over time in
932   the 0.5 fs time step simulation. At time steps of 1 and 2 fs, the
933 < energy conservation benefits of the symplectic step method are clearly
933 > energy conservation benefits of the {\sc dlm} method are clearly
934   demonstrated. Thus, while maintaining the same degree of energy
935   conservation, one can take considerably longer time steps, leading to
936   an overall reduction in computation time.
# Line 864 | Line 939 | with increasing time step. To insure accuracy in the c
939   time steps up to three femtoseconds. A slight energy drift on the
940   order of 0.012 kcal/mol per nanosecond was observed at a time step of
941   four femtoseconds, and as expected, this drift increases dramatically
942 < with increasing time step. To insure accuracy in the constant energy
868 < simulations, time steps were set at 2 fs and kept at this value for
869 < constant pressure simulations as well.
942 > with increasing time step.
943  
944  
945   \subsection{\label{sec:extended}Extended Systems for other Ensembles}
# Line 875 | Line 948 | constant pressure simulations as well.
948   {\sc oopse} implements a
949  
950  
951 < \subsubsection{\label{oopseSec:noseHooverThermo}Nose-Hoover Thermostatting}
951 > \subsection{\label{oopseSec:noseHooverThermo}Nose-Hoover Thermostatting}
952  
953   To mimic the effects of being in a constant temperature ({\sc nvt})
954   ensemble, {\sc oopse} uses the Nose-Hoover extended system
# Line 901 | Line 974 | set to 1 ps using the {\tt tauThermostat = 1000; } com
974   some subtlety in choosing values for $\tau_{T}$, and it is usually set
975   to values of a few ps.  Within a {\sc bass} file, $\tau_{T}$ could be
976   set to 1 ps using the {\tt tauThermostat = 1000; } command.
977 +
978 + \subsection{\label{oopseSec:rattle}The {\sc rattle} Method for Bond
979 +        Constraints}
980 +
981 + In order to satisfy the constraints of fixed bond lengths within {\sc
982 + oopse}, we have implemented the {\sc rattle} algorithm of
983 + Andersen.\cite{andersen83} The algorithm is a velocity verlet
984 + formulation of the {\sc shake} method\cite{ryckaert77} of iteratively
985 + solving the Lagrange multipliers of constraint. The system of lagrange
986 + multipliers allows one to reformulate the equations of motion with
987 + explicit constraint forces on the equations of
988 + motion.\cite{fowles99:lagrange}
989 +
990 + Consider a system described by qoordinates $q_1$ and $q_2$ subject to an
991 + equation of constraint:
992 + \begin{equation}
993 + \sigma(q_1, q_2,t) = 0
994 + \label{oopseEq:lm1}
995 + \end{equation}
996 + The Lagrange formulation of the equations of motion can be written:
997 + \begin{equation}
998 + \delta\int_{t_1}^{t_2}L\, dt =
999 +        \int_{t_1}^{t_2} \sum_i \biggl [ \frac{\partial L}{\partial q_i}
1000 +        - \frac{d}{dt}\biggl(\frac{\partial L}{\partial \dot{q}_i}
1001 +        \biggr ) \biggr] \delta q_i \, dt = 0
1002 + \label{oopseEq:lm2}
1003 + \end{equation}
1004 + Here, $\delta q_i$ is not independent for each $q$, as $q_1$ and $q_2$
1005 + are linked by $\sigma$. However, $\sigma$ is fixed at any given
1006 + instant of time, giving:
1007 + \begin{align}
1008 + \delta\sigma &= \biggl( \frac{\partial\sigma}{\partial q_1} \delta q_1 %
1009 +        + \frac{\partial\sigma}{\partial q_2} \delta q_2 \biggr) = 0 \\
1010 + %
1011 + \frac{\partial\sigma}{\partial q_1} \delta q_1 &= %
1012 +        - \frac{\partial\sigma}{\partial q_2} \delta q_2 \\
1013 + %
1014 + \delta q_2 &= - \biggl(\frac{\partial\sigma}{\partial q_1} \bigg / %
1015 +        \frac{\partial\sigma}{\partial q_2} \biggr) \delta q_1
1016 + \end{align}
1017 + Substituted back into Eq.~\ref{oopseEq:lm2},
1018 + \begin{equation}
1019 + \int_{t_1}^{t_2}\biggl [ \biggl(\frac{\partial L}{\partial q_1}
1020 +        - \frac{d}{dt}\,\frac{\partial L}{\partial \dot{q}_1}
1021 +        \biggr)
1022 +        - \biggl( \frac{\partial L}{\partial q_1}
1023 +        - \frac{d}{dt}\,\frac{\partial L}{\partial \dot{q}_1}
1024 +        \biggr) \biggl(\frac{\partial\sigma}{\partial q_1} \bigg / %
1025 +        \frac{\partial\sigma}{\partial q_2} \biggr)\biggr] \delta q_1 \, dt = 0
1026 + \label{oopseEq:lm3}
1027 + \end{equation}
1028 + Leading to,
1029 + \begin{equation}
1030 + \frac{\biggl(\frac{\partial L}{\partial q_1}
1031 +        - \frac{d}{dt}\,\frac{\partial L}{\partial \dot{q}_1}
1032 +        \biggr)}{\frac{\partial\sigma}{\partial q_1}} =
1033 + \frac{\biggl(\frac{\partial L}{\partial q_2}
1034 +        - \frac{d}{dt}\,\frac{\partial L}{\partial \dot{q}_2}
1035 +        \biggr)}{\frac{\partial\sigma}{\partial q_2}}
1036 + \label{oopseEq:lm4}
1037 + \end{equation}
1038 + This relation can only be statisfied, if both are equal to a single
1039 + function $-\lambda(t)$,
1040 + \begin{align}
1041 + \frac{\biggl(\frac{\partial L}{\partial q_1}
1042 +        - \frac{d}{dt}\,\frac{\partial L}{\partial \dot{q}_1}
1043 +        \biggr)}{\frac{\partial\sigma}{\partial q_1}} &= -\lambda(t) \\
1044 + %
1045 + \frac{\partial L}{\partial q_1}
1046 +        - \frac{d}{dt}\,\frac{\partial L}{\partial \dot{q}_1} &=
1047 +         -\lambda(t)\,\frac{\partial\sigma}{\partial q_1} \\
1048 + %
1049 + \frac{\partial L}{\partial q_1}
1050 +        - \frac{d}{dt}\,\frac{\partial L}{\partial \dot{q}_1}
1051 +         + \mathcal{G}_i &= 0
1052 + \end{align}
1053 + Where $\mathcal{G}_i$, the force of constraint on $i$, is:
1054 + \begin{equation}
1055 + \mathcal{G}_i = \lambda(t)\,\frac{\partial\sigma}{\partial q_1}
1056 + \label{oopseEq:lm5}
1057 + \end{equation}
1058  
1059 + In a simulation, this would involve the solution of a set of $(m + n)$
1060 + number of equations. Where $m$ is the number of constraints, and $n$
1061 + is the number of constrained coordinates. In practice, this is not
1062 + done, as the matrix inversion neccassary to solve the system of
1063 + equations would be very time consuming to solve. Additionally, the
1064 + numerical error in the solution of the set of $\lambda$'s would be
1065 + compounded by the error inherent in propagating by the Velocity Verlet
1066 + algorithm ($\Delta t^4$). The verlet propagation error is negligible
1067 + in an unconstrained system, as one is interested in the statisitics of
1068 + the run, and not that the run be numerically exact to the ``true''
1069 + integration. This relates back to the ergodic hypothesis that a time
1070 + integral of a valid trajectory will still give the correct enesemble
1071 + average. However, in the case of constraints, if the equations of
1072 + motion leave the ``true'' trajectory, they are departing from the
1073 + constrained surface. The method that is used, is to iteratively solve
1074 + for $\lambda(t)$ at each time step.
1075 +
1076 + In {\sc rattle} the equations of motion are modified subject to the
1077 + following two constraints:
1078 + \begin{align}
1079 + \sigma_{ij}[\mathbf{r}(t)] \equiv
1080 +        [ \mathbf{r}_i(t) - \mathbf{r}_j(t)]^2  - d_{ij}^2 &= 0 %
1081 +        \label{oopseEq:c1} \\
1082 + %
1083 + [\mathbf{\dot{r}}_i(t) - \mathbf{\dot{r}}_j(t)] \cdot
1084 +        [\mathbf{r}_i(t) - \mathbf{r}_j(t)] &= 0 \label{oopseEq:c2}
1085 + \end{align}
1086 + Eq.~\ref{oopseEq:c1} is the set of bond constraints, where $d_{ij}$ is
1087 + the constrained distance between atom $i$ and
1088 + $j$. Eq.~\ref{oopseEq:c2} constrains the velocities of $i$ and $j$ to
1089 + be perpindicular to the bond vector, so that the bond can neither grow
1090 + nor shrink. The constrained dynamics equations become:
1091 + \begin{equation}
1092 + m_i \mathbf{\ddot{r}}_i = \mathbf{F}_i + \mathbf{\mathcal{G}}_i
1093 + \label{oopseEq:r1}
1094 + \end{equation}
1095 + Where,
1096 + \begin{equation}
1097 + \mathbf{\mathcal{G}}_i = - \sum_j \lambda_{ij}(t)\,\nabla \sigma_{ij}
1098 + \label{oopseEq:r2}
1099 + \end{equation}
1100 +
1101 + In Velocity Verlet, if $\Delta t = h$, the propagation can be written:
1102 + \begin{align}
1103 + \mathbf{r}_i(t+h) &=
1104 +        \mathbf{r}_i(t) + h\mathbf{\dot{r}}(t) +
1105 +        \frac{h^2}{2m_i}\,\Bigl[ \mathbf{F}_i(t) +
1106 +        \mathbf{\mathcal{G}}_{Ri}(t) \Bigr] \label{oopseEq:vv1} \\
1107 + %
1108 + \mathbf{\dot{r}}_i(t+h) &=
1109 +        \mathbf{\dot{r}}_i(t) + \frac{h}{2m_i}
1110 +        \Bigl[ \mathbf{F}_i(t) + \mathbf{\mathcal{G}}_{Ri}(t) +
1111 +        \mathbf{F}_i(t+h) + \mathbf{\mathcal{G}}_{Vi}(t+h) \Bigr] %
1112 +        \label{oopseEq:vv2}
1113 + \end{align}
1114  
1115 +
1116 +
1117   \subsection{\label{oopseSec:zcons}Z-Constraint Method}
1118  
1119 < Based on fluctuation-dissipation theorem,\bigskip\ force auto-correlation
1119 > Based on fluctuation-dissipation theorem, a force auto-correlation
1120   method was developed to investigate the dynamics of ions inside the ion
1121   channels.\cite{Roux91} Time-dependent friction coefficient can be calculated
1122   from the deviation of the instantaneous force from its mean force.

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines