Вы находитесь на странице: 1из 16

Fsica Computacional

Dr. Jos Meja Lpez


Oficina
e-mail: jmejia@puc.cl

Sitio Web:
http://neel2.fis.puc.cl/cncm/FisCompu/index.html
Fsica Computacional - JML - 2012

Introduccin

Computers are incredibly fast, accurate, and stupid;


humans are incredibly slow, inaccurate, and brilliant;
together they are powerful beyond imagination
Albert Einstein?
Leo Cherne?

Alguien que no ha cometido


errores nunca trat de hacer
algo nuevo

Fsica Computacional - JML - 2012

Naturaleza de la Fsica Computacional


- El paradigma cientfico se ha ampliado para incluir la simulacin como una dimensin

simulacin

adicional.

experimento
- Objetivo: explorar modelos y resolver problemas
Profundo entendimiento > de otro modo posible
- Problemas difciles o complejos

Ms all de la solucin analtica


Ms all de la capacidad humana

- Uso de la computadora: Mquina super-calculadora


Lab: simulaciones numricas del mundo
Palanca de nuestras habilidades intelectuales
Fsica Computacional - JML - 2012

Qu es Fsica Computacional?
- Es un tema multidisciplinario de la Ciencia que

Fsica

Aplicaciones

combina Fsica, Ciencias de la computacin y


Matemticas.

FC
CC

Matemat.

Hardware
sofware

tcnicas

- Necesitamos entender las herramientas matemticas


y de la CC lo suficientemente bien para resolver
nuestros problemas correctamente.

- La Fsica Computacional no solo es un superposicin de estos campos, tambin es un


puente entre ellos (contiene elementos propios: DM, MC, ab-initio, etc).
- Paradigma del curso -> problema-solucin:
Problema

Modelo

Mtodo

Implementacin

Fsica

Discreto, continuo

Numrico, simblico

F90, C, phyton

Evaluacin
Visualizacin, exploracin, anlisis
Fsica Computacional - JML - 2012

Tpicos del curso

- Introduccin a los lenguajes de programacin.


- Integracin numrica: mtodos estndares y mtodo de Monte
Carlo.
- El Mtodo de Monte Carlo en Fsica.
- Ecuaciones diferenciales ordinarias.
- Dinmica Molecular.
- Algebra lineal y el problema de autovalores.
- Sistemas Cunticos: DFT
- Ecuaciones diferenciales parciales: Ecuacin de onda.

Fsica Computacional - JML - 2012

Textos de Referencia
- R. H. Landau, M. J. Paez, C. C. Bordeianu; A survey of
computational Physics; Princenton University Press; 2008.
- J. M. Thijssen; Computational Physics; Cambridge University
Press; 2003.
- D. Frenkel, B. Smit; Understanding Molecular Simulation;
Academic Press; 2002.
- D. C. Rapaport; The Art of Molecular Simulation. Cambridge
University Press; 2004.
- H. Gould, J. Tobochnik, W. Christian; An introduction to
Computer Simulation Methods; Addison Wesley; 2007.
- H. P. Langtangen; A primer on scientific programming with
python; Springer-Verlag; 2009.
Fsica Computacional - JML - 2012

Evaluacin
- Tareas: 20% del curso
- Proyectos y presentaciones de las mismas (2): 80%

Reporte de los proyectos


- El reporte se debe escribir de manera que pueda ser entendido por otras personas
quienes no han hecho la tarea, y debe incluir:
Introduccin
Breve resumen de la naturaleza del sistema fsico, el mtodo numrico bsico o
algoritmo, y el inters o cuestiones relevantes
Mtodo
Describir el algoritmo y como es implementado en el programa. Algunas veces
esta explicacin puede ser dado en el programa mismo. Asegurarse de discutir
cualquier rasgo importante de tu programa.
Verificacin del programa
Confirmar que el programa es correcto considerando casos especiales y
comparando con resultados conocidos.
Fsica Computacional - JML - 2012

Resultados
Mostrar tus resultados de manera grfica y/o tabular, con discusiones sobre
ellas, las cuales pueden incluir relaciones cualitativas y cuantitativas entre las
variables y una estimacin de las precisiones numricas. Cada figura o tabla
debe tener un caption con informacin competa,
Conclusiones
Resumir tus resultados explicarlos en fsica simple si es posible. Tambin dar
sugerencias para trabajo futuro o posibles extensiones.

Fsica Computacional - JML - 2012

Lenguajes de programacin
- Un computador hace exactamente lo que se le dice que haga

=>

obtener el

suficiente entendimiento del problema


- Ejemplo, le decimos al computador:
Calculate area of circle

# haz esto computador!

qu crculo se considera? qu hacer con el rea?


- Un mejor programa sera
read radio
calculate area of circle
write area

# dato de entrada
# clculo numrico
# dato de salida

La 2 lnea no tiene sentido, hay que implementar un algoritmo (conjunto de


reglas que debe seguir el computador)
Fsica Computacional - JML - 2012

- Un mejor programa sera


read radio
PI = 3.141593
area = PI *radio*radio
write area

# dato de entrada
# deifine constante
# Algoritmo
# dato de salida

Qu lenguaje utilizamos?
- FORTRAN, C, C++, usan compiladores para leer todo el programa y traducirlo en
lenguaje mquina.
- Maple, matematica, matlab, traducen cada lnea del programa cuando es entrada.
- Phyton, java, interpretan el lenguaje en un cdigo byte universal, transportable a
cualquier arquitectura.
Figuras y grficos?
-
-
-
-

Gnuplot, xmgrace, qtiplot (directamente en Debian)


PGPlot (http://www.astro.caltech.edu/~tjp/pgplot/)
SciDavis (http://scidavis.sourceforge.net/)
Matplotlib (http://matplotlib.sourceforge.net/); Vphyton (http://vpython.org/)

Fsica Computacional - JML - 2012

Breve Introduccin al FORTRAN


- rea de un crculo:
PROGRAM area_circle
implicit none
real(kind(1.d0)) :: area, radio, PI
write(6,*)'radio?
read(5,*)radio
PI=3.141593d0
area=PI*radio**2
write(6,*)'area= ',area
END PROGRAM area_circle
bash-3.2$ gfortran area.f90 -o xarea
bash-3.2$
bash-3.2$ ./xarea
radio?
2
area= 12.566371999999999
bash-3.2$
Fsica Computacional - JML - 2012

! o real(8)::

! dato de entrada
! constante
! Calculo del area
! salida

- Declaraciones de variables y asignaciones:


PROGRAM asignaciones
implicit none
integer :: i, j
real (kind=4) :: x
real (kind=8) :: z, t
complex :: u
character (len=4) :: palabra
logical :: test

! declara variables de precision simple


! Precision doble
! Numeros complejos (kind=4)
! (len=4) indica que tiene 4 caracteres

x=3.24e-2
! asignacion de 3.24 102
z=0.0324d0
! d0 indica que es doble precision
t=0.0324
u=(3.4,2.)
! = 3.4 + 2i
palabra=casa
! las comillas identifican las constantes
test=.TRUE.
write(6,*) x, z, t, u, palabra, test
END PROGRAM asignaciones
3.24000008E-02 3.23999999999999982E-002 3.24000008404254913E-002
( 3.4000001 , 2.0000000 ) casa T
Fsica Computacional - JML - 2012

- Estructuras de decisin: ifthen


PROGRAM decisiones
implicit none
real(8) :: x, y
write(6,*)'numeros x y'; read(5,*)x,y
if (y<0) write(6,*)'y es estrictamente negativo'
if (x==0)then
write(6,*)'x es nulo'
elseif(x>0)then
write(6,*)'x es positivo'
else
write(6,*)'x es negativo'
end if
if((x>0.and.y>0).or.(x<0.and.y<0))write(6,*)'x*y es positivo'
END PROGRAM decisiones
Operadores de comparacin:
.gt. (>) .lt. (<) .eq. (==)
Operadores lgicos:

.and.

Fsica Computacional - JML - 2012

.or.

.xor.

.ge. (>=)
.not.

.eqv.

.le. (<=)
.neqv.

.ne. (/=)

- Estructuras de decisin: select case


PROGRAM casos
implicit none
integer :: op
write(6,*)'elija una opcion ; read(5,*)op
select case(op)
case(1)
write(6,*)'op=1'
case(2)
write(6,*)'op=2'
case(3:5)
write(6,*)'3 <= op <= 5'
case(6:)
write(6,*)'op >= 6'
case(:-1)
write(6,*)'op < 0'
case default
write(6,*)'op = 0'
end select
END PROGRAM casos
Fsica Computacional - JML - 2012

- Estructuras de repeticin:
PROGRAM repeticion
implicit none
integer::i
real(8)::x
do i=1,10,2
write(6,"(1x,i2,'x 3 = ',i3)")i,i*3
end do
do i=10,1,-1
write(6,"(a,i2)")'vamos en el numero i= ',i
write(6,"(a)")'dar un numero'; read(5,*)x
if (.not.x>=0) then
write(6,"(a12)")'x es negativo'
cycle !se egresa a la primera linea, incrementando i
end if
write(6,"('el numero fue ',F10.4)")x
if (i.eq.8)then
write(6,*)'se alcanzo el numero 8'
exit !se sale del bucle
end if
end do
END PROGRAM repeticion
Fsica Computacional - JML - 2012

1x 3 = 3
3x 3 = 9
5x 3 = 15
7x 3 = 21
9x 3 = 27
vamos en el numero 10
dar un numero
2
el numero fue
2.0000
vamos en el numero 9
dar un numero
-3
x es negativ
vamos en el numero 8
dar un numero
1
el numero fue
1.0000
se alcanzo el numero 5

- ficheros
PROGRAM ficheros
implicit none
integer::i,n
real(kind(1.d0))::a,b
character(len=20)::arch
arch='datos.dat'
open(unit=1,file=arch,status='unknown')
do i=1,10
a=i*10.d0
write(1,"(i4,2x,F10.3)")i,a
end do
close(1)
open(unit=1,file=arch,status='old')
open(unit=2,file='salida.res',status='unknown')
do i=1,5
read(1,*)a,b
write(2,*)a+b
end do
close(1); close(2)
END PROGRAM ficheros
Fsica Computacional - JML - 2012

bash-3.2$ more datos.dat


1
10.000
2
20.000
3
30.000
4
40.000
5
50.000
6
60.000
7
70.000
8
80.000
9
90.000
10
100.000
bash-3.2$ more salida.res
11.000000000000000
22.000000000000000
33.000000000000000
44.000000000000000
55.000000000000000