Universitat Jaume I

Licenciatura en Química

Esta es la carrera que estoy estudiando en la Universitat Jaume I. Durante los 5 años que consta de los que consta la carrera se han estudiado las diferentes partes que incluye la química. 

A continuación mostramos una practica que ampliamos con respecto a lo que se nos exigía en clase

Ecuaciones SFC-LCAO para el átomo de helio

La practica inicial consistía en hacer una pagina excel que calculara las energías del átomo de helio. La memoria de dicha práctica se puede descargar de: pdf de la práctica del átomo de helio.

El problema que encontramos con la hoja ecxel es que no es automática y para tener que repetir los cálculos hay que hacer un montón de modificaciones. Nosotros fuimos más allá y ante este problema se decidió hacer estos cálculos en un programa basic y otro en C++ compilado con DevC++.

A continuación se muestra un programa en BASIC:

10 'Pràctia 7 IA28
20 'Calcul de l'enegia per al'atom d'heli
30 'Vicente Martí
40 'Canvia el valor de C1 i C2 per a comenzar la iteració
50 CLS
60 PRINT "Càlcul de l'energia per a l'àtom d'heli"
70 PRINT
80 PRINT " iteracio"," c1"," c2","E.oribital","E.atòmica"
90 PRINT "-----------------------------------------------------------------"
100 TEMPS1=TIMER
110 C1=1
120 C2=0
130 Z=2
140 S1=1.45
150 S2=2.9
160 T=(S1-S2)/(S1+S2)
170 T1=(S1-S2)/(3*S1+S2)
180 T2=(S1-S2)/(S1+3*S2)
190 X1111=(5/8)*S1
200 X2222=(5/8)*S2
210 X1122=(1/16)*(1-T^2)*(5-T^2)*(S1+S2)
220 X1212=(5/16)*(1-T^2)^3*(S1+S2)
230 X1112=(1/32)*(1-T^2)^(3/2)*(1-T1^2)*(5-T1^2)*(3*S1+S2)
240 X1222=(1/32)*(1-T^2)^(3/2)*(1-T2^2)*(5-T2^2)*(S1+3*S2)
250 H11=(1/2)*S1^2-Z*S1
260 H22=(1/2)*S2^2-Z*S2
270 H12=(1/2)*(S1+S2)*(1-T^2)^(3/2)*((1/4)*(S1+S2)*(1-T^2)-Z)
280 D11=1
290 D22=1
300 D12=(1-T^2)^(3/2)
310 G11=C1^2*X1111+2*C1*C2*X1112+C2^2*X1122
320 G22=C1^2*X1122+2*C1*C2*X1222+C2^2*X2222
330 G12=C1^2*X1112+2*C1*C2*X1212+C2^2*X1222
340 F11=H11+G11
350 F22=H22+G22
360 F12=H12+G12
370 EO1=-1*(2*F12*D12-(F11+F22))/(2*(1-D12^2))
380 EO2=((2*F12*D12-(F11+F22))^2-4*(1-D12^2)*(F11*F22-F12^2))^(1/2)/(2-2*D12^2)
390 EORB=EO1-EO2
400 E=2*EORB-C1^2*G11-C2^2*G22-C1*C2*G12*2
410 PRINT IT,C1,C2,EORB,E
420 IF ABS(EORBA-EORB)<.000001 THEN GOTO 480
430 EORBA=EORB
440 C2=(((F12-EORB*D12)/(F11-EORB))^2-2*D12*(F12-EORB*D12)/(F11-EORB)+1)^(-1/2)
450 C1=-1*(F12-EORB*D12)/(F11-EORB)*C2
460 IT=IT+1
470 GOTO 130
480 PRINT "-----------------------------------------------------------------"
490 PRINT
500 TEMPS2=TIMER
510 PRINT "Temps usat en el càlcul= ";TEMPS2-TEMPS1;" segons"
520 END

Este programa nos permite calcular la energia para el atomo de helio paro los valores de S1 y S2 fijados en las lineas 140 y 150 del programa. Al ejecutar el programa se muestran en la pantalla los resultados de cada iteración.

Càlcul de l'energia per a l'àtom d'heli

iteració c1 c2 E.oribital E.atòmica
-----------------------------------------------------------------------
0 1 0 -.9843263 -2.874903
1 .8092493 .2190592 -.9055608 -2.862192
2 .8470349 .1769506 -.9206519 -2.861692
3 .8396384 .185241 -.917675 -2.861672
4 .8410915 .1836139 -.9182594 -2.861672
5 .8408061 .1839334 -.9181448 -2.861672
6 .8408621 .1838708 -.9181676 -2.861672
7 .8408501 .1838842 -.9181624 -2.861672
8 .8408528 .1838812 -.9181636 -2.861672
9 .8408524 .1838814 -.9181638 -2.861672
-----------------------------------------------------------------------

Temps usat en el càlcul= 0 segons
Ok

También se programó en C++ para de esta forma con un bucle FOR poder obtener la energía orbital y la atómica para el átomo de helio para diferentes valores de S1 y S2.

#include<iostream.h>
#include<fstream.h>
#include<math.h>

#define TAM 150

//definició de les constants
double s1, s2, s10, s20, s1f, s2f, ds1, ds2;
double c1, c2;
double z, t, t1, t2;
double x1111, x2222, x1122, x1212, x1112, x1222;
double h11, h22, h12, d11, d22, d12, g11, g22, g12;
double f11, f22, f12, eorb, eatom;
int it;
double eorba[TAM];

int main()
{

//Impressió en la pantalla d'algunes dades dels calculs
cout << "############################################" << endl;
cout << "# #" << endl;
cout << "# Progama de l'atom d'heli #" << endl;
cout << "# Vicente Marti Centelles #" << endl;
cout << "# #" << endl;
cout << "# Data: 02 abril 2006 #" << endl;
cout << "# Versio programa 0.2 #" << endl;
cout << "# #" << endl;
cout << "############################################" << endl;
cout << endl;
cout << endl;
cout << endl;
cout << endl << "Es creara un fitxer d'output en totes les dades calculades" << endl;
cout << endl << "Introdueix el valor de s1 inicial [1.3]: ";
cin >> s10;
cout << endl << "Introdueix el valor de s1 final [2.0]: ";
cin >> s1f;
cout << endl << "Introdueix el increment entre dos valors per a s1 [0.1]: ";
cin >> ds1;
cout << endl << "Introdueix el valor de s2 inicial [2.4]: ";
cin >> s20;
cout << endl << "Introdueix el valor de s2 final [3.3]: ";
cin >> s2f;
cout << endl << "Introdueix el increment entre dos valors per a s2 [0.1]: ";
cin >> ds2;
///////////////////////////////////////////////////////////////////////////////////////////

//Impressió de resultats en el fitxer d'eixida.

ofstream f; //fichero de salida

f.open("output.txt"); //apertura del fichero o creacción si no existe
if(!f)
cout << "Error obrint el fitxer" << endl;
else
{ //operacions en el fitxer
f << " ############################################" << endl;
f << " # #" << endl;
f << " # Progama de l'atom d'heli #" << endl;
f << " # Vicente Martí Centelles #" << endl;
f << " # #" << endl;
f << " # Versió del programa 0.2 #" << endl;
f << " # #" << endl;
f << " # Data: 02 abril 2006 #" << endl;
f << " # #" << endl;
f << " ############################################" << endl;
f << endl;
f << endl;
f << " Valors dels exponents de les integrals: s1 i s2 " <<endl;
f << endl;
f << " Valors dels coeficients normalitzats de les funcions d'ona: c1 i c2 " <<endl;
f << endl;
f << " Valors de l'energia orbitall: eorb " <<endl;
f << endl;
f << " Valors de l'energia total de l'atom: eatom " <<endl;
f << endl;
f << " Criteri de convergencia: eorba[it]-eorba[(it-1)]>= 0.00001 y it<70" <<endl;
f << endl;
f << " Secció de càlcul d'energies" << endl;
f << "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" << endl;
f << endl;
f << "-----------------------------------------------------------------------------------------------------------------------" << endl;
f << " it" << " s1" <<" s2" << " c1" << " c2" << " Energia orbitall" << " Energia total de l'atom"<< endl;
f << "-----------------------------------------------------------------------------------------------------------------------" << endl;

f.close(); //cierre del fichero
}

/////////////////////////////////////////////////////////////////////////////////////////

//valor de les variables
z=2.0; //Carrega del nucli, per a l'àtom d'heli val 2.

//bucle per anar variant s1
for (s1=s10;s1<s1f;s1+=ds1)
{
//bucle per anar variant s2
for (s2=s20;s2<s2f;s2+=ds2)
{

// Secció d'esborrar
it=0; //Esborrar el valor de it per a la nova iteració
c1=1.0;//Esborrar el valor de c1 per a la nova iteració
c2=0.0;//Esborrar el valor de c2 per a la nova iteració
eorba[-1]=1.0;//Esborrar el valor de eorba per a la nova iteració
eorba[0]=0.0;//Esborrar el valor de eorba per a la nova iteració

//bucle iteratiu per calcular el valor de l'energia per a cada s1 i s2
while ( fabs(eorba[it]-eorba[(it-1)])> 0.00001 and it<70)
{

it+=1;


//Equacions per a calcular les integrals
t=(s1-s2)/(s1+s2);
t1=(s1-s2)/(3.*s1+s2);
t2=(s1-s2)/(s1+3.*s2);
x1111=(5./8.)*s1;
x2222=(5./8.)*s2;
x1122=(1./16.)*(1.-pow(t,2.))*(5.-pow(t,2.))*(s1+s2);
x1212=(5./16.)*(pow((1.-pow(t,2.)),3.))*(s1+s2);
x1112=(1./32.)*(pow((1.-pow(t,2.)),1.5))*(1.-pow(t1,2.))*(5.-pow(t1,2.))*(3.*s1+s2);
x1222=(1./32.)*(pow((1.-pow(t,2.)),1.5))*(1.-pow(t2,2.))*(5.-pow(t2,2.))*(s1+3.*s2);
h11=((1./2.)*pow(s1,2.))-z*s1;
h22=(1./2.)*pow(s2,2.)-z*s2;
h12=(1./2.)*(s1+s2)*pow((1.-pow(t,2.)),1.5)*((1./4.)*(s1+s2)*(1.-pow(t,2.))-z);
d11=1.;
d22=1.;
d12=pow((1.-pow(t,2.)),1.5);
g11=(pow(c1,2.)*x1111)+(2.*c1*c2*x1112)+(pow(c2,2.)*x1122);
g22=pow(c1,2.)*x1122+2.*c1*c2*x1222+pow(c2,2.)*x2222;
g12=pow(c1,2.)*x1112+2.*c1*c2*x1212+pow(c2,2.)*x1222;
f11=h11+g11;
f22=h22+g22;
f12=h12+g12;
eorb=-1.*(2.*f12*d12-(f11+f22))/(2.*(1.-pow(d12,2.)))-1.*(pow((pow((2.*f12*d12-(f11+f22)),2.)-4.*(1.-pow(d12,2.))*(f11*f22-pow(f12,2.))),0.5))/(2.-2.*pow(d12,2.));
eatom=2.*eorb-(pow(c1,2.)*g11)-(pow(c2,2.)*g22)-(c1*c2*g12*2.);


eorba[it]=eorb;


//Assignació dels nous valors a c1 i c2

c2=pow((pow(((f12-eorb*d12)/(f11-eorb)),2.)-2.*d12*(f12-eorb*d12)/(f11-eorb)+1.),(-0.5));
c1=-1.*(f12-eorb*d12)/(f11-eorb)*c2;

} //tancament del while



//Impressió de resultats en el fitxer d'eixida.

f.open("output.txt", ios::app); //apertura del fichero o creacción si no existe
if(!f)
cout << "Error obrint el fitxer" << endl;
else
{
f << " " << it << " " << s1 <<" " << s2 <<" " << c1 << " "<< c2 << " "<< eorb << " "<< eatom << endl;

f.close(); //cierre del fichero
} //tancament de les operacions en el fitxer

} //tancament del for s2

} //tancament del for s1


//Impressió de resultats en el fitxer d'eixida.

f.open("output.txt", ios::app); //apertura del fichero o creacción si no existe
if(!f)
cout << "Error obrint el fitxer" << endl;
else
{ //operacions en el fitxer

f << "--------------------------------------------------------------------------------------------------------" << endl;
f << endl;
f << endl;
f << "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" << endl;
f << " Fí del calcul realitzat pel programa heli" << endl;
f << " Vicente Martí Centelles" << endl;

f.close(); //cierre del fichero
} //tancament de les operacions en el fitxer

//Impressió en la pantalla d'algunes dades dels calculs
cout << endl;
cout << endl;
cout << " Criteri de convergencia: eorba[it]-eorba[(it-1)]>= 0.00001 y it<70" << endl;
cout << "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" << endl;
cout << " Fi del calcul realitzat pel programa heli" << endl;
cout << endl;
cout << " Vicente Marti Centelles " << endl;
cout << endl;

system ("pause");
return 0;
} // tancament del main

El output que genera este programa es:

 ############################################
# #
# Progama de l'atom d'heli #
# Vicente Martí Centelles #
# #
# Versió del programa 0.2 #
# #
# Data: 02 abril 2006 #
# #
############################################


Valors dels exponents de les integrals: s1 i s2

Valors dels coeficients normalitzats de les funcions d'ona: c1 i c2

Valors de l'energia orbitall: eorb

Valors de l'energia total de l'atom: eatom

Criteri de convergencia: eorba[it]-eorba[(it-1)]>= 0.00001 y it<70

Secció de càlcul d'energies
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

-----------------------------------------------------------------------------------------------------------------------
it s1 s2 c1 c2 Energia orbitall Energia total de l'atom
-----------------------------------------------------------------------------------------------------------------------
10 1.3 2.4 0.662491 0.368679 -0.919883 -2.86101
9 1.3 2.5 0.693857 0.339961 -0.9225 -2.86062
9 1.3 2.6 0.720967 0.31518 -0.925084 -2.85983
9 1.3 2.7 0.744661 0.293516 -0.927616 -2.85869
9 1.3 2.8 0.765562 0.274368 -0.930078 -2.85722
9 1.3 2.9 0.78414 0.257286 -0.932453 -2.85546
9 1.3 3 0.800761 0.241923 -0.934731 -2.85346
8 1.3 3.1 0.815712 0.228011 -0.936901 -2.85124
8 1.3 3.2 0.829221 0.21534 -0.93896 -2.84884
9 1.4 2.4 0.716317 0.305794 -0.913377 -2.86074
9 1.4 2.5 0.743772 0.280316 -0.915423 -2.86126
9 1.4 2.6 0.767139 0.258708 -0.917479 -2.86152
9 1.4 2.7 0.787307 0.240094 -0.919526 -2.86155
8 1.4 2.8 0.804919 0.223847 -0.921545 -2.86137
8 1.4 2.9 0.820442 0.20951 -0.923527 -2.86099
8 1.4 3 0.834235 0.196738 -0.92546 -2.86044
8 1.4 3.1 0.846574 0.185267 -0.927333 -2.85973
8 1.4 3.2 0.857674 0.174893 -0.92914 -2.85888
8 1.5 2.4 0.782501 0.231686 -0.905608 -2.85818
8 1.5 2.5 0.804208 0.211354 -0.906882 -2.85903
8 1.5 2.6 0.822382 0.194426 -0.9082 -2.85974
8 1.5 2.7 0.83787 0.180061 -0.909549 -2.86032
8 1.5 2.8 0.851259 0.167677 -0.910914 -2.86079
8 1.5 2.9 0.86297 0.15686 -0.912284 -2.86113
8 1.5 3 0.873315 0.147306 -0.913648 -2.86137
7 1.5 3.1 0.882528 0.138786 -0.915001 -2.86151
7 1.5 3.2 0.89079 0.131125 -0.916331 -2.86155
8 1.6 2.4 0.865692 0.14156 -0.896894 -2.85378
8 1.6 2.5 0.878663 0.129424 -0.897226 -2.85449
8 1.6 2.6 0.889384 0.119483 -0.897633 -2.85515
7 1.6 2.7 0.898447 0.111147 -0.898107 -2.85576
7 1.6 2.8 0.906249 0.104018 -0.898633 -2.85633
7 1.6 2.9 0.913062 0.0978236 -0.899204 -2.85685
7 1.6 3 0.919083 0.0923695 -0.899811 -2.85732
7 1.6 3.1 0.924456 0.0875126 -0.900446 -2.85774
7 1.6 3.2 0.92929 0.0831461 -0.901103 -2.85812
7 1.7 2.4 0.973185 0.0279971 -0.887475 -2.84792
7 1.7 2.5 0.972373 0.0291541 -0.886725 -2.84809
6 1.7 2.6 0.97202 0.0298642 -0.886075 -2.84829
6 1.7 2.7 0.97198 0.0302669 -0.885522 -2.84849
6 1.7 2.8 0.972162 0.0304471 -0.885056 -2.84871
6 1.7 2.9 0.972504 0.0304633 -0.88467 -2.84893
6 1.7 3 0.972962 0.0303561 -0.884358 -2.84916
6 1.7 3.1 0.973504 0.0301547 -0.884112 -2.84939
6 1.7 3.2 0.974105 0.0298808 -0.883926 -2.84962
7 1.8 2.4 -1.11711 0.121246 -0.877541 -2.8409
7 1.8 2.5 -1.09355 0.0977833 -0.875596 -2.84021
7 1.8 2.6 -1.07609 0.0803511 -0.873773 -2.83959
7 1.8 2.7 -1.06271 0.0669392 -0.872069 -2.83902
7 1.8 2.8 -1.05218 0.0563411 -0.87048 -2.8385
6 1.8 2.9 -1.04374 0.0477876 -0.869004 -2.83804
6 1.8 3 -1.03686 0.0407682 -0.867631 -2.83762
6 1.8 3.1 -1.03118 0.0349265 -0.86636 -2.83725
6 1.8 3.2 -1.02645 0.0300087 -0.865183 -2.83692
7 1.9 2.4 -1.3193 0.328089 -0.867248 -2.83297
7 1.9 2.5 -1.25588 0.265168 -0.864013 -2.83115
7 1.9 2.6 -1.21071 0.220388 -0.860915 -2.82941
7 1.9 2.7 -1.17699 0.186947 -0.857956 -2.82776
7 1.9 2.8 -1.15091 0.161065 -0.855135 -2.82619
7 1.9 2.9 -1.1302 0.140475 -0.852451 -2.8247
7 1.9 3 -1.1134 0.123734 -0.8499 -2.8233
7 1.9 3.1 -1.09954 0.109877 -0.847479 -2.82197
6 1.9 3.2 -1.08794 0.0982384 -0.845186 -2.82072
--------------------------------------------------------------------------------------------------------


@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Fí del calcul realitzat pel programa heli
Vicente Martí Centelles

Este segundo programa es mejor ya que hace muchos cálculos en una sola vez. Es decir obtenemos el valor de la energia para muchos valores de las constantes S1 y S2, por tanto es fácil representar una grafica de curvas de nivel para ver que valores de S1 y S2 dan una energía mínima.

Atomo de helio

Pagina inicial de Vicente Marti Centelles Página Inicial de Vicente Martí Centelles