You are currently browsing the category archive for the ‘Gráficos por Computador’ category.

En el artículo técnico What would a binary black hole merger look like?  se simula, mediante técnicas de ray tracing, como vería un observador externo el merge de dos agujeros negros (del artículo y del sitio web de los autores están sacadas prácticamente todas las imágenes).

Si estamos mirando hacia algún sitio, digamos:

ClockTower-400x300

y pasa un agujero negro frente a nosotros, lo primero que se nos viene a la cabeza es la siguiente imagen:

ClockTower-400x300b

ya que como de un agujero negro no puede escapar nada, ni la luz, pensamos que veríamos una simple esfera negra tapando un trozo de nuestra visión. Sin embargo, una imagen mas realista de lo que veríamos es:

ClockTower_BH-400x300debido a la curvatura que experimentan los rayos de luz por la curvatura del espacio-tiempo que genera el agujero negro: efecto de lente gravitacional.

Colocando una imagen de fondo más métrica, así es como se verían los espacios de Minkowski, Schwarzschild y Kerr.

analyticSpacetimesSi en lugar de un agujero negro tenemos un sistema binario de agujeros negros de igual masa, entonces tendríamos:

bbhSystem

Finalmente, una animación del merge:

A mi casi-código SPH le he añadido la libreria Voro++ de Chris Rycroft y ésta va calculando las correspondientes teselaciones de Voronoi tridimensionales correspondientes a las partículas siguiendo movimientos pendulares (sobre planos z=cte) .

Pulsar sobre la imagen para empezar la animación.animate_1

¿Qué tenemos que hacer para visualizar localmente datos compatibles con VisIt que tenemos en algun host? Para empezar, necesitamos tener la misma versión de VisIt instalada tanto local como remotamente. En segundo lugar, necesitamos crear un New Host en Options->Host profiles... y configurar, básicamente, el Remote host name y el Username (nombre completo de la máquina y nuestro usuario en ella) en la pestaña Host Settings, y un New Profile en la de Launch Profiles con las opciones por defecto.
Un detalle muy importante es que en el campo Path to VisIt installation, en el caso de tener un Mac, lo que necesita es:

/Applications/VisIt.app/Contents/Resources/

Finalmente, tanto para abrir fichero locales como remotos, le daremos a Open y seleccionaremos el localhost o el nuevo host configurado.

En la siguiente simulación tenemos 1000 partículas. Cada partícula a representa un péndulo de masa m_a y posición (x_a(t),y_a(t),z_a(t)), con z_a(t) constante, sometido a las fuerzas:

  1. F_1 = -m_ag, la fuerza de la gravedad, con g constante.
  2. F_2, la fuerza elática de la suspensión, de sentido opuesta a la posición del péndulo y de magnitud k_1d, con k_1 > 0 y d la variación de la longitud del péndulo respecto de su longitud en reposo l.
  3. F_3, la fuerza de fricción, con sentido opuesta a la velocidad del péndulo y magnitud k_2v, con v = \sqrt{(x_a')^2+(y_a')^2} y k_2 > 0.

La ley de Newton F = ma queda, para cada uno de los péndulos, es decir, para cada partícula, como el sistema de dos ecuaciones diferenciales de segundo orden:

m_a \begin{bmatrix} x_a''(t) \\ y_a''(t) \end{bmatrix} = F_1 + F_2 + F_3

que es:

m_ax_a'' = -k_1 (1-\frac{l}{\sqrt{x_a^2+y_a^2}})x_a - k_2\frac{x'_a}{\sqrt{x_a'^2+y_a'^2}}

m_ay_a'' = -k_1 (1-\frac{l}{\sqrt{x_a^2+y_a^2}})y_a - k_2\frac{y'_a}{\sqrt{x_a'^2+y_a'^2}}

Podemos expresar este sistema como un sistemad de ecuaciones de primer orden introduciendo incongnitas adicionales: u_a = x_a' y v_a = y_a', con lo que nos queda:

\left \{  \begin{array}{rcl}  x_a' &=& u_a \\  y_a' &=& v_a \\  m_au_a' & = & k_1 (\frac{l}{\sqrt{x_a^2+y_a^2}}-1)x_a - k_2\frac{u_a}{\sqrt{u_a^2+v_a^2}} \\  m_av_a' & = & k_1 (\frac{l}{\sqrt{x_a^2+y_a^2}}-1)y_a - k_2\frac{v_a}{\sqrt{u_a^2+v_a^2}} - m_ag \\  \end{array}  \right .

En la siguiente simulación tomamos m_a aleatoria para cada partícula a, por lo que tendremos que resolver el sistema de EDOs numéricamente para cada una de ellas. Además, tendremos l=1, k_1 = 10000 y k_2=1 en todos los péndulos. Cada uno de éstos se distribuye a lo largo de una espilar cilíndrica y las velocidades iniciales son, para todas ellas, u_{a_0}=0, v_{a_0} = -0.7 y v_{z_0} = 0. El intervalo de tiempo es desde t_i = 0 hasta t_f=10 que se divide en 400 subintervalos.

El resultado es el siguiente:

A continuación nuestra primera animación creada con VisIt a partir de ficheros silo generados a partir de llamadas a métodos de nuestras primeras clases.

Temporalmente, aunque es mejor utilizar nuestras partículas simplemente como nodos de interpolación a la hora de visualizar, las mostraremos como puntos.

A partir de este momento, podremos tener una referencia visual de nuestras partículas que nos ayudará mucho a la hora de evaluar como de bien estamos haciendo las cosas.

Sin mas dilación, nuestra minianimación:

No es mas que un conjunto de mil partículas desplazandose sobre un cilindro. La animación consta de 100 ficheros .silo y hemos generado el mpeg con el wizard de VisIt.

Ya dedicamos un post a VisIt. En el creamos una animación a partir de un conjunto de ficheros existentes.

¿Como generamos ficheros .silo desde nuestro código? En primer lugar, necesitamos tener las librerias correspondientes, que las podemos conseguir ejecutando:

./build_visit --console --no-visit --no-thirdparty  --thirdparty-path /usr/local --silo --hdf5 --szip

desde el terminal, y donde build_visit es un fichero que podemos conseguir aqui.

A continuación, necesitamos incluir la libreria <silo.h> en nuestro fichero y añadir:

PLATFORM=i386-apple-darwin10_gcc-4.2

SZIP_DIR=/usr/local/szip/2.1/$(PLATFORM)
SZIP_CPPFLAGS=-I$(SZIP_DIR)/include
SZIP_LDFLAGS=-L$(SZIP_DIR)/lib
SZIP_LIBS=-lsz

HDF5_DIR=/usr/local/hdf5/1.8.4/$(PLATFORM)
HDF5_CPPFLAGS=-I$(HDF5_DIR)/include $(SZIP_CPPFLAGS)
HDF5_LDFLAGS=-L$(HDF5_DIR)/lib $(SZIP_LDFLAGS)
HDF5_LIBS=-lhdf5 $(SZIP_LIBS) -lz

SILO_DIR=/usr/local/silo/4.6.2/$(PLATFORM)
SILO_CPPFLAGS=-I$(SILO_DIR)/include $(HDF5_CPPFLAGS)
SILO_LDFLAGS=-L$(SILO_DIR)/lib $(HDF5_LDFLAGS)
SILO_LIBS=-lsiloh5 $(HDF5_LIBS) -lm

LDFLAGS=$(LDFLAGS) $(SILO_LDFLAGS)
LIBS=$(SILO_LIBS)
CPPFLAGS=$(CPPFLAGS) $(SILO_CPPFLAGS)

a nuestro Makefile

VisIt es una herramienta open source que nos permite visualizar y analizar conjuntos de datos extremadamente grandes, del orden de tera y peta, en multiples plataformas. Podemos visualizar rápidamente nuestros datos, animarlos, manipularlos y almacenar los resultados obtenidos.

Algunas características interesantes son:

  • Tipos estandar de gráficos: Curve plot, Mesh plot, Contour plot, Surface plot, Vector plot,  Tensor plot, Volume plot, etc.
  • Podemos trabajar en 1D, 2D, 3D y variando en tiempo.
  • Permite definir diferentes tipos de mallas: rectilineas, curvilineas, desestructuradas, puntuales y AMR (Adaptive Mesh Refinement), etc.
  • Manipulación de datos (slicing, clipping, project, etc.) e interrogaciones (analisis comparativo, debugging, etc.).
  • Opciones para anotaciones, iluminación y rendering.
  • Podemos trabajar con datos escalares, vectoriales y tensoriales.
  • Permite paralelizaciones.

Para visualizar los datos podemos utilizar VisIt como aplicación mediante fichero (\approx 100 formatos diferentes), base de datos (se pueden desarrollar nuevos plug-ins) o como librería mediante código. También podemos crear animaciones mediante flipbook, keyframing o scripting. Podemos trabajar en local, en remoto o utilizando la arquitectura cliente/servidor.

VisIt se compone de cuatro componentes:

  • Graphical User Interface (GUI): se ejecuta en local y permite, entre otras cosas, seleccionar los ficheros, crear graficos, fijar atributos, etc.
  • Viewer: se lanza en local y es donde se muestran las visualizaciones con las que podemos interactuar con el ratón.
  • Database server: puede lanzarse en remoto y permite el acceso a los datos.
  • Compute engine / Parallel compute server: puede lanzarse en remoto y es el encargado de generar los gráficos.

A continuación una pequeña animación flipbook que hemos creado con datos que ofrece VisIt en su documentación.

Los ficheros .visit, en este caso wave.visit, son ficheros de texto que contienen los nombres de todos los ficheros que guardan, cada uno, el estado de la simulación en un instante de tiempo determinado: wave0010.silo, wave0010.silo, ..., wave0700.silo. En este caso son .silo que es un formato propio de VisIt.

junio 2017
L M X J V S D
« Feb    
 1234
567891011
12131415161718
19202122232425
2627282930