1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
   |  
/* * * * * librairies */
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <time.h>
 
/* * * * * structure particule */
struct part {
  double  x, y, z ;
  double  vx, vy, vz ;
  double  frcx, frcy, frcz ;
  double  dx, dy, dz ;
  int	  nbrevoisin ;
  double  Eint, Tint ;
  int	  *listevoisin ;
} ;
typedef struct part Particules ;
 
 
/* * * * * structure etat thermodynamique */
struct etat {
  int     nat ;
  double  volume, temperature, pression ;
// ...
} ;
typedef struct etat Etat ;
 
 
/* * * * * structure contenant les donnees */
struct data {
  /* variables de la namelist */
  int     nstep ;		// nbre iteration
  double  dt ;			// pas de temps
  double  xsi ;			// friction
  double  temp0 ;		// temperature cible
  double  rcut ;		// cut off
  double  rverlet ;		// cut off liste voisin
  int     nbrevoisinmax ;	// nbre maximum de voisins
  // ...
} ;
typedef struct data Data ;
 
/* prototypes */
int init_calcul( Data * , Etat *, Particules ** ) ;
int allocation( int , Data *, Particules **  ) ;
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
  *                                                                           * 
  * programme princpal                                                        * 
  *                                                                           * 
  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
 
int main( void ) {
 
  int erreur = EXIT_SUCCESS ;
 
/* Declaration des structures */
  Etat        EtatThermo ;	// alias = e
  Data        Donnees ;		// alias = d
  Particules  *Particule ;	// alias = p
 
/* gestion de la ligne de commande */
 
/* ouverture des fichiers */
 
/* message d'accueil */
 
/* Lecture de l'input et initialisation des variables : */
  init_calcul( &Donnees, &EtatThermo, &Particule ) ;
 
/* fermeture des fichiers */
 
  return erreur;
}
 
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
 *                                                                           * 
 * initialisation du calcul                                                  * 
 *                                                                           * 
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
 
int init_calcul ( Data *Donnees, Etat *EtatThermo, Particules *Particule[] ) {
 
  int     erreur = EXIT_SUCCESS ;
 
/* enregistrement des valeurs par defaut */
 
/* lecture de l'input */
 
// ....
 
  EtatThermo->nat = 1000 ;
  Donnees->nbrevoisinmax = 100 ;
 
/* allocation des tableaux nat = nombre d'atome */
  fprintf ( stdout, " * allocation de la memoire\n") ;
  allocation( EtatThermo->nat, Donnees, &(*Particule) ) ;
 
// ...
 
  return erreur ;
}
 
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
 *                                                                           * 
 * allocation des tableaux dynamique : forces, positions, vitesses           * 
 *                                                                           * 
 * initialistion a 0 de tous les tableaux                                    * 
 *                                                                           * 
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
 
int allocation( int Natom, Data *Donnees, Particules *Particule[]  ) {
 
  Particules *p = NULL ;
  int erreur = EXIT_SUCCESS ;
  int iat, ivois ;
 
// structure particule
  *Particule = malloc( Natom * ( sizeof(Particules) + Donnees->nbrevoisinmax * sizeof(int) ) ) ;
  for ( iat = 0 ; iat < Natom ; iat++ ) {
    p = Particule[iat] ;
    p->listevoisin = malloc( Donnees->nbrevoisinmax * sizeof(int) ) ;
  }
 
// ...
 
 
// initialisation a 0 de tous les tableaux
  for ( iat = 0 ; iat < Natom ; iat++ ) {
    p = Particule[iat] ;
 
    p->x = 0. ;
    p->y = 0. ;
    p->z = 0. ;
 
    p->vx = 0. ;
    p->vy = 0. ;
    p->vz = 0. ;
 
    p->frcx = 0. ;
    p->frcy = 0. ;
    p->frcz = 0. ;
 
    p->dx = 0. ;
    p->dy = 0. ;
    p->dz = 0. ;
 
    p->nbrevoisin = 0 ;
 
    for( ivois = 0 ; ivois < Donnees->nbrevoisinmax ; ivois++ )
    	p->listevoisin[ivois] = 0 ;
  }
 
  return erreur ;
} | 
Partager