DOUBLE PRECISION FUNCTION FINDN2S(u,nx,ny,nz) c*** c get the L_2 Norm of a scalar field c*** INCLUDE 'undefined.h' INCLUDE 'mpif.h' INTEGER nx, ny, nz, i, j, k, ierr00 DOUBLE PRECISION u(nx,ny,nz), tnpt,norm_total INTRINSIC DSQRT c*** ierr00=MPI_SUCCESS CALL CHECK_MPI(IERR00,301) FINDN2S=0.d0 do k=2,nz-1 do j=2,ny-1 do i=2,nx-1 FINDN2S = FINDN2S + u(i,j,k)**2 enddo enddo enddo tnpt = DFLOAT((nx-2)*(ny-2)*(nz-2)) FINDN2S = FINDN2S/tnpt CALL CHECK_MPI(IERR00,302) c*** if(havempi.eq.0) then FINDN2S = DSQRT(FINDN2S) return else if(havempi.eq.1) then CALL MPI_ALLREDUCE(FINDN2S,norm_total,1, & MPI_DOUBLE_PRECISION,MPI_SUM,COMM2D,IERR00) FINDN2S = dsqrt(norm_total/NPROCS) CALL CHECK_MPI(IERR00,43) return else stop 'wrong value of havempi' endif end c*********************************************************************** DOUBLE PRECISION FUNCTION SUMFIELD(u,nx,ny,nz) c*** c get the sum of a scalar field c*** INCLUDE 'undefined.h' INCLUDE 'mpif.h' INTEGER nx, ny, nz, i, j, k, ierr00 DOUBLE PRECISION u(nx,ny,nz), total,boxsumfield external boxsumfield c*** sumfield = boxsumfield(u,nx,ny,nz) if(havempi.eq.0) then return else if(havempi.eq.1) then CALL MPI_ALLREDUCE(sumfield,total,1, & MPI_DOUBLE_PRECISION,MPI_SUM,COMM2D,IERR00) sumfield = total CALL CHECK_MPI(IERR00,42) return else stop 'wrong value of havempi' endif end