Comments on Une envoûtante animation d'ondes sur la sphère

Benoit Jacob (2015-10-19T16:18:43Z)

Pour la version non-WebGL: il est difficile pour le navigateur de compiler efficacement du code JavaScript "generique", parce que le langage JavaScript est "trop dynamique", en revanche certains sous-ensembles de JavaScript sont beaucoup mieux optimises, et il existe un compilateur, Emscripten, qui compile du C/C++ en un tel sous-ensemble de JavaScript. Bref, si tu veux beneficier du "JavaScript ultra rapide" qu'on t'a fait miroiter, ecris donc du C/C++ et utilise Emscripten. La, tu devrais avoir environ 50% de la vitesse de ton code "natif".

Pour la version WebGL: note que meme lorsque les textures float sont supportees, il n'est pas garanti que tu puisses les utiliser comme framebuffer. Beaucoup de GPUs mobiles (telephones portables) supportent les textures float uniquement comme source, pas comme destination de rendu. Le seul moyen de le savoir est de d'appeler webgl.checkFramebufferStatus. Une solution de contournement consiste a encoder tes floats en RGBA8. WebGL2 apportera une solution un peu moins mauvaise: les textures en int32, qui permettront de stocker des valeurs a virgule fixe dans des conditions un peu plus acceptables. Mais le probleme sous-jacent avec les floats non utilisables comme destination, est la pour durer, parce que ce probleme reflete une limitation du materiel existant (les operations de framebuffer restent une des dernieres parties non-programmables du pipeline, avec du materiel specialise). Avec WebGL2 tu pourras peut-etre faire ce que tu veux avec des vertex buffers en utilisant le "transform feedback". Avec Vulkan, qui donnera peut-etre lieu un jour a une API Web, on aura peut-etre enfin une vraie API de calcul utilisable. Mais d'ici la, on peut aussi esperer que l'infame GPU ait disparu.

Ruxor (2015-09-09T21:26:50Z)

Update to previous comment: because of the changes I made today, it would now be the choose_mastertab_default() function that needs to be replaced (with the same code except for the name change).

Ruxor (2015-09-08T21:50:07Z)

@jonas: Your question certainly makes sense: you can ask for the evolution of a δ distribution (whether as initial value of φ or, as you suggest, of ∂φ/∂t, with the other one being 0), under the wave equation: these are the "Green's functions" of that equation. I don't know how to describe them intelligently, however, although they have certainly been studied. The evolution is, of course, axially symmetric if we start with initial conditions which are axially symmetric (as is the case of a δ distribution); furthermore, I think that the signal is not concentrated on the "light cone" (unlike in the case of the 3D wave equation — where it is known as Huygens' principle), although I never really understood this.

My program can't display this because it is limited to a small number of spherical harmonics, but it can give at least some sense of what the evolution might look like: to try it, replace the function choose_mastertab() in the JavaScript code by the following:

function choose_mastertab() {
    // Choose the master tab from which coefficients are computed.
    // Each entry is a 3-value array: amplitude, frequency, phase.
    "use strict";
    for ( var chn=0 ; chn<3 ; chn++ ) {
        mastertab[chn] = new Array(coef_size);
        for ( var hix=0 ; hix<coef_size ; hix++ ) {
            var hl = Math.floor(Math.sqrt(hix));
            var hm = hix - hl*hl;
            if ( hm > hl )
                hm = hl-hm;
            if ( hl == 0 || hm != 0 )
                mastertab[chn][hix] = [0, 0, 0];
            else
                // Give wave mode hl a frequency of sqrt(hl*(hl+1)),
                // because hl*(hl+1) is the Laplacian eigenvalue for
                // this mode.
                mastertab[chn][hix] = [0.3/Math.sqrt(hl*(hl+1)),
                                       Math.sqrt(hl*(hl+1)), -0.25];
        }
    }
}

jonas (2015-09-08T17:32:03Z)

How would the wave evolve from an initial state where phi is zero everywhere and d*phi/dt is zero on most of the sphere but high in a very small environment? Does this question even make sense, in that there is a limit when the size of the environment goes to zero and the initial value is scaled correctly?

Ruxor (2015-09-08T15:58:27Z)

@Bob: À ce niveau-là, je pense que le mieux est vraiment d'éditer le JavaScript dans la page, qui est censé être assez compréhensible. C'est la fonction choose_mastertab() qui tire au hasard ce qui sera affiché, mastertab étant un tableau 3×(8+1)²×3 de valeurs déterminant les coefficients des différentes harmoniques (première coordonnée = composante RGB ; deuxième coordonnée = numéro de l'harmonique, calculé comme ℓ² + m si m≥0 et ℓ² + ℓ − m si m<0 ; troisième coordonnée = 0 pour l'amplitude, 1 pour la fréquence temporelle, qui doit être √(ℓ(ℓ+1)) si on prétend résoudre l'équation des ondes, et 2 pour la phase temporelle entre 0 et 1). Mais les essais que j'ai faits suggèrent que ce n'est pas terriblement intéressant de jouer avec ça (à la limite, ce qui est intéressant, c'est de modifier la décroissance en ℓ de l'amplitude). Pour ce qui est des données du CMB, je pense que ça n'aura aucun intérêt avec aussi peu d'harmoniques (si tant est que ça en est avec plus…).

@vicnent: Vue la manière dont le programme est structuré, ce serait vraiment très lourdingue de rendre dynamique la limite en harmoniques ou la résolution (ça implique de revenir en arrière pour invalider et refaire plein de calculs), donc je n'ai pas le courage. Déjà, je n'ai pas vraiment la patience d'ajouter un bouton pause (ce qui est quand même nettement plus facile).

vicnent (2015-09-08T13:53:01Z)

Sur un macbook pro 2,9 GHz / 8 Go Ram, les deux versions sont parfaitement fluides. (Si tu avais un peu de temps, tu pourrais proposer que lecteur propose lui même la limite)

Bob (2015-09-08T12:16:18Z)

Bonjour David,

Ce serait intéressant de pouvoir choisir la condition initiale ! Bon, ça doit faire quelque chose comme 2*(8+1)^2=162 coefficients à fixer, mais ce serait vraiment amusant de pouvoir jouer avec, et cela permettrait de se familiariser avec les harmoniques sphériques, en plus d'être envoûtant.

Je m'imagine déjà rentrer les données du CMB :-)

astropascal (2015-09-08T10:03:38Z)

très très cool.


You can post a comment using the following fields:
Name or nick (mandatory):
Web site URL (optional):
Email address (optional, will not appear):
Identifier phrase (optional, see below):
Attempt to remember the values above?
The comment itself (mandatory):

Optional message for moderator (hidden to others):

Spam protection: please enter below the following signs in reverse order: f9160c


Recent comments