Calcolo dell'entropia configurazionale

Fare riferimento alle slide della presentazione powerpoint termodinamica_12 per le spiegazioni sul tipo di calcoli che il programma esegue.

In [15]:
%matplotlib inline
%run disorder.py

La funzione principale da utilizzarsi è disorder che accetta come argomenti: il numero totale di atomi e un valore del parametro d'ordine richiesto per considerare ordinata la configurazione; la keyword opzionale prt permette di stampare valori dettagliati della probabilità di ogni configurazione, dell'entropia corrispondente e del parametro d'ordine

In [16]:
disorder(20,0.5,prt=True)
nMg =   0, prob:  0.00 %, entropia  0.00, ordinamento  1.00
nMg =   1, prob:  0.00 %, entropia  4.32, ordinamento  0.90
nMg =   2, prob:  0.02 %, entropia  7.57, ordinamento  0.80
nMg =   3, prob:  0.11 %, entropia 10.15, ordinamento  0.70
nMg =   4, prob:  0.46 %, entropia 12.24, ordinamento  0.60
nMg =   5, prob:  1.48 %, entropia 13.92, ordinamento  0.50
nMg =   6, prob:  3.70 %, entropia 15.24, ordinamento  0.40
nMg =   7, prob:  7.39 %, entropia 16.24, ordinamento  0.30
nMg =   8, prob: 12.01 %, entropia 16.94, ordinamento  0.20
nMg =   9, prob: 16.02 %, entropia 17.36, ordinamento  0.10
nMg =  10, prob: 17.62 %, entropia 17.50, ordinamento  0.00
nMg =  11, prob: 16.02 %, entropia 17.36, ordinamento  0.10
nMg =  12, prob: 12.01 %, entropia 16.94, ordinamento  0.20
nMg =  13, prob:  7.39 %, entropia 16.24, ordinamento  0.30
nMg =  14, prob:  3.70 %, entropia 15.24, ordinamento  0.40
nMg =  15, prob:  1.48 %, entropia 13.92, ordinamento  0.50
nMg =  16, prob:  0.46 %, entropia 12.24, ordinamento  0.60
nMg =  17, prob:  0.11 %, entropia 10.15, ordinamento  0.70
nMg =  18, prob:  0.02 %, entropia  7.57, ordinamento  0.80
nMg =  19, prob:  0.00 %, entropia  4.32, ordinamento  0.90
nMg =  20, prob:  0.00 %, entropia  0.00, ordinamento  1.00

Soglia per definire una configurazione ordinata 0.50
Probabilità di avere una configurazione ordinata:  4.14 %
Probabilità di avere una configurazione disordinata: 95.86 %

Per 100 atomi, e parametro d'ordine pari a 0.1, abbiamo:

In [17]:
disorder(100,0.1,prt=False)
Soglia per definire una configurazione ordinata 0.10
Probabilità di avere una configurazione ordinata: 31.97 %
Probabilità di avere una configurazione disordinata: 68.03 %

La frazione molare corrispondente al grado d'ordine limite pari a 0.1 si ottiene usando la semplice funzione fraction:

In [19]:
fraction(0.1)
Frazione molare corrispondente al grado d'ordine 0.55

Il risultato (0.55) ci dice che, con quel parametro d'ordine, consideriamo ordinata ogni configurazione per cui la frazione molare di uno dei due componenti è maggiore di 0.55 (0.5 corrisponde al caso totalmente disordinato, con parametro d'ordine uguale a 0).

In [4]:
disorder(500,0.1,prt=False)
Soglia per definire una configurazione ordinata 0.10
Probabilità di avere una configurazione ordinata:  2.54 %
Probabilità di avere una configurazione disordinata: 97.46 %

Con 1000 atomi:

In [10]:
disorder(1000,0.1,prt=False)
Soglia per definire una configurazione ordinata 0.10
Probabilità di avere una configurazione ordinata:  0.16 %
Probabilità di avere una configurazione disordinata: 99.84 %

I calcoli precedenti fanno tutti uso della funzione fattoriale di numpy np.factorial. Il fattoriale di un numero cresce molto rapidamente con il numero stesso; per valori di n > 1000 il calcolo non è possibile, per cui ci si limita al calcolo della sola entropia usando l'approssimazione di Stirling

In [11]:
disorder(10000,0.01)
n = 10000 troppo alto per il calcolo del fattoriale; si userà
l'approssimazione di Stirling e verrà calcolata solo l'entropia