Tipico schema in un codice
Download
1 / 38

Tipico schema in un codice - PowerPoint PPT Presentation


  • 102 Views
  • Uploaded on

Tipico schema in un codice. fornite dall'esterno (file contenente una configurazione). posizioni iniziali. create dal codice stesso in base alle richieste dello user ("crea" cristallo fcc, bcc, diamante, etc.). Tipico schema in un codice.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' Tipico schema in un codice' - balthasar-lali


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
Tipico schema in un codice
Tipico schema in un codice

fornite dall'esterno (file contenente una configurazione)

posizioni iniziali

create dal codice stesso in base alle richieste dello

user ("crea" cristallo fcc, bcc, diamante, etc.)


Tipico schema in un codice1
Tipico schema in un codice

x(1),y(1),z(1),x(2),y(2),z(2), ..,x(natoms),y(natoms),z(natoms)

posizioni iniziali

Gli atomi sono sempre numerati in qualche modo. La particolare numerazione non è di per sè

significativa

2

3

1

4

6

7

5

8

9

10

12

11


Tipico schema in un codice2
Tipico schema in un codice

lista dei vicini: voglio sapere per ogni atomo i

quanti - nvicini(i) - atomi rientrano nel suo raggio di

cutoff

configurazione nota

Errore gravissimo e comune: cerco i vicini di 6 e trovo (se metto un cutoff a primi vicini)

2,5,7,10. Totale: nvicini(6)=4. Se per esempio devo fare un ciclo in cui calcolo la distanza

tra 6 e i suoi vicini, non devo fare

do j=1,nvicini(6)

dx=x(6)-x(j) .....!!!!calcolerei le distanze tra 6 e 1, 6 e 2, etc. Invece devo fare:

dx=x(6)-x(ivicini(6,j)) dove ivicini(6,1)=2; ivicini(6,2)=5, etc.

2

3

1

4

E' chiave la matrice intera ivicini(i,j) che mi

dice che il vicino j-simo dell'atomo i è

l'atomo ivicini(i,j)

6

7

5

8

9

10

12

11



Metodo diretto
Metodo diretto

Notare che potremmo fare

il ciclo in metà del tempo ...

do i=1,natoms

do j=1,natoms

rij=(x(i)-x(j))*(x(i)-x(j))+(y(i) ....

rij=sqrt(rij)

if(i.ne.j)then

ene=ene+.....

endif

end do

end do


Metodo basato sulla lista dei vicini
Metodo basato sulla lista dei vicini

call vicini(natoms,nvicmax,nvicini, ivicini)

do i=1,natoms

do k=1,nvicini(i)

j=ivicini(i,k)

rij=(x(i)-x(j))*(x(i)-x(j))+(y(i) ....

rij=sqrt(rij)

ene=ene+.....

end do

end do


Se introduco il raccordo polinomiale
Se introduco il raccordo polinomiale ...

call vicini(natoms,nvicmax,nvicini, ivicini)

do i=1,natoms

do k=1,nvicini(i)

j=ivicini(i,k)

rij=(x(i)-x(j))*(x(i)-x(j))+(y(i) ....

rij=sqrt(rij)

ecoppia=0.d0

if(rij.le.rprimo)then

ecoppia=4.d0*eps …..

elseif(rij.lt.rc)then

ecoppia=polinomio

endif

epot=epot+ecoppia

end do

end do

epot=0.5d0*epot


Notare che detto cos non molto furbo
Notare che detto così non è molto furbo

call vicini(natoms,nvicmax,nvicini, ivicini)

do i=1,natoms

do k=1,nvicini(i)

j=ivicini(i,k)

rij=(x(i)-x(j))*(x(i)-x(j))+(y(i) ....

rij=sqrt(rij)

ene=ene+.....

end do

end do

doppio ciclo (natoms x natoms)

doppio ciclo (natoms x nvicini)

... a menoche non sipossaevitarediricalcolare la listadeivicini


Calcolo delle forze calcoliamo la forza lungo x che agisce sull atomo k
Calcolo delle forze: calcoliamo la forza lungo x che agisce sull'atomo k

forza su x che agisce sull'atomo

k per effetto dell'atomo j


Calcolo delle forze calcoliamo la forza lungo x che agisce sull atomo k dovuta all atomo j
Calcolo delle forze: calcoliamo la forza lungo x che agisce sull'atomo k, dovuta all'atomo j


Calcolo delle forze: calcoliamo la forza che agisce sull'atomo k, dovuta all'atomo j (la forzatotale su k è subito ottenuta sommando su j)

E' così facile perchè è a coppie (e anche perchè la forma

funzionale è quella semplicissima di Lennard-Jones)


Calcolo delle forze come si traduce tutto ci in un codice
Calcolo delle forze: come si traduce tutto ciò in un codice?

forza su x che agisce sull'atomo

k per effetto del suo vicino j-simo

Alla fine mi interessa quella totale che

agisce su k: basta sommare su j..


Non ci dimentichiamo di due complicazioni codice?

Se ho PBC .........

Nel calcolo sia dell'energia sia delle forze devo utilizzare il raccordo (e la sua derivata)

invece dell'espressione standard del potenziale!!!


Calcolo delle forze: calcoliamo la forza lungo codice?x che agisce sull'atomo k, dovuta all'atomo j nel raccordo


Calcolo delle forze: calcoliamo la forza lungo codice?x che agisce sull'atomo k, dovuta all'atomo j nel raccordo


r’<rc codice?

Dopo un po’ di conti …………………..



Calcolo delle forze calcoliamo numericamente la forza lungo x che agisce sull atomo k1
Calcolo delle forze: calcoliamo numericamente la forza lungo x che agisce sull'atomo k

  • Nel codice:

  • salvo le posizione ufficiali in vettori xsave,ysave,zsave

  • 2) x(k)=x(k)+h; calcolo l’energia e la salvo in eplus

  • 3) x(k)=xsave(k)-h; calcolo l’energia e la salvo in eminus

  • 4)fx(k)=-(eplus-eminus)/2h

  • Facciamolo nel caso dell’atomo che si allontana dalla superficie, al variare di z, confrontando forze analitiche e numeriche.


Il calcolo delle forze permette immediatamente di effettuare simulazioni di statica molecolare
Il calcolo delle forze permette immediatamente di effettuare simulazioni di STATICA molecolare

Statica molecolare: configurazioni (locali) di minima energia

U


Calcolo delle forze calcoliamo numericamente la forza lungo x che agisce sull atomo k2
Calcolo delle forze: calcoliamo numericamente la forza lungo x che agisce sull'atomo k

Statica molecolare: configurazioni (locali) di minima energia

U

Mi muovo piano piano lungo la direzione della forza


Calcolo delle forze calcoliamo numericamente la forza lungo x che agisce sull atomo k3
Calcolo delle forze: calcoliamo numericamente la forza lungo x che agisce sull'atomo k

Statica molecolare: configurazioni (locali) di minima energia

U

Mi muovo piano piano lungo la direzione della forza


Calcolo delle forze calcoliamo numericamente la forza lungo x che agisce sull atomo k4
Calcolo delle forze: calcoliamo numericamente la forza lungo x che agisce sull'atomo k

Statica molecolare: configurazioni (locali) di minima energia

U

Mi muovo piano piano lungo la direzione della forza


Calcolo delle forze calcoliamo numericamente la forza lungo x che agisce sull atomo k5
Calcolo delle forze: calcoliamo numericamente la forza lungo x che agisce sull'atomo k

Statica molecolare: configurazioni (locali) di minima energia

U

Mi muovo piano piano lungo la direzione della forza. Sono nel minimo!


In due dimensioni … mi muovo in x lungo fx, in y lungo fy

V(x,y)

Metodo della discesa più rapida (“steepest descent”)


Schema implementazione steepest descent in tante dimensioni
Schema implementazione steepest descent in tante dimensioni

Versione semplificata

fmax = max(|fx1|,......|fzN|)

calcolata in force

Problema:

Se ho forze grandi devo muovermi

di poco se no la direzione scelta è poco

rappresentativa!

C troppo grande: non convergo, e/o oscillo,

e/o il sistema “esplode”

C troppo piccolo: ci metto troppo

Devo variare C ...



Calcolo delle forze calcoliamo numericamente la forza lungo x che agisce sull atomo k6
Calcolo delle forze: calcoliamo numericamente la forza lungo x che agisce sull'atomo k

Criteri di convergenza

L’energia varia di poco tra un passo e l’altro (livello 0);

La norma della forza è al di sotto di una certa soglia (livello 1);

La forza massima su un atomo è sotto ad una certa soglia (livello 2);

Devono valere tutti e tre assieme (livello 3).

Forze piccole? < 0.001 eV/Å


Calcolo delle forze calcoliamo numericamente la forza lungo x che agisce sull atomo k7
Calcolo delle forze: calcoliamo numericamente la forza lungo x che agisce sull'atomo k

Occhio! Lo steepest descent è un metodo che permette di trovare solo i minimi locali!!!!









Let us find the closest minimum configuration

(Also: surface relaxations!!)


ad