Skip to content

Instantly share code, notes, and snippets.

@rleegates
Last active August 29, 2015 14:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rleegates/2d99e6251fe246b017ac to your computer and use it in GitHub Desktop.
Save rleegates/2d99e6251fe246b017ac to your computer and use it in GitHub Desktop.
Element stiffness benchmark
function keTestVec(N::Int64, gradN::Array{Float64,2}, kappa::Array{Float64,2}, keDim::Int64, sdim::Int64)
ke = zeros(Float64,keDim,keDim)
detJ = 1.0
w = 1.0/2.0
for n = 1:N
fill!(ke,0.0)
ke += (w*detJ).*(gradN*kappa*gradN')
end
return ke
end
function keTestDeVec(N::Int64, gradN::Array{Float64,2}, kappa::Array{Float64,2}, keDim::Int64, sdim::Int64)
ke = zeros(Float64,keDim,keDim)
detJ = 1.0
w = 1.0/2.0
preFac = 0.0
for n = 1:N
fill!(ke,0.0)
preFac = w*detJ
for i = 1:keDim
for l = 1:keDim
for j = 1:sdim
for k = 1:sdim
ke[i,l] = ke[i,l] + gradN[i,j]*kappa[j,k]*gradN[l,k]
end
end
ke[i,l] = preFac*ke[i,l]
end
end
end
return ke
end
function keTestDeVecInbounds(N::Int64, gradN::Array{Float64,2}, kappa::Array{Float64,2}, keDim::Int64, sdim::Int64)
ke = zeros(Float64,keDim,keDim)
detJ = 1.0
w = 1.0/2.0
preFac = 0.0
for n = 1:N
fill!(ke,0.0)
preFac = w*detJ
for i = 1:keDim
for l = 1:keDim
for j = 1:sdim
for k = 1:sdim
@inbounds ke[i,l] = ke[i,l] + gradN[i,j]*kappa[j,k]*gradN[l,k]
end
end
ke[i,l] = preFac*ke[i,l]
end
end
end
return ke
end
function keTest(N::Int64)
keDim = 3
sdim = 2
kappa = rand(Float64,sdim,sdim)
kappa = kappa+kappa'
gradN = rand(Float64,keDim,sdim)
println("Vectorized:")
@time ke1 = keTestVec(N, gradN, kappa, keDim, sdim)
println("DeVectorized:")
@time ke2 = keTestDeVec(N, gradN, kappa, keDim, sdim)
println("DeVectorized InBounds:")
@time ke3 = keTestDeVecInbounds(N, gradN, kappa, keDim, sdim)
println("Error norm deVec: $(1-norm(ke2./ke1)/keDim)")
println("Error norm inBnd: $(1-norm(ke3./ke1)/keDim)")
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment