Generador Random

22
Institución: Universidad Autónoma Metropolitana Unidad: Iztapalapa Grado: Licenciatura Titulo del trabajo de Servicio Social: “Simulación por Métodos de Monte Carlo de la Liberación Controlada de Fármacos: Análisis del Entrampamiento del Principio Activo” Nombre del Participante: María Elizabeth Adriana Santiago Cortés Nombre de Asesor Interno: Dra. Minerva Muñoz Gutiérrez Dep. Biología de la Reproducción (UAM-I) Nombre del Asesor Externo: Dr. Carlos Felipe Mendoza Dep. Fisicoquímica de los Materiales ICUAP-BUAP Lugar y Fecha de Realización: Departamento de Biología de la Reproducción (UAM-I) y Departamento de Fisicoquímica de los Materiales (ICUAP-BUAP) Del 5 de Junio de 2006 al 5 de Diciembre de 2006.

description

Generador de números aleatorios

Transcript of Generador Random

Page 1: Generador Random

Institución : Universidad Autónoma Metropolitana

Unidad: Iztapalapa

Grado: Licenciatura

Titulo del trabajo de Servicio Social:

“Simulación por Métodos de Monte Carlo de la Liberación Controlada de Fármacos: Análisis del Entrampamiento del Principio Activo”

Nombre del Participante:

María Elizabeth Adriana Santiago Cortés

Nombre de Asesor Interno:

Dra. Minerva Muñoz GutiérrezDep. Biología de la Reproducción (UAM-I)

Nombre del Asesor Externo:Dr. Carlos Felipe MendozaDep. Fisicoquímica de los MaterialesICUAP-BUAP

Lugar y Fecha de Realización:Departamento de Biología de la Reproducción (UAM-I) y Departamento de Fisicoquímica de los Materiales (ICUAP-BUAP)Del 5 de Junio de 2006 al 5 de Diciembre de 2006.

Page 2: Generador Random
Page 3: Generador Random

Nombre del Proyecto: “Simulación por Métodos de Monte Carlo de la Liberación Controlada de Fármacos: Análisis delEntrampamiento del Principio Activo”

Lugar y periodo de Realización: Se llevo a cabo en las instalaciones del Departamento de Biología de la Reproducción de laUniversidad Autónoma Metropolitana unidad Iztapalapa y del Departamento de Fisicoquímica deMateriales del Instituto de Ciencias de la Universidad Autónoma de Puebla. El tiempo de dedicaciónfue de 4 horas diarias, del 05/Junio/2006 al 05/Diciembre/2006, de 08:00 a 12:00 hrs.

Asesores responsables: 1) Dra. Minerva Muñoz Gutiérrez. Es profesora investigadora Titular C–TC en el Departamento

de Biología de la Reproducción en la UAM-Iztapalapa; su número de empleado es el 15499.2) Dr. Carlos Felipe Mendoza. Es profesor investigador Titular B-TC en el Departamento de

Fisicoquímica de Materiales del ICUAP en la Benemérita Universidad Autónoma de Puebla; sunúmero de empleado es el 100405133

Introducción : El dosificar los fármacos en forma controlada produce grandes beneficios en el tratamiento deafecciones de tipo crónico, destacándose los agentes quimioterapéuticos, inmunosupresores, proteínas,pépticos y hormonas. Recientemente con el desarrollo de la nanotecnología se utilizan matrices inertessólidas de escalas nanométricas para la fabricación de fármacos; dichas matrices son impregnadas conel principio activo del fármaco con el afán de regular su acción farmacológica a través de su liberacióncontrolada al medio o cercanías del lugar en el cual es aplicado. Por otro lado se puede afirmar que latopología del fármaco juega un papel clave en la liberación controlada; ya que, este se puede imaginarcomo un medio poroso (conformado por el vehículo excipiente y el principio activo) en el cual existeciertos parámetros como la conectividad, tamaño y forma de sus poros; los cuales son de sumaimportancia en los procesos difusivos del principio activo y por ende de la acción farmacológica. Por loanterior surge la necesidad de conocer tanto teórica como experimentalmente los proceso de liberacióny entrampamiento del principio activo.

Objetivo:Simular por métodos de Monte Carlo la liberación controlada y el entrampamiento del principio activode un fármaco, considerando a este último como un medio poroso.

Metodología: El estudio realizado fue de carácter teórico, por lo que se llevo acabo un estudio del arte sobrediferentes metodologías existentes para la construcción de medios porosos y la simulación de laliberación controlada de fármacos; así mismo, se elaboró un cronograma de actividades para el periodode duración del servicio social. Cabe resaltar que para la ejecución del servicio se utilizaron losrecursos contenidos en los Departamentos de Biología de la Reproducción de la UAM Iztapalapa y deFisicoquímica de Materiales del ICUAP-BUAP, algunos de dichos recursos fueron PC Pentium IVequipada con el siguiente software: Compilador Borland C++ 5.0, editores de texto (Microsoft Word) ygráficos (Origin 7.0).

Page 4: Generador Random

Actividades Realizadas:a) Capacitación en el uso del compilador Borland C++.b) Simulación por Métodos de Monte Carlo del sólido poroso conformado por el principio activo y

el vehículo excipiente.c) Simulación de la liberación del principio activo.d) Análisis de resultados.e) Elaboración del reporte.

Objetivos y metas alcanzadas:Se consiguió simular la construcción de un medio poroso consistente de principio activo y excipiente; ysobre este medio se simuló el proceso difusivo del fármaco, observándose al final del mismoentrampamiento de fármaco.

Resultados y conclusionesEl medio poroso. Se utilizó la metodología de trabajos anteriores [1-3] para generar redes cúbicas deconectividad variable, sin restricciones geométricas y diferentes grados de correlación. Los elementos(sitios y enlaces) del arreglo cúbico, se suponen de idéntica naturaleza química. Se consideraroncondiciones periódicas de contorno, un tamaño lineal de nodos de 10 (L = 10) usando un máximo de L3

sitios (1000) y 3 L3 enlaces (3000), por lo que el número de coordinación máximo para cada nodo es 6(Cmax = 6). Se propusieron distribuciones de tamaño de poro de tipo gaussianas, tanto para FS y FB, yaque son las mas comunes en muestras reales; dichas funciones se acotaron por los extremos igual a lamedia mas (menos) tres veces el valor de σ = 15 Å; de manera que los tamaños corresponden alintervalo de los mesoporos.

Algoritmo para la construcción de la red. La metodología para construir el medio poroso puedeenunciarse en general de la siguiente manera:

1) En base al número de elementos, se fijan las funciones de distribución de tamaños de poro(uniformes, gaussianas, log-normal, etc.), para los sitios FS(R) y para los enlaces FB(R). Porsimplicidad, los sitios se asumen como esferas de tamaño RS y los enlaces como cilindros abiertos porlos extremos de tamaño RB.

2) Se genera la red (cuadrada, cúbica, hexagonal, etc) de tamaño lineal L, asignando aleatoriamentesobre los nodos, tamaños a los sitios y a los enlaces, de acuerdo a sus correspondientes funciones dedistribución de tamaños y la conectividad deseada. La red así generada tendrá las funciones FS(R) yFB(R) correctas, pero no así la Φ(RS,RB) (función de correlación de tamaños); ya que, el PC (principiode construcción de un medio poroso) no es satisfecho [4,5].

3) Se inicia (t = 0 pasos de Monte Carlo♣) una serie de transiciones mediante el intercambio de tamañoentre dos sitios o dos enlaces elegidos al azar hasta el cumplimiento cabal del PC en toda la red. Elintercambio es realizado (probabilidad de transición igual a 1), si se verifica el PC, en caso contrario(probabilidad de transición igual a 0) el intercambio es rechazado.

4) Se realiza una serie de transiciones (“batir la red”) cuantas veces sea necesario, pasando pordiferentes posibles configuraciones de la red, hasta alcanzar la configuración mas probable (equilibrio);según lo estipulado por López [2], tomando en cuenta el tipo, dimensión y correlación de la red (verfigura 1).

Un paso de Monte Carlo es igual a Ln intentos de transición (1 MCS = Ln intentos de transición)

Page 5: Generador Random

5) Finalmente se transforman todos los enlaces a sitios para tener una matriz consistente únicamente desitios.

a) Ω = 0.0 b) Ω =0.5 c) Ω = 0.7 d) Ω = 0.9

Figura 1. Topología más probable del medio poroso de acuerdo al grado de correlación de tamaño. a) y b) correlación baja, c) correlación intermedia y d) correlación alta.

El fármaco. El sistema matriz es representado por la red cúbica descrita líneas arriba de 103+3*103

sitios. Así, la tableta idealizada es un conglomerado compuesto por un principio activo (soluble enagua) y un excipiente (material insoluble e inerte). Los sitios son ocupados azarosamente por partículasesféricas de droga o excipiente de acuerdo a proporciones deseadas.

Algoritmo para la liberación del fármaco. El proceso difusivo es simulado por el algoritmo delcaminante azaroso [6, 7]. De esta forma un sitio ocupado por principio activo es azarosamente elegidoy después uno de sus sitios cercanos que lo rodean es elegido al azar también y si esta vació, la droga semueve a este nuevo sitio en caso contrario el movimiento del principio activo es rechazado. Estasecuencia de etapas es repetida hasta que la partícula de droga alcance un sitio expuesto a la superficiede la tableta o medio de disolución. De esta forma se asume que la liberación del principio activo noesta limitada por la solubilidad. En la figura 2 se puede observar en (a) la matriz consistente de fármacoy excipiente originalmente construida, mientras que en (b) se ve la topologia de la matriz después dellevarse acabo el proceso difusivo; en esa figura se puede observar el fármaco entrampado al final dedel proceso de liberación. Finalmente se puede decir que las simulaciones de las redes cúbicas y losprocesos difusivos del principio activo fueron realizadas con un programa escrito en código ANSI C++en una PC con un procesador athlon AMD y 512 MB de RAM. El programa de simulación fue corridoen el compilador Borland C++ versión 5.0.

a) Matriz consistente de fármaco y

excipienteb) Fármaco y excipiente entrampados

al final del proceso de difusiónFigura 2. Tableta sólida conformada por fármaco y excipiente

Page 6: Generador Random

Recomendaciones: Se han dado los primeros pasos para la simulación de la liberación controlada de fármaco en un medioporoso. Se recomienda ampliamente un estudio más profundo y sistemático del efecto que podríancausar variables como la conectividad y topología del medio poroso; así como el tamaño de laspartículas de fármaco, en el entrampamiento del mismo al final de un proceso de difusión.

Bibliografía

1) S. Cordero, F. Rojas, J. L. Ricardo; “Simulation of Three-Dimensional Porous Networks”;Colloids and Surfaces A: Physicochemical and Engineering Aspects; 187-188 (2001) 425-438.

2) R. H. López; “Caracterización de Medios Porosos y Procesos Percolativos y de Transporte”;Tesis de Doctorado en Física, Universidad Nacional de San Luis Argentina (2004).

3) S. Cordero; “Modelado de Solidos Mesoporosos y de Fenómenos de Porción de Nitrógeno”; tesisde Doctorado en Ciencias, Universidad Autónoma Metropolitana Iztapalapa, México (2002).

4) V. Mayagoitia, I. Kornhauser; “Capillary Processes in Porous Networks: 2. CapillaryCondensation and Evaporation”; En Principles and Applications of Pore StructuralCharacterization; Haynes J. M., Rossi-Doria P., Eds.; J. W. Arrowsmith Ltd, Bristol (1985), 27-35.

5) V. Mayagoitia, I. Kornhauser; “Capillary Processes in Porous Networks: 1. Models of PorousStructures”; En Principles and Applications of Pore Structural Characterization; Haynes J. M., Rossi-Doria P., Eds.; J. W. Arrowsmith Ltd, Bristol, Milan (1985), 15-26

6) A Bunde, S. Havlin, R. Nossal, H. E. Stanley, G. H. Weiss; “On controlled diffusion-limited drugrelease from a leaky matrix”; Journal of Chemical Physics, 83(11), (1985) 5909– 5913.

7) D. Stauffer, A. Aharony; “Introduction to Percolation Theory” 2nd ed. (revised). London:Taylor and Francis. (1994).

Page 7: Generador Random

Anexo 1

/*Programa que genera redes correlacionadas 3D:*Distribucion Gaussiana de la forma (table curve):

y=a+b*exp(-0.5((x-c)/d)^2)*Conectividad constante (C=6)*Sin restricciones geometricas (version windows)*Graba los histogramas de sitios y enlaces

*Graba redes en .bin *Graba parametros de distribuciones gausianas .dat */

/*________________________Directivas__________________________*/

#include<stdio.h>#include<stdlib.h>#include<math.h>#include<string.h>#include<conio.h>#include<dos.h>#include<iostream.h>

/*__________________________Grabado de Archivos____________________*//* Red */

char outfile_red[100]="f:/simulacionstanpore/porosimetria/redes/RA_";/* Histograma */

char outfile_His[100]="f:/simulacionstanpore/porosimetria/histogramas/HA.dat";/* Parametros distribucion */

char outfile_param[100]="f:/simulacionstanpore/porosimetria/parametros/PA_";/* fotos de los sitios de la red en to y teq */

char file_out[100],str[4];FILE *filered,*archivo,*fileparam;

/*_________________________Parametros de Red___________*/

#define L 32#define x_size L#define y_size L#define z_size L#define vol (x_size*y_size*z_size)#define prom 1.0

/*_____________________Parametros de la Distribución Gaussiana________*/

const float xmb=266.0;const float xms=768.0;const float sigma=15.0;const float lim_inf_B=(xmb-3.0*sigma);

Page 8: Generador Random

const float lim_sup_B=(xmb+3.0*sigma);const float lim_inf_S=(xms-3.0*sigma);const float lim_sup_S=(xms+3.0*sigma);const float alturaS=1.0;const float alturaB=1.0;const double deltaS=lim_sup_S-lim_inf_S;const double deltaB=lim_sup_B-lim_inf_B;

/*_____________________Numero de barras de histograma_______________*/

const int NHS=30;const int NHB=30;

/*________________________Variables Globales____________________*/

struct elemento float site,xb,yb,zb; red[x_size][y_size][z_size];long int nviolT;double hi,mi,si,ci,hf,mf,sf,cf; /* Tiempo de Calculo */int day,month,year; /* Fecha */double MCS, contadorMCS;;int Xmas[x_size],Xmen[x_size],

Ymas[y_size],Ymen[y_size], Zmas[z_size],Zmen[z_size];int Cluster[(int)(2*x_size)][(int)(2*y_size)][(int)(2*z_size)]; int p, num;int Histovector_B[NHB+1],HB[NHB+1];int Histovector_S[NHS+1],HS[NHS+1];

/*______________________Rutinas Del Generador Random____________*/

const double long_max=2147483648.0;const double dos_long_max=4294967296.0;unsigned int condi_55(int);int mas1_55[55],mas31_55[55];long int randi[55];int j_ran,j_ran2; /* las usa el generador de random*/

/*_________________________Funciones Globales___________________*/

void contorno(void);unsigned int condi_55(int z);void randomizar(void);void CContorno(void);void gen_red(void);void violac(void);double ran01(void);float SortediB(void);float SortediS(void);int cuenta_vioS(int X,int Y,int Z);

Page 9: Generador Random

int cuenta_vioBx(int X,int Y,int Z);int cuenta_vioBy(int X,int Y,int Z);int cuenta_vioBz(int X,int Y,int Z);void batidot0(void);void batidotEq(void);void swap(float *X1,float *X2);void grabarHist(void);void Ini_Histo(void);void Histograma(void);void Save_Red(void);void SaveParametersDist(int);void foto(int tiempo);void clockI(void);void clockF(void);void DoCluster(void);

/*________________________Funcion Principal______________________*/

int main(void)

clockI();contorno(); randomizar(); CContorno();

printf(" Red correlacionada 3D \n "); printf(" L= %d \n ",L); p=1; gen_red(); violac(); printf ("Inicio - nviol=%ld \n",nviolT); printf ("Inired t0\n"); do batidot0(); while (nviolT!=0); num=1; Save_Red();

DoCluster();foto(num);

SaveParametersDist(num); printf ("Red lista a t0 \n"); Ini_Histo(); Histograma(); cout<<"MCS= "<<MCS<<endl; contadorMCS=5; num=num+1; while(MCS<=100) batidotEq();

Page 10: Generador Random

violac(); Save_Red();

DoCluster(); foto(num);

SaveParametersDist(num);clockF();

/*Fin Main*/

void contorno(void)

for(j_ran2=0 ; j_ran2<55 ; j_ran2++) mas1_55[j_ran2]=condi_55(j_ran2+1); mas31_55[j_ran2]=condi_55(j_ran2+31); unsigned int condi_55(int z) int w; if ((z>=0)*(z<55)) w=z; if (z<0) w=55+z; if (z>=55) w=z-55; return w;void randomizar(void)

int i_ran,j_ran2; j_ran=0; for(i_ran=0;i_ran<55;i_ran++) randi[i_ran]=rand(); for(i_ran=0;i_ran<1000;i_ran++) for(j_ran2=0;j_ran2<1000;j_ran2++) j_ran=mas1_55[j_ran];

randi[j_ran]=randi[j_ran]+randi[mas31_55[j_ran]]; void CContorno(void)

int i;for(i=0;i<x_size;i++)Xmas[i]=(i+1)%x_size;Xmen[i]=(i-1+x_size)%x_size;for(i=0;i<y_size;i++)Ymas[i]=(i+1)%y_size;Ymen[i]=(i-1+y_size)%y_size;for(i=0;i<z_size;i++)Zmas[i]=(i+1)%z_size;Zmen[i]=(i-1+z_size)%z_size;

double ran01(void)

j_ran=mas1_55[j_ran]; randi[j_ran]=randi[j_ran]+randi[mas31_55[j_ran]]; return (((double)randi[j_ran]+long_max)/dos_long_max);

Page 11: Generador Random

void gen_red(void) register int i,j,k; for(i=0;i<x_size;i++) for(j=0;j<y_size;j++) for(k=0;k<z_size;k++) red[i][j][k].site=SortediS(); red[i][j][k].xb=SortediB(); red[i][j][k].yb=SortediB(); red[i][j][k].zb=SortediB();float SortediB() register double xsorteo,ysorteo,yvalor; register int resultado; resultado=0; while(resultado==0) xsorteo=ran01()*deltaB+lim_inf_B; ysorteo=ran01()*alturaB; yvalor=alturaB*exp(-(xsorteo-xmb)*(xsorteo-xmb)/(2.0*sigma*sigma)); /* Distrib.Gaussiana */ if (yvalor>ysorteo) resultado=1; return (xsorteo);float SortediS() register double xsorteo,ysorteo,yvalor; register int resultado; resultado=0; while(resultado==0) xsorteo=ran01()*deltaS+lim_inf_S; ysorteo=ran01()*alturaS; yvalor=alturaS*exp(-(xsorteo-xms)*(xsorteo-xms)/(2.0*sigma*sigma)); /*Distribucion Gaussiana */ if (yvalor>ysorteo) resultado=1;

return (xsorteo);void violac(void) int i,j,k; nviolT=0; for(i=0;i<x_size;i++) for(j=0;j<y_size;j++) for(k=0;k<z_size;k++) if (red[i][j][k].xb>red[i][j][k].site) nviolT++ ; if (red[i][j][k].yb>red[i][j][k].site) nviolT++ ; if (red[i][j][k].zb>red[i][j][k].site) nviolT++;

Page 12: Generador Random

if (red[Xmas[i]][j][k].xb>red[i][j][k].site) nviolT++; if (red[i][Ymas[j]][k].yb>red[i][j][k].site) nviolT++; if (red[i][j][Zmas[k]].zb>red[i][j][k].site) nviolT++;void batidot0(void)

register int i1,j1,k1,i2,j2,k2,e1t,e2t,control; control=(int) (12*ran01());

i1=(int)(x_size*ran01()); j1=(int)(y_size*ran01()); k1=(int)(z_size*ran01()); i2=(int)(x_size*ran01()); j2=(int)(y_size*ran01()); k2=(int)(z_size*ran01());

switch(control) case 0: /* site - site */ e1t=cuenta_vioS(i1,j1,k1)+cuenta_vioS(i2,j2,k2); swap(&red[i1][j1][k1].site,&red[i2][j2][k2].site); /* Cambio los sitios */ e2t=cuenta_vioS(i1,j1,k1)+cuenta_vioS(i2,j2,k2); if (e1t<e2t) swap(&red[i1][j1][k1].site,&red[i2][j2][k2].site);/*Re-Cambio los sitios*/ else nviolT=nviolT-(e1t-e2t); break; case 1: /* bond_x - bond_x' */ e1t=cuenta_vioBx(i1,j1,k1)+cuenta_vioBx(i2,j2,k2); swap(&red[i1][j1][k1].xb,&red[i2][j2][k2].xb); /* Cambio los bond */ e2t=cuenta_vioBx(i1,j1,k1)+cuenta_vioBx(i2,j2,k2); if (e1t<e2t) swap(&red[i1][j1][k1].xb,&red[i2][j2][k2].xb); /*Re-Cambio los Bond*/ else nviolT=nviolT-(e1t-e2t); break; case 2: /* bond_x - bond_y' */ e1t=cuenta_vioBx(i1,j1,k1)+cuenta_vioBy(i2,j2,k2); swap(&red[i1][j1][k1].xb,&red[i2][j2][k2].yb); /* Cambio los bond */ e2t=cuenta_vioBx(i1,j1,k1)+cuenta_vioBy(i2,j2,k2); if (e1t<e2t) swap(&red[i1][j1][k1].xb,&red[i2][j2][k2].yb);/*Re-Cambio los Bond*/ else nviolT=nviolT-(e1t-e2t); break; case 3: /* bond_x - bond_z' */ e1t=cuenta_vioBx(i1,j1,k1)+cuenta_vioBz(i2,j2,k2);

Page 13: Generador Random

swap(&red[i1][j1][k1].xb,&red[i2][j2][k2].zb); /* Cambio los bond */ e2t=cuenta_vioBx(i1,j1,k1)+cuenta_vioBz(i2,j2,k2); if (e1t<e2t) swap(&red[i1][j1][k1].xb,&red[i2][j2][k2].zb); /*Re-Cambio los Bond*/ else nviolT=nviolT-(e1t-e2t); break; case 4: /* bond_y - bond_x' */ e1t=cuenta_vioBy(i1,j1,k1)+cuenta_vioBx(i2,j2,k2); swap(&red[i1][j1][k1].yb,&red[i2][j2][k2].xb); /* Cambio los bond */ e2t=cuenta_vioBy(i1,j1,k1)+cuenta_vioBx(i2,j2,k2); if (e1t<e2t) swap(&red[i1][j1][k1].yb,&red[i2][j2][k2].xb);/*Re-Cambio los Bond */ else nviolT=nviolT-(e1t-e2t); break; case 5: /* bond_y - bond_y' */ e1t=cuenta_vioBy(i1,j1,k1)+cuenta_vioBy(i2,j2,k2); swap(&red[i1][j1][k1].yb,&red[i2][j2][k2].yb); /* Cambio los bond */ e2t=cuenta_vioBy(i1,j1,k1)+cuenta_vioBy(i2,j2,k2); if (e1t<e2t) swap(&red[i1][j1][k1].yb,&red[i2][j2][k2].yb); /*Re-Cambio losBond_x */ else nviolT=nviolT-(e1t-e2t); break; case 6: /* bond_y - bond_z' */ e1t=cuenta_vioBy(i1,j1,k1)+cuenta_vioBz(i2,j2,k2); swap(&red[i1][j1][k1].yb,&red[i2][j2][k2].zb); /* Cambio los bond */ e2t=cuenta_vioBy(i1,j1,k1)+cuenta_vioBz(i2,j2,k2); if (e1t<e2t) swap(&red[i1][j1][k1].yb,&red[i2][j2][k2].zb); /*Re-Cambio */ else nviolT=nviolT-(e1t-e2t); break; case 7: /* bond_z - bond_z' */ e1t=cuenta_vioBz(i1,j1,k1)+cuenta_vioBz(i2,j2,k2); swap(&red[i1][j1][k1].zb,&red[i2][j2][k2].zb); /* Cambio los bond */ e2t=cuenta_vioBz(i1,j1,k1)+cuenta_vioBz(i2,j2,k2); if (e1t<e2t) swap(&red[i1][j1][k1].zb,&red[i2][j2][k2].zb); /*Re-Cambio losBond_x */ else nviolT=nviolT-(e1t-e2t); break; case 8: /* bond_z - bond_y' */ e1t=cuenta_vioBz(i1,j1,k1)+cuenta_vioBy(i2,j2,k2); swap(&red[i1][j1][k1].zb,&red[i2][j2][k2].yb); /* Cambio los bond */

Page 14: Generador Random

e2t=cuenta_vioBz(i1,j1,k1)+cuenta_vioBy(i2,j2,k2); if (e1t<e2t) swap(&red[i1][j1][k1].zb,&red[i2][j2][k2].yb); /*Re-Cambio losBond_x */ else nviolT=nviolT-(e1t-e2t); break; case 9: /* bond_z - bond_x' */ e1t=cuenta_vioBz(i1,j1,k1)+cuenta_vioBx(i2,j2,k2); swap(&red[i1][j1][k1].zb,&red[i2][j2][k2].xb); /* Cambio los bond */ e2t=cuenta_vioBz(i1,j1,k1)+cuenta_vioBx(i2,j2,k2); if (e1t<e2t) swap(&red[i1][j1][k1].zb,&red[i2][j2][k2].xb); /*Re-Cambio losBond_x */ else nviolT=nviolT-(e1t-e2t); break; case 10: /* site - site */ e1t=cuenta_vioS(i1,j1,k1)+cuenta_vioS(i2,j2,k2); swap(&red[i1][j1][k1].site,&red[i2][j2][k2].site); /* Cambio los sitios */ e2t=cuenta_vioS(i1,j1,k1)+cuenta_vioS(i2,j2,k2); if (e1t<e2t) swap(&red[i1][j1][k1].site,&red[i2][j2][k2].site);/*Re-Cambio los sitios*/ else nviolT=nviolT-(e1t-e2t); break; case 11: /* site - site */ e1t=cuenta_vioS(i1,j1,k1)+cuenta_vioS(i2,j2,k2); swap(&red[i1][j1][k1].site,&red[i2][j2][k2].site); /* Cambio los sitios */ e2t=cuenta_vioS(i1,j1,k1)+cuenta_vioS(i2,j2,k2); if (e1t<e2t) swap(&red[i1][j1][k1].site,&red[i2][j2][k2].site);/*Re-Cambio los sitios*/ else nviolT=nviolT-(e1t-e2t); break; int cuenta_vioS(int X,int Y,int Z) register int nviol; nviol=0; if (red[X][Y][Z].xb>red[X][Y][Z].site) nviol++; if (red[X][Y][Z].yb>red[X][Y][Z].site) nviol++; if (red[X][Y][Z].zb>red[X][Y][Z].site) nviol++; if (red[Xmas[X]][Y][Z].xb>red[X][Y][Z].site) nviol ++; if (red[X][Ymas[Y]][Z].yb>red[X][Y][Z].site) nviol ++; if (red[X][Y][Zmas[Z]].zb>red[X][Y][Z].site) nviol++; return(nviol);

Page 15: Generador Random

int cuenta_vioBx(int X,int Y,int Z) register int nviol; nviol=0; if (red[X][Y][Z].xb>red[X][Y][Z].site) nviol++; if (red[Xmen[X]][Y][Z].site<red[X][Y][Z].xb) nviol ++; return(nviol);int cuenta_vioBy(int X,int Y,int Z) register int nviol; nviol=0; if (red[X][Y][Z].yb>red[X][Y][Z].site) nviol++; if (red[X][Ymen[Y]][Z].site<red[X][Y][Z].yb) nviol ++; return(nviol);int cuenta_vioBz(int X,int Y,int Z) register int nviol; nviol=0; if (red[X][Y][Z].zb>red[X][Y][Z].site) nviol++; if (red[X][Y][Zmen[Z]].site<red[X][Y][Z].zb) nviol++; return(nviol);void swap(float *X1,float *X2) float aux; aux=*X1; *X1=*X2; *X2=aux;

void batidotEq(void)

register int i1,j1,k1,i2,j2,k2,e1t,e2t,control; control=(int) (12*ran01());

i1=(int)(x_size*ran01()); j1=(int)(y_size*ran01()); k1=(int)(z_size*ran01()); i2=(int)(x_size*ran01()); j2=(int)(y_size*ran01()); k2=(int)(z_size*ran01()); contadorMCS=contadorMCS+1; if(contadorMCS==x_size*y_size*z_size) MCS=MCS+1; cout<<"MCS= "<<MCS<<endl;

Page 16: Generador Random

contadorMCS=0;

switch(control) case 0: /* site - site */ e1t=0; swap(&red[i1][j1][k1].site,&red[i2][j2][k2].site); /* Cambio los sitios */ e2t=cuenta_vioS(i1,j1,k1)+cuenta_vioS(i2,j2,k2); if (e2t!=e1t) swap(&red[i1][j1][k1].site,&red[i2][j2][k2].site);/*Re-Cambio lossitios */ break; case 1: /* bond_x - bond_x' */ e1t=0; swap(&red[i1][j1][k1].xb,&red[i2][j2][k2].xb); /* Cambio los bond */ e2t=cuenta_vioBx(i1,j1,k1)+cuenta_vioBx(i2,j2,k2); if (e2t!=e1t) swap(&red[i1][j1][k1].xb,&red[i2][j2][k2].xb); /*Re-Cambio losBond*/ break; case 2: /* bond_x - bond_y' */ e1t=0; swap(&red[i1][j1][k1].xb,&red[i2][j2][k2].yb); /* Cambio los bond */ e2t=cuenta_vioBx(i1,j1,k1)+cuenta_vioBy(i2,j2,k2); if (e2t!=e1t) swap(&red[i1][j1][k1].xb,&red[i2][j2][k2].yb);/*Re-Cambio losBond*/ break; case 3: /* bond_x - bond_z' */ e1t=0; swap(&red[i1][j1][k1].xb,&red[i2][j2][k2].zb); /* Cambio los bond */ e2t=cuenta_vioBx(i1,j1,k1)+cuenta_vioBz(i2,j2,k2); if (e2t!=e1t) swap(&red[i1][j1][k1].xb,&red[i2][j2][k2].zb); /*Re-Cambio los Bond*/ break; case 4: /* bond_y - bond_x' */ e1t=0; swap(&red[i1][j1][k1].yb,&red[i2][j2][k2].xb); /* Cambio los bond */ e2t=cuenta_vioBy(i1,j1,k1)+cuenta_vioBx(i2,j2,k2); if (e2t!=e1t) swap(&red[i1][j1][k1].yb,&red[i2][j2][k2].xb);/*Re-Cambio los Bond*/

Page 17: Generador Random

break; case 5: /* bond_y - bond_y' */ e1t=0; swap(&red[i1][j1][k1].yb,&red[i2][j2][k2].yb); /* Cambio los bond */ e2t=cuenta_vioBy(i1,j1,k1)+cuenta_vioBy(i2,j2,k2); if (e2t!=e1t) swap(&red[i1][j1][k1].yb,&red[i2][j2][k2].yb); /*Re-Cambio losBond_x */ break; case 6: /* bond_y - bond_z' */ e1t=0; swap(&red[i1][j1][k1].yb,&red[i2][j2][k2].zb); /* Cambio los bond */ e2t=cuenta_vioBy(i1,j1,k1)+cuenta_vioBz(i2,j2,k2); if (e2t!=e1t) swap(&red[i1][j1][k1].yb,&red[i2][j2][k2].zb); /*Re-Cambio */ break; case 7: /* bond_z - bond_z' */ e1t=0; swap(&red[i1][j1][k1].zb,&red[i2][j2][k2].zb); /* Cambio los bond */ e2t=cuenta_vioBz(i1,j1,k1)+cuenta_vioBz(i2,j2,k2); if (e2t!=e1t) swap(&red[i1][j1][k1].zb,&red[i2][j2][k2].zb); /*Re-Cambio losBond_x */ break; case 8: /* bond_z - bond_y' */ e1t=0; swap(&red[i1][j1][k1].zb,&red[i2][j2][k2].yb); /* Cambio los bond */ e2t=cuenta_vioBz(i1,j1,k1)+cuenta_vioBy(i2,j2,k2); if (e2t!=e1t) swap(&red[i1][j1][k1].zb,&red[i2][j2][k2].yb); /*Re-Cambio losBond_x */ break; case 9: /* bond_z - bond_x' */ e1t=0; swap(&red[i1][j1][k1].zb,&red[i2][j2][k2].xb); /* Cambio los bond */ e2t=cuenta_vioBz(i1,j1,k1)+cuenta_vioBx(i2,j2,k2); if (e2t!=e1t) swap(&red[i1][j1][k1].zb,&red[i2][j2][k2].xb); /*Re-Cambio losBond_x */ break; case 10: /* site - site */ e1t=0; swap(&red[i1][j1][k1].site,&red[i2][j2][k2].site); /* Cambio los sitios */

Page 18: Generador Random

e2t=cuenta_vioS(i1,j1,k1)+cuenta_vioS(i2,j2,k2); if (e2t!=e1t) swap(&red[i1][j1][k1].site,&red[i2][j2][k2].site);/*Re-Cambio lossitios */ break; case 11: /* site - site */ e1t=0; swap(&red[i1][j1][k1].site,&red[i2][j2][k2].site); /* Cambio los sitios */ e2t=cuenta_vioS(i1,j1,k1)+cuenta_vioS(i2,j2,k2); if (e2t!=e1t) swap(&red[i1][j1][k1].site,&red[i2][j2][k2].site);/*Re-Cambio lossitios */ break; void Ini_Histo(void) int u,v; for(u=0;u<(NHB+1);u++) Histovector_B[u]=0; for(v=0;v<(NHS+1);v++) Histovector_S[v]=0;void Histograma(void) int i,j,k; for(i=0;i<x_size;i++) for(j=0;j<y_size;j++) for(k=0;k<z_size;k++) Histovector_S[(int)((NHS*(red[i][j][k].site-lim_inf_S))/deltaS)+1]+=1;

Histovector_B[(int)(((float)NHB*(red[i][j][k].xb-lim_inf_B))/(float)deltaB)+1]+=1;

Histovector_B[(int)(((float)NHB*(red[i][j][k].yb-lim_inf_B))/(float)deltaB)+1]+=1; Histovector_B[(int)(((float)NHB*(red[i][j][k].zb-lim_inf_B))/(float)deltaB)+1]+=1; void grabarHist(void) int ii; if((archivo=fopen(outfile_His,"wt"))==NULL) printf("Error al abrir el archivo\n"); exit(0); fprintf(archivo,"DATOS del HISTOGRAMA para SITIOS\n"); fprintf(archivo,"Radio<= ; Ctdad de sitios\n"); for(ii=0;ii<(NHS+1);ii++) fprintf(archivo,"%f%f\n",((ii*deltaS)/NHS)+lim_inf_S,(float)(Histovector_S[ii]/((float)p*vol)));

Page 19: Generador Random

fprintf(archivo,"Radio<= ; Ctdad de enlaces\n"); for(ii=0;ii<(NHB+1);ii++) fprintf(archivo,"%f%f\n",((ii*deltaB)/NHB)+lim_inf_B,(float)(Histovector_B[ii]/((float)p*3.0*vol)));

fprintf(archivo,"%d \n",p); fclose(archivo);void Save_Red(void) gcvt(num,3,str); /* Transformo el nro. de red a alfanumerico */ char *tipo=".bin"; strcpy(file_out,outfile_red); strcat(file_out,str); strcat(file_out,tipo); if ((filered =fopen (file_out,"wb"))== NULL ) printf("Error al guardar la red ...\n"); getch(); exit(0); fwrite(&red,sizeof(elemento),vol,filered); printf("Archivo %s Guardado \n ",file_out); fclose(filered);void SaveParametersDist(int num) gcvt(num,3,str); /* Transformo el nro. de red a alfanumerico */ char *tipo=".dat"; strcpy(file_out,outfile_param); strcat(file_out,str); strcat(file_out,tipo); struct datosfloat b1, rmb, b2, s1, rms, s2,desviacion; paramdist; paramdist.b1= lim_inf_B; paramdist.rmb= xmb; paramdist.b2= lim_sup_B; paramdist.s1= lim_inf_S; paramdist.rms= xms; paramdist.s2= lim_sup_S; paramdist.desviacion=sigma; if ((fileparam =fopen (file_out,"wb"))== NULL ) printf("Error al guardar los parametros ...\n"); getch(); exit(0); fwrite(&paramdist,sizeof(datos),1,fileparam); fclose(fileparam);

void DoCluster(void)

for(int i=0;i<x_size;i++)

Page 20: Generador Random

for(int j=0;j<y_size;j++) for(int k=0;k<y_size;k++)

Cluster[2*i+1][2*j+1][2*k+1]=red[i][j][k].site; Cluster[2*i][2*j+1][2*k+1]=red[i][j][k] .xb; Cluster[2*i+1][2*j][2*k+1]=red[i][j][k] .yb; Cluster[2*i+1][2*j+1][2*k]=red[i][j][k] .zb;

void foto(int tiempo) gcvt(tiempo,3,str); /* Transformo el Rc a alfanumerico */ char *tipo=".xyz"; strcpy(file_out,outfile_foto); strcat(file_out,str); strcat(file_out,tipo); if ((filered =fopen (file_out,"wt"))== NULL )

printf("Error al guardar la foto ...\n"); getch();

exit(0); fprintf(filered,"%d \n\n",(4*L*L*L));

for(int i=0;i<x_size;i++) for(int j=0;j<y_size;j++) for(int k=0;k<z_size;k++)

if((Cluster[2*i+1][2*j+1][2*k+1]>=lim_inf_S)&&(Clus ter[2*i+1][2*j+1][2*k+1]<lim_inf_S+deltaS/3)) fprintf(filered,"A %d %d %d\n",2*i+1,2*j+1,2*k+1);

if((Cluster[2*i+1][2*j+1][2*k+1]>=lim_inf_S+deltaS/3)&&(Cluster[2*i+1][2*j+1][2*k+1]<lim_inf_S+deltaS*2/3)) fprintf(filered,"B %d %d %d\n",2*i+1,2*j+1,2*k+1);

if((Cluster[2*i+1][2*j+1][2*k+1]>=lim_inf_S+deltaS*2/3)&&(Cluster[2*i+1][2*j+1][2*k+1]<=lim_sup_S)) fprintf(filered,"C %d %d %d\n",2*i+1,2*j+1,2*k+1);

/*Xb*/ if((Cluster[2*i][2*j+1][2*k+1]>=lim_inf_B)&&(Cluster[2*i][2*j+1][2*k+1]<lim_inf_B+deltaB/3)) fprintf(filered,"D %d %d %d\n",2*i,2*j+1,2*k+1);

if((Cluster[2*i][2*j+1][2*k+1]>=lim_inf_B+deltaB/3)&&(Cluster[2*i][2*j+1][2*k+1]<lim_inf_B

Page 21: Generador Random

+deltaB*2/3)) fprintf(filered,"E %d %d %d\n",2*i,2*j+1,2*k+1);

if((Cluster[2*i][2*j+1][2*k+1]>=lim_inf_B+deltaB*2/3)&&(Cluster[2*i][2*j+1][2*k+1]<=lim_sup_B)) fprintf(filered,"F %d %d %d\n",2*i,2*j+1,2*k+1); /*Yb*/ if((Cluster[2*i+1][2*j][2*k+1]>=lim_inf_B)&&(Cluster[2*i+1][2*j][2*k+1]<lim_inf_B+deltaB/3)) fprintf(filered,"D %d %d %d\n",2*i+1,2*j,2*k+1);

if((Cluster[2*i+1][2*j][2*k+1]>=lim_inf_B+deltaB/3)&&(Cluster[2*i+1][2*j][2*k+1]<lim_inf_B+deltaB*2/3)) fprintf(filered,"E %d %d %d\n",2*i+1,2*j,2*k+1);

if((Cluster[2*i+1][2*j][2*k+1]>=lim_inf_B+deltaB*2/3)&&(Cluster[2*i+1][2*j][2*k+1]<=lim_sup_B)) fprintf(filered,"F %d %d %d\n",2*i+1,2*j,2*k+1); /*Zb*/ if((Cluster[2*i+1][2*j+1][2*k]>=lim_inf_B)&&(Cluster[2*i+1][2*j+1][2*k]<lim_inf_B+deltaB/3)) fprintf(filered,"D %d %d %d\n",2*i+1,2*j+1,2*k);

if((Cluster[2*i+1][2*j+1][2*k]>=lim_inf_B+deltaB/3)&&(Cluster[2*i+1][2*j+1][2*k]<lim_inf_B+deltaB*2/3)) fprintf(filered,"E %d %d %d\n",2*i+1,2*j+1,2*k);

if((Cluster[2*i+1][2*j+1][2*k]>=lim_inf_B+deltaB*2/3)&&(Cluster[2*i+1][2*j+1][2*k]<=lim_sup_B)) fprintf(filered,"F %d %d %d\n",2*i+1,2*j+1,2*k); printf("Archivo %s Guardado \n ",file_out); fclose(filered);

void clockI(void)

struct time t;gettime(&t);hi= t.ti_hour; mi= t.ti_min; si=t.ti_sec; ci=t.ti_hund; struct date d; getdate(&d); day=d.da_day; month=d.da_mon; year=d.da_year;

srand(time(NULL)); printf ("Comienzo - Fecha:%d/%d/%d Hora:%g:%g:%g:%g \n\n" ,d.da_day,d.da_mon,d.da_year,hi,mi,si,ci); printf(" Red correlacionada 2D \n ");

Page 22: Generador Random

printf(" L= %d \n ",L);void clockF(void) struct time t; gettime(&t); hf= t.ti_hour;mf= t.ti_min;sf= t.ti_sec;cf= t.ti_hund; struct date d; getdate(&d); printf ("Comienzo: Fecha:%d/%d/%d Hora:%g:%g:%g:%g \n" ,day,month,year,hi,mi,si,ci); printf ("Fin: Fecha:%d/%d/%d Hora:%g:%g:%g:%g \n" ,d.da_day,d.da_mon,d.da_year,hf,mf,sf,cf); printf ("Fin \n");