Modélisation de la réaction d alkylation du motif zinc-thiolate Delphine Picot To cite this version: Delphine Picot. Modélisation de la réaction d alkylation du motif zinc-thiolate. Chimie. Ecole Polytechnique X, 2008. Français. <pastel-00004269> HAL Id: pastel-00004269 https://pastel.archives-ouvertes.fr/pastel-00004269 Submitted on 23 Oct 2008 HAL is a multi-disciplinary open access archive for the deposit and dissemination of scientific research documents, whether they are published or not. The documents may come from teaching and research institutions in France or abroad, or from public or private research centers. L archive ouverte pluridisciplinaire HAL, est destinée au dépôt et à la diffusion de documents scientifiques de niveau recherche, publiés ou non, émanant des établissements d enseignement et de recherche français ou étrangers, des laboratoires publics ou privés.
χ
χχ
Ψ = Ε Ε Ψ Ψ Ψ Ξ Ψ Ψ χ Ψ = Ψ µ = + < µ µ =
( ) = ( ) + ( ( ) ( ) ) = ( ) + = ( ) = φ ( ) φ ( ) φ ( ) φ ( ) ττ ( ) = φ ( ) φ ( ) φ ( ) φ ( ) ττ = φ = χ ( ) χ = ( ) = ε χ χ = = χ χ
ψ λ λ = + λ ψ λ ψ = ψ = + λ + λ ψ + λ + λ ψ λ λ ( ) ( ) ψ = ψ ψ = ψ λ ( ) ( ) ψ + = ψ ψ = ψ ψ ψ ψ ψ = = ψ ( ψ ψ )
ρ ( ρ( )) = ρ ρ ρ = φ φ + ρ + + [ ρ] = = ρρ = = ρ ( ) ( ) = φ ( ) φ ( ) φ ( ) φ ( ) ττ [ ρ] ρ
( ) + + + + ( ) =
ρ = α ρ = α αα ( ρ ρ ρ ρ ) = ( ρ ρ ρ ρ ) ( ρ ρ ρ ρ ) α = β ( α β ) = ( α) β α α = ( ) ( ) ( ) ρ ρ ρ ρ = ρ ρ = αβ ( α β ) = α ( α) αβ α α
( ) ( α )( α β ) ( β) αβ ( α β ) ( α β ) ( α β ) = ρ + ( )
σ ( ) σ ( ) σ ( ) ( ) σ ( ) σ ( ) σ ( ) = ( + ) = = σ Ω σ σ = = Ω σ Ω σ Ξ Ξ Ω σ
γ + γ
( ε ) = µ + ( ε ) Η = Η + = µ µ Ψ µ Ψ Η Η = ( ε ) ( ε + ) Ψ Η Ψ Ψ Η Ψ + µ
φ φ = φ ( ) φ ( ) + φ ( ) ε = πε φ ( ) Η = Η + ( ) φ φ ( ) = ΨΗΨτ Ψ ΗΨτ φ ( ) ρ( )
ε ε = ε +
= = ν ν
σ
σ
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
σ β
σ σ
σ
σ
σ
= + = + + =
= + = + + = = + = = +
µµ φµ µν φµ φν = µµ µν µ = µ µ = µ ν = ν µ µν
µ ν [ δµ δν] = [ δρδ ] = ρ [ δρδ ] = ν δρδ + = ν [ ] + ν
= δρδ [ ] ρ + ρ ρ + ρ ν [ ] = + = + [ + ] = + + α φ = α α + β α β α βα
+ φ = α α + β α β α βα χ α χ β βα + η η µ η = δ δ ν = δµ δν ( ) ( ) η =
( δ δµ ) = η = = + + + ν
ω µ η = µ ω = ω ω µ ω = ω = = µ = µ η ω
= α α + β α β α βα
βα α β α β α α + =
= =
#!/usr/bin/perl -s use strict; use Spreadsheet::ParseExcel; my $oexcel = new Spreadsheet::ParseExcel; die "You must provide a filename to $0 to be parsed as an Excel file" unless @ARGV; my $obook = $oexcel->parse($argv[0]); my ($ir, $new_ir, $newir, $ic, $new_ic, $newic, $owks, $owkc, $entre, $i, $l); my ($NAtoms, $k_atom, $OM, $xoa, $nbk_oa, $nbtot_oa, $prod, $totprod, $om, $dest); my (@contenu_cell, @first_oa, @k, @valeur_coeff, @j, @valeur_density, @valeur_mulpop, @OA, @s, @f, @fukui); my ($atom, $a, $b, $c, $d, $e); print ("Opening the file Fukui_Coeff.txt\n"); unless (open(output, ">Fukui_Coeff.txt")) {die ("Cannot open file Fukui_Coeff.txt\n")} ########################## ## INITIALISATION DES ATOMES ET OA ########################## for( my $owks = 3 ) { $owks = $obook->{worksheet}[3]; $nbtot_oa = $owks->{maxrow}+1; for(my $ir = $owks->{minrow} ; defined $owks->{maxrow} && $ir <= $owks->{maxrow} ; $ir++) { for(my $ic = $owks->{mincol} ; defined $owks->{maxcol} && $ic <= $owks->{maxcol} ; $ic++) { $owkc = $owks->{cells}[$ir][$ic]; $contenu_cell[$ir][$ic] = $owkc->{val}; if ( $contenu_cell[$ir][$ic] == $contenu_cell[$ir][1] && $contenu_cell[$ir][$ic] =~ /[0-9]/) { $k_atom = $contenu_cell[$ir][$ic]; $first_oa[$k_atom]= $contenu_cell[$ir][0]; }} $NAtoms= $k_atom; }} print ("Writing initial data in the file Fukui_Coeff.txt\n"); ### ECRITURE DES DONNEES INITIALES DANS LE FICHIER OUTPUT select (OUTPUT); print ("Le nombre total d'atomes de cette molécule est: $NAtoms\n"); print ("Le nombre total d'orbitales atomiques de cette molécule est: $nbtot_oa\n"); for ($k_atom = 1; $k_atom <= $NAtoms; $k_atom++){ # print ("La premiere OA de l'atome $k_atom est: $first_oa[$k_atom]\n"); } print ("\n"); print (" "); for (my $k_atom=1;$k_atom <= $NAtoms; $k_atom++){ print (" $k_atom ");} print ("\n"); close (OUTPUT); print ("Assigning MO coefficients from the excel file\n"); ########################## # INITIALISATION DES VALEURS_COEFF ######################### $k[0]=$nbtot_oa; for ($l =1; $l < ($nbtot_oa/5); $l++){ $k[$l] = $k[0] + $l*($k[0]+3);
# print ("$k[$l]\n"); } for( my $owks = 0 ) { $owks = $obook->{worksheet}[0]; for(my $ir = $owks->{minrow} ; defined $owks->{maxrow} && $ir < $k[0] ; $ir++) { for(my $ic = $owks->{mincol} ; defined $owks->{maxcol} && $ic <= $owks->{maxcol} ; $ic++) { $owkc = $owks->{cells}[$ir][$ic]; $valeur_coeff[$ir][$ic] = $owkc->{val}; # print ("$ir $ic $valeur_coeff[$ir][$ic]\n"); } } for ($l = 1; $l < ($nbtot_oa/5); $l++){ for(my $ir = $k[$l-1] +3; defined $owks->{maxcol} && $ir < $k[$l]; $ir++){ for(my $ic = $owks->{mincol} ; defined $owks->{maxcol} && $ic <= $owks->{maxcol} ; $ic++) { my $newir = $ir - $l*($k[0]+3); my $newic = $ic + $l*5; if ($newir == $nbtot_oa-1 && $newic==$nbtot_oa){last;} $owkc = $owks->{cells}[$ir][$ic]; $valeur_coeff[$newir][$newic] = $owkc->{val}; # print (" $ir $ic $newir $newic $valeur_coeff[$newir][$newic]\n"); } }} } #print ("$valeur_coeff[0][4]\n"); print ("Assigning density coefficients from the excel file\n"); ########################## ## INITIALISATION DES VALEURS_DENSITY ########################## $j[0]= $nbtot_oa; for ($i = 1; $i < ($nbtot_oa/5); $i++){ $j[$i] = $j[0] + 1 + $j[$i-1] - $i*5;} for( my $owks = 1 ) {$owks = $obook->{worksheet}[1]; for(my $ir = $owks->{minrow} ; defined $owks->{maxrow} && $ir < $j[0]; $ir++) { for(my $ic = $owks->{mincol} ; defined $owks->{maxcol} && $ic <= $owks->{maxcol} ; $ic++) { if ($ir >= $ic){ $owkc = $owks->{cells}[$ir][$ic]; $valeur_density[$ir][$ic] = $owkc->{val};} $valeur_density[$ic][$ir] = $valeur_density[$ir][$ic]; #print ("$ir $ic $valeur_density[$ir][$ic]\n"); }} for ($i = 1; $i < ($nbtot_oa/5); $i++){ for(my $ir = $j[$i-1] +1; defined $owks->{maxcol} && $ir < $j[$i]; $ir++){ for(my $ic = $owks->{mincol} ; defined $owks->{maxcol} && $ic <= $owks->{maxcol} ; $ic++) { my $new_ir = $ir -1 - $j[$i-1] +5*$i;
my $new_ic = $ic + 5*$i ; if ($new_ir == $nbtot_oa-1 && $new_ic==$nbtot_oa){last;} if ($new_ir >= $new_ic){ $owkc = $owks->{cells}[$ir][$ic]; $valeur_density[$new_ir][$new_ic] = $owkc->{val}; $valeur_density[$new_ic][$new_ir] = $valeur_density[$new_ir][$new_ic]; } }} } } #print ("$valeur_density[0][7]\n"); print ("Assigning Mulliken population coefficients from the excel file\n"); ########################## ### INITIALISATION DES VALEURS_MULPOP ########################### $j[0]= $nbtot_oa; for ($i = 1; $i < ($nbtot_oa/5); $i++){ $j[$i] = $j[0] + 1 + $j[$i-1] - $i*5;} for( my $owks = 2 ) {$owks = $obook->{worksheet}[2]; for(my $ir = $owks->{minrow} ; defined $owks->{maxrow} && $ir < $j[0]; $ir++) { for(my $ic = $owks->{mincol} ; defined $owks->{maxcol} && $ic <= $owks->{maxcol} ; $ic++) { if ($ir >= $ic){ $owkc = $owks->{cells}[$ir][$ic]; $valeur_mulpop[$ir][$ic] = $owkc->{val}; $valeur_mulpop[$ic][$ir] = $valeur_mulpop[$ir][$ic]; #print ("$ir $ic $valeur_mulpop[$ir][$ic]\n"); } } for ($i = 1; $i < ($nbtot_oa/5); $i++){ for(my $ir = $j[$i-1] +1; defined $owks->{maxcol} && $ir < $j[$i]; $ir++){ $ic++) { for(my $ic = $owks->{mincol} ; defined $owks->{maxcol} && $ic <= $owks->{maxcol} ; my $new_ir = $ir -1 - $j[$i-1] +5*$i; my $new_ic = $ic + 5*$i ; $new_ic==$nbtot_oa){last;} $valeur_mulpop[$new_ir][$new_ic]; $valeur_mulpop[$new_ir][$new_ic]\n"); } } } } } if ($new_ir == $nbtot_oa-1 && if ($new_ir >= $new_ic){ $owkc = $owks->{cells}[$ir][$ic]; $valeur_mulpop[$new_ir][$new_ic] = $owkc->{val}; $valeur_mulpop[$new_ic][$new_ir] = #print ("$new_ir $new_ic } #print ("$valeur_mulpop[0][7]\n"); print ("Calculating MO overlap coefficients from the excel file\n"); ########################## ###### CALCUL DES OVERLAP ##############################
for (my $k_atom = 1; $k_atom < $NAtoms; $k_atom++){ #print ("L'atome considéré est $k_atom\n"); for (my $OA = $first_oa[$k_atom] -1 ; $OA < $first_oa[$k_atom+1]-1; $OA++){ #print ("L'OA considéré de l'atome $k_atom est $OA\n"); for (my $xoa = 0; $xoa < $nbtot_oa; $xoa++){ #print ("L'xOA considéré est :$xoa\n"); } } } if ($valeur_density[$oa][$xoa] == 0 $valeur_mulpop[$oa][$xoa] == 0){ $s[$oa][$xoa]= 0; } else { $s[$oa][$xoa]= $valeur_mulpop[$oa][$xoa] / $valeur_density[$oa][$xoa]; #print (" Le coefficeint d'overlap est: $s[$oa][$xoa]\n"); } for (my $k_atom = $NAtoms){ for (my $OA = $first_oa[$k_atom] -1 ; $OA < $nbtot_oa; $OA++) { #print ("L'OA considéré de l'atome $k_atom est $OA\n"); for (my $xoa = 0; $xoa < $nbtot_oa; $xoa++){ #print ("L'xOA considéré est :$xoa\n"); } } if ($valeur_density[$oa][$xoa] == 0 $valeur_mulpop[$oa][$xoa] == 0){ $s[$oa][$xoa]= 0; } else { $s[$oa][$xoa]= $valeur_mulpop[$oa][$xoa] / $valeur_density[$oa][$xoa]; #print (" Le coefficeint d'overlap est: $s[$oa][$xoa]\n"); } } #print (" Le coefficeint d'overlap est: $s[0][7]\n"); print ("Calculating the fukui coefficients\n"); ########################## ####### CALCUL DES COEFFICIENTS DE FUKUI ############################### $fukui[$k_atom-1][$om]=0; for (my $k_atom = 1; $k_atom < $NAtoms; $k_atom++){ #print ("L'atome considéré est $k_atom\n"); for (my $OM = 0; $OM < $nbtot_oa ; $OM++){ #print ("L'OM considérée est $OM\n"); for (my $OA = $first_oa[$k_atom] -1; $OA < $first_oa[$k_atom+1]-1; $OA++){ #print ("L'OA considéré de l'atome $k_atom est $OA\n"); for (my $xoa = 0; $xoa < $nbtot_oa; $xoa++){ #print ("L'xOA considéré est :$xoa\n"); $f[$oa][$xoa]= $valeur_coeff[$oa][$om]*$valeur_coeff[$xoa][$om]*$s[$oa][$xoa]; $fukui[$k_atom-1][$om]+= $f[$oa][$xoa]; } } } } for (my $k_atom = $NAtoms){ for (my $OM = 0; $OM < $nbtot_oa ; $OM++){ #print ("L'OM considérée est $OM\n"); for (my $OA = $first_oa[$k_atom] -1 ; $OA < $nbtot_oa; $OA++) { #print ("L'OA considéré de l'atome $k_atom est $OA\n"); for (my $xoa = 0; $xoa < $nbtot_oa; $xoa++){ #print ("L'xOA considéré est :$xoa\n");
$f[$oa][$xoa]= $valeur_coeff[$oa][$om]*$valeur_coeff[$xoa][$om]*$s[$oa][$xoa]; $fukui[$k_atom-1][$om]+= $f[$oa][$xoa]; } } $om= $OM + 1; #print ("Le coefficient de Fukui pour l'atome $k_atom sur l'orbitale $om est: $fukui[$k_atom-1][$om]\n"); } } print ("Writing fukui coefficients in text file\n"); ########################## ###### ECRITURE DES COEFF DE FUKUI DANS UN FICHIER TEXTE ############################## unless (open(output, ">>Fukui_Coeff.txt")) {die ("Cannot open file Fukui_Coeff.txt\n")} select (OUTPUT); for (my $om =1; $om <= $nbtot_oa; $om++){ print ("$om "); } for (my $k_atom = 1; $k_atom <= $NAtoms; $k_atom++){ $atom= $k_atom; $a=$fukui[$k_atom-1][$om-1]; printf (" %.4f ", $a );} print (" \n"); close (OUTPUT);
χ η