aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/AHFinder.F2
-rw-r--r--src/AHFinder_gau.F45
-rw-r--r--src/AHFinder_int.F164
3 files changed, 154 insertions, 57 deletions
diff --git a/src/AHFinder.F b/src/AHFinder.F
index 53cbd3b..f45ad29 100644
--- a/src/AHFinder.F
+++ b/src/AHFinder.F
@@ -241,7 +241,7 @@ c Note thadmcevol_onpunc_0.250_128_neu2_drop/at including cactus.h will also inc
! write(*,*) 'filestr =', filestr
! write(*,*) 'nfile =',nfile
!
- write(*,*) 'jetzt bin ich da, wo ich nicht sein sollte'
+ write(*,*) 'jetzt bin ich da, wo ich nicht sein sollte ( ?? sounds like Jim Kopf und die Wilde 13 - gl)'
if (find3) then
if (mfind.eq.0) then
diff --git a/src/AHFinder_gau.F b/src/AHFinder_gau.F
index 3261bc7..a18e195 100644
--- a/src/AHFinder_gau.F
+++ b/src/AHFinder_gau.F
@@ -28,9 +28,9 @@ c Note that including cactus.h will also include AHFinder.h
DECLARE_CCTK_FARGUMENTS
DECLARE_CCTK_PARAMETERS
-#ifdef MPI
- include 'mpif.h'
-#endif
+c#ifdef MPI
+c include 'mpif.h'
+c#endif
logical firstgau
logical firstcal(4)
@@ -71,6 +71,9 @@ c Note that including cactus.h will also include AHFinder.h
character*200 gaussf
+c Reduction related things
+ INTEGER reduction_handle
+
! Declarations for macros.
#include "CactusEinstein/Einstein/src/Einstein.h"
@@ -200,6 +203,14 @@ c Note that including cactus.h will also include AHFinder.h
pi = 3.141592654D0
+! **********************************************
+! * Get the reduction handle for sum operation *
+! **********************************************
+ call CCTK_ReductionArrayHandle(reduction_handle,"sum");
+ if (reduction_handle.lt.0) then
+ call CCTK_WARN(1,"Cannot get reduction handle.")
+ endif
+
! **************************************
! *** ALLOCATE MEMORY FOR ARRAYS ***
@@ -589,15 +600,31 @@ c Note that including cactus.h will also include AHFinder.h
! Reduce the errors across processors (all processors must
! know about this since all will participate on the interpolation
! below).
+
+ call CCTK_ReduceLocalScalar(ierror, cctkGH, -1, reduction_handle,
+ $ error1, i, CCTK_VARIABLE_REAL)
-#ifdef MPI
- call mpi_allreduce(error1,i,1,MPI_INTEGER,
- . MPI_SUM,MPI_COMM_WORLD,ierror)
+ if (ierror.ne.0) then
+ call CCTK_WARN(1,"Reduction failed!");
+ endif
error1 = i
- call mpi_allreduce(error2,i,1,MPI_INTEGER,
- . MPI_SUM,MPI_COMM_WORLD,ierror)
+
+ call CCTK_ReduceLocalScalar(ierror, cctkGH, -1, reduction_handle,
+ $ error2, i, CCTK_VARIABLE_REAL)
+
+ if (ierror.ne.0) then
+ call CCTK_WARN(1,"Reduction failed!");
+ endif
error2 = i
-#endif
+
+cc#ifdef MPI
+cc call mpi_allreduce(error1,i,1,MPI_INTEGER,
+cc . MPI_SUM,MPI_COMM_WORLD,ierror)
+cc error1 = i
+cc call mpi_allreduce(error2,i,1,MPI_INTEGER,
+cc . MPI_SUM,MPI_COMM_WORLD,ierror)
+cc error2 = i
+cc#endif
! If there was an error then return from the subroutine
! (but remember to deallocate the arrays first!).
diff --git a/src/AHFinder_int.F b/src/AHFinder_int.F
index 83e73cb..b93f4eb 100644
--- a/src/AHFinder_int.F
+++ b/src/AHFinder_int.F
@@ -62,6 +62,9 @@ c@@*/
CCTK_REAL, allocatable, dimension(:,:) :: rr,xa,ya,za,da,exp,gradn
CCTK_REAL, allocatable, dimension(:,:) :: txx,tyy,tzz,txy,txz,tyz
+c Reduction related things
+ INTEGER reduction_handle
+
save xmn,ymn,zmn,xmx,ymx,zmx
save dtheta,dphi,dtp,idtheta,idphi
save npt,npp,l_ntheta,l_nphi,theta0,phi0
@@ -140,7 +143,14 @@ c@@*/
!
! da Area element.
-
+
+
+c Get the reduction handel for the sum operation
+ call CCTK_ReductionArrayHandle(reduction_handle,"sum")
+ if (reduction_handle.lt.0) then
+ call CCTK_WARN(1,"Cannot get reduction handle for SUM operation.")
+ endif
+
! **************************
! *** DEFINE NUMBERS ***
@@ -559,17 +569,30 @@ c@@*/
end if
! Reduce the errors across processors.
-
-#ifdef MPI
-
- call mpi_allreduce(interror1,i,1,MPI_INTEGER,
- . MPI_SUM,MPI_COMM_WORLD,ierror)
+ call CCTK_ReduceLocalScalar(ierror, cctkGH, -1, reduction_handle,
+ $ interror1, i, CCTK_VARIABLE_INT)
+ if (ierror.ne.0) then
+ call CCTK_WARN(1,"Reduction of norm failed!");
+ endif
interror1 = i
- call mpi_allreduce(interror2,i,1,MPI_INTEGER,
- . MPI_SUM,MPI_COMM_WORLD,ierror)
+ call CCTK_ReduceLocalScalar(ierror, cctkGH, -1, reduction_handle,
+ $ interror2, i, CCTK_VARIABLE_INT)
+ if (ierror.ne.0) then
+ call CCTK_WARN(1,"Reduction of norm failed!");
+ endif
interror2 = i
-#endif
+
+c#ifdef MPI
+c
+c call mpi_allreduce(interror1,i,1,MPI_INTEGER,
+c . MPI_SUM,MPI_COMM_WORLD,ierror)
+c interror1 = i
+c call mpi_allreduce(interror2,i,1,MPI_INTEGER,
+c . MPI_SUM,MPI_COMM_WORLD,ierror)
+c interror2 = i
+c
+c#endif
! If there was an error on any processor then assign
! large values to the integrals and return from the
@@ -923,31 +946,54 @@ c@@*/
! Reduce the integrals across processors.
-#ifdef MPI
+! Area and expansion.
+ call CCTK_ReduceLocalScalar(ierror, cctkGH, -1, reduction_handle,
+ $ intarea, aux, CCTK_VARIABLE_REAL)
+ intarea=aux
+ call CCTK_ReduceLocalScalar(ierror, cctkGH, -1, reduction_handle,
+ $ intexp, aux, CCTK_VARIABLE_REAL)
+ intexp=aux
+ call CCTK_ReduceLocalScalar(ierror, cctkGH, -1, reduction_handle,
+ $ intexp2, aux, CCTK_VARIABLE_REAL)
+ intexp2=aux
+ call CCTK_ReduceLocalScalar(ierror, cctkGH, -1, reduction_handle,
+ $ intexpdel2, aux, CCTK_VARIABLE_REAL)
+ intexpdel2=aux
+
+! negative expansion elements on surfac
+ call CCTK_ReduceLocalScalar(ierror, cctkGH, -1, reduction_handle,
+ $ inside_min_neg_count, aux, CCTK_VARIABLE_REAL)
+ inside_min_neg_count=aux
+ call CCTK_ReduceLocalScalar(ierror, cctkGH, -1, reduction_handle,
+ $ inside_min_neg_count, aux, CCTK_VARIABLE_REAL)
+ inside_min_count=aux
+
+
+c#ifdef MPI
! Area and expansion.
- call mpi_allreduce(intarea,aux,1,MPI_DOUBLE_PRECISION,
- .MPI_SUM,MPI_COMM_WORLD,ierror)
- intarea = aux
- call mpi_allreduce(intexp,aux,1,MPI_DOUBLE_PRECISION,
- .MPI_SUM,MPI_COMM_WORLD,ierror)
- intexp = aux
- call mpi_allreduce(intexp2,aux,1,MPI_DOUBLE_PRECISION,
- .MPI_SUM,MPI_COMM_WORLD,ierror)
- intexp2 = aux
- call mpi_allreduce(intexpdel2,aux,1,MPI_DOUBLE_PRECISION,
- .MPI_SUM,MPI_COMM_WORLD,ierror)
- intexpdel2 = aux
+CCC# call mpi_allreduce(intarea,aux,1,MPI_DOUBLE_PRECISION,
+CCC# .MPI_SUM,MPI_COMM_WORLD,ierror)
+CCC# intarea = aux
+CCC# call mpi_allreduce(intexp,aux,1,MPI_DOUBLE_PRECISION,
+CCC# .MPI_SUM,MPI_COMM_WORLD,ierror)
+CCC# intexp = aux
+CCC# call mpi_allreduce(intexp2,aux,1,MPI_DOUBLE_PRECISION,
+CCC# .MPI_SUM,MPI_COMM_WORLD,ierror)
+CCC# intexp2 = aux
+CCC# call mpi_allreduce(intexpdel2,aux,1,MPI_DOUBLE_PRECISION,
+CCC# .MPI_SUM,MPI_COMM_WORLD,ierror)
+CCC# intexpdel2 = aux
! negative expansion elements on surface
- call mpi_allreduce(inside_min_count,aux,1,MPI_DOUBLE_PRECISION,
- .MPI_SUM,MPI_COMM_WORLD,ierror)
- inside_min_count = aux
- call mpi_allreduce(inside_min_neg_count,aux,1,MPI_DOUBLE_PRECISION,
- .MPI_SUM,MPI_COMM_WORLD,ierror)
- inside_min_neg_count = aux
+CCC# call mpi_allreduce(inside_min_count,aux,1,MPI_DOUBLE_PRECISION,
+CCC# .MPI_SUM,MPI_COMM_WORLD,ierror)
+CCC# inside_min_count = aux
+CCC# call mpi_allreduce(inside_min_neg_count,aux,1,MPI_DOUBLE_PRECISION,
+CCC# .MPI_SUM,MPI_COMM_WORLD,ierror)
+CCC# inside_min_neg_count = aux
! Spectral components for flow.
@@ -958,19 +1004,31 @@ c@@*/
auxi = lmax+1
if (hw.ne.zero) then
+c call CCTK_ReduceLocalArray1D(ierror, cctkGH, -1, reduction_handle,
+c $ hflow0, tempv, auxi, CCTK_VARIABLE_REAL)
call mpi_allreduce(hflow0,tempv,auxi,MPI_DOUBLE_PRECISION,
- . MPI_SUM,MPI_COMM_WORLD,ierror)
+ . MPI_SUM,MPI_COMM_WORLD,ierror)
hflow0 = tempv
end if
- if (cw.ne.zero) then
+ if (cw.ne.zero) then
+c write(*,*) "AHFinder_int1 cflow0:", cflow0
+c write(*,*) "AHFinder_int1 tempv:", tempv
+c call CCTK_ReduceLocalArray1D(ierror, cctkGH, -1, reduction_handle,
+c $ cflow0, tempv, auxi, CCTK_VARIABLE_REAL)
call mpi_allreduce(cflow0,tempv,auxi,MPI_DOUBLE_PRECISION,
- . MPI_SUM,MPI_COMM_WORLD,ierror)
+ . MPI_SUM,MPI_COMM_WORLD,ierror)
+c write(*,*) "AHFinder_int2 cflow0:", cflow0
+c write(*,*) "AHFinder_int2 tempv:", tempv
cflow0 = tempv
+c write(*,*) "AHFinder_int3 cflow0:", cflow0
+c write(*,*) "AHFinder_int3 tempv:", tempv
end if
if (nw.ne.zero) then
- call mpi_allreduce(nflow0,tempv,auxi,MPI_DOUBLE_PRECISION,
- . MPI_SUM,MPI_COMM_WORLD,ierror)
- nflow0 = tempv
+c call CCTK_ReduceLocalArray1D(ierror, cctkGH, -1, reduction_handle,
+c $ nflow0, tempv, auxi, CCTK_VARIABLE_REAL)
+ call mpi_allreduce(nflow0,tempv,auxi,MPI_DOUBLE_PRECISION,
+ . MPI_SUM,MPI_COMM_WORLD,ierror)
+ nflow0 = tempv
end if
! Non-axisymmetric.
@@ -980,36 +1038,48 @@ c@@*/
auxi = lmax*lmax
if (nw.ne.zero) then
- call mpi_allreduce(hflowc,tempm,auxi,
- . MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_WORLD,ierror)
- hflowc = tempm
+c call CCTK_ReduceLocalArray1D(ierror, cctkGH, -1, reduction_handle,
+c $ hflowc, tempm, auxi, CCTK_VARIABLE_REAL)
+ call mpi_allreduce(hflowc,tempm,auxi,
+ . MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_WORLD,ierror)
+ hflowc = tempm
end if
if (cw.ne.zero) then
- call mpi_allreduce(cflowc,tempm,auxi,
- . MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_WORLD,ierror)
- cflowc = tempm
+c call CCTK_ReduceLocalArray1D(ierror, cctkGH, -1, reduction_handle,
+c $ cflowc, tempm, auxi, CCTK_VARIABLE_REAL)
+ call mpi_allreduce(cflowc,tempm,auxi,
+ . MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_WORLD,ierror)
+ cflowc = tempm
end if
if (nw.ne.zero) then
- call mpi_allreduce(nflowc,tempm,auxi,
- . MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_WORLD,ierror)
- nflowc = tempm
+c call CCTK_ReduceLocalArray1D(ierror, cctkGH, -1, reduction_handle,
+c $ nflowc, tempm, auxi, CCTK_VARIABLE_REAL)
+ call mpi_allreduce(nflowc,tempm,auxi,
+ . MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_WORLD,ierror)
+ nflowc = tempm
end if
if (.not.refy) then
if (hw.ne.zero) then
+c call CCTK_ReduceLocalArray1D(ierror, cctkGH, -1, reduction_handle,
+c $ hflows, tempm, auxi, CCTK_VARIABLE_REAL)
call mpi_allreduce(hflows,tempm,auxi,
- . MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_WORLD,ierror)
+ . MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_WORLD,ierror)
hflows = tempm
end if
if (cw.ne.zero) then
+c call CCTK_ReduceLocalArray1D(ierror, cctkGH, -1, reduction_handle,
+c $ cflows, tempm, auxi, CCTK_VARIABLE_REAL)
call mpi_allreduce(cflows,tempm,auxi,
- . MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_WORLD,ierror)
+ . MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_WORLD,ierror)
cflows = tempm
end if
if (nw.ne.zero) then
+c call CCTK_ReduceLocalArray1D(ierror, cctkGH, -1, reduction_handle,
+c $ nflows, tempm, auxi, CCTK_VARIABLE_REAL)
call mpi_allreduce(nflows,tempm,auxi,
- . MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_WORLD,ierror)
+ . MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_WORLD,ierror)
nflows = tempm
end if
end if
@@ -1018,7 +1088,7 @@ c@@*/
end if
-#endif
+c#endif
! For cartoon multiply the integrals with 2*pi.