Skip to content

Commit 6005579

Browse files
fangjianfangjian
authored andcommitted
replace rk3 and rk4 with time_integration_rk, tested with TGV
1 parent 35f7cb7 commit 6005579

File tree

3 files changed

+219
-190
lines changed

3 files changed

+219
-190
lines changed

miniapps/gradient_solver_3d/1.exe

28.5 KB
Binary file not shown.
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
program main
2+
!
3+
integer :: im=256,jm=256,km=256,hm=3
4+
real(8),parameter :: pi=4.d0*atan(1.0_8)
5+
!
6+
real(8),allocatable,dimension(:,:,:,:) :: x,df,df_ref
7+
real(8),allocatable,dimension(:,:,:) :: f
8+
!
9+
integer :: i,j,k
10+
real(8) :: dx,dy,dz,error(3)
11+
real(8) :: time_beg,time_end
12+
!
13+
allocate(x(0:im,0:jm,0:km,1:3),f(-hm:im+hm,-hm:jm+hm,-hm:km+hm),df(0:im,0:jm,0:km,1:3),df_ref(0:im,0:jm,0:km,1:3))
14+
!
15+
call cpu_time(time_beg)
16+
! initial value
17+
do k=0,km
18+
do j=0,jm
19+
do i=0,im
20+
!
21+
x(i,j,k,1) =2.d0*pi/dble(im)*dble(i)
22+
x(i,j,k,2) =2.d0*pi/dble(jm)*dble(j)
23+
x(i,j,k,3) =2.d0*pi/dble(km)*dble(k)
24+
!
25+
f(i,j,k) = sin(x(i,j,k,1))*cos(x(i,j,k,2))*cos(x(i,j,k,3))
26+
!
27+
df_ref(i,j,k,1) = cos(x(i,j,k,1))*cos(x(i,j,k,2))*cos(x(i,j,k,3))
28+
df_ref(i,j,k,2) = -sin(x(i,j,k,1))*sin(x(i,j,k,2))*cos(x(i,j,k,3))
29+
df_ref(i,j,k,3) = -sin(x(i,j,k,1))*cos(x(i,j,k,2))*sin(x(i,j,k,3))
30+
enddo
31+
enddo
32+
enddo
33+
call cpu_time(time_end)
34+
print*,' ** CPU time for initialisation :',time_end-time_beg
35+
!
36+
dx=x(1,1,1,1)-x(0,0,0,1)
37+
dy=x(1,1,1,2)-x(0,0,0,2)
38+
dz=x(1,1,1,3)-x(0,0,0,3)
39+
!
40+
call cpu_time(time_beg)
41+
! boundary condition
42+
do k=0,km
43+
do j=0,jm
44+
f(-hm:-1,j,k) = f(im-hm:im-1,j,k)
45+
f(im+1:im+hm,j,k) = f(1:hm,j,k)
46+
enddo
47+
enddo
48+
do k=0,km
49+
do i=0,im
50+
f(i,-hm:-1,k) = f(i,jm-hm:jm-1,k)
51+
f(i,jm+1:jm+hm,k) = f(i,1:hm,k)
52+
enddo
53+
enddo
54+
do j=0,jm
55+
do i=0,im
56+
f(i,j,-hm:-1) = f(i,j,km-hm:km-1)
57+
f(i,j,km+1:km+hm) = f(i,j,1:hm)
58+
enddo
59+
enddo
60+
call cpu_time(time_end)
61+
print*,' ** CPU time for boundary condition :',time_end-time_beg
62+
!
63+
call cpu_time(time_beg)
64+
! gradient calculation with 6th-order scheme
65+
!
66+
do k=0,km
67+
do j=0,jm
68+
do i=0,im
69+
df(i,j,k,1) =0.75d0 *(f(i+1,j,k)-f(i-1,j,k))- &
70+
0.15d0 *(f(i+2,j,k)-f(i-2,j,k))+ &
71+
1.66666666666667d-2*(f(i+3,j,k)-f(i-3,j,k))
72+
df(i,j,k,2) =0.75d0 *(f(i,j+1,k)-f(i,j-1,k))- &
73+
0.15d0 *(f(i,j+2,k)-f(i,j-2,k))+ &
74+
1.66666666666667d-2*(f(i,j+3,k)-f(i,j-3,k))
75+
df(i,j,k,3) =0.75d0 *(f(i,j,k+1)-f(i,j,k-1))- &
76+
0.15d0 *(f(i,j,k+2)-f(i,j,k-2))+ &
77+
1.66666666666667d-2*(f(i,j,k+3)-f(i,j,k-3))
78+
enddo
79+
enddo
80+
enddo
81+
df(:,:,:,1)=df(:,:,:,1)/dx
82+
df(:,:,:,2)=df(:,:,:,2)/dy
83+
df(:,:,:,3)=df(:,:,:,3)/dz
84+
!
85+
call cpu_time(time_end)
86+
print*,' ** CPU time for gradient calculation :',time_end-time_beg
87+
!
88+
call cpu_time(time_beg)
89+
! validation
90+
error=0.d0
91+
do k=1,km
92+
do j=1,jm
93+
do i=1,im
94+
!
95+
error(1) = error(1) + (df(i,j,k,1)-df_ref(i,j,k,1))**2
96+
error(2) = error(2) + (df(i,j,k,2)-df_ref(i,j,k,2))**2
97+
error(3) = error(3) + (df(i,j,k,3)-df_ref(i,j,k,3))**2
98+
!
99+
! if(i==1 .and. j==1) print*,'x-y-z:df3',i,j,k,x(i,j,k,:),df(i,j,k,3)
100+
! if(i==1 .and. k==1) print*,'x-y-z:df2',x(i,j,k,:),df(i,j,k,2)
101+
!
102+
enddo
103+
enddo
104+
enddo
105+
error=error/dble(im*jm*km)
106+
!
107+
print*,' ** errors:',error
108+
!
109+
call cpu_time(time_end)
110+
print*,' ** CPU time for validation :',time_end-time_beg
111+
!
112+
print*,' ** job done.'
113+
!
114+
end program
115+
!

0 commit comments

Comments
 (0)