[cig-commits] r8576 - seismo/2D/SPECFEM2D/trunk

walter at geodynamics.org walter at geodynamics.org
Fri Dec 7 15:57:52 PST 2007


Author: walter
Date: 2007-12-07 15:57:51 -0800 (Fri, 07 Dec 2007)
New Revision: 8576

Modified:
   seismo/2D/SPECFEM2D/trunk/create_color_image.f90
   seismo/2D/SPECFEM2D/trunk/specfem2D.F90
Log:
fixed display of velocity model in color image in parallel.

Modified: seismo/2D/SPECFEM2D/trunk/create_color_image.f90
===================================================================
--- seismo/2D/SPECFEM2D/trunk/create_color_image.f90	2007-09-11 13:14:45 UTC (rev 8575)
+++ seismo/2D/SPECFEM2D/trunk/create_color_image.f90	2007-12-07 23:57:51 UTC (rev 8576)
@@ -11,7 +11,7 @@
 !
 !========================================================================
 
-  subroutine create_color_image(color_image_2D_data,iglob_image_color_2D,NX,NY,it,cutsnaps,vp_display,npoin)
+  subroutine create_color_image(color_image_2D_data,iglob_image_color_2D,NX,NY,it,cutsnaps,image_color_vp_display)
 
 ! display a given field as a red and blue color image
 
@@ -23,14 +23,14 @@
 
   include "constants.h"
 
-  integer :: NX,NY,it,npoin
+  integer :: NX,NY,it
 
   double precision :: cutsnaps
 
   integer, dimension(NX,NY) :: iglob_image_color_2D
 
   double precision, dimension(NX,NY) :: color_image_2D_data
-  double precision, dimension(npoin) :: vp_display
+  double precision, dimension(NX,NY) :: image_color_vp_display
 
   integer :: ix,iy,R,G,B,tenthousands,thousands,hundreds,tens,units,remainder,current_rec
 
@@ -122,8 +122,8 @@
 
 ! compute maximum amplitude
   amplitude_max = maxval(abs(color_image_2D_data))
-  vpmin = minval(vp_display)
-  vpmax = maxval(vp_display)
+  vpmin = minval(image_color_vp_display)
+  vpmax = maxval(image_color_vp_display)
 
 ! in the PNM format, the image starts in the upper-left corner
   do iy=NY,1,-1
@@ -142,7 +142,7 @@
 
 ! use P velocity model as background where amplitude is negligible
         if((vpmax-vpmin)/vpmin > 0.02d0) then
-          x1 = (vp_display(iglob_image_color_2D(ix,iy))-vpmin)/(vpmax-vpmin)
+          x1 = (image_color_vp_display(ix,iy)-vpmin)/(vpmax-vpmin)
         else
           x1 = 0.5d0
         endif

Modified: seismo/2D/SPECFEM2D/trunk/specfem2D.F90
===================================================================
--- seismo/2D/SPECFEM2D/trunk/specfem2D.F90	2007-09-11 13:14:45 UTC (rev 8575)
+++ seismo/2D/SPECFEM2D/trunk/specfem2D.F90	2007-12-07 23:57:51 UTC (rev 8576)
@@ -219,6 +219,7 @@
     zmin_color_image,zmax_color_image,size_pixel_horizontal,size_pixel_vertical
   integer, dimension(:,:), allocatable :: iglob_image_color,copy_iglob_image_color
   double precision, dimension(:,:), allocatable :: image_color_data
+  double precision, dimension(:,:), allocatable :: image_color_vp_display
 
   double precision  :: xmin_color_image_loc, xmax_color_image_loc, zmin_color_image_loc, &
        zmax_color_image_loc
@@ -1079,8 +1080,12 @@
   call assemble_MPI_scalar(myrank,rmass_inverse_acoustic, rmass_inverse_elastic,npoin, &
      ninterface, max_interface_size, max_ibool_interfaces_size_ac, max_ibool_interfaces_size_el, &
      ibool_interfaces_acoustic,ibool_interfaces_elastic, nibool_interfaces_acoustic,nibool_interfaces_elastic, my_neighbours)
-end if
 
+  else 
+    ninterface_acoustic = 0
+    ninterface_elastic = 0
+  end if
+
 #endif
 
 
@@ -1155,6 +1160,7 @@
 
 ! allocate an array for image data
   allocate(image_color_data(NX_IMAGE_color,NZ_IMAGE_color))
+  allocate(image_color_vp_display(NX_IMAGE_color,NZ_IMAGE_color))
 
 ! allocate an array for the grid point that corresponds to a given image data point
   allocate(iglob_image_color(NX_IMAGE_color,NZ_IMAGE_color))
@@ -2142,11 +2148,13 @@
   endif
 
   image_color_data(:,:) = 0.d0
-
+  image_color_vp_display(:,:) = 0.d0
+      
   do k = 1, nb_pixel_loc
      j = ceiling(real(num_pixel_loc(k)) / real(NX_IMAGE_color))
      i = num_pixel_loc(k) - (j-1)*NX_IMAGE_color
      image_color_data(i,j) = vector_field_display(2,iglob_image_color(i,j))
+     image_color_vp_display(i,j) = vp_display(iglob_image_color(i,j))
 
   end do
 
@@ -2182,10 +2190,41 @@
   end if
 
 #endif
+! assembling array image_color_vp_display on process zero for color output
+#ifdef USE_MPI
+  if ( nproc > 1 ) then
+     if ( myrank == 0 ) then
 
+        do iproc = 1, nproc-1
 
+           call MPI_RECV(data_pixel_recv(1),nb_pixel_per_proc(iproc+1), MPI_DOUBLE_PRECISION, &
+                iproc, 43, MPI_COMM_WORLD, request_mpi_status, ier)
+
+           do k = 1, nb_pixel_per_proc(iproc+1)
+              j = ceiling(real(num_pixel_recv(k,iproc+1)) / real(NX_IMAGE_color))
+              i = num_pixel_recv(k,iproc+1) - (j-1)*NX_IMAGE_color
+              image_color_vp_display(i,j) = data_pixel_recv(k)
+
+           end do
+        end do
+
+     else
+        do k = 1, nb_pixel_loc
+           j = ceiling(real(num_pixel_loc(k)) / real(NX_IMAGE_color))
+           i = num_pixel_loc(k) - (j-1)*NX_IMAGE_color
+           data_pixel_send(k) = vp_display(iglob_image_color(i,j))
+
+        end do
+
+        call MPI_SEND(data_pixel_send(1),nb_pixel_loc,MPI_DOUBLE_PRECISION, 0, 43, MPI_COMM_WORLD, ier)
+
+     end if
+  end if
+
+#endif
+
   if ( myrank == 0 ) then
-     call create_color_image(image_color_data,iglob_image_color,NX_IMAGE_color,NZ_IMAGE_color,it,cutsnaps,vp_display,npoin)
+     call create_color_image(image_color_data,iglob_image_color,NX_IMAGE_color,NZ_IMAGE_color,it,cutsnaps,image_color_vp_display)
      write(IOUT,*) 'Color image created'
   endif
 



More information about the cig-commits mailing list