I am currently working on a project with Dr. Tomanek, specifically working on a molecular dynamics program that simulates polymer interactions. The program is called Polymer Molecular Dynamics or PMD for short.
A major component of this program that I had a limited use of was the optimization function. The purpose of the optimization function is to take a particular particle configuration and slowly move the particles in an iterative fashion such that a lower energy level is realized by the particle configuration.
There are several methods to accomplish such an optimization, one being a monte-carlo-style simulation, another being the conjugate gradient method. The conjugate gradient method on a particle system works by examining the gradient of the potential, and then picking the path that has the greatest negative gradient value, incrementing the coordinates for this, then repeating the calculation. This method does not work for all different types of potentials, especially non-linear potentials - as the algorithm tends to get stuck in local minima - however it works well for the potential currently used in the PMD program.
The Computation Physics class that I am taking (PHY480) taught me about the various considerations that go into creating an optimization function for a particular system - in this way it has aided me in understanding how a major component of the software I am developing for works - helping me to make better decisions on how to use the software.