improved performance

This commit is contained in:
Jukka Aho
2015-12-04 07:27:40 +02:00
parent b5c0e09a18
commit 4b07da194a
9 changed files with 48 additions and 21 deletions
+8 -2
View File
@@ -290,7 +290,8 @@ end
function Base.call(basis::CVTI, geometry::DVTI, xi::Vector, ::Type{Val{:grad}})
dbasis = basis(xi, Val{:grad})
J = sum([dbasis[:,i]*geometry[i]' for i=1:length(geometry)])
# J = sum([dbasis[:,i]*geometry[i]' for i=1:length(geometry)])
J = sum([kron(dbasis[:,i], geometry[i]') for i=1:length(geometry)])
invJ = isa(J, Vector) ? inv(J[1]) : inv(J)
grad = invJ * dbasis
return grad
@@ -298,7 +299,8 @@ end
function Base.call(basis::CVTI, geometry::DVTI, values::DVTI, xi::Vector, ::Type{Val{:grad}})
grad = call(basis, geometry, xi, Val{:grad})
gradf = sum([grad[:,i]*values[i]' for i=1:length(geometry)])'
# gradf = sum([grad[:,i]*values[i]' for i=1:length(geometry)])'
gradf = sum([kron(grad[:,i], values[i]') for i=1:length(values)])'
return length(gradf) == 1 ? gradf[1] : gradf
end
@@ -306,6 +308,10 @@ function Base.call(basis::CVTI, xi::Vector, time::Number)
call(basis, xi)
end
function Base.(:*)(grad::Matrix{Float64}, field::DVTI)
return sum([kron(grad[:,i], field[i]') for i=1:length(field)])'
end
### FIELDSET ###
typealias FieldSet Dict{ASCIIString, Field}