[cig-commits] r8437 - seismo/2D/SPECFEM2D/trunk/SPECFEM90
walter at geodynamics.org
walter at geodynamics.org
Fri Dec 7 15:46:17 PST 2007
Author: walter
Date: 2007-12-07 15:46:16 -0800 (Fri, 07 Dec 2007)
New Revision: 8437
Added:
seismo/2D/SPECFEM2D/trunk/SPECFEM90/cree_image_PNM.f90
Log:
added cree_image_PNM.f90 to 2D SEM code
Added: seismo/2D/SPECFEM2D/trunk/SPECFEM90/cree_image_PNM.f90
===================================================================
--- seismo/2D/SPECFEM2D/trunk/SPECFEM90/cree_image_PNM.f90 2004-12-18 20:05:40 UTC (rev 8436)
+++ seismo/2D/SPECFEM2D/trunk/SPECFEM90/cree_image_PNM.f90 2007-12-07 23:46:16 UTC (rev 8437)
@@ -0,0 +1,109 @@
+
+!========================================================================
+!
+! S P E C F E M 2 D Version 5.1
+! ------------------------------
+!
+! Dimitri Komatitsch
+! Universite de Pau et des Pays de l'Adour, France
+!
+! (c) December 2004
+!
+!========================================================================
+
+ subroutine cree_image_PNM(donnees_image_PNM_2D,iglob_image_PNM_2D,NX,NY,it,cutvect)
+
+! routine d'affichage du deplacement sous forme d'image en couleurs
+
+! pour voir les snapshots : display image*.pnm
+! pour les convertir en autre format : convert image0001.pnm image0001.jpg
+
+ implicit none
+
+ include "constants.h"
+
+ integer NX,NY,it
+
+ double precision cutvect
+
+ integer, dimension(NX,NY) :: iglob_image_PNM_2D
+
+ double precision, dimension(NX,NY) :: donnees_image_PNM_2D
+
+ integer ix,iy
+
+ double precision amplitude_max
+
+ character(len=100) nom_fichier
+
+ double precision valeur_normalisee
+ integer :: R, G, B
+
+! ouverture du fichier image
+ write(nom_fichier,222) it
+ 222 format('image',i5.5,'.pnm')
+
+! ouvrir le fichier
+ open(unit=27, file=nom_fichier, status='unknown')
+
+ write(27,100) ! ecrire P3 = format d'image PNM
+
+ write(27,*) NX,NY ! ecrire la taille
+ write(27,*) '255' ! nombre de nuances
+
+! calculer l'amplitude maximum
+ amplitude_max = maxval(abs(donnees_image_PNM_2D))
+
+! supprimer les petites amplitudes considerees comme du bruit
+ where(abs(donnees_image_PNM_2D) < amplitude_max * cutvect) donnees_image_PNM_2D = 0.d0
+
+! dans le format PNM, l'image commence par le coin en haut a gauche
+ do iy=NY,1,-1
+ do ix=1,NX
+
+! regarder si le pixel est defini ou non (au dessus de la topographie par exemple)
+ if(iglob_image_PNM_2D(ix,iy) == -1) then
+
+! utiliser couleur verte pour afficher les zones non definies
+ R = 0
+ G = 255
+ B = 0
+
+ else
+
+! definir les donnees comme etant le deplacement normalise entre [-1:1]
+! et converti a l'entier le plus proche
+! en se rappelant que l'amplitude peut etre negative
+ valeur_normalisee = donnees_image_PNM_2D(ix,iy) / amplitude_max
+
+! supprimer valeurs en dehors de [-1:+1]
+ if(valeur_normalisee < -1.d0) valeur_normalisee = -1.d0
+ if(valeur_normalisee > 1.d0) valeur_normalisee = 1.d0
+
+! utiliser rouge si deplacement positif, bleu si negatif, pas de vert
+ if(valeur_normalisee >= 0.d0) then
+ R = nint(255.d0*valeur_normalisee**POWER_DISPLAY_PNM)
+ G = 0
+ B = 0
+ else
+ R = 0
+ G = 0
+ B = nint(255.d0*abs(valeur_normalisee)**POWER_DISPLAY_PNM)
+ endif
+
+ endif
+
+! ecrire l'image en couleur
+ write(27,110) R,G,B
+
+ enddo
+ enddo
+
+! fermer le fichier
+ close(27)
+
+ 100 format('P3')
+ 110 format(i3,' ',i3,' ',i3)
+
+ end subroutine cree_image_PNM
+
More information about the cig-commits
mailing list