@@ -251,9 +251,9 @@ function _solve_local_sarcomere_dQdF(dQdλ, dλdF, λ, F, coefficients, active_t
251251end
252252
253253function solve_local_constraint (F:: Tensor{2,dim} , coefficients, material_model:: ActiveStressModel , state_cache:: GenericFirstOrderRateIndependentCondensationMaterialStateCache , geometry_cache, qp, time) where dim
254+ Qflat, Qprevflat = _query_local_state (state_cache, geometry_cache, qp)
254255 # Early out if any of the previous local solves failed
255256 if state_cache. local_solver_cache. retcode ∉ (SciMLBase. ReturnCode. Default, SciMLBase. ReturnCode. Success)
256- Qflat, _ = _query_local_state (state_cache, geometry_cache, qp)
257257 return Qflat, zero (Tensor{4 ,dim,Float64,4 ^ dim})
258258 end
259259
@@ -310,11 +310,9 @@ function solve_local_constraint(F::Tensor{2,dim}, coefficients, material_model::
310310 return Q, J
311311 end
312312
313- Qflat, Qprevflat = _query_local_state (state_cache, geometry_cache, qp)
314313 Q, J = solve_internal_timestep (material_model, state_cache, λ, dλdt, Qflat, Qprevflat)
315314 # Abort if local solve failed
316315 if state_cache. local_solver_cache. retcode ∉ (SciMLBase. ReturnCode. Default, SciMLBase. ReturnCode. Success)
317- Qflat, _ = _query_local_state (state_cache, geometry_cache, qp)
318316 return Qflat, zero (Tensor{4 ,dim,Float64,4 ^ dim})
319317 end
320318 Qflat .= Q
@@ -336,13 +334,14 @@ function solve_local_constraint(F::Tensor{2,dim}, coefficients, material_model::
336334end
337335
338336# Some debug materials
339- Base. @kwdef struct LinearMaxwellMaterial{T} <: AbstractMaterialModel
337+ Base. @kwdef struct LinearMaxwellMaterial{T, sdim } <: AbstractMaterialModel
340338 E₀:: T
341339 E₁:: T
342340 μ:: T
343341 η₁:: T
344342 ν:: T
345343end
344+ LinearMaxwellMaterial (E₀:: T , Eₗ:: T , μ:: T , η₁:: T , ν:: T ) where T = LinearMaxwellMaterial {T,3} (E₀, Eₗ, μ, η₁, ν)
346345
347346local_function_size (model:: QuasiStaticModel ) = local_function_size (model. material_model)
348347function local_function_size (model:: AbstractMaterialModel )
@@ -452,7 +451,7 @@ function stress_function(material::LinearMaxwellMaterial, ε, coefficients, ε
452451 return E₀ * ℂ ⊡ ε + E₁ * ℂ ⊡ (ε - εᵛ)
453452end
454453
455- function stress_and_tangent (material_model:: LinearMaxwellMaterial , F:: Tensor{2} , coefficients, εᵛ)
454+ function stress_and_tangent (material_model:: LinearMaxwellMaterial , F:: Tensor{2} , coefficients, εᵛ:: SymmetricTensor{2} )
456455 ε = symmetric (F - one (F))
457456 ∂σ∂ε, σ = Tensors. gradient (ε-> stress_function (material_model, ε, coefficients, εᵛ), ε, :all )
458457 return σ, ∂σ∂ε
@@ -463,9 +462,13 @@ function setup_coefficient_cache(m::LinearMaxwellMaterial, qr::QuadratureRule, s
463462end
464463
465464function setup_internal_cache (material_model:: LinearMaxwellMaterial , qr:: QuadratureRule , sdh:: SubDofHandler )
466- return nothing # FIXME what should we do here? : )
465+ return EmptyRateIndependentCondensationMaterialStateCache ( )
467466end
468467
469- function gather_internal_variable_infos (model:: LinearMaxwellMaterial )
470- return InternalVariableInfo (:εᵛ , 6 ) # TODO dimension info
468+ function gather_internal_variable_infos (model:: LinearMaxwellMaterial{T, sdim} ) where {T, sdim}
469+ if sdim == 3
470+ return InternalVariableInfo (:εᵛ , 6 )
471+ else
472+ return InternalVariableInfo (:εᵛ , 4 )
473+ end
471474end
0 commit comments