Física, computadoras y linux

Por Enrique

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:
  • ssh Permite 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.
  • rsync Una 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, git Estos 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).
  • latex El 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!
  • gnuplot Excelente 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 emacs y vi. Personalmente, prefiero emacs.
  • 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.

Anuncios
Esta entrada fue publicada en Computación, Divulgación de las Ciencias, Física y etiquetada , , , . Guarda el enlace permanente.

9 respuestas a Física, computadoras y linux

  1. Enrique dijo:

    Hola Omar,

    yo he hecho mis estudios en EEUU, así que este post puede ser de utilidad.

  2. Omar dijo:

    Hola de nuevo.

    Solo escribo para preguntar sobre los posgrados en fisica que ustedes manejan.

    De antemano gracias.

  3. Omar dijo:

    Te agradesco las bibliografias.

  4. Enrique dijo:

    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.

  5. Omar dijo:

    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.

  6. Enrique dijo:

    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.

  7. Pablo dijo:

    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.]

  8. Enrique dijo:

    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.

  9. Eduardo dijo:

    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.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s