
# Exemple de commandes permettant la visualisation d'un champ scalaire V
# variant au cours du temps donne aux noeuds d'un maillage constitué de triangles :
#
# (X, Y, Z) : coordonnees des noeuds des triangles : X = array([x1,x2,x3, ...]),
# TRI : connectivite associe aux triangles sous forme d'une liste : TRI = [(i1,i2,i3), ..., (j1,j2,j3)],
# min_V, max_V : minimum et maximum choisis associe au champ sclaire V,
# Titre : chaine de caracteres donnant le titre associe a la visualisation.

# Auteur : Olivier Wilk / Maths / Cnam / Paris.


import enthought.mayavi.mlab as mlab

    
mlab.figure(size=(600,200))
    
ColorMaps = ['Blues', 'GnBu', 'bone', 'copper', 'file']

ml = mlab.triangular_mesh( X, Y, Z, TRI, scalars = V, colormap = ColorMaps[0], vmin = min_V, vmax = max_V)
        
mlab.axes( nb_labels=5, x_axis_visibility = True, y_axis_visibility = False, z_axis_visibility = True)
    
# mlab.view( 0., 0., 1., [x0, y0, z0]) 	# utile pour repositionner le maillage
    
mlab.colorbar(title = 'V', orientation = 'vertical')
    
mlab.title( Titre, size = 0.2, height = 0.9 )
    
mlab.savefig( 'Image.png' )


mlab_tri = ml.mlab_source 		# utile pour changer rapidemment les valeurs associees au champ V
    

T = 0.0
Delta = 1.e-3	# Delta associe a la variable T (cela pourrait etre associe a une simulation en temps)

kmax = 1000

for k in xrange(0,kmax):
    
    T = T + Delta
    
    ... Remplacer cette ligne par la determination du nouveau V ...
    
    mlab_tri.set( scalars = V )
    chaine = 'V(T = %.3f), (min, max) = (%.2e,%.2e)' % (T, V.min(), V.max())
    mlab.title( chaine, size = 0.175, height = 0.925 )
    
    if ( k < 10 )                       : mlab.savefig('V_00'+str(k)+'.png')
    if (10 <= k  )   and ( k < 100  )   : mlab.savefig('V_0'+str(k)+'.png')
    if (100 <= k )   and ( k < 1000 )   : mlab.savefig('V_'+str(k)+'.png')

