src/Gradient.jl

changeset 4
5c0f579a5d0f
parent 0
eef71dd7202b
child 5
29b38780d52b
equal deleted inserted replaced
3:957b62860ab4 4:5c0f579a5d0f
9 ############## 9 ##############
10 10
11 export ∇₂!, ∇₂ᵀ!, ∇₂fold!, 11 export ∇₂!, ∇₂ᵀ!, ∇₂fold!,
12 ∇₂_norm₂₂_est, ∇₂_norm₂₂_est², 12 ∇₂_norm₂₂_est, ∇₂_norm₂₂_est²,
13 ∇₂_norm₂∞_est, ∇₂_norm₂∞_est², 13 ∇₂_norm₂∞_est, ∇₂_norm₂∞_est²,
14 ∇₂c!, 14 ∇₂c!, ∇₂cfold!,
15 ∇₃!, ∇₃ᵀ!, 15 ∇₃!, ∇₃ᵀ!,
16 vec∇₃!, vec∇₃ᵀ! 16 vec∇₃!, vec∇₃ᵀ!
17 17
18 ################## 18 ##################
19 # Helper routines 19 # Helper routines
127 v[2, :, end] = (u[:, end] - u[:, end-1])/2 127 v[2, :, end] = (u[:, end] - u[:, end-1])/2
128 v[2, :, 1] = (u[:, 2] - u[:, 1])/2 128 v[2, :, 1] = (u[:, 2] - u[:, 1])/2
129 end 129 end
130 end 130 end
131 131
132 @inline function ∇₂cfold!(f!::Function, u, state)
133 n, m = size(u)
134 g! = (state, pt) -> begin
135 (i, j) = pt
136 g = @inbounds [(u[i+1, j]-u[i-1, j])/2, (u[i, j+1]-u[i, j-1])/2]
137 return f!(g, state, pt)
138 end
139 gb! = (state, pt) -> begin
140 (i, j) = pt
141 g = @inbounds [(u[min(i+1,n), j]-u[max(i-1,1), j])/2,
142 (u[i, min(j+1,m)]-u[i, max(j-1,1)])/2]
143 return f!(g, state, pt)
144 end
145 return imfold₂′!(gb!, gb!, gb!,
146 gb!, g!, gb!,
147 gb!, gb!, gb!,
148 size(u, 1), size(u, 2), state)
149 end
150
132 ######################### 151 #########################
133 # 3D forward differences 152 # 3D forward differences
134 ######################### 153 #########################
135 154
136 function ∇₃!(u₁,u₂,u₃,u) 155 function ∇₃!(u₁,u₂,u₃,u)

mercurial