LSQR algorithm with PyOpenCL

As part of the FreeCAD-Ship project I created a LSQR algorithm to solve Linear systems of equations, accelerated with OpenCL using PyOpenCL.

LSQR is a great, and relatively recent, iterative method to solve linear systems which can work with unsymmetrical rectangular matrix of an arbitrary range. Fortunately this method has also the property to fit so quite well to the GPU computing paradigm.

Bug fixes in FreeCAD-Ship

Several bugs have been fixed and already integrated in the master branch:

* Bad computed main frame coefficient.
* Crash in the tank volume computation when too low filling levels are required.
* Eventually bad computed floating area coefficient.
* Disabled the simulations framework (in development)

Since has been already integrated, I hope that in several days will be included in the Windows installers and in the Linux packages.

AQUAgpusph

Nos vamos preparando para la liberación de AQUAgpusph (Another QUAlity GPU-SPH), un código W-SPH (Weakly compressible SPH) para resolver Navier-Stokes, acelerado con OpenCL, altamente modable y extensible con Python en algunas partes.

Y para ir abriendo boca ya hay algunas imágenes en la galería del canal (que tenemos como asignatura pendiente ir volviendo a rellenar):

http://canal.etsin.upm.es/galeria

Bug en la especificación de OpenCL 1.2

Creo que existe un bug de lo más absurdo en la última especificación de Khronos para OpenCL 1.2. He reportado el fallo en sus foros oficiales, pero de momento no hay respuesta.

Supongo que lo arreglarán (si no me he equivocado claro), pero de momento, a todo aquél que necesite las cabeceras, debe modificar cl_ext.h.

Me parece que funciona bastante mal el sistema por el que se liberan las especificaciones de Khronos, y una prueba de ello es este error, pero más flagrante todavía es la chapuza que hay montada en torno a las extensiones para D3D.

Control de eventos en los procesos largos de FreeCAD-Ship

Uno de los problemas de FreeCAD-Ship es prepararlo para los usuarios de Windows, las razones de esto todos las conocemos.

Pues bien, recientemente he recibido quejas relacionadas con algo que se encuentra documentado en los tutoriales, pero que efectivamente se puede volver una situación difícil de manejar, y es cuando los cálculos son muy largos. Si el número de geometrías es muy grande o estas son muy complejas el cálculo de las hidrostáticas y de la curva de brazos adrizantes GZ pueden llevar minutos, o incluso horas, algo que en Linux no era complicado de seguir, y en su caso detener, pues se lanzaba FreeCAD desde la terminal y listos, allí aparecía la evolución del proceso, y se podía detener con nuestro amado Ctrl+C.

Pero en Windows… Dichosos los usuarios de Windows… ¿Quién querría usar la terminal de Windows para lanzar FreeCAD? Y si no hay terminal, no hay seguimiento del proceso, y se puede volver un tanto frustrante. Por ello he añadido un control mejorado de los eventos en el cálculo de hidrostáticas y curva de GZ, de tal forma que ahora el programa se actualiza al final del cálculo de cada punto, mostrando la evolución en la vista de informe, y permitiendo detener el cálculo presionando el botón Cancelar del cuadro de diálogo.

La respuesta estaba en realidad en los foros de FreeCAD, pero he tenido que adaptarla a mis necesidades, lo que no era del todo trivial. De regalo además ahora la herramienta será capaz de guardar y graficar los resultados obtenidos hasta el momento del corte.

La integración es en un principio sencilla, así que espero que se encuentre disponible en la mayoría de los canales lo antes posible.

Módulo de graficado en FreeCAD (matplotlib)

Desde que se integró oficialmente FreeCAD-Ship uno de los problemas graves de mi módulo de FreeCAD era que en Windows no se podían graficar las curvas de una forma sencilla puesto que se empleaba pyxplot.

Para solucionarlo he creado un módulo de graficado basado en matplotlib.

Multiaxes example

El módulo ofrece, a traves de la consola o los macros de FreeCAD, toda la potencia de matplotlib, y una capa sobre el mismo que permite un control sencillo. Además se ofrecen algunas herramientas en la interfaz gráfica de usuario para controlarlo. Podeís encontrar ejemplos de como usarlo aquí y aquí.

Además FreeCAD-Ship ya ha sido adaptado para emplear el nuevo módulo con matplotlib, permitiendo curvas como estas:

Curvas hidrostáticas de los principales coeficientes de formas

Lamentablemente numpy y matplotlib no serán incluidos en el instalador de FreeCAD por el momento, así que hay que instalarlos manualmente si se quiere disponer de las nuevas herramientas (que ya usan otros módulos de FreeCAD).

Respecto del instalador de FreeCAD para Windows, podeís obtener la última versión (que aunque sea unstable es mucho más estable que la 0.12, paradojas de la vida) aquí.

Los usuarios de distribuciones derivadas de Debian (incluidas Mint, Ubuntu, etc.) podeís usar las daily builds.

El resto ojear esta página.

HydrOCL, un módulo para Hydrax acelerado con OpenCL

Dentro del plan de renovación de SonSilentSea he desarrollado un modulo para Hydrax que básicamente tiene la peculiaridad de estar acelerado con OpenCL. Lo cierto es que en un Hardware convencional, si se emplea Hydrax de un modo liviano, la implementación de OpenCL no aporta un gran valor, pero lo cierto es que con el activo se puede aumentar la complejidad de la escena sin por ello perjudicar notablemente los FPS. Esto es especialmente notable cuando se emplean olas, puesto que el módulo que desarrolle hace ya tiempo en Hydrax-0.5.4 sufría de forma notable cuando el número de olas superaba 4 o 5, ahora se pueden añadir hasta 20 sin problemas. Habrá que ver que ocurre con los puntos de presión.

Más información aquí:

http://www.ogre3d.org/forums/viewtopic.php?f=11&t=69924