Molecular Dynamics simulations of Silicon-Energy Problems

AI Thread Summary
The discussion centers on a user named Daniel who is experiencing issues with a silicon crystal simulation consisting of 64 atoms. Despite his efforts to calibrate the system to achieve equilibrium and conserve energy, he observes unexpected energy spikes leading to the melting of the structure. Daniel employs the Stillinger-Weber potential and uses a Java program to implement a third-order Gear Predictor-Corrector algorithm for integrating Newtonian motion. He seeks assistance in identifying potential errors in his code or method, as the system's behavior deviates from expected physical properties. Responses suggest that the problem may stem from the integration scheme or the choice of time step, with recommendations to consider using an adaptive differential equation solver for better stability. Daniel is encouraged to share more details about his integration scheme to facilitate troubleshooting.
danielakkerma
Messages
230
Reaction score
0
Hello everyone!
I have constructed a model of a silicon crystal, consisting of 64 atoms, for my various needs of testing physical phenomena in that substance(Silicon).
At present, rather annoyingly, I am still stuck at the basic operational level, that is, calibrating the system to an expected equilibrium, then releasing it, using a specified potential, and (fingers-crossed), hoping that it would maintain that structure, but most of all, would at least conserve fundamental physical properties, most notably, the total Energy; however, it doesn't work!
My problem is that the energy starts to spike up for no apparent reason, and that the whole system therefore starts to melt unexpectedly, without any external input of energy of any kind!
***
I have taken as my potential the Stillinger-Weber one, personally derived the formulae for the force(including the 3-body-part), made sure all quantities were physically sound, and then applied it.
I proceeded then to allocate velocities using the Maxwell distribution, and to remove, thereafter, the center-of-mass drift.
I assigned coordinates using what every novice in Material/Solid State/Nano physics knows:
A similar rule can be found here.
Finally, I tucked the matter neatly into a Java program I had written for it, that integrates the equations of Newtonian motion via the Predictor-Corrector methods that are well-known, particularly Gear's approach; Then hoped for the best.
What am I missing? What have I done wrong?
Most sincerely thankful,
Beholden for your attention,
And reliant on your aid,
Daniel
P.S.
I've attached a text file denoting the evolution of time, Kinetic Energy, Potential Energy in that order. My time step is extremely small, 1 fs, a Femtosecond, but that file only includes data from every 10th iteration, to save space.;
Another is the set of coordinates of the atoms, in Angstroms(10^-10 meters).
The temperature was set to 300° Kelvin at the beginning of the simulation. You can see how rapidly the system swings out of control!
All other constants can be found in the links I've provided.
If there's anything else I should, or need to post, please let me know!
 

Attachments

Technology news on Phys.org
Folks, I really hate to bump this thread, but perhaps I am posting in the wrong board? Maybe the moderators could direct me to which niche this belongs, and move it there?
Thanks, and sorry for boosting what I fear is a very boring question,
:D!
Daniel
 
I'm afraid it's difficult to say what the problem could be without looking at the code - there are a myriad of ways in which a programming error could create difficulties. Swinging out of control, however, is sometimes a symptom of an error in the integrator, either in its implementation or with the step size versus rate of change of the equations - you might be better of trying an adaptive DE solver.
 
Hey, thanks for a very prompt and instructive reply!
Could posting the integration scheme help? (this is the third-order Gear Predictor-Corrector algorithm) Anyway, it goes as follows:
Code:
while(i < Mesh.getCount())
{
c = Mesh.get(i);
	c.r.Add(Vec.Dot(dt, c.v));
	c.r.Add(Vec.Dot(dt*dt/(2.0d), c.a));
	c.r.Add(Vec.Dot(dt*dt*dt/(6.0d), c.ap));
	c.v.Add(Vec.Dot(dt, c.a));
	c.v.Add(Vec.Dot(dt*dt/2.0d, c.ap));
	c.a.Add(Vec.Dot(dt, c.ap));
	c.apg = c.a;
i++;
}
Here, we have Mesh, as a linked list containing Particles(of which type is the variable "c").
Each particle contains vectors r, v, a, ap, apg, that correspond to the various vectors needed for this operation.
Static functions, belonging to the class(Vec), i.e., Add, Dot, carry out the vectorial addition and dot product, respectively.
After "predicting" the expected positions and accelerations, we compute the actual value for each c.a(that is, each particle's acceleration, by employing a function- "Forces"-, that collects and sums the particle's interactions using the selected potential, Stillinger-Weber).
Code:
i = 0; 
while(i < Mesh.getCount())
		{
			Forces(Mesh.get(i), i);
                        i++;
		}
Then we "correct" our erstwhile hunch re the future positions, by comparing the conjectured acceleration with the actual one:
Code:
		i = 0; 
		while(i < Mesh.getCount())
		{
		c = Mesh.get(i);
			da = Vec.Add(c.a, Vec.Dot(-1.0d, c.apg));
			c.r.Add(Vec.Dot(3.0d*dt*dt/(16.0d*d_c), da));
			c.v.Add(Vec.Dot(251.0d*dt/360.d, da));
                        c.ap.Add(Vec.Dot(11.0d/(dt*18.0d), da));
               i++;
}
All units are fully SI, meaning, dt = 10^-15 seconds, the distances likewise in meters.
Where could I have gone wrong?
Yours most thankful!
Daniel
 
Dear Peeps I have posted a few questions about programing on this sectio of the PF forum. I want to ask you veterans how you folks learn program in assembly and about computer architecture for the x86 family. In addition to finish learning C, I am also reading the book From bits to Gates to C and Beyond. In the book, it uses the mini LC3 assembly language. I also have books on assembly programming and computer architecture. The few famous ones i have are Computer Organization and...
I have a quick questions. I am going through a book on C programming on my own. Afterwards, I plan to go through something call data structures and algorithms on my own also in C. I also need to learn C++, Matlab and for personal interest Haskell. For the two topic of data structures and algorithms, I understand there are standard ones across all programming languages. After learning it through C, what would be the biggest issue when trying to implement the same data...
Back
Top