diff options
author | diener <diener@2a26948c-0e4f-0410-aee8-f1d3e353619c> | 2003-03-28 17:21:24 +0000 |
---|---|---|
committer | diener <diener@2a26948c-0e4f-0410-aee8-f1d3e353619c> | 2003-03-28 17:21:24 +0000 |
commit | de02c721377d8c76059d87c9dfa8676499dfb272 (patch) | |
tree | de197edca7c89c4adb2abc0aaefc59a0df891537 | |
parent | acae5f581118344611799607b40672b63a7bb581 (diff) |
Added code for calculating circumferences. Changed storing of results, since
I switched to 1D grid array with default distribution.
git-svn-id: http://svn.einsteintoolkit.org/cactus/EinsteinAnalysis/EHFinder/trunk@94 2a26948c-0e4f-0410-aee8-f1d3e353619c
-rw-r--r-- | src/EHFinder_FindSurface.F90 | 24 | ||||
-rw-r--r-- | src/EHFinder_Integrate2.F90 | 329 | ||||
-rw-r--r-- | src/EHFinder_mod.F90 | 1 |
3 files changed, 276 insertions, 78 deletions
diff --git a/src/EHFinder_FindSurface.F90 b/src/EHFinder_FindSurface.F90 index ece1b1c..655109b 100644 --- a/src/EHFinder_FindSurface.F90 +++ b/src/EHFinder_FindSurface.F90 @@ -205,13 +205,13 @@ subroutine EHFinder_FindSurface(CCTK_ARGUMENTS) s_symz = .true.; s_symy = .true. else if ( crange_min_glob(3) .lt. zero ) then ltheta = zero; utheta = half * pi - lphi = 0; uphi = two * pi + lphi = zero; uphi = two * pi sym_factor = two center(3) = zero s_symz = .true. else if ( crange_min_glob(2) .lt. zero ) then ltheta = zero; utheta = pi - lphi = 0; uphi = pi + lphi = zero; uphi = pi sym_factor = two center(2) = zero s_symy = .true. @@ -229,7 +229,7 @@ subroutine EHFinder_FindSurface(CCTK_ARGUMENTS) s_symz = .true.; s_symx = .true. else if ( crange_min_glob(3) .lt. zero ) then ltheta = zero; utheta = half * pi - lphi = 0; uphi = two * pi + lphi = zero; uphi = two * pi sym_factor = two center(3) = zero s_symz = .true. @@ -253,7 +253,7 @@ subroutine EHFinder_FindSurface(CCTK_ARGUMENTS) s_symy = .true.; s_symx = .true. else if ( crange_min_glob(2) .lt. zero ) then ltheta = zero; utheta = pi - lphi = 0; uphi = pi + lphi = zero; uphi = pi sym_factor = two center(2) = zero s_symy = .true. @@ -318,6 +318,21 @@ subroutine EHFinder_FindSurface(CCTK_ARGUMENTS) end if end if + if ( .not. s_symz ) then + githeta = ( ntheta - 1 ) / 2 + 1 + else + githeta = ntheta + end if + + if ( ( .not. s_symy ) .and. ( s_symx ) ) then + gjphi = ( nphi - 1 ) / 2 + 1 + else + gjphi = 1 + end if + + theta_sym_factor = two * pi / ( utheta - ltheta ) + phi_sym_factor = two * pi / ( uphi - lphi ) + ! print* ! print*,ltheta/pi,utheta/pi,lphi/pi,uphi/pi ! print*,sym_factor @@ -633,6 +648,7 @@ subroutine EHFinder_FindSurface(CCTK_ARGUMENTS) ! print*,'Calculated derivatives' ! print*,rsurf call Util_TableDestroy ( status, table_handle ) + print*,'gjphi = ',gjphi end subroutine EHFinder_FindSurface diff --git a/src/EHFinder_Integrate2.F90 b/src/EHFinder_Integrate2.F90 index 53848f9..0b06ffb 100644 --- a/src/EHFinder_Integrate2.F90 +++ b/src/EHFinder_Integrate2.F90 @@ -25,8 +25,8 @@ subroutine EHFinder_FindSurfaceElement(CCTK_ARGUMENTS) CCTK_REAL :: dxdth, dxdph, dydth, dydph, dzdth, dzdph ! CCTK_REAL :: gtt, gtp, gpp CCTK_POINTER, dimension(3) :: interp_coords - CCTK_POINTER, dimension(7) :: out_array - CCTK_INT, dimension(7) :: in_array + CCTK_POINTER, dimension(7) :: in_array, out_array +! CCTK_INT, dimension(7) :: in_array CCTK_INT, dimension(7), parameter :: out_types = (/ CCTK_VARIABLE_REAL, & CCTK_VARIABLE_REAL, & CCTK_VARIABLE_REAL, & @@ -176,6 +176,8 @@ subroutine EHFinder_FindSurfaceElement(CCTK_ARGUMENTS) dxdph * dzdph * gxzi(i,j) + & dydph * dzdph * gyzi(i,j) ) da(i,j) = dtheta * dphi * sqrt ( gtt(i,j) * gpp(i,j) - gtp(i,j)**2 ) + dltheta(i,j) = dtheta * sqrt ( gtt(i,j) ) + dlphi(i,j) = dphi * sqrt ( gpp(i,j) ) end do end do ! print*,da @@ -203,7 +205,7 @@ subroutine EHFinder_IntegrateArea(CCTK_ARGUMENTS) CCTK_INT :: int_var, sn CCTK_REAL :: eh_area_tmp character(len=30) :: info_message -! CCTK_INT, dimension(1) :: lbnd, ubnd, lsh + CCTK_INT, dimension(1) :: lbnd, ubnd, lsh call CCTK_INFO ( 'Integrating area' ) @@ -212,35 +214,37 @@ subroutine EHFinder_IntegrateArea(CCTK_ARGUMENTS) call CCTK_VarIndex ( int_var, "ehfinder::int_tmp" ) if ( int_var .lt. 0 ) then - Call CCTK_WARN ( 0, 'Could not get index to grid array int_tmp' ) + call CCTK_WARN ( 0, 'Could not get index to grid array int_tmp' ) end if - call CCTK_Reduce ( ierr, cctkGH, -1, sum_handle, 1, CCTK_VARIABLE_REAL, & - eh_area2(sn), 1, int_var ) - write(info_message,'(a15,f10.5)') 'Horizon area = ',eh_area2(sn) - ! call CCTK_Reduce ( ierr, cctkGH, -1, sum_handle, 1, CCTK_VARIABLE_REAL, & -! eh_area_tmp, 1, int_var ) -! write(info_message,'(a15,f10.5)') 'Horizon area = ',eh_area_tmp +! eh_area2(sn), 1, int_var ) +! write(info_message,'(a15,f10.5)') 'Horizon area = ',eh_area2(sn) + + call CCTK_Reduce ( ierr, cctkGH, -1, sum_handle, 1, CCTK_VARIABLE_REAL, & + eh_area_tmp, 1, int_var ) + write(info_message,'(a15,f10.5)') 'Horizon area = ',eh_area_tmp call CCTK_INFO(info_message) -! call CCTK_GrouplbndGN ( ierr, cctkGH, 1, lbnd, "ehfinder::eh_area2" ) -! if ( ierr .lt. 0 ) then -! call CCTK_WARN ( 0, "cannot get lower bounds for area array" ) -! end if -! call CCTK_GroupubndGN ( ierr, cctkGH, 1, ubnd, "ehfinder::eh_area2" ) -! if ( ierr .lt. 0 ) then -! call CCTK_WARN ( 0, "cannot get upper bounds for area array" ) -! end if -! call CCTK_GrouplshGN ( ierr, cctkGH, 1, lsh, "ehfinder::eh_area2" ) -! if ( ierr .lt. 0 ) then -! call CCTK_WARN ( 0, "cannot get local size for area array" ) -! end if -! + call CCTK_GrouplbndGN ( ierr, cctkGH, 1, lbnd, "ehfinder::eh_area2" ) + if ( ierr .lt. 0 ) then + call CCTK_WARN ( 0, "cannot get lower bounds for area array" ) + end if + call CCTK_GroupubndGN ( ierr, cctkGH, 1, ubnd, "ehfinder::eh_area2" ) + if ( ierr .lt. 0 ) then + call CCTK_WARN ( 0, "cannot get upper bounds for area array" ) + end if + call CCTK_GrouplshGN ( ierr, cctkGH, 1, lsh, "ehfinder::eh_area2" ) + if ( ierr .lt. 0 ) then + call CCTK_WARN ( 0, "cannot get local size for area array" ) + end if + ! if ( ( sn .ge. lbnd(1) + lsh(1) ) .and. ( sn .le. ubnd(1) + lsh(1) ) ) then -! eh_area2(sn-lbnd(1)) = eh_area_tmp -! end if -! print*,lbnd,ubnd,lsh + if ( ( sn .ge. lbnd(1) + 1 ) .and. ( sn .le. ubnd(1) + 1 ) ) then + eh_area2(sn-lbnd(1)) = eh_area_tmp + end if + print*,'Debug information : ',sn,lbnd,ubnd,lsh +! print*,eh_area2 end subroutine EHFinder_IntegrateArea @@ -257,7 +261,7 @@ subroutine EHFinder_IntegrateCentroid(CCTK_ARGUMENTS) CCTK_INT :: int_var, sn, k character(len=50) :: info_message -! CCTK_INT, dimension(1) :: lbnd, ubnd, lsh + CCTK_INT, dimension(1) :: lbnd, ubnd, lsh CCTK_REAL :: centroid_x, centroid_y, centroid_z call CCTK_INFO ( 'Integrating centroid' ) @@ -270,74 +274,221 @@ subroutine EHFinder_IntegrateCentroid(CCTK_ARGUMENTS) call CCTK_VarIndex ( int_var, "ehfinder::int_tmp" ) if ( int_var .lt. 0 ) then - Call CCTK_WARN ( 0, 'Could not get index to grid array int_tmp' ) + call CCTK_WARN ( 0, 'Could not get index to grid array int_tmp' ) end if +! int_tmp = sym_factor * interp_x * weights * da +! call CCTK_Reduce ( ierr, cctkGH, -1, sum_handle, 1, CCTK_VARIABLE_REAL, & +! eh_centroid2_x(sn), 1, int_var ) +! +! int_tmp = sym_factor * interp_y * weights * da +! call CCTK_Reduce ( ierr, cctkGH, -1, sum_handle, 1, CCTK_VARIABLE_REAL, & +! eh_centroid2_y(sn), 1, int_var ) +! +! int_tmp = sym_factor * interp_z * weights * da +! call CCTK_Reduce ( ierr, cctkGH, -1, sum_handle, 1, CCTK_VARIABLE_REAL, & +! eh_centroid2_z(sn), 1, int_var ) + +! if ( s_symx ) eh_centroid2_x(sn) = zero +! if ( s_symy ) eh_centroid2_y(sn) = zero +! if ( s_symz ) eh_centroid2_z(sn) = zero + int_tmp = sym_factor * interp_x * weights * da call CCTK_Reduce ( ierr, cctkGH, -1, sum_handle, 1, CCTK_VARIABLE_REAL, & - eh_centroid2_x(sn), 1, int_var ) + centroid_x, 1, int_var ) int_tmp = sym_factor * interp_y * weights * da call CCTK_Reduce ( ierr, cctkGH, -1, sum_handle, 1, CCTK_VARIABLE_REAL, & - eh_centroid2_y(sn), 1, int_var ) + centroid_y, 1, int_var ) int_tmp = sym_factor * interp_z * weights * da call CCTK_Reduce ( ierr, cctkGH, -1, sum_handle, 1, CCTK_VARIABLE_REAL, & - eh_centroid2_z(sn), 1, int_var ) + centroid_z, 1, int_var ) - if ( s_symx ) eh_centroid2_x(sn) = zero - if ( s_symy ) eh_centroid2_y(sn) = zero - if ( s_symz ) eh_centroid2_z(sn) = zero + if ( s_symx ) centroid_x = zero + if ( s_symy ) centroid_y = zero + if ( s_symz ) centroid_z = zero -! call CCTK_Reduce ( ierr, cctkGH, -1, sum_handle, 1, CCTK_VARIABLE_REAL, & -! centroid_x, 1, int_var ) -! -! int_tmp = interp_y * weights * da -! call CCTK_Reduce ( ierr, cctkGH, -1, sum_handle, 1, CCTK_VARIABLE_REAL, & -! centroid_y, 1, int_var ) -! -! int_tmp = interp_z * weights * da -! call CCTK_Reduce ( ierr, cctkGH, -1, sum_handle, 1, CCTK_VARIABLE_REAL, & -! centroid_z, 1, int_var ) -! -! call CCTK_GrouplbndGN ( ierr, cctkGH, 1, lbnd, "ehfinder::eh_area2" ) -! if ( ierr .lt. 0 ) then -! call CCTK_WARN ( 0, "cannot get lower bounds for area array" ) -! end if -! call CCTK_GroupubndGN ( ierr, cctkGH, 1, ubnd, "ehfinder::eh_area2" ) -! if ( ierr .lt. 0 ) then -! call CCTK_WARN ( 0, "cannot get upper bounds for area array" ) -! end if -! call CCTK_GrouplshGN ( ierr, cctkGH, 1, lsh, "ehfinder::eh_area2" ) -! if ( ierr .lt. 0 ) then -! call CCTK_WARN ( 0, "cannot get local size for area array" ) -! end if - - eh_centroid2_x(sn) = eh_centroid2_x(sn) / eh_area2(sn) - eh_centroid2_y(sn) = eh_centroid2_y(sn) / eh_area2(sn) - eh_centroid2_z(sn) = eh_centroid2_z(sn) / eh_area2(sn) + call CCTK_GrouplbndGN ( ierr, cctkGH, 1, lbnd, "ehfinder::eh_centroid2" ) + if ( ierr .lt. 0 ) then + call CCTK_WARN ( 0, "cannot get lower bounds for area array" ) + end if + call CCTK_GroupubndGN ( ierr, cctkGH, 1, ubnd, "ehfinder::eh_centroid2" ) + if ( ierr .lt. 0 ) then + call CCTK_WARN ( 0, "cannot get upper bounds for area array" ) + end if + call CCTK_GrouplshGN ( ierr, cctkGH, 1, lsh, "ehfinder::eh_centroid2" ) + if ( ierr .lt. 0 ) then + call CCTK_WARN ( 0, "cannot get local size for area array" ) + end if -! if ( ( sn .ge. lbnd(1) + lsh(1) ) .and. ( sn .le. ubnd(1) + lsh(1) ) ) then -! k = sn - lbnd(1) -! eh_centroid2_x(k) = eh_centroid2_x(k) / eh_area2(k) -! eh_centroid2_y(k) = eh_centroid2_y(k) / eh_area2(k) -! eh_centroid2_z(k) = eh_centroid2_z(k) / eh_area2(k) -! end if +! eh_centroid2_x(sn) = eh_centroid2_x(sn) / eh_area2(sn) +! eh_centroid2_y(sn) = eh_centroid2_y(sn) / eh_area2(sn) +! eh_centroid2_z(sn) = eh_centroid2_z(sn) / eh_area2(sn) - write(info_message,'(a19,3(f10.5))') 'Horizon centroid = ', & - eh_centroid2_x(sn), & - eh_centroid2_y(sn), & - eh_centroid2_z(sn) + if ( ( sn .ge. lbnd(1) + 1 ) .and. ( sn .le. ubnd(1) + 1 ) ) then + k = sn - lbnd(1) + eh_centroid2_x(k) = centroid_x / eh_area2(k) + eh_centroid2_y(k) = centroid_y / eh_area2(k) + eh_centroid2_z(k) = centroid_z / eh_area2(k) + end if ! write(info_message,'(a19,3(f10.5))') 'Horizon centroid = ', & -! centroid_x, & -! centroid_y, & -! centroid_z +! eh_centroid2_x(sn), & +! eh_centroid2_y(sn), & +! eh_centroid2_z(sn) + + write(info_message,'(a19,3(f10.5))') 'Horizon centroid = ', & + centroid_x, & + centroid_y, & + centroid_z call CCTK_INFO(info_message) end subroutine EHFinder_IntegrateCentroid +subroutine EHFinder_IntegrateEquatorial(CCTK_ARGUMENTS) + + use EHFinder_mod + + implicit none + + DECLARE_CCTK_PARAMETERS + DECLARE_CCTK_ARGUMENTS + DECLARE_CCTK_FUNCTIONS + + CCTK_INT :: int_var, sn, k + character(len=50) :: info_message + CCTK_INT, dimension(1) :: lbnd1, ubnd1, lsh1 + CCTK_INT, dimension(2) :: lbnd, lsh, nghost + CCTK_INT, dimension(4) :: bbox + CCTK_INT :: ithl, ithr, jphl, jphr, itha, jpha + CCTK_REAL :: eq_circ_loc, eq_circ, pol_circ_loc, pol_circ + + sn = surface_counter - integrate_counter + + ! Find out the lower bounds of the distributed integration grid arrays. + call CCTK_GrouplbndGN ( ierr, cctkGH, 2, lbnd, "ehfinder::surface_arrays" ) + if ( ierr .lt. 0 ) then + call CCTK_WARN ( 0, "cannot get lower bounds for surface arrays" ) + end if + + ! Find out the local size of the distributed integration grid arrays + call CCTK_GrouplshGN ( ierr, cctkGH, 2, lsh, "ehfinder::surface_arrays" ) + if ( ierr .lt. 0 ) then + call CCTK_WARN ( 0, "cannot get local size for surface arrays" ) + end if + + ! Find out the bounding box of the distributed integration grid arrays + call CCTK_GroupbboxGN ( ierr, cctkGH, 4, bbox, "ehfinder::surface_arrays" ) + if ( ierr .lt. 0 ) then + call CCTK_WARN ( 0, "cannot get bounding box for surface arrays" ) + end if + + ! Find out the ghost size of the distributed integration grid arrays + call CCTK_GroupnghostzonesGN ( ierr, cctkGH, 2, nghost, "ehfinder::surface_arrays" ) + if ( ierr .lt. 0 ) then + call CCTK_WARN ( 0, "cannot get ghost zones for surface arrays" ) + end if + +! print*,lbnd +! print*,lsh +! print*,bbox +! print*,nghost + + ithl = 1; ithr = lsh(1) + jphl = 1; jphr = lsh(2) + + if ( bbox(1) .eq. 0 ) ithl = ithl + nghost(1) + if ( bbox(2) .eq. 0 ) ithr = ithr - nghost(1) + if ( bbox(3) .eq. 0 ) jphl = jphl + nghost(2) + if ( bbox(4) .eq. 0 ) jphr = jphr - nghost(2) + +! print*,ithl,ithr +! print*,jphl,jphr + + call CCTK_INFO ( 'Integrating equatorial circumference' ) + + int_tmp = phi_sym_factor * phiweights * dlphi + + if ( ( ithl+lbnd(1) .le. githeta ) .and. ( githeta .le. ithr+lbnd(1) ) ) then + itha = githeta - lbnd(1) + eq_circ_loc = sum ( int_tmp(itha,jphl:jphr) ) + else + eq_circ_loc = zero + end if + +! print*,itha,githeta,eq_circ_loc +! print* +! print*,int_tmp(itha,jphl:jphr) +! print* +! print*,phi_sym_factor +! print* +! print*,phiweights(itha,jphl:jphr) +! print* +! print*,dlphi(itha,jphl:jphr) + + call CCTK_ReduceLocScalar ( ierr, cctkGH, -1, sum_handle, & + eq_circ_loc, eq_circ, CCTK_VARIABLE_REAL ) + + call CCTK_GrouplbndGN ( ierr, cctkGH, 1, lbnd1, "ehfinder::eh_circumference2" ) + if ( ierr .lt. 0 ) then + call CCTK_WARN ( 0, "cannot get lower bounds for area array" ) + end if + call CCTK_GroupubndGN ( ierr, cctkGH, 1, ubnd1, "ehfinder::eh_circumference2" ) + if ( ierr .lt. 0 ) then + call CCTK_WARN ( 0, "cannot get upper bounds for area array" ) + end if + call CCTK_GrouplshGN ( ierr, cctkGH, 1, lsh1, "ehfinder::eh_circumference2" ) + if ( ierr .lt. 0 ) then + call CCTK_WARN ( 0, "cannot get local size for area array" ) + end if + + if ( ( sn .ge. lbnd1(1) + 1 ) .and. ( sn .le. ubnd1(1) + 1 ) ) then + k = sn - lbnd1(1) + eh_circ_eq2(k) = eq_circ + end if +! eh_circ_eq2(sn) = eq_circ + + write(info_message,'(a35,f10.5)') 'Horizon equatorial circumference = ',eq_circ + call CCTK_INFO(info_message) + + call CCTK_INFO ( 'Integrating polar circumference' ) + + int_tmp = theta_sym_factor * thetaweights * dltheta + +! print*,jphl+lbnd(2),jphr+lbnd(2),gjphi + if ( ( jphl+lbnd(2) .le. gjphi ) .and. ( gjphi .le. jphr+lbnd(2) ) ) then + jpha = gjphi - lbnd(2) + pol_circ_loc = sum ( int_tmp(ithl:ithr,jpha) ) + else + pol_circ_loc = zero + end if + +! print*,jpha,gjphi,pol_circ_loc +! print* +! print*,int_tmp(ithl:ithr,jpha) +! print* +! print*,theta_sym_factor +! print*,thetaweights(ithl:ithr,jpha) +! print* +! print*,dltheta(ithl:ithr,jpha) + call CCTK_ReduceLocScalar ( ierr, cctkGH, -1, sum_handle, & + pol_circ_loc, pol_circ, CCTK_VARIABLE_REAL ) + + + if ( ( sn .ge. lbnd1(1) + 1 ) .and. ( sn .le. ubnd1(1) + 1 ) ) then + k = sn - lbnd1(1) + eh_circ_pol2(k) = pol_circ + end if +! eh_circ_pol2(sn) = pol_circ + + write(info_message,'(a30,f10.5)') 'Horizon polar circumference = ',pol_circ + call CCTK_INFO(info_message) + +end subroutine EHFinder_IntegrateEquatorial + + ! This routine sets up the weights for the Simpsons rule integration ! over the surface. subroutine EHFinder_InitWeights(CCTK_ARGUMENTS) @@ -381,10 +532,13 @@ subroutine EHFinder_InitWeights(CCTK_ARGUMENTS) ! the same theta coordinate are set to the same weight. if ( ( lbnd(2)+j .eq. 1 ) .or. ( lbnd(2)+j .eq. nphi ) ) then weights(:,j) = onethird + phiweights(:,j) = onethird else if ( mod(lbnd(2)+j,2) .eq. 0 ) then weights(:,j) = fourthirds + phiweights(:,j) = fourthirds else weights(:,j) = twothirds + phiweights(:,j) = twothirds end if ! Then it is done in the theta direction with the one-dimensional @@ -392,10 +546,13 @@ subroutine EHFinder_InitWeights(CCTK_ARGUMENTS) do i = 1, lsh(1) if ( ( lbnd(1)+i .eq. 1 ) .or. ( lbnd(1)+i .eq. ntheta ) ) then weights(i,j) = onethird * weights(i,j) + thetaweights(i,j) = onethird else if ( mod(lbnd(1)+i,2) .eq. 0 ) then weights(i,j) = fourthirds * weights(i,j) + thetaweights(i,j) = fourthirds else weights(i,j) = twothirds * weights(i,j) + thetaweights(i,j) = twothirds end if end do end do @@ -424,6 +581,9 @@ subroutine EHFinder_CopyArea(CCTK_ARGUMENTS) call CCTK_INFO('Copying area data') +! print*,Xeh_area0 +! print*,Xeh_area20 + eh_area = eh_area2 end subroutine EHFinder_CopyArea @@ -441,8 +601,29 @@ subroutine EHFinder_CopyCentroid(CCTK_ARGUMENTS) call CCTK_INFO('Copying centroid data') +! print*,Xeh_centroid0 +! print*,Xeh_centroid20 + eh_centroid_x = eh_centroid2_x eh_centroid_y = eh_centroid2_y eh_centroid_z = eh_centroid2_z end subroutine EHFinder_CopyCentroid + + +subroutine EHFinder_CopyCircumference(CCTK_ARGUMENTS) + + use EHFinder_mod + + implicit none + + DECLARE_CCTK_PARAMETERS + DECLARE_CCTK_ARGUMENTS + DECLARE_CCTK_FUNCTIONS + + call CCTK_INFO('Copying circumference data') + + eh_circ_eq = eh_circ_eq2 + eh_circ_pol = eh_circ_pol2 + +end subroutine EHFinder_CopyCircumference diff --git a/src/EHFinder_mod.F90 b/src/EHFinder_mod.F90 index 0588cbe..6d6b319 100644 --- a/src/EHFinder_mod.F90 +++ b/src/EHFinder_mod.F90 @@ -29,6 +29,7 @@ module EHFinder_mod CCTK_INT, dimension(3) :: imin_glob, imax_glob CCTK_REAL, dimension(3) :: fimin_glob, fimax_glob CCTK_INT :: current_iteration + CCTK_INT :: githeta, gjphi logical :: mask_first = .true. logical :: symx, symy, symz logical :: s_symx, s_symy, s_symz |