//mod�e 4 : g�m�rie sph�es molles #include "math.h" #include "stdio.h" #include "stdlib.h" #include "time.h" #undef N #include "parseciffile.h" #include "sglite.h" #include "SpaceGroup.h" #define N 1000 #ifndef M_PI #define M_PI 3.1415926535897932384626433832795 #endif double drand(){ return ((double)rand())/(double)RAND_MAX; // g��ateur de nombres al�toires } int main(int argc, char** argv, char** envp){ double passage[3][3]; // matrice de passage de coordonn�s obliques en coordonn�s cart�iennes double inv_passage[3][3]; // // matrice de passage de coordonn�s obliques en coordonn�s cart�iennes inverse double alpha; double beta; //d�inition des angles double gamma; double a; double b; // d�inition des param�res de maille double c; double coord_obliq_O[N][3]; // coordonn�s O dans le rep�e quelconque double coord_obliq_tmp_O[N][3]; // coordonn�s O temporaires dans le rep�e quelconque double coord_orthon_O[N][3]; // coordonn�s O dans le rep�e orthonorm� double coord_orthon_new_O[N][3]; // coordonn�s orthonorm�s des O avec Te �l'origine double coord_obliq_Te[N][3]; // coordonn�s Te dans le rep�e quelconque double coord_orthon_Te[N][3]; //coordonn�s Te dans le rep�e orthonorm� double coord_spher_lp[3]; //coordonn�s sph�iques lp double coord_spher_lp_min[3]; //coordonn�s sph�iques lp min double coord_orthon_new_lp[3]; //coordonn�s orthonorm�s lp min avec Te �l'origine double coord_orthon_lp[3]; //coordonn�s orthonorm�s lp min double coord_obliq_lp[3]; // coordonn�s obliques lp min double coord_spher_lp_min_opt[3]; // coordonn�s sph�iques lp min optims�s double dist_Olp[N]; //distance O-lp double dist2_Telp; //distance Te-lp double K =0.004; //0.003085; //constante de raideur de la force de rappel entre Te et lp K = 0.0025; //double K = 1.00; //constante de raideur de la force de rappel entre Te et lp double radius_O = 1.4; double radius_lp = 1.12; //= 1.011; // = 1.15; double r_cut = radius_O + radius_lp ; double energy; //�ergie de r�ulsion double energy_min; // �ergie de r�ulsion minimale double p=0.33; //= 0.325; //facteur de Born-Mayer //0.345; int A = 1 ; //constante pr�xponentielle int m; int i; int k; int j; int V=10; double lp_pos_x; //position x de la paire libre double lp_pos_y; //position y de la paire libre double lp_pos_z; //position z de la paire libre double O_pos_x; //position x d'un oxyg�e double O_pos_y; //position y d'un oxyg�e double O_pos_z; //position z d'un oxyg�e double d_Olp_x; //diff�ence position O-lp en x double d_Olp_y; //diff�ence position O-lp en y double d_Olp_z; //diff�ence position O-lp en z if (argc != 2 && argc !=3 && argc !=4 ) { //&& argc !=5) { printf("Usage : LPLocalisation 'ciffilename' \n"); return 0; } SCrystalInfo crystal; double LPOdist = 0.9; int isLPOrefined = 0; //int model = 1; if (argc > 3){ LPOdist = atof(argv[2]); if (argc == 4){ isLPOrefined = atoi(argv[3]); } // if (argc == 5){ // model = atoi(argv[4]); // } } coord_spher_lp[0]= LPOdist; coord_spher_lp_min[0] = LPOdist; // first load cif file... loadFileCIF(argv[1],&crystal); // second init spacegroup class SpaceGroup spacegroup(crystal.space_group_HM); CrystMatrix_REAL coords; cout << "equivalent positions for Te :" << endl; for (i=0;i