-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmultigrid_cycle.f90
More file actions
100 lines (73 loc) · 3.1 KB
/
Copy pathmultigrid_cycle.f90
File metadata and controls
100 lines (73 loc) · 3.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
subroutine multigrid_setup
use basics
implicit none
call optimize_grid(nx,nz,grids,mingrid)
allocate(multi(0:51)) !!max value of nsteps assumed is 50 -- modify of needed
!!!!!!!!! Multigrid cycle definitions
if (grids.eq.2) then
nsteps=2
multi(1:nsteps)=(/ 1,2 /) !!standard V cycle
elseif (grids.eq.3) then
! nsteps=4
! multi(1:nsteps)=(/ 1,2,3,2 /) !!standard V cycle
nsteps=6
multi(1:nsteps)=(/ 1,2,3,2,3,2 /) !!standard W cycle
! nsteps=8
! multi(1:nsteps)=(/ 1,2,3,2,3,2,3,2 /) !!W cycle with extra coarse grid iterations
! nsteps=12
! multi(1:nsteps)=(/ 1,2,3,2,3,2,3,2,3,2,3,2 /) !!W cycle with extra coarse grid iterations
! nsteps=14
! multi(1:nsteps)=(/ 1,2,3,2,3,2,3,2,3,2,3,2,3,2 /) !!W cycle with extra coarse grid iterations
! nsteps=16
! multi(1:nsteps)=(/ 1,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2 /) !!W cycle with extra coarse grid iterations
! nsteps=18
! multi(1:nsteps)=(/ 1,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2 /) !!W cycle with extra coarse grid iterations
! nsteps=20
! multi(1:nsteps)=(/ 1,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2 /) !!W cycle with extra coarse grid iterations
elseif (grids.eq.4) then
! nsteps=6
! multi(1:nsteps)=(/ 1,2,3,4,3,2 /) !!standard V cycle
! nsteps=8
! multi(1:nsteps)=(/ 1,2,3,4,3,4,3,2 /) !!cheap W
! nsteps=10
! multi(1:nsteps)=(/ 1,2,3,4,3,4,3,4,3,2 /) !!cheap W
! nsteps=12
! multi(1:nsteps)=(/ 1,2,3,4,3,4,3,4,3,4,3,2 /) !!cheap W
! nsteps=14
! multi(1:nsteps)=(/ 1,2,3,4,3,4,3,4,3,4,3,4,3,2 /) !!cheap W
! nsteps=12
! multi(1:nsteps)=(/ 1,2,3,4,3,4,3,2,3,4,3,2 /) !!standard F cycle
! nsteps=12
! multi(1:nsteps)=(/ 1,2,3,4,3,2,3,4,3,4,3,2 /) !!backwards F cycle
nsteps=14
multi(1:nsteps)=(/ 1,2,3,4,3,4,3,2,3,4,3,4,3,2 /) !!standard W cycle
! nsteps=16
! multi(1:nsteps)=(/ 1,2,3,4,3,2,3,4,3,4,3,2,3,4,3,2 /) !!weird W
! nsteps=18
! multi(1:nsteps)=(/ 1,2,3,4,3,4,3,4,3,2,3,4,3,4,3,4,3,2 /) !!W cycle with extra coarse grid iterations
! nsteps=26
! multi(1:nsteps)=(/ 1,2,3,4,3,4,3,4,3,2,3,4,3,4,3,4,3,2,3,4,3,4,3,4,3,2 /) !!W cycle with extra coarse grid iterations
elseif (grids.eq.5) then
! nsteps=8
! multi(1:nsteps)=(/ 1,2,3,4,5,4,3,2 /) !!standard V cycle
! nsteps=20
! multi(1:nsteps)=(/ 1,2,3,4,5,4,5,4,3,4,5,4,3,2,3,4,5,4,3,2 /) !!standard F cycle
nsteps=26
multi(1:nsteps)=(/ 1,2,3,4,5,4,5,4,3,4,5,4,3,2,3,4,5,4,3,4,5,4,5,4,3,2 /) !!standard W cycle
! nsteps=44
! multi(1:nsteps)=(/ 1,2,3,4,5,4,5,4,5,4,3,4,5,4,3,4,5,4,3,2,3,4,5,4,3,2,3,4,5,4,3,4,5,4,3,4,5,4,5,4,5,4,3,2 /) !!W cycle with double the coarse grid passes
! nsteps=44
! multi(1:nsteps)=(/ 1,2,3,4,5,4,5,4,3,4,5,4,3,2,3,4,5,4,3,4,5,4,5,4,5,4,3,4,5,4,3,2,3,4,5,4,3,4,5,4,5,4,3,2 /) !!two successive W cycles
elseif (grids.eq.6) then
! nsteps=10
! multi(1:nsteps)=(/ 1,2,3,4,5,6,5,4,3,2 /) !!standard V cycle
! nsteps=30
! multi(1:nsteps)=(/ 1,2,3,4,5,6,5,6,5,4,5,6,5,4,3,4,5,6,5,4,3,2,3,4,5,6,5,4,3,2 /) !!standard F cycle
nsteps=42
multi(1:nsteps)=(/ 1,2,3,4,5,6,5,6,5,4,5,6,5,4,3,4,5,6,5,4,3,2,3,4,5,6,5,4,3,4,5,6,5,4,5,6,5,6,5,4,3,2 /) !!standard W cycle
end if
!!!!!!!!! End Multigrid cycle definitions
multi(0)=multi(nsteps) !!enforce periodicity
multi(nsteps+1)=multi(1)
allocate(residual_mag(1:nsteps))
end