176 CHAPTER 4. NONLINEAR AND 3D MODELS
82. do l = 1,n-1
83. do j= 1,n-1
84. do i = 1,n-1
85. rhat(i,j,l) = w*(r(i,j,l)+rhat(i-1,j,l)&
86. +rhat(i,j-1,l) +rhat(i,j,l-1))*ra
87. end do
88. end do
89. end do
90. rhat(1:n-1,1:n-1,1:n-1) = ((2.-w)/w)*(6.+ac)
*rhat(1:n-1,1:n-1,1:n-1)
91. do l = n-1,1,-1
92. do j= n-1,1,-1
93. do i = n-1,1,-1
94. rhat(i,j,l) = w*(rhat(i,j,l)+rhat(i+1,j,l) &
95. +rhat(i,j+1,l)+rhat(i,j,l+1))*ra
96. end do
97. end do
98. end do
99. ! Find conjugate direction
100. rho = sum(r(1:n-1,1:n-1,1:n-1)*rhat(1:n-1,1:n-1,1:n-1))
101. if (m.eq.1) then
102. p = rhat
103. else
104. p = rhat + (rho/oldrho)*p
105. endif
106. ! Execute matrix product q = Ap
107. q(1:n-1,1:n-1,1:n-1)=(6.0+ac)*p(1:n-1,1:n-1,1:n-1) &
108. -p(0:n-2,1:n-1,1:n-1)-p(2:n,1:n-1,1:n-1) &
109. -p(1:n-1,0:n-2,1:n-1)-p(1:n-1,2:n,1:n-1) &
110. -p(1:n-1,1:n-1,0:n-2)-p(1:n-1,1:n-1,2:n)
111. ! Find steepest descent
112. alpha = rho/sum(p*q)
113. u = u + alpha*p
114. r = r - alpha*q
115. error = maxval(abs(r(1:n-1,1:n-1,1:n-1)))
116. end do
117. mpcg = m
118. print*, m ,error,u(15,15,15),u(15,15,28)
119. do l = 0,30,3
120. do j = 0,30,3
121. write(6,’(11f12.4)’) (u(i,j,l),i=0,30,3)
122. end do
123. end do
124. end subroutine
© 2004 by Chapman & Hall/CRC