[cig-commits] r22230 - seismo/3D/SPECFEM3D_GLOBE/branches/SUNFLOWER_ADIOS/src/specfem3D

lefebvre at geodynamics.org lefebvre at geodynamics.org
Wed Jun 12 05:18:30 PDT 2013


Author: lefebvre
Date: 2013-06-12 05:18:29 -0700 (Wed, 12 Jun 2013)
New Revision: 22230

Modified:
   seismo/3D/SPECFEM3D_GLOBE/branches/SUNFLOWER_ADIOS/src/specfem3D/read_arrays_solver_adios.f90
Log:
Multiple selection bounding box. One perform read for:
	modified:   ../specfem3D/read_arrays_solver_adios.f90

Modified: seismo/3D/SPECFEM3D_GLOBE/branches/SUNFLOWER_ADIOS/src/specfem3D/read_arrays_solver_adios.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/branches/SUNFLOWER_ADIOS/src/specfem3D/read_arrays_solver_adios.f90	2013-06-12 09:49:51 UTC (rev 22229)
+++ seismo/3D/SPECFEM3D_GLOBE/branches/SUNFLOWER_ADIOS/src/specfem3D/read_arrays_solver_adios.f90	2013-06-12 12:18:29 UTC (rev 22230)
@@ -95,12 +95,18 @@
   character(len=150) :: prname
   ! ADIOS variables
   integer                 :: adios_err
-  integer(kind=8)         :: adios_group, adios_handle, varid, sel
+  integer(kind=8)         :: adios_group, adios_handle, varid
   integer(kind=8)         :: adios_groupsize, adios_totalsize
   integer :: vars_count, attrs_count, current_step, last_step, vsteps
   character(len=128), dimension(:), allocatable :: adios_names 
   integer(kind=8), dimension(1) :: start, count
 
+  integer(kind=8), dimension(256),target :: selections
+  integer :: sel_num, i
+  integer(kind=8), pointer :: sel => null()
+
+  sel_num = 0
+
   ! create a prefix for the file name such as LOCAL_PATH/regX_
   call create_name_database_adios(prname, iregion_code, LOCAL_PATH)
 
@@ -116,6 +122,8 @@
   call check_adios_err(myrank,adios_err)
 
   ! read coordinates of the mesh
+  sel_num = sel_num+1
+  sel => selections(sel_num)
   call adios_selection_writeblock(sel, myrank)
   call adios_schedule_read(adios_handle, sel, "nspec", 0, 1, &
      lnspec, adios_err)
@@ -123,26 +131,15 @@
      lnglob, adios_err)
   !call adios_get_scalar(adios_handle, "nspec", lnspec, adios_err)
   !call adios_get_scalar(adios_handle, "nglob", lnglob, adios_err)
-  call adios_perform_reads(adios_handle, adios_err)
-  call check_adios_err(myrank,adios_err)
+  !call adios_perform_reads(adios_handle, adios_err)
+  !call check_adios_err(myrank,adios_err)
 
-  ! checks dimensions
-  if( lnspec /= nspec ) then
-    print*,'error file dimension: nspec in file = ',lnspec, &
-        ' but nspec desired:',nspec
-    print*,'please check file ', file_name
-    call exit_mpi(myrank,'error dimensions in solver_data.bp')
-  endif
-  if( lnglob /= nglob ) then
-    print*,'error file dimension: nglob in file = ',lnglob, &
-        ' but nglob desired:',nglob
-    print*,'please check file ', file_name
-    call exit_mpi(myrank,'error dimensions in solver_data.bp')
-  endif
 
   ! mesh coordinates
   local_dim = nglob 
   start(1) = local_dim*myrank; count(1) = local_dim
+  sel_num = sel_num+1
+  sel => selections(sel_num)
   call adios_selection_boundingbox (sel , 1, start, count)
   call adios_schedule_read(adios_handle, sel, "xstore/array", 0, 1, &
       xstore, adios_err)
@@ -157,11 +154,14 @@
       rmassz, adios_err)
   call check_adios_err(myrank,adios_err)
 
-  call adios_perform_reads(adios_handle, adios_err)
-  call check_adios_err(myrank,adios_err)
+  !call adios_perform_reads(adios_handle, adios_err)
+  !call check_adios_err(myrank,adios_err)
 
   local_dim = NGLLX * NGLLY * NGLLZ * nspec_iso
   start(1) = local_dim*myrank; count(1) = local_dim
+  sel_num = sel_num+1
+  sel => selections(sel_num)
+  call adios_selection_boundingbox (sel , 1, start, count)
   call adios_schedule_read(adios_handle, sel, "rhostore/array", 0, 1, &
       rhostore, adios_err)
   call check_adios_err(myrank,adios_err)
@@ -174,13 +174,15 @@
     call check_adios_err(myrank,adios_err)
   endif
 
-  call adios_perform_reads(adios_handle, adios_err)
-  call check_adios_err(myrank,adios_err)
+  !call adios_perform_reads(adios_handle, adios_err)
+  !call check_adios_err(myrank,adios_err)
 
-  local_dim = NGLLX * NGLLY * NGLLZ * nspec_tiso
-  start(1) = local_dim*myrank; count(1) = local_dim
-  call adios_selection_boundingbox (sel , 1, start, count)
   if(TRANSVERSE_ISOTROPY_VAL .and. READ_TISO) then
+    local_dim = NGLLX * NGLLY * NGLLZ * nspec_tiso
+    start(1) = local_dim*myrank; count(1) = local_dim
+    sel_num = sel_num+1
+    sel => selections(sel_num)
+    call adios_selection_boundingbox (sel , 1, start, count)
     call adios_schedule_read(adios_handle, sel, "kappahstore/array", 0, 1, &
         kappahstore, adios_err)
     call check_adios_err(myrank,adios_err)
@@ -192,11 +194,13 @@
     call check_adios_err(myrank,adios_err)
   endif
 
-  call adios_perform_reads(adios_handle, adios_err)
-  call check_adios_err(myrank,adios_err)
+  !call adios_perform_reads(adios_handle, adios_err)
+  !call check_adios_err(myrank,adios_err)
 
   local_dim = nspec
   start(1) = local_dim*myrank; count(1) = local_dim
+  sel_num = sel_num+1
+  sel => selections(sel_num)
   call adios_selection_boundingbox (sel , 1, start, count)
   call adios_schedule_read(adios_handle, sel, "idoubling/array", 0, 1, &
       idoubling, adios_err)
@@ -205,11 +209,13 @@
       ispec_is_tiso, adios_err)
   call check_adios_err(myrank,adios_err)
 
-  call adios_perform_reads(adios_handle, adios_err)
-  call check_adios_err(myrank,adios_err)
+  !call adios_perform_reads(adios_handle, adios_err)
+  !call check_adios_err(myrank,adios_err)
 
   local_dim = NGLLX * NGLLY * NGLLZ * nspec
   start(1) = local_dim*myrank; count(1) = local_dim
+  sel_num = sel_num+1
+  sel => selections(sel_num)
   call adios_selection_boundingbox (sel , 1, start, count)
   call adios_schedule_read(adios_handle, sel, "ibool/array", 0, 1, &
       ibool, adios_err)
@@ -242,14 +248,17 @@
       gammaz, adios_err)
   call check_adios_err(myrank,adios_err)
 
-  call adios_perform_reads(adios_handle, adios_err)
-  call check_adios_err(myrank,adios_err)
+  !call adios_perform_reads(adios_handle, adios_err)
+  !call check_adios_err(myrank,adios_err)
 
-  local_dim = NGLLX * NGLLY * NGLLZ * nspec_ani 
-  start(1) = local_dim*myrank; count(1) = local_dim
-  call adios_selection_boundingbox (sel , 1, start, count)
 
   if(ANISOTROPIC_INNER_CORE_VAL .and. iregion_code == IREGION_INNER_CORE) then
+    local_dim = NGLLX * NGLLY * NGLLZ * nspec_ani 
+    start(1) = local_dim*myrank; count(1) = local_dim
+    sel_num = sel_num+1
+    sel => selections(sel_num)
+    call adios_selection_boundingbox (sel , 1, start, count)
+
     call adios_schedule_read(adios_handle, sel, "c11store/array", 0, 1, &
         c11store, adios_err)
     call check_adios_err(myrank,adios_err)
@@ -268,6 +277,12 @@
   endif
 
   if(ANISOTROPIC_3D_MANTLE_VAL .and. iregion_code == IREGION_CRUST_MANTLE) then
+    local_dim = NGLLX * NGLLY * NGLLZ * nspec_ani 
+    start(1) = local_dim*myrank; count(1) = local_dim
+    sel_num = sel_num+1
+    sel => selections(sel_num)
+    call adios_selection_boundingbox (sel , 1, start, count)
+
     call adios_schedule_read(adios_handle, sel, "c11store/array", 0, 1, &
         c11store, adios_err)
     call check_adios_err(myrank,adios_err)
@@ -332,15 +347,16 @@
     call check_adios_err(myrank,adios_err)
   endif
 
-  call adios_perform_reads(adios_handle, adios_err)
-  call check_adios_err(myrank,adios_err)
+  !call adios_perform_reads(adios_handle, adios_err)
+  !call check_adios_err(myrank,adios_err)
 
-  local_dim = NGLLX * NGLLY * NGLLZ * nspec ! nspec_stacey in meshfem3D
-  start(1) = local_dim*myrank; count(1) = local_dim
-  call adios_selection_boundingbox (sel , 1, start, count)
-
   ! Stacey
   if(ABSORBING_CONDITIONS) then
+    local_dim = NGLLX * NGLLY * NGLLZ * nspec ! nspec_stacey in meshfem3D
+    start(1) = local_dim*myrank; count(1) = local_dim
+    sel_num = sel_num+1
+    sel => selections(sel_num)
+    call adios_selection_boundingbox (sel , 1, start, count)
 
     if(iregion_code == IREGION_CRUST_MANTLE) then
       call adios_schedule_read(adios_handle, sel, "rho_vp/array", 0, 1, &
@@ -367,47 +383,73 @@
   ! if absorbing_conditions are not set or if NCHUNKS=6, only one mass matrix
   ! is needed for the sake of performance, only "rmassz" array will be filled
   ! and "rmassx" & "rmassy" will be obsolete
-  call adios_perform_reads(adios_handle, adios_err)
-  call check_adios_err(myrank,adios_err)
+  !call adios_perform_reads(adios_handle, adios_err)
+  !call check_adios_err(myrank,adios_err)
 
-  local_dim = nglob_xy
-  start(1) = local_dim*myrank; count(1) = local_dim
-  call adios_selection_boundingbox (sel , 1, start, count)
-
   if(NCHUNKS_VAL /= 6 .and. ABSORBING_CONDITIONS .and. &
       iregion_code == IREGION_CRUST_MANTLE) then
-      call adios_schedule_read(adios_handle, sel, "rmassx/array", 0, 1, &
-          rmassx, adios_err)
-      call check_adios_err(myrank,adios_err)
-      call adios_schedule_read(adios_handle, sel, "rmassy/array", 0, 1, &
-          rmassy, adios_err)
-      call check_adios_err(myrank,adios_err)
+
+    local_dim = nglob_xy
+    start(1) = local_dim*myrank; count(1) = local_dim
+    sel_num = sel_num+1
+    sel => selections(sel_num)
+    call adios_selection_boundingbox (sel , 1, start, count)
+
+    call adios_schedule_read(adios_handle, sel, "rmassx/array", 0, 1, &
+        rmassx, adios_err)
+    call check_adios_err(myrank,adios_err)
+    call adios_schedule_read(adios_handle, sel, "rmassy/array", 0, 1, &
+        rmassy, adios_err)
+    call check_adios_err(myrank,adios_err)
   endif
 
-  call adios_perform_reads(adios_handle, adios_err)
-  call check_adios_err(myrank,adios_err)
+  !call adios_perform_reads(adios_handle, adios_err)
+  !call check_adios_err(myrank,adios_err)
 
   ! read additional ocean load mass matrix
   if(OCEANS_VAL .and. iregion_code == IREGION_CRUST_MANTLE) then
     local_dim = NGLOB_CRUST_MANTLE_OCEANS ! nglob_oceans
     start(1) = local_dim*myrank; count(1) = local_dim
+    sel_num = sel_num+1
+    sel => selections(sel_num)
     call adios_selection_boundingbox (sel , 1, start, count)
 
     call adios_schedule_read(adios_handle, sel, "rmass_ocean_load/array", &
         0, 1, rmass_ocean_load, adios_err)
     call check_adios_err(myrank,adios_err)
 
-    call adios_perform_reads(adios_handle, adios_err)
-    call check_adios_err(myrank,adios_err)
+    !call adios_perform_reads(adios_handle, adios_err)
+    !call check_adios_err(myrank,adios_err)
   endif
 
+
+  call adios_perform_reads(adios_handle, adios_err)
+  call check_adios_err(myrank,adios_err)
+
+
   ! Clean everything and close the ADIOS file
-  call adios_selection_delete(sel)
+  do i = 1, sel_num
+    sel => selections(i)
+    call adios_selection_delete(sel)
+  enddo
   call adios_read_close(adios_handle, adios_err)
   call check_adios_err(myrank,adios_err)
   call adios_read_finalize_method(ADIOS_READ_METHOD_BP, adios_err)
   call check_adios_err(myrank,adios_err)
 
   call MPI_Barrier(comm, ierr)
+  ! checks dimensions
+  if( lnspec /= nspec ) then
+    print*,'error file dimension: nspec in file = ',lnspec, &
+        ' but nspec desired:',nspec
+    print*,'please check file ', file_name
+    call exit_mpi(myrank,'error dimensions in solver_data.bp')
+  endif
+  if( lnglob /= nglob ) then
+    print*,'error file dimension: nglob in file = ',lnglob, &
+        ' but nglob desired:',nglob
+    print*,'please check file ', file_name
+    call exit_mpi(myrank,'error dimensions in solver_data.bp')
+  endif
 
 end subroutine read_arrays_solver_adios



More information about the CIG-COMMITS mailing list