252 lines
4.1 KiB
Fortran
252 lines
4.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
|
|
|
|
character (len=2000) :: input_string
|
|
|
|
call cstr(input_string)
|
|
|
|
write(*,*) input_string
|
|
|
|
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 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)
|
|
|
|
|
|
|
|
|
|
|
|
call m_calculate_finalize
|
|
|
|
|
|
deallocate(aaa)
|
|
deallocate(bbb)
|
|
deallocate(ccc)
|
|
deallocate(ddd)
|
|
|
|
end program
|