10.12.2012 Views

Κεφάλαιο 1 - Nemertes

Κεφάλαιο 1 - Nemertes

Κεφάλαιο 1 - Nemertes

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

ΚΕΦΑΛΑΙΟ 6 ο<br />

distance επιστρέφει την απόσταση µεταξύ δύο σωµατιδίων χρησιµοποιώντας τα<br />

απότελέσµατα των δυο πρώτων, ενώ η sqrt_distance απλά επιστρέφει την ευκλείδεια<br />

απόσταση µεταξύ δύο σηµείων.<br />

Ένα άλλο σηµείο που πρέπει να παρουσιαστεί είναι ο τρόπος υπολογισµού των γειτονικών<br />

σωµατιδίων. Για την απλοποίηση των υπολογισµών, κάθε σωµατίδιο απόθηκεύει µια λίστα<br />

µε τα σωµατίδια τα οποία είναι εντός της ακτίνας αλληλεπίδρασής του όπως αυτή ορίσθηκε<br />

νωρίτερα. Έτσι, όταν υπολογίζεται το δυναµικό, λαµβάνονται υπ’ όψη µόνο αυτά και όχι το<br />

σύνολο του µοντέλου. Περιοδικά η λίστα αυτή ανανεώνεται για να συνυπολογίσει τις<br />

µετακινήσεις των σωµατιδίων. Η περιοδικότητα της ανανέωσης απότελεί επιλογή του<br />

χρήστη.<br />

private static void calculateMorsePotentialNeighbors(Particle p)<br />

{<br />

Map neighbors = p.getNeighbors();<br />

Iterator neighbors_iter = neighbors.keySet().iterator();<br />

calculateMorsePotentialIter(p, neighbors_iter, false);<br />

}<br />

Στην παραπάνω συνάρτηση χρησιµοποιείται η έτοιµη λίστα των γειτονικών σωµατιδίων για<br />

τον υπολογισµό του δυναµικού.<br />

static void calculateNeighbors(Iterator iterator, ParticlesProxy particlesProxy)<br />

{<br />

noOfNeighborCalculations++;<br />

if (noOfNeighborCalculations >= MDParameters.NEIGHBOR_STEP)<br />

{<br />

System.out.println("Calculating neighbors...");<br />

for (Iterator iter = iterator; iter.hasNext();)<br />

{<br />

//calculate the potential<br />

Particle p = (Particle) iter.next();<br />

int before = p.getNeighbors().size();<br />

//<br />

p.clearNeighbors();<br />

doCalculateNeighbors(p, particlesProxy.getParticlesIterator());<br />

int after = p.getNeighbors().size();<br />

if (before != after)<br />

{<br />

System.out.println("########## DIFFERENCE ");<br />

System.out.println("AFTER Particle " + p.getId() + " has " + after + "<br />

neighbors");<br />

System.out.println("BEFORE Particle " + p.getId() + " has " + before + "<br />

neighbors");<br />

235

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!