teaching:progappchim:lennard-jones

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
teaching:progappchim:lennard-jones [2015/03/05 11:08] villersdteaching:progappchim:lennard-jones [2015/03/05 12:14] (Version actuelle) villersd
Ligne 49: Ligne 49:
  
 La distance d'équilibre $R_0$ pourra être obtenue facilement en minimisant $U_tot$. Cela nécessite de calculer pour le réseau envisagé les valeurs de $\sum_j p_j^{-12}$ et $\sum_j p_j^{-6}$. La distance d'équilibre $R_0$ pourra être obtenue facilement en minimisant $U_tot$. Cela nécessite de calculer pour le réseau envisagé les valeurs de $\sum_j p_j^{-12}$ et $\sum_j p_j^{-6}$.
 +
 +Voici un programme non optimisé calculant les deux sommes pour la structure cubique à face centrée. Il serait bien sûr intéressant de modifier le programme pour réduire le nombre de calculs nécessaires, et aussi envisager les autres structures (hexagonal compact et cubique centré).
 +
 +<sxh python; title : Lennard-Jones-sum_fcc-01.py>
 +#! /usr/bin/env python
 +# -*- coding: utf-8 -*-
 +"""
 +Calcul des sommes utilisées dans l'énergie de cohésion
 +d'un cristal de gaz rare en utilisant le potentiel de Lennard-Jones
 +
 +Version non optimisée comptabilisant toutes les interactions dans
 +un cristal fictif de structure cubique à face centrée.
 +Pour une telle maille, les positions des atomes à considérer sont
 +en coordonnées cristallographiques (0,0,0), (0.5,0.5,0), (0.5,0,0.5) et
 +(0,0.5,0.5).
 +"""
 +from math import *
 +
 +motif = [(0,0,0),(0.5,0.5,0),(0.5,0,0.5),(0,0.5,0.5)]
 +R2= 0.5**2+0.5**2  # carré de la distance entre atomes voisins
 +print R2
 +nmax = 5 # nombre de mailles entre l'atome central et le bord
 +sum6=0.
 +sum12=0.
 +for ic in range (-nmax,nmax,1):
 +    for jc in range (-nmax,nmax,1):
 +        for kc in range (-nmax,nmax,1):
 +            # ic, jc, kc est la coordonnée du noeud de référence
 +            # de la maille cubique.
 +            noeud=[ic,jc,kc]
 +            # print noeud  # impression pour debug
 +            for atome in motif:
 +                d2=0
 +                for direct in range(3):
 +                    d2 += (noeud[direct]+atome[direct])**2
 +                    #print direct, d2  # impression pour debug
 +                if d2 != 0:
 +                    inv_pj6 = (R2/d2)**3
 +                    inv_pj12 = inv_pj6**2
 +                    sum6 += inv_pj6
 +                    sum12 += inv_pj12
 + 
 +print 'La somme "6" vaut ', sum6
 +print 'La somme "12" vaut ', sum12
 +</sxh>
  
 ==== Références ==== ==== Références ====
  • teaching/progappchim/lennard-jones.1425550091.txt.gz
  • Dernière modification : 2015/03/05 11:08
  • de villersd