incomp-flame-post/code/test_calculate.f90
2019-05-03 13:44:51 +09:00

303 lines
5.1 KiB
Fortran

program test_calculate
use m_parameters
use m_calculate
implicit none
real*8, allocatable, dimension(:,:,:) :: aaa,bbb,ccc,ddd
integer :: ierr
real*8 :: xx,yy,zz,fxyz
integer :: i,j,k
real*4, dimension(2) :: startt
real*4, dimension(2) :: endt
real*4 :: result
nxp = 512
nyp = 256
nzp = 256
l_0 = 2.0
hyp=l_0*pi/REAL(nyp)
hxp=hyp
hzp=hyp
allocate(aaa(nxp, nyp, nzp), stat=ierr); aaa=0.0
allocate(bbb(nxp, nyp, nzp), stat=ierr); bbb=0.0
allocate(ccc(nxp, nyp, nzp), stat=ierr); ccc=0.0
allocate(ddd(nxp, nyp, nzp), stat=ierr); ddd=0.0
call m_calculate_init
write(*,*) "dimension - ", nxp, nyp, nzp
write(*,*) "spacing - ", hxp, hyp, hzp
do k = 1,nzp
do j = 1,nyp
do i = 1,nxp
xx = i * hxp
yy = j * hyp
zz = k * hzp
aaa(i,j,k) = sin(1.1 * xx) * sin(3.0 * yy) * sin(2.0 * zz)
end do
end do
end do
write(*,*) "test ddx"
call ETIME(startt, result)
call ddx(bbb, aaa)
call ETIME(endt, result)
print *, "usert", endt(1) - startt(1)
print *, "systt", endt(2) - startt(2)
do k = 1,nzp
do j = 1,nyp
do i = nxp/4,3*nxp/4
xx = i * hxp
yy = j * hyp
zz = k * hzp
fxyz = (1.1 * cos(1.1 * xx) * sin(3.0 * yy) * sin(2.0 * zz))
ccc(i,j,k) = (bbb(i,j,k) - fxyz) / (fxyz)
if ((abs(ccc(i,j,k)) > 0.01 ) .and. (abs(bbb(i,j,k)) > 1.0e-14 )) write(*,*) bbb(i,j,k), fxyz
end do
end do
end do
write(*,*) "relerr_min_max", minval(ccc), maxval(ccc)
write(*,*) "test ddy"
call ETIME(startt, result)
call ddy(bbb, aaa)
call ETIME(endt, result)
print *, "usert", endt(1) - startt(1)
print *, "systt", endt(2) - startt(2)
do k = 1,nzp
do j = 1,nyp
do i = nxp/4,3*nxp/4
xx = i * hxp
yy = j * hyp
zz = k * hzp
fxyz = (3.0 * sin(1.1 * xx) * cos(3.0 * yy) * sin(2.0 * zz))
ccc(i,j,k) = (bbb(i,j,k) - fxyz) / (fxyz)
if ((abs(ccc(i,j,k)) > 0.01 ) .and. (abs(bbb(i,j,k)) > 1.0e-14 )) write(*,*) bbb(i,j,k), fxyz
end do
end do
end do
write(*,*) "relerr_min_max", minval(ccc), maxval(ccc)
write(*,*) "test ddz"
call ETIME(startt, result)
call ddz(bbb, aaa)
call ETIME(endt, result)
print *, "usert", endt(1) - startt(1)
print *, "systt", endt(2) - startt(2)
do k = 1,nzp
do j = 1,nyp
do i = nxp/4,3*nxp/4
xx = i * hxp
yy = j * hyp
zz = k * hzp
fxyz = (2.0 * sin(1.1 * xx) * sin(3.0 * yy) * cos(2.0 * zz))
ccc(i,j,k) = (bbb(i,j,k) - fxyz) / (fxyz)
if ((abs(ccc(i,j,k)) > 0.01 ) .and. (abs(bbb(i,j,k)) > 1.0e-14 )) write(*,*) bbb(i,j,k), fxyz
end do
end do
end do
write(*,*) "relerr_min_max", minval(ccc), maxval(ccc)
write(*,*) "test ddz_ref"
call ETIME(startt, result)
call ddz_ref(bbb, aaa)
call ETIME(endt, result)
print *, "usert", endt(1) - startt(1)
print *, "systt", endt(2) - startt(2)
do k = 1,nzp
do j = 1,nyp
do i = nxp/4,3*nxp/4
xx = i * hxp
yy = j * hyp
zz = k * hzp
fxyz = (2.0 * sin(1.1 * xx) * sin(3.0 * yy) * cos(2.0 * zz))
ccc(i,j,k) = (bbb(i,j,k) - fxyz) / (fxyz)
if ((abs(ccc(i,j,k)) > 0.01 ) .and. (abs(bbb(i,j,k)) > 1.0e-14 )) write(*,*) bbb(i,j,k), fxyz
end do
end do
end do
write(*,*) "relerr_min_max", minval(ccc), maxval(ccc)
write(*,*) "test d2dx"
call ETIME(startt, result)
call d2dx(bbb, aaa)
call ETIME(endt, result)
print *, "usert", endt(1) - startt(1)
print *, "systt", endt(2) - startt(2)
do k = 1,nzp
do j = 1,nyp
do i = nxp/4,3*nxp/4
xx = i * hxp
yy = j * hyp
zz = k * hzp
fxyz = -(1.21 * sin(1.1 * xx) * sin(3.0 * yy) * sin(2.0 * zz))
ccc(i,j,k) = (bbb(i,j,k) - fxyz) / (fxyz)
if ((abs(ccc(i,j,k)) > 0.01 ) .and. (abs(fxyz) > 1.0e-14 )) write(*,*) bbb(i,j,k), fxyz
end do
end do
end do
write(*,*) "relerr_min_max", minval(ccc), maxval(ccc)
write(*,*) "test d2dy"
call ETIME(startt, result)
call d2dy(bbb, aaa)
call ETIME(endt, result)
print *, "usert", endt(1) - startt(1)
print *, "systt", endt(2) - startt(2)
do k = 1,nzp
do j = 1,nyp
do i = nxp/4,3*nxp/4
xx = i * hxp
yy = j * hyp
zz = k * hzp
fxyz = -(9.0 * sin(1.1 * xx) * sin(3.0 * yy) * sin(2.0 * zz))
ccc(i,j,k) = (bbb(i,j,k) - fxyz) / (fxyz)
if ((abs(ccc(i,j,k)) > 0.01 ) .and. (abs(fxyz) > 1.0e-14 )) write(*,*) bbb(i,j,k), fxyz
end do
end do
end do
write(*,*) "relerr_min_max", minval(ccc), maxval(ccc)
write(*,*) "test d2dz"
call ETIME(startt, result)
call d2dz(bbb, aaa)
call ETIME(endt, result)
print *, "usert", endt(1) - startt(1)
print *, "systt", endt(2) - startt(2)
do k = 1,nzp
do j = 1,nyp
do i = nxp/4,3*nxp/4
xx = i * hxp
yy = j * hyp
zz = k * hzp
fxyz = -(4.0 * sin(1.1 * xx) * sin(3.0 * yy) * sin(2.0 * zz))
ccc(i,j,k) = (bbb(i,j,k) - fxyz) / (fxyz)
if ((abs(ccc(i,j,k)) > 0.01 ) .and. (abs(fxyz) > 1.0e-14 )) write(*,*) bbb(i,j,k), fxyz
end do
end do
end do
write(*,*) "relerr_min_max", minval(ccc), maxval(ccc)
write(*,*) "test d2dz_ref"
call ETIME(startt, result)
call d2dz_ref(bbb, aaa)
call ETIME(endt, result)
print *, "usert", endt(1) - startt(1)
print *, "systt", endt(2) - startt(2)
do k = 1,nzp
do j = 1,nyp
do i = nxp/4,3*nxp/4
xx = i * hxp
yy = j * hyp
zz = k * hzp
fxyz = -(4.0 * sin(1.1 * xx) * sin(3.0 * yy) * sin(2.0 * zz))
ccc(i,j,k) = (bbb(i,j,k) - fxyz) / (fxyz)
if ((abs(ccc(i,j,k)) > 0.01 ) .and. (abs(fxyz) > 1.0e-14 )) write(*,*) bbb(i,j,k), fxyz
end do
end do
end do
write(*,*) "relerr_min_max", minval(ccc), maxval(ccc)
call m_calculate_finalize
deallocate(aaa)
deallocate(bbb)
deallocate(ccc)
deallocate(ddd)
end program