• Non ci sono risultati.

5 Funzionamento del programma di simulazione

N/A
N/A
Protected

Academic year: 2021

Condividi "5 Funzionamento del programma di simulazione"

Copied!
7
0
0

Testo completo

(1)

5 Funzionamento del programma di simulazione

5.1 Introduzione

Il programma utilizzato durante il lavoro di tesi è stato scritto e sviluppato in modo del tutto originale. Il linguaggio di programmazione usato è stato il C, come sistema operativo su cui installare e poi utilizzare il programma è stato scelto Linux, che date le sue doti di robustezza e stabilità è sembrato il sistema operativo più adatto; va inoltre aggiunto che Linux è perfettamente integrato con le librerie utilizzate per la programmazione in C (lo stesso sistema operativo è scritto in tale linguaggio!).

Obiettivo di questo capitolo è descrivere le caratteristiche peculiari del programma di simulazione e il suo funzionamento, senza scendere in inutili dettagli tecnici

5.2 Creazione dello stato iniziale

Per la preparazione dello stato iniziale sono state usate due funzioni: la prima definisce le posizioni degli atomi, la seconda la distribuzione delle velocità.

5.2.1 Posizioni iniziali

Lo stato iniziale viene generato in modo casuale con i seguenti criteri: I. Il primo monomero viene posto nell’origine

II. Ogni monomero viene posizionato in modo da trovarsi sulla superficie di una sfera con centro il monomero precedente e raggio la distanza di legame

III. Si verifica che l’ultimo monomero aggiunta si trovi ad una distanza ragionevole dagli altri atomi: una vicinanza eccessiva produrrebbe instabilità a causa del potenziale Lennard-Jones. IV. Si controlla che l’ultimo atomo aggiunto formi con i due precedenti un opportuno angolo di

legame

V. Si controlla che l’ultimo monomero aggiunto non si trovi, rispetto ai tre atomi precedenti, nella configurazione di massima energia per quanto riguarda il potenziale torsionale.

Se tutti i criteri elencati sono verificati il monomero viene aggiunto alla catena e si procede alla collocazione del monomero successivo.

(2)

5.2.2 Velocità iniziali.

Il metodo utilizzato è piuttosto semplice: il modulo della velocità viene determinato in base alla temperatura impostata e il modulo scelto di direzione casuale. La velocità dell’ultimo monomero viene scelta in modo che il momento lineare totale sia uguale a zero.

5.3 Equilibratura

Quando una catena viene creata come descritto in §5.2, probabilmente non avrà una configurazione compatibile con le condizioni in cui si svolge la simulazione: occorre quindi attendere un tempo sufficientemente lungo perchè le varie proprietà della catena rilassino al valore di equilibrio. Tale processo prende il nome di equilibratura.

5.4 Parametri di simulazione

I parametri utilizzati per la simulazione vengono scritti nel file “polyCrist.data”. Un esempio di tale file è riportato di seguito:

runNew 2 nProc 1 saveEqlbr 0 RunFileStLim 3000 ZeroTime 1 equil 0 nPol 1 nMon 500 seed1 5 seed2 17 recordLog 0 recordSnap 0 recordConfig 0 AnVel 0 AnBond 0 AnFi 0 photo 0 stepLimitEquil 900 stepLimit 9000000 stepAvg 1000 stepStartPoint 200000 nebrTabFac 250 stepCheckpoint 10000 limitVel 200 sizeHistVel 5000 stepVel 5 limitBond 200 sizeHistBond 500 stepBond 5 limitEnd 200

(3)

stepEnd 5 limitGyrRad 200 stepGyrRad 5 stepInitlzTemp 1 sizeHistFi 500 stepFi 5 limitFi 200 stepAdjustTemp 0 deltaT 0.001 bondAngle 109 kTheta 535.7143 k1 7.1429 k2 -3.8393 k3 14.4643 R0 1.5 kFene 30 gammaDump 1. epsilonLJ 0.112 rangeVel 10. kSpring 100450.5062 springR0 0.3816 CristTemp 3. extTemperature 3. sep 0.3816 sigExt 1. rCutFac 2.5 rNebrShell 2. rangeBond 1.5

Nel seguito viene descritto il significato di ogni riga.

• runNew può aver i valori 0, 1, 2; 0 indica al programma di resettare tutti i parametri e di comiciare una nuova simulazione; 1 indica al programma di continuare una simulazione interrotta in modo brusco (ad esempio perchè manca l’elettricità); 2 serve a indicare al programma di continuare il programma da un opportuno file (§5.8)

• nProc indica il numero di processi (cioè di simulazioni indipendenti) che si vuole che il programma lanci; può avere qualsiasi valore, ma è inutile usare un valore più alto del numero di processori che si hanno a disposizione: si ha solo un rallentamento del sistema.

• SaveEqlbr se vale 1 vengono salvati i dati relativi alla fase di equilibratura; se vale 0 i dati di equilibratura non vengono salvati. Vengono comunque salvati i file necessari al riavvio della simulazione a seguito di una interruzione brusca (ad esempio perchè manca l’elettricità).

• RunFileStLim: usato per indicare le dimensioni dei file di dati; una volta raggiunto il numero di passi indicato il programma comincia un nuovo file.

• ZeroTime indica al sistema se deve resettare il tempo una volta ultimata l’equilibratura; 1 inidica di resettare, 0 di continuare.

• Equil se vale 1 viene eseguita l’equilibratura, in caso contrario ciò non avviene.

• NMon numero di monomeri per catena.

(4)

• Seed 1, seed2 : sono i semi utilizzati dal generatore di numeri casuali (appendice C): possono avere qualsiasi valore, ma devono essere diversi.

• recordLog, recordSnap, recordConfig non sono utilizzati: impostare 0.

• AnVel, AnBond, AnFi, photo sono disabilitati; non importa il valore che assumono.

• StepLimitEquil numero di passi in cui eseguire l’equilibratura.

• stepLimit: numero di passi della simulazione escluso il tempo utilizzato dall’equilibratura

• stepAvg ogni quanti passi salvare i dati della simulazione.

• stepStartPoint ogni quanti passi salvare i file per riavviare la simulazione (§5.8)

• nebrTabFac: utilizzato per determinare la massima lunghezza della Neighbou List: va determinato di caso in caso. Se è troppo piccolo la simulazione si blocca con il messaggio: “neighbour list overflow”

• stepCheckPoint: ogni quanti passi salvare i file per poter far ripartire la simulazione dopo un blocco accidentale (ad esempio perchè manca l’elettricità).

• Da limitVel fino a stepGyrRad sono disabilitati.

• stepInitlzTemp: ogni quanti passi applicare il velocity rescaling: vedere stepAdjustTemp.

• stepAdjustTemp: numero di passi in cui usare il velocity rescaling; è utilizzato solo in fase di equilibratura. Serve per evitare “esplosioni” della catena polimerica in casodi configurazione iniziale particolarmente instabile; di solito sono sufficienti poche centinaia di passi, poi la simualzione si normalizza[52].

• deltaT: passo di integrazione.

• bondAngle: angolo di legame.

• kTheta è k0in (4.2)

• k1, k2, k3sono le costanti in (4.3)

• R0, kFene non utilizzate

• gammaDump è la di (4.6)

• kSpring, SpringR0: la costante e il valore di equilibrio di (4.1)

• CristTemp, extTemperature: temperatura a cui condurre la simulazione (la prima) e temperatura a cui condurre l’equilibratura (la seconda).

• sep deve essere uguale a SpringR0.

• sigExt deve essere 1; parametro di controllo.

• rCutFac: distanza a cui trocare il potenziale Lennard-Jones, equazione (4.4).

• rNebrShell: distanza, da sommarsi a rCutFac, usata dalla neighbour list per monitorare il moto delle particelle.

(5)

• I parametri non elencati sono disabilitati in quanto servono solo in fase di debug del programma. In generale non è importante quale valore assumano.

5.5 File di simulazione

Durante la simulazione vengono creati diversi file: alcuni sono semplici file di controllo, altri racchiudono al loro interno i dati veri e propri. Questi file sono:

• program, slice.num: contengono informazioni sulla simulazione utilizzati dai programmi di analisi dati

program<n> dove n è un numero intero: qui vengono salvati i dati della simulazione: velocità, posizione, accelerazione.

• bckseedPoint1, bckseedPoint2,checka.data, checkb.data, cklast.data: servono per far ripartire la simulazione dopo una interruzione accidentale (ad esempio perchè manca l’elettricità).

seedPoint<time>,startPoint<time>: servono per far ripartire la simulazione dal tempo <time>; in questi file sono raccolte solo le informazioni sullo stato del programma a quell’istante: è quindi possibile variare a piacere i parametri del file di input per verificare come si comporta lo stesso stato sotto diverse condizioni.

• RunStart.data: salva l’ultima configurazione calcolata.

PotSummary<n>.data, summary<n>.data: il primo raccoglie dati sull’andamento dei potenziali( in ordine: energia potenziale totale, Lennard-Jones, angolo di legame, torsione, potenziale elastico), mentre nel secondo sono scritti (in ordine) energia totale e suo scarto quadratico medio, energia cinetica e suo scarto quadratico medio, temperatura.

• T<CristTemp>np<nPol>sm<nMon>.log dove i parametri tra parentesi sono copiati dal filedi input: è il file di log della simulazione. In esso sono riportati una copia del file di input, è una cronologia di ciò che accade durante la simulazione.

5.6 Analisi dati

Il programma di per sè non fa analisi dati, tale compito è demandato ad appositi programmi che leggono i dati nei file program<n>. L’unica cosa che viene calcolata durante la simulazione sono i valori dell’energia cinetica e potenziale, e della temperatura (file PotSummary<n>.data,

(6)

summary<n>.data): un controllo in tempo reale di tali parametri è utili per osservare se la simulazione sta procedendo in modo corretto.

5.7 Avvio della simulazione

Per avviare una nuova simulazione è sufficiente porre runNew uguale a 0. Il programma crea automaticamente la directory T<CristTemp>np<nPol>sm<nMon>K<contatore>: eccetto l’ultimo gli altri parametri sono copiati dal file di input (§5.4). <contatore> viene introdotto automaticamente dal programma: se ci sono più simulazione con gli altri parametri uguali K viene incrementato di uno fino a quando non esistono directory con lo stesso nome.

Se nProc nel file di input (§5.4) è diverso da zero, sono create anche le sottodirectory proc0, ..., proc<nProc-1> che raccolgono i dati dei singoli processi.

Una directory equil viene creata se è diverso da zero nel file di input (§5.4)il parametro equil.

5.8 Continuazione di una simulazione

Esistono due modi per continuare una simulazione:

I. dopo che la simulazione si è bloccata per cause accidentali. Per fare ciò si apre il file di input e:

a) si pone newRun uguale a 1

b) si controlla se la simulazione ha finito l’equillibratura: se l’equilibratura è finita si pone equil uguale a 0, altrimenti si lascia 1.

c) porre tutti i parametri di input uguali a quelli che si trovano in nel file di log della directory di interesse.

A questo punto si lancia il programma di simulazione con il comando: polyc1.3.5 1 <directory in cui si trovala simulazione>

II. nel caso si voglia continuare la simulazione da un punto prestabilito: a) si pone newRun uguale a 2 nel file di input

b) si lancia il comando:

polyc1.3.5 <percorso completo del file StartPoint<time>> <percorso completo del file seedPoint<time>>

(7)

Questo secondo metodo può essere utile, ad esempio, per studiare con un passo di integrazione più piccolo un fenomeno che avviene in un certo istante della simulazione; oppure ad esempio, per vedere come una stessa struttura si comporta in condizioni differenti: i parametri di imput possono infatti essere impostati a piacere.

Riferimenti

Documenti correlati

17 563 ./0123453.67893:2;??89@A=B3C83:DEFG.3/=@3F=@2113L/CA2=C;3MN3O3PQR STTUTTVUWXYZ[Y\UT]ZWTUY^YWZ_Y`ab cZV]dUXUY\UT]ZWTUY e fg\XhgdY\UT]ZWTUY ijY`ikb lXgmdUYnhTUgTUY

[r]

[r]

Size restituisce la dimensione di file e cartelle presenti nella cartella corrente Subfolder restutuisce l'elenco di tutte le sottocartelle presenti nella cartella corrente Type

[r]

õôõôõôõôõô õôõô õô õô

[r]

[r]