Como toda ocupación, la física computacional tiene sus herramientas. Comúnmente se dice que hacer investigación en física teórica no requiere de un gran presupuesto, pues lo que se necesita son lápices (o lapiceros) y varios cientos de hojas de papel. Bueno, en realidad también se necesita acceso a libros, revistas científicas y — en estos tiempos — los largos y engorrosos cálculos de álgebra se hacen en la computadora.
Para mí, ha sido muy entretenido trabajar en física computacional. Es una subarea de la física teórica. No se hace ningún tipo de trabajo experimental en el laboratorio. Sin embargo se hacen “experimentos numéricos” en la computadora, se exploran diferentes situaciones que en muchos casos son imposibles de reproducir en un laboratorio (como la evolución de estructuras galácticas, por ejemplo). El tipo de problemas que se estudian involucran ecuaciones diferenciales muy complicadas, para las cuales no se conoce una solución general. Los problemas que se estudian van desde las ecuaciones de la mecánica cuántica para explorar estructuras moleculares, simulaciones de desdoblamiento de proteínas, dinámica de fluidos, clima global hasta la formación de galaxias y muchos otros.
Mi campo particular de acción es la relatividad numérica. Desde patojo me apasionó la teoría de la relatividad y andar escribiendo programas en la computadora, así que esta área de la ciencia fue la combinación perfecta. Lo que se hace en relatividad numérica es resolver las ecuaciones de la relatividad general de Einstein para averiguar el comportamiento de los extremadamente fuertes campos gravitacionales producidos en la colisión de objetos estelares, tales como agujeros negros y estrellas de neutrones. La relatividad general predice que en tales eventos, grandes cantidades de energía son irradiadas al espacio en forma de ondas gravitacionales. Estas simulaciones numéricas han sido un gran desafío en la física computacional en los últimos 40 años. Fue hasta el 2005 que se logró calcular una simulación completa la colisión de dos agujeros negros orbitando.
En este post quiero mencionar brevemente las herramientas del lado computacional. Las aplicaciones que son usadas alrededor del mundo para hacer investigación científica de punta. La lista no pretende ser exhaustiva sino mas bien esencial y comienza con algo sencillo: las aplicaciones y programas que vienen con cualquier distribución de Linux. Sí, usuarios de Linux, un su computadora tienen las mismas herramientas básicas que posee cualquier otro científico computacional.
Basado en mi propia experiencia, he creado una lista de aplicaciones que uso constantemente. Todas vienen por default en su distribución favorita de Linux [1] y si no vienen, se bajan gratis de internet. Así que empecemos:
- La terminal de Linux Una pequeña ventana en donde se escribe todo tipo de comandos. Algunos que uso todo el tiempo son:
sshPermite conectarse a una computadora remota y trabajar como si uno estuviera físicamente enfrente de ella. Este es el método de conexión para utilizar una supercomputadora.rsyncUna buena manera de copiar grandes cantidades de datos entre dos computadoras. Encripta los datos y copia solo los archivos modificados. Ideal para hacer backups periódicamente.cvs, svn, darcs, gitEstos son sistemas de revisión de versiones. Cuando uno desarrolla sus propios programas, ya sea sólo o en equipo, estos sistemas llevan la cuenta de todos los cambios hechos y crea diferentes versiones de cada archivo. Esto hace posible poder regresar a cualquier versión previa en caso de que nuestros cambios arruinen el programa (sucede).latexEl mejor sistema para preparar documentos y presentaciones. Es posible escribir ecuaciones y tablas sin tocar el mouse. Enumera capítulos, secciones, subsecciones, figuras, tablas y ecuaciones automáticamente. Si hay que insertar una tabla o figura, LaTeX reordena la secuencia de numeración y las referencias a ellas también. Maneja la bibliografía de la misma similar y genera el índice automáticamente. ¡Qué más se puede pedir!gnuplotExcelente para hacer gráficas en dos y tres dimensiones así como para ajustar funciones a datos numéricos, tanto lineales como no lineales. Todo se hace a través de comandos y también se pueden hacer scripts, automatizando la generación de los gráficos cuando se cambian los datos. Esto substituye las gráficas generadas en hojas electrónicas.- DV, ParaView, OpenDX, VisIt Son programas para visualización científica. Es fácil pasarse horas generando gráficas en 3D y animaciones impresionantes.
También son necesarias las herramientas para programar:
- Editor de texto Los más usados son
emacsyvi. Personalmente, prefieroemacs. - Compilador de GNU Todos nuestros programas en C, C++ y fortran dependen de él. También es posible bajar el compilador de Intel, en muchos casos optimiza mejor el código haciendo que corra más rápido.
- Librerías científicas (scientific libraries) [2] No todo hay que programarlo de cero. Existen varias librerías optimizadas para algunas tareas. Entre ellas está LAPACK (Linear Algrebra PACKage) con rutinas para hacer todo tipo de operaciones con matrices. PETSc (Portable, Extensible Toolkit for Scientific Computation), una suite de rutinas usadas en la solución de ecuaciones diferenciales parciales. MPI (Message Passing Interface) provee comunicación entre procesadores, permitiendo computación en paralelo. Es la base de la computación de alto rendimiento. HDF5 permite manejar extremadamente grandes y complejos archivos de datos. Se usa para hacer output de cantidades que dependen de las tres dimensiones (x,y,z). La información se almacena en formato binario, de lo contrario los archivos ocuparían hasta varios tera bytes en formato ascii.
- Perl, Shell Scripting Otros lenguajes útiles para hacer operaciones repetitivas que regularmente involucran varios archivos. Por ejemplo, si tenemos 100 archivos con 10 columnas de datos y queremos extraer las primeras 5 de ellas y mandarlas a un sólo archivo. Abrir cada archivo en un editor de texto… no es la mejor manera de hacerlo.
Me parece que esto cubre la mayor parte, agreguen o quiten dependiendo del problema específico y de gente específica [3].
También podría agregar la aplicación de chat. Es útil para hacer hacer preguntas cortas. Uno siempre puede ir a los chat logs si se le olvida algún detalle.
Resumiendo, cualquier persona con inclinación a la ciencia o la ingeniería tiene todas las herramientas para transformar su computadora de una máquina de escribir electrónica a toda una estación de trabajo científico.
________________
[1] Algunas personal también usan Macs.
[2] ¿Por qué traducimos “libraries” como “librerías”?…
[3] Los paquetes como Mathematica y Matlab son muy útiles también. Sin embargo no son gratis.





Junio 21, 2008 a las 6:58 am
Qué onda Kike!
En qué grupo de Chat desarrollás tus preguntas? Posiblemente es el de tu grupo de la Universidad, o no? Sería lindo si existiera uno para todo el mundo, con clasificaciones para que no se vuelva un caos.
Junio 21, 2008 a las 11:10 pm
Hola Eduardo.
No es un grupo en particular. Cada quien tiene una cuenta en AIM y agrega los contactos de la gente con la que trabaja. Recuerdo que me pareció un poco extraño cuando me dijeron que les diera mi usuario de AIM. Hasta ese entonces, para mí el chat era para platicar con los cuates. Sin embargo es un buen canal de comunicación, en particular porque no hay que mantener la conversación fluyendo como cuando se está en el teléfono, por ejemplo. Uno puede tomarse el tiempo para pensar y reformular las ideas sin que la otra persona tenga que dedicar toda su atención a la conversación. Y hay otras veces donde es mucho más efectivo ir a hablar en persona.
Febrero 16, 2009 a las 5:11 pm
Estaba viendo que no aparece GNU Octave, y esta herramienta puede hacer lo mismo (y con librerás GNU para optimizar cálculos numéricos) que MatLab. Lo divertido es que MatLab está usando código GNU para hacer punto flotante (la última versión que vi) y entonces me parece chistoso que la gente lo use y no Octave.
[Con librerías GNU me refiero a una librería de cálculo de punto flotante cuyo nombre se me escapa de la mente pero que creo es parte del proyecto GNU y por tanto, libre.]
Febrero 16, 2009 a las 6:44 pm
Una de las razones por las que la gente en las universidades sigue usando Matlab (software propietario en general) es porque la universidad misma paga por las licencias. Incluso si uno quisiera su propia copia uno la puede comprar la versión de estudiante por $100 en lugar de los $1000 (o algo así) que cuesta. Mathematica 7.0 se puede compar por $10 y otros paquetes incluso son gratis.
Junio 26, 2009 a las 10:27 am
Hola Enrique.
Soy estudiante de fisica cuasi-egresado de la universidad de guadalajara y estoy interesado en la fisica computacional, el problema es que aqui nadie hace fisica computacional meramente. Supongo que el primer paso es emigrar al feliz mundo de LINUX (cosa que ya he hecho mas o menos bien), ahora me gustaria aprender a programar en fortran, pero he tenido problemas con los tutoriales.
De forma mas especifica y abusando tu confianza (o de cualquiera de los usuarios de este blog), quisiera ver si tienes algun tutorial para Dummies (con muchas ganas de aprender) sobre programacion en fortran que me pudieras pasar y me dieras algunos consejos de como iniciarme en el mundo de la fisica computacional.
Gracias.
Junio 26, 2009 a las 3:04 pm
Omar,
Hay un tutorial que a mí me a sacado de apuros muchas veces, lo podés encontrar aquí. Es bastante básico pero contiene lo suficiente para cuestiones numéricas.
Un libro que a mi me gustó mucho y me motivó a explorar la física computacional es “Computational Physics” de Jos Thijssen. Este libro se concentra en tópicos de física cuántica y dinámica molecular.
Otro libro que se enfoca un poco más en el análisis numérico mismo es “Computational Physics: Problem Solving with Computers” de Rubin H. Landau. Este libro cubre una variedad más amplia de problemas.
Ambos libros te pueden dar una idea de lo que se trata la física computacional. Distintas áreas de la física usan distintas técnicas.
Otra cosa que te puede ayudar es tomar un curso de análisis numérico mismo. Por ejemplo el libro “Numerical Analysis” de David Kincaid te muestra los puros métodos numéricos desde un punto de vista matemático sin mayor aplicación.
Finalmente, el libro clásico de referencia es “Numerical Recipies” de Press et al. el cual contiene una gran cantidad de algoritmos listos para ser usados. Este libro está en diferentes versiones para C, C++ y Fortran.
La forma más directa de iniciarte en el campo es trabajar con un profesor que haga algo que te interese. De esa manera te podés enfocar más en un área y progresar más rápido. La aplicación de métodos numéricos es muy variadas y amplia. En estos días casi toda la investigación hace uso de técnicas numéricas.
Junio 29, 2009 a las 9:06 am
Te agradesco las bibliografias.
Julio 3, 2009 a las 4:51 pm
Hola de nuevo.
Solo escribo para preguntar sobre los posgrados en fisica que ustedes manejan.
De antemano gracias.
Julio 3, 2009 a las 10:07 pm
Hola Omar,
yo he hecho mis estudios en EEUU, así que este post puede ser de utilidad.