[cig-commits] r20969 - in seismo/3D/FAULT_SOURCE: . branches/new_fault_db/src

ampuero at geodynamics.org ampuero at geodynamics.org
Mon Oct 29 11:56:50 PDT 2012


Author: ampuero
Date: 2012-10-29 11:56:50 -0700 (Mon, 29 Oct 2012)
New Revision: 20969

Modified:
   seismo/3D/FAULT_SOURCE/TO_DO
   seismo/3D/FAULT_SOURCE/branches/new_fault_db/src/fault_solver_dynamic.f90
Log:
cleaned up and enabled dataT in fault_solver_dynamic

Modified: seismo/3D/FAULT_SOURCE/TO_DO
===================================================================
--- seismo/3D/FAULT_SOURCE/TO_DO	2012-10-29 14:35:14 UTC (rev 20968)
+++ seismo/3D/FAULT_SOURCE/TO_DO	2012-10-29 18:56:50 UTC (rev 20969)
@@ -2,13 +2,14 @@
 Prioritized to-do list:
 
 + parallelized fault:
+	- set parallel version as default
 	- make ordered version of subroutine assemble_MPI_vector_ext_mesh
-	- in fault_solver.f90: parallelize dataT outputs
-	- set parallel version as default
 
-+ fault_solver:
++ fault_solver_dynamic:
 	- many hard-coded ad hoc features need to be set instead as user options
 
++ dataT: move common stuff to fault_solver_common, use inheritance in the dyn/kin modules
+
 + rate-and-state friction:
 	- make it a user-friendly option (currently a flag in fault_solver)
 

Modified: seismo/3D/FAULT_SOURCE/branches/new_fault_db/src/fault_solver_dynamic.f90
===================================================================
--- seismo/3D/FAULT_SOURCE/branches/new_fault_db/src/fault_solver_dynamic.f90	2012-10-29 14:35:14 UTC (rev 20968)
+++ seismo/3D/FAULT_SOURCE/branches/new_fault_db/src/fault_solver_dynamic.f90	2012-10-29 18:56:50 UTC (rev 20969)
@@ -42,19 +42,14 @@
   ! outputs on selected fault nodes at every time step:
   ! slip, slip velocity, fault stresses
   type dataT_type
-    integer :: npoin=0,npoin_local=0
+    integer :: npoin=0
     integer, dimension(:), pointer :: iglob=>null()   ! on-fault global index of output nodes
-    integer, dimension(:,:), pointer :: iglob_all=>null()
-    integer, dimension(:), pointer :: islice=>null(),glob_indx=>null()
-    real(kind=CUSTOM_REAL), dimension(:), pointer  :: dist=>null()
-    real(kind=CUSTOM_REAL), dimension(:,:), pointer  :: dist_all=>null()
     real(kind=CUSTOM_REAL), dimension(:,:), pointer  :: d1=>null(),v1=>null(),t1=>null(), &
                                                         d2=>null(),v2=>null(),t2=>null(), &
                                                         t3=>null(),theta=>null()
     character(len=70), dimension(:), pointer   :: name=>null()
   end type dataT_type
 
-
   ! outputs(dyn) /inputs (kind) at selected times for all fault nodes:
   ! strength, state, slip, slip velocity, fault stresses, rupture time, process zone time
   ! rupture time = first time when slip velocity = threshold V_RUPT (defined below)
@@ -272,7 +267,7 @@
 
   endif
 
-!  call init_dataT(bc%dataT,bc%coord,bc%nglob,NT,iflt)
+  call init_dataT(bc%dataT,bc%coord,bc%nglob,NT,iflt)
   call init_dataXZ(bc%dataXZ,bc)
 
 !--------------------------------------------------------
@@ -583,11 +578,11 @@
     
     call store_dataXZ(bc%dataXZ, strength, theta_old, theta_new, dc, &
          Vf_old, Vf_new, it*bc%dt,bc%dt)
-!    call store_dataT(bc%dataT,bc%D,bc%V,bc%T,theta_new,it)
+    call store_dataT(bc%dataT,bc%D,bc%V,bc%T,theta_new,it)
 
     !-- outputs --
     ! write dataT every NTOUT time step or at the end of simulation
-!    if ( mod(it,NTOUT) == 0 .or. it==NSTEP) call SCEC_write_dataT(bc%dataT,bc%dt,it,bc%rsf%StateLaw)
+    if ( mod(it,NTOUT) == 0 .or. it==NSTEP) call SCEC_write_dataT(bc%dataT,bc%dt,it,bc%rsf%StateLaw)
 
   endif
 
@@ -996,118 +991,144 @@
 
 !===============================================================
 ! OUTPUTS
-subroutine init_dataT(DataT,coord,nglob,NT,iflt)
+subroutine init_dataT(dataT,coord,nglob,NT,iflt)
 
   use specfem_par, only : NPROC,myrank
   ! NT = total number of time steps
 
   integer, intent(in) :: nglob,NT,iflt
   real(kind=CUSTOM_REAL), intent(in) :: coord(3,nglob)
-  type (dataT_type), intent(out) :: DataT
+  type (dataT_type), intent(out) :: dataT
 
+  real(kind=CUSTOM_REAL), dimension(:,:), allocatable :: dist_all
+  real(kind=CUSTOM_REAL), dimension(:), allocatable :: dist_loc
+  integer, dimension(:,:), allocatable :: iglob_all
+  integer, dimension(:), allocatable :: iproc,iglob_tmp,glob_indx
   real(kind=CUSTOM_REAL) :: xtarget,ytarget,ztarget,dist,distkeep
   integer :: i, iglob , IIN, ier, jflt, np, k
   character(len=70) :: tmpname
+  character(len=70), dimension(:), allocatable :: name_tmp
+  integer :: ipoin, ipoin_local, npoin_local
 
-  integer :: ipoin, ipoin_local, iproc
-
   !  1. read fault output coordinates from user file, 
   !  2. define iglob: the fault global index of the node nearest to user
   !     requested coordinate
 
-  IIN = 251
+  IIN = 251 ! WARNING: not safe, should check that unit is not aleady opened
+
+ ! count the number of output points on the current fault (#iflt)
   open(IIN,file='DATA/FAULT_STATIONS',status='old',action='read',iostat=ier)
+  if( ier /= 0 ) stop 'error opening FAULT_STATIONS file'
   read(IIN,*) np
-  DataT%npoin =0
+  dataT%npoin =0
   do i=1,np
     read(IIN,*) xtarget,ytarget,ztarget,tmpname,jflt
-    if (jflt==iflt) DataT%npoin = DataT%npoin +1
+    if (jflt==iflt) dataT%npoin = dataT%npoin +1
   enddo
   close(IIN)
 
-  if (DataT%npoin == 0) return
+  if (dataT%npoin == 0) return
 
-  allocate(DataT%iglob(DataT%npoin))
-  allocate(DataT%name(DataT%npoin))
-  allocate(DataT%dist(DataT%npoin)) !Surendra : for parallel fault
+  allocate(dataT%iglob(dataT%npoin))
+  allocate(dataT%name(dataT%npoin))
+  allocate(dist_loc(dataT%npoin)) !Surendra : for parallel fault
 
-  open(IIN,file='DATA/FAULT_STATIONS',status='old',action='read',iostat=ier)
-  if( ier /= 0 ) stop 'error opening FAULT_STATIONS file'
+  open(IIN,file='DATA/FAULT_STATIONS',status='old',action='read')
   read(IIN,*) np
   k = 0
   do i=1,np
     read(IIN,*) xtarget,ytarget,ztarget,tmpname,jflt
     if (jflt/=iflt) cycle
     k = k+1
-    DataT%name(k) = tmpname
-    !search nearest node
+    dataT%name(k) = tmpname
+
+   ! search nearest node
     distkeep = huge(distkeep)
-
     do iglob=1,nglob
-      dist = sqrt((coord(1,iglob)-xtarget)**2   &
-           + (coord(2,iglob)-ytarget)**2 &
-           + (coord(3,iglob)-ztarget)**2)  
+      dist = sqrt( (coord(1,iglob)-xtarget)**2 &
+                 + (coord(2,iglob)-ytarget)**2 &
+                 + (coord(3,iglob)-ztarget)**2 )
       if (dist < distkeep) then
         distkeep = dist
-        DataT%iglob(k) = iglob   
+        dataT%iglob(k) = iglob   
       endif
     enddo
-    DataT%dist(k) = distkeep !Surendra : for parallel fault
+    dist_loc(k) = distkeep
+
   enddo
+  close(IIN)
 
- !Surendra : for parallel fault
   if (PARALLEL_FAULT) then
-    allocate(DataT%islice(DataT%npoin)) 
-    allocate(DataT%iglob_all(DataT%npoin,0:NPROC-1))
-    allocate(DataT%dist_all(DataT%npoin,0:NPROC-1))
-    call gather_all_i(DataT%iglob,DataT%npoin,DataT%iglob_all,DataT%npoin,NPROC)
-    call gather_all_cr(DataT%dist,DataT%npoin,DataT%dist_all,DataT%npoin,NPROC)
-    if(myrank==0) then
-      do ipoin = 1,DataT%npoin
-        iproc = minloc(DataT%dist_all(ipoin,:), 1) - 1
-        DataT%islice(ipoin) = iproc
-        DataT%iglob(ipoin) = DataT%iglob_all(ipoin,iproc)
-      enddo
+
+   ! For each output point, find the processor that contains the nearest node
+    allocate(iproc(dataT%npoin)) 
+    allocate(iglob_all(dataT%npoin,0:NPROC-1))
+    allocate(dist_all(dataT%npoin,0:NPROC-1))
+    call gather_all_i(dataT%iglob,dataT%npoin,iglob_all,dataT%npoin,NPROC)
+    call gather_all_cr(dist_loc,dataT%npoin,dist_all,dataT%npoin,NPROC)
+    if (myrank==0) then
+     ! NOTE: output points lying at an interface between procs are assigned to a unique proc
+      iproc = minloc(dist_all,2) - 1
+      dataT%iglob = iglob_all(:,iproc)
     endif
+    call bcast_all_i(iproc,dataT%npoin)
+    call bcast_all_i(dataT%iglob,dataT%npoin)
 
-    call bcast_all_i(DataT%islice,DataT%npoin)
-    call bcast_all_i(DataT%iglob,DataT%npoin)
+   ! Number of output points contained in the current processor
+    npoin_local = count( iproc == myrank )
 
-    DataT%npoin_local = 0
-    do ipoin = 1,DataT%npoin
-      if(myrank == DataT%islice(ipoin)) DataT%npoin_local = DataT%npoin_local + 1
-    enddo
-    allocate(DataT%glob_indx(DataT%npoin_local)) 
-    do ipoin = 1,DataT%npoin
-      if(myrank == DataT%islice(ipoin)) then
-        ipoin_local = ipoin_local + 1
-        DataT%glob_indx(ipoin_local) = ipoin
-      endif
-    enddo
-  else
-    DataT%npoin_local = DataT%npoin
-  endif !Parallel_fault
+    if (npoin_local>0) then
+     ! Make a list of output points contained in the current processor
+      allocate(glob_indx(npoin_local))
+      ipoin_local = 0
+      do ipoin = 1,dataT%npoin
+        if (myrank == iproc(ipoin)) then
+          ipoin_local = ipoin_local + 1
+          glob_indx(ipoin_local) = ipoin
+        endif
+      enddo
+     ! Consolidate the output information (remove output points outside current proc)
+      allocate(iglob_tmp(dataT%npoin))
+      allocate(name_tmp(dataT%npoin))
+      iglob_tmp = dataT%iglob
+      name_tmp = dataT%name
+      deallocate(dataT%iglob)
+      deallocate(dataT%name)
+      dataT%npoin = npoin_local
+      allocate(dataT%iglob(dataT%npoin))
+      allocate(dataT%name(dataT%npoin))
+      dataT%iglob = iglob_tmp(glob_indx)
+      dataT%name = name_tmp(glob_indx)
+      deallocate(glob_indx,iglob_tmp,name_tmp)
 
+    else
+      dataT%npoin = 0
+      deallocate(dataT%iglob)
+      deallocate(dataT%name)
+    endif
 
-  !  3. allocate arrays and set to zero
-  allocate(DataT%d1(NT,DataT%npoin))
-  allocate(DataT%v1(NT,DataT%npoin))
-  allocate(DataT%t1(NT,DataT%npoin))
-  allocate(DataT%d2(NT,DataT%npoin))
-  allocate(DataT%v2(NT,DataT%npoin))
-  allocate(DataT%t2(NT,DataT%npoin))
-  allocate(DataT%t3(NT,DataT%npoin))
-  allocate(DataT%theta(NT,DataT%npoin))
-  DataT%d1 = 0e0_CUSTOM_REAL
-  DataT%v1 = 0e0_CUSTOM_REAL
-  DataT%t1 = 0e0_CUSTOM_REAL
-  DataT%d2 = 0e0_CUSTOM_REAL
-  DataT%v2 = 0e0_CUSTOM_REAL
-  DataT%t2 = 0e0_CUSTOM_REAL
-  DataT%t3 = 0e0_CUSTOM_REAL
-  DataT%theta = 0e0_CUSTOM_REAL
+    deallocate(iproc,iglob_all,dist_all)
+  endif 
 
-  close(IIN)
+ !  3. allocate arrays and set to zero
+  if (dataT%npoin>0) then 
+    allocate(dataT%d1(NT,dataT%npoin))
+    allocate(dataT%v1(NT,dataT%npoin))
+    allocate(dataT%t1(NT,dataT%npoin))
+    allocate(dataT%d2(NT,dataT%npoin))
+    allocate(dataT%v2(NT,dataT%npoin))
+    allocate(dataT%t2(NT,dataT%npoin))
+    allocate(dataT%t3(NT,dataT%npoin))
+    allocate(dataT%theta(NT,dataT%npoin))
+    dataT%d1 = 0e0_CUSTOM_REAL
+    dataT%v1 = 0e0_CUSTOM_REAL
+    dataT%t1 = 0e0_CUSTOM_REAL
+    dataT%d2 = 0e0_CUSTOM_REAL
+    dataT%v2 = 0e0_CUSTOM_REAL
+    dataT%t2 = 0e0_CUSTOM_REAL
+    dataT%t3 = 0e0_CUSTOM_REAL
+    dataT%theta = 0e0_CUSTOM_REAL
+  endif
 
 end subroutine init_dataT
 
@@ -1119,14 +1140,9 @@
   real(kind=CUSTOM_REAL), dimension(:), intent(in) :: theta
   integer, intent(in) :: itime
 
-  integer :: i,k,ipoin
+  integer :: i,k
 
-  do ipoin=1,dataT%npoin_local
-    if (PARALLEL_FAULT) then
-      i = DataT%glob_indx(ipoin)
-    else
-      i = ipoin
-    endif
+  do i=1,dataT%npoin
     k = dataT%iglob(i)
     dataT%d1(itime,i) = d(1,k)
     dataT%d2(itime,i) = d(2,k)
@@ -1163,7 +1179,7 @@
   integer, intent(in) :: NT
   integer, intent(in) :: statelaw
   
-  integer   :: i,k,IOUT,ipoin
+  integer   :: i,k,IOUT
   character :: NTchar*5
   integer ::  today(3), now(3)
 
@@ -1173,15 +1189,10 @@
   IOUT = 121 !WARNING: not very robust. Could instead look for an available ID
 
   write(NTchar,1) NT
+1 format(I5)  
   NTchar = adjustl(NTchar)
 
-1 format(I5)  
-  do ipoin=1,dataT%npoin_local
-    if (PARALLEL_FAULT) then
-      i = DataT%glob_indx(ipoin)
-    else
-      i = ipoin
-    endif
+  do i=1,dataT%npoin
 
     open(IOUT,file='OUTPUT_FILES/'//trim(dataT%name(i))//'.dat',status='replace')
     write(IOUT,*) "# problem=TPV104"
@@ -1283,41 +1294,41 @@
 end subroutine SCEC_Write_RuptureTime
 
 !-------------------------------------------------------------------------------------------------
-subroutine init_dataXZ(DataXZ,bc)
+subroutine init_dataXZ(dataXZ,bc)
 
   use specfem_par, only : NPROC,myrank
 
-  type(dataXZ_type), intent(inout) :: DataXZ
+  type(dataXZ_type), intent(inout) :: dataXZ
   type(bc_dynflt_type) :: bc
 
   integer :: npoin_all,iproc
 
-  DataXZ%npoin = bc%nglob
+  dataXZ%npoin = bc%nglob
 
   if(bc%nglob > 0) then
 
-    allocate(DataXZ%stg(bc%nglob))
+    allocate(dataXZ%stg(bc%nglob))
     if(.not. RATE_AND_STATE) then
-      DataXZ%sta => bc%swf%theta
+      dataXZ%sta => bc%swf%theta
     else
-      DataXZ%sta => bc%rsf%theta
+      dataXZ%sta => bc%rsf%theta
     endif
-    DataXZ%d1 => bc%d(1,:)
-    DataXZ%d2 => bc%d(2,:)
-    DataXZ%v1 => bc%v(1,:)
-    DataXZ%v2 => bc%v(2,:) 
-    DataXZ%t1 => bc%t(1,:)
-    DataXZ%t2 => bc%t(2,:)
-    DataXZ%t3 => bc%t(3,:)
-    DataXZ%xcoord => bc%coord(1,:) 
-    DataXZ%ycoord => bc%coord(2,:)
-    DataXZ%zcoord => bc%coord(3,:)
-    allocate(DataXZ%tRUP(bc%nglob))
-    allocate(DataXZ%tPZ(bc%nglob))
+    dataXZ%d1 => bc%d(1,:)
+    dataXZ%d2 => bc%d(2,:)
+    dataXZ%v1 => bc%v(1,:)
+    dataXZ%v2 => bc%v(2,:) 
+    dataXZ%t1 => bc%t(1,:)
+    dataXZ%t2 => bc%t(2,:)
+    dataXZ%t3 => bc%t(3,:)
+    dataXZ%xcoord => bc%coord(1,:) 
+    dataXZ%ycoord => bc%coord(2,:)
+    dataXZ%zcoord => bc%coord(3,:)
+    allocate(dataXZ%tRUP(bc%nglob))
+    allocate(dataXZ%tPZ(bc%nglob))
 
     !Percy , setting up initial rupture time null for all faults.  
-    DataXZ%tRUP = 0e0_CUSTOM_REAL
-    DataXZ%tPZ  = 0e0_CUSTOM_REAL
+    dataXZ%tRUP = 0e0_CUSTOM_REAL
+    dataXZ%tPZ  = 0e0_CUSTOM_REAL
 
   endif
 
@@ -1326,26 +1337,26 @@
     npoin_all = 0
     call sum_all_i(bc%nglob,npoin_all)
     if (myrank==0 .and. npoin_all>0) then
-      bc%DataXZ_all%npoin = npoin_all
-      allocate(bc%DataXZ_all%xcoord(npoin_all))
-      allocate(bc%DataXZ_all%ycoord(npoin_all))
-      allocate(bc%DataXZ_all%zcoord(npoin_all))
-      allocate(bc%DataXZ_all%t1(npoin_all))
-      allocate(bc%DataXZ_all%t2(npoin_all))
-      allocate(bc%DataXZ_all%t3(npoin_all))
-      allocate(bc%DataXZ_all%d1(npoin_all))
-      allocate(bc%DataXZ_all%d2(npoin_all))
-      allocate(bc%DataXZ_all%v1(npoin_all))
-      allocate(bc%DataXZ_all%v2(npoin_all))
-      allocate(bc%DataXZ_all%tRUP(npoin_all))
-      allocate(bc%DataXZ_all%tPZ(npoin_all))
-      allocate(bc%DataXZ_all%stg(npoin_all))
-      allocate(bc%DataXZ_all%sta(npoin_all))
+      bc%dataXZ_all%npoin = npoin_all
+      allocate(bc%dataXZ_all%xcoord(npoin_all))
+      allocate(bc%dataXZ_all%ycoord(npoin_all))
+      allocate(bc%dataXZ_all%zcoord(npoin_all))
+      allocate(bc%dataXZ_all%t1(npoin_all))
+      allocate(bc%dataXZ_all%t2(npoin_all))
+      allocate(bc%dataXZ_all%t3(npoin_all))
+      allocate(bc%dataXZ_all%d1(npoin_all))
+      allocate(bc%dataXZ_all%d2(npoin_all))
+      allocate(bc%dataXZ_all%v1(npoin_all))
+      allocate(bc%dataXZ_all%v2(npoin_all))
+      allocate(bc%dataXZ_all%tRUP(npoin_all))
+      allocate(bc%dataXZ_all%tPZ(npoin_all))
+      allocate(bc%dataXZ_all%stg(npoin_all))
+      allocate(bc%dataXZ_all%sta(npoin_all))
     endif
     
     allocate(bc%npoin_perproc(NPROC))
     bc%npoin_perproc=0
-    call gather_all_i(DataXZ%npoin,1,bc%npoin_perproc,1,NPROC)
+    call gather_all_i(dataXZ%npoin,1,bc%npoin_perproc,1,NPROC)
     
     allocate(bc%poin_offset(NPROC))
     bc%poin_offset(1)=0
@@ -1353,9 +1364,9 @@
       bc%poin_offset(iproc) = sum(bc%npoin_perproc(1:iproc-1))
     enddo
     
-    call gatherv_all_cr(DataXZ%xcoord,DataXZ%npoin,bc%DataXZ_all%xcoord,bc%npoin_perproc,bc%poin_offset,bc%DataXZ_all%npoin,NPROC)
-    call gatherv_all_cr(DataXZ%ycoord,DataXZ%npoin,bc%DataXZ_all%ycoord,bc%npoin_perproc,bc%poin_offset,bc%DataXZ_all%npoin,NPROC)
-    call gatherv_all_cr(DataXZ%zcoord,DataXZ%npoin,bc%DataXZ_all%zcoord,bc%npoin_perproc,bc%poin_offset,bc%DataXZ_all%npoin,NPROC)
+    call gatherv_all_cr(dataXZ%xcoord,dataXZ%npoin,bc%dataXZ_all%xcoord,bc%npoin_perproc,bc%poin_offset,bc%dataXZ_all%npoin,NPROC)
+    call gatherv_all_cr(dataXZ%ycoord,dataXZ%npoin,bc%dataXZ_all%ycoord,bc%npoin_perproc,bc%poin_offset,bc%dataXZ_all%npoin,NPROC)
+    call gatherv_all_cr(dataXZ%zcoord,dataXZ%npoin,bc%dataXZ_all%zcoord,bc%npoin_perproc,bc%poin_offset,bc%dataXZ_all%npoin,NPROC)
   endif
 
 end subroutine init_dataXZ
@@ -1367,17 +1378,17 @@
 
   type(bc_dynflt_type), intent(inout) :: bc
 
-  call gatherv_all_cr(bc%DataXZ%t1,bc%DataXZ%npoin,bc%DataXZ_all%t1,bc%npoin_perproc,bc%poin_offset,bc%DataXZ_all%npoin,NPROC)
-  call gatherv_all_cr(bc%DataXZ%t2,bc%DataXZ%npoin,bc%DataXZ_all%t2,bc%npoin_perproc,bc%poin_offset,bc%DataXZ_all%npoin,NPROC)
-  call gatherv_all_cr(bc%DataXZ%t3,bc%DataXZ%npoin,bc%DataXZ_all%t3,bc%npoin_perproc,bc%poin_offset,bc%DataXZ_all%npoin,NPROC)
-  call gatherv_all_cr(bc%DataXZ%d1,bc%DataXZ%npoin,bc%DataXZ_all%d1,bc%npoin_perproc,bc%poin_offset,bc%DataXZ_all%npoin,NPROC)
-  call gatherv_all_cr(bc%DataXZ%d2,bc%DataXZ%npoin,bc%DataXZ_all%d2,bc%npoin_perproc,bc%poin_offset,bc%DataXZ_all%npoin,NPROC)
-  call gatherv_all_cr(bc%DataXZ%v1,bc%DataXZ%npoin,bc%DataXZ_all%v1,bc%npoin_perproc,bc%poin_offset,bc%DataXZ_all%npoin,NPROC)
-  call gatherv_all_cr(bc%DataXZ%v2,bc%DataXZ%npoin,bc%DataXZ_all%v2,bc%npoin_perproc,bc%poin_offset,bc%DataXZ_all%npoin,NPROC)
-  call gatherv_all_cr(bc%DataXZ%tRUP,bc%DataXZ%npoin,bc%DataXZ_all%tRUP,bc%npoin_perproc,bc%poin_offset,bc%DataXZ_all%npoin,NPROC)
-  call gatherv_all_cr(bc%DataXZ%tPZ,bc%DataXZ%npoin,bc%DataXZ_all%tPZ,bc%npoin_perproc,bc%poin_offset,bc%DataXZ_all%npoin,NPROC)
-  call gatherv_all_cr(bc%DataXZ%stg,bc%DataXZ%npoin,bc%DataXZ_all%stg,bc%npoin_perproc,bc%poin_offset,bc%DataXZ_all%npoin,NPROC)
-  call gatherv_all_cr(bc%DataXZ%sta,bc%DataXZ%npoin,bc%DataXZ_all%sta,bc%npoin_perproc,bc%poin_offset,bc%DataXZ_all%npoin,NPROC)
+  call gatherv_all_cr(bc%dataXZ%t1,bc%dataXZ%npoin,bc%dataXZ_all%t1,bc%npoin_perproc,bc%poin_offset,bc%dataXZ_all%npoin,NPROC)
+  call gatherv_all_cr(bc%dataXZ%t2,bc%dataXZ%npoin,bc%dataXZ_all%t2,bc%npoin_perproc,bc%poin_offset,bc%dataXZ_all%npoin,NPROC)
+  call gatherv_all_cr(bc%dataXZ%t3,bc%dataXZ%npoin,bc%dataXZ_all%t3,bc%npoin_perproc,bc%poin_offset,bc%dataXZ_all%npoin,NPROC)
+  call gatherv_all_cr(bc%dataXZ%d1,bc%dataXZ%npoin,bc%dataXZ_all%d1,bc%npoin_perproc,bc%poin_offset,bc%dataXZ_all%npoin,NPROC)
+  call gatherv_all_cr(bc%dataXZ%d2,bc%dataXZ%npoin,bc%dataXZ_all%d2,bc%npoin_perproc,bc%poin_offset,bc%dataXZ_all%npoin,NPROC)
+  call gatherv_all_cr(bc%dataXZ%v1,bc%dataXZ%npoin,bc%dataXZ_all%v1,bc%npoin_perproc,bc%poin_offset,bc%dataXZ_all%npoin,NPROC)
+  call gatherv_all_cr(bc%dataXZ%v2,bc%dataXZ%npoin,bc%dataXZ_all%v2,bc%npoin_perproc,bc%poin_offset,bc%dataXZ_all%npoin,NPROC)
+  call gatherv_all_cr(bc%dataXZ%tRUP,bc%dataXZ%npoin,bc%dataXZ_all%tRUP,bc%npoin_perproc,bc%poin_offset,bc%dataXZ_all%npoin,NPROC)
+  call gatherv_all_cr(bc%dataXZ%tPZ,bc%dataXZ%npoin,bc%dataXZ_all%tPZ,bc%npoin_perproc,bc%poin_offset,bc%dataXZ_all%npoin,NPROC)
+  call gatherv_all_cr(bc%dataXZ%stg,bc%dataXZ%npoin,bc%dataXZ_all%stg,bc%npoin_perproc,bc%poin_offset,bc%dataXZ_all%npoin,NPROC)
+  call gatherv_all_cr(bc%dataXZ%sta,bc%dataXZ%npoin,bc%dataXZ_all%sta,bc%npoin_perproc,bc%poin_offset,bc%dataXZ_all%npoin,NPROC)
 
 end subroutine gather_dataXZ
 



More information about the CIG-COMMITS mailing list