[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