Skip to content

Commit f68aed4

Browse files
committed
2 parents 2ebaf9e + 72a5956 commit f68aed4

2 files changed

Lines changed: 116 additions & 5 deletions

File tree

src/Models/Material/Material_Basis.jl

Lines changed: 111 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -173,17 +173,42 @@ function get_all_elastic_moduli(parameter::Union{Dict{Any,Any},Dict{String,Any}}
173173
poissons = true
174174
end
175175
if haskey(parameter, "Symmetry")
176-
if occursin("anisotropic", lowercase(parameter["Symmetry"]))
176+
symmetry = lowercase(parameter["Symmetry"])
177+
if occursin("anisotropic", symmetry)
177178
for iID in 1:6
178179
for jID in iID:6
179-
if !("C" * string(iID) * string(jID) in keys(parameter))
180+
if !haskey(parameter, "C" * string(iID) * string(jID))
180181
@error "C" * string(iID) * string(jID) * " not defined"
181182
return nothing
182183
end
183184
end
184185
end
185186
return
186-
elseif occursin("orthotropic", lowercase(parameter["Symmetry"]))
187+
elseif occursin("transverse isotropic", symmetry)
188+
E_x = haskey(parameter, "Young's Modulus X")
189+
E_y = haskey(parameter, "Young's Modulus Y")
190+
nu_xy = haskey(parameter, "Poisson's Ratio XY")
191+
nu_yz = haskey(parameter, "Poisson's Ratio YZ")
192+
g_xy = haskey(parameter, "Shear Modulus XY")
193+
g_yz = haskey(parameter, "Shear Modulus YZ")
194+
if occursin("plane strain", symmetry)
195+
if !E_x || !E_y || !nu_xy || !nu_yz || !g_xy
196+
@error "Transverse isotropic material requires Young's Modulus X, Y, Poisson's Ratio XY, YZ, Shear Modulus XY"
197+
return nothing
198+
end
199+
elseif occursin("plane stress", symmetry)
200+
if !E_x || !E_y || !nu_xy || !g_xy
201+
@error "Transverse isotropic material requires Young's Modulus X, Y, Poisson's Ratio XY, Shear Modulus XY"
202+
return nothing
203+
end
204+
else
205+
if !E_x || !E_y || !nu_xy || !nu_yz || !g_xy || !g_yz
206+
@error "Transverse isotropic material requires Young's Modulus X, Y, Poisson's Ratio XY, YZ, Shear Modulus XY, YZ"
207+
return nothing
208+
end
209+
end
210+
return
211+
elseif occursin("orthotropic", symmetry)
187212
E_x = haskey(parameter, "Young's Modulus X")
188213
E_y = haskey(parameter, "Young's Modulus Y")
189214
E_z = haskey(parameter, "Young's Modulus Z")
@@ -276,7 +301,8 @@ function get_Hooke_matrix(parameter::Dict,
276301
symmetry::String,
277302
dof::Int64,
278303
ID::Int64 = 1)
279-
"""https://www.efunda.com/formulae/solid_mechanics/mat_mechanics/hooke_plane_stress.cfm"""
304+
"""https://www.efunda.com/formulae/solid_mechanics/mat_mechanics/hooke_plane_stress.cfm
305+
https://de.wikipedia.org/wiki/Transversale_Isotropie"""
280306

281307
symmetry = lowercase(symmetry)
282308
if occursin("anisotropic", symmetry)
@@ -328,6 +354,86 @@ function get_Hooke_matrix(parameter::Dict,
328354
aniso_matrix[6, 6] = 2 * g_xy
329355

330356
return get_2D_Hooke_matrix(aniso_matrix, symmetry, dof)
357+
elseif occursin("transverse isotropic", symmetry)
358+
if dof == 3
359+
aniso_matrix = get_MMatrix(36)
360+
361+
E_x = get_dependent_value("Young's Modulus X", parameter, ID)
362+
E_y = get_dependent_value("Young's Modulus Y", parameter, ID)
363+
nu_xy = get_dependent_value("Poisson's Ratio XY", parameter, ID)
364+
nu_yz = get_dependent_value("Poisson's Ratio YZ", parameter, ID)
365+
g_xy = get_dependent_value("Shear Modulus XY", parameter, ID)
366+
g_yz = get_dependent_value("Shear Modulus YZ", parameter, ID)
367+
368+
nu_yx = nu_xy * E_y / E_x
369+
370+
delta = ((nu_xy * nu_yx + nu_yz) /
371+
((1 - nu_yz - 2 * nu_xy * nu_yx) * (1 + nu_yz))) *
372+
E_y
373+
374+
aniso_matrix[1, 1] = ((1 - nu_yz) / (1 - nu_yz - 2 * nu_xy * nu_yx)) * E_x
375+
aniso_matrix[2, 2] = delta + 2 * g_yz
376+
377+
aniso_matrix[1, 2] = 2 * nu_xy * (delta + g_yz)
378+
aniso_matrix[2, 1] = aniso_matrix[1, 2]
379+
380+
aniso_matrix[1, 3] = aniso_matrix[1, 2]
381+
aniso_matrix[3, 1] = aniso_matrix[1, 2]
382+
383+
aniso_matrix[2, 3] = delta
384+
aniso_matrix[3, 2] = delta
385+
386+
aniso_matrix[3, 3] = delta + 2 * g_yz
387+
388+
aniso_matrix[4, 4] = 2 * g_yz
389+
aniso_matrix[5, 5] = 2 * g_xy
390+
aniso_matrix[6, 6] = 2 * g_xy
391+
392+
return aniso_matrix
393+
elseif occursin("plane strain", symmetry)
394+
aniso_matrix = get_MMatrix(9)
395+
396+
E_x = get_dependent_value("Young's Modulus X", parameter, ID)
397+
E_y = get_dependent_value("Young's Modulus Y", parameter, ID)
398+
nu_xy = get_dependent_value("Poisson's Ratio XY", parameter, ID)
399+
nu_yz = get_dependent_value("Poisson's Ratio YZ", parameter, ID)
400+
g_xy = get_dependent_value("Shear Modulus XY", parameter, ID)
401+
402+
nu_yx = nu_xy * E_y / E_x
403+
D = (1 + nu_yz) * (1 - nu_yz - 2 * nu_xy * nu_yx)
404+
405+
aniso_matrix[1, 1] = ((1 - nu_yz * nu_yz) / D) * E_x
406+
aniso_matrix[2, 2] = ((1 - nu_yx * nu_xy) / D) * E_y
407+
408+
aniso_matrix[1, 2] = ((nu_yx * (1 + nu_yz)) / D) * E_x
409+
aniso_matrix[2, 1] = ((nu_xy * (1 + nu_yz)) / D) * E_y
410+
411+
aniso_matrix[3, 3] = 2 * g_xy
412+
413+
return aniso_matrix
414+
elseif occursin("plane stress", symmetry)
415+
aniso_matrix = get_MMatrix(9)
416+
417+
E_x = get_dependent_value("Young's Modulus X", parameter, ID)
418+
E_y = get_dependent_value("Young's Modulus Y", parameter, ID)
419+
nu_xy = get_dependent_value("Poisson's Ratio XY", parameter, ID)
420+
g_xy = get_dependent_value("Shear Modulus XY", parameter, ID)
421+
422+
nu_yx = nu_xy * E_y / E_x
423+
424+
aniso_matrix[1, 1] = E_x / (1 - nu_xy * nu_yx)
425+
aniso_matrix[2, 2] = E_y / (1 - nu_xy * nu_yx)
426+
427+
aniso_matrix[1, 2] = (nu_yx * E_x) / (1 - nu_xy * nu_yx)
428+
aniso_matrix[2, 1] = (nu_xy * E_y) / (1 - nu_xy * nu_yx)
429+
430+
aniso_matrix[3, 3] = 2 * g_xy
431+
432+
return aniso_matrix
433+
else
434+
@error "2D model defintion is missing; plane stress or plane strain "
435+
return nothing
436+
end
331437
end
332438

333439
iID = ID
@@ -403,7 +509,7 @@ function get_2D_Hooke_matrix(aniso_matrix::MMatrix{T}, symmetry::String,
403509
matrix[3, 3] = aniso_matrix[6, 6]
404510
return matrix
405511
elseif occursin("plane stress", symmetry)
406-
invert(inv_aniso, aniso_matrix, "Hooke matrix not invertable")
512+
inv_aniso = invert(aniso_matrix, "Hooke matrix not invertable")
407513
matrix = get_MMatrix(36)
408514
matrix[1:2, 1:2] = inv_aniso[1:2, 1:2]
409515
matrix[3, 1:2] = inv_aniso[6, 1:2]

src/Models/Model_Factory.jl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -709,6 +709,8 @@ function compute_crititical_time_step(block_nodes::Dict{Int64,Vector{Int64}},
709709
E_x = Data_Manager.get_property(iblock, "Material Model", "Young's Modulus X")
710710
E_y = Data_Manager.get_property(iblock, "Material Model", "Young's Modulus Y")
711711
E_z = Data_Manager.get_property(iblock, "Material Model", "Young's Modulus Z")
712+
g_xy = Data_Manager.get_property(iblock, "Material Model", "Shear Modulus XY")
713+
g_yz = Data_Manager.get_property(iblock, "Material Model", "Shear Modulus YZ")
712714
c_44 = Data_Manager.get_property(iblock, "Material Model", "C44")
713715
c_55 = Data_Manager.get_property(iblock, "Material Model", "C55")
714716
c_66 = Data_Manager.get_property(iblock, "Material Model", "C66")
@@ -725,6 +727,9 @@ function compute_crititical_time_step(block_nodes::Dict{Int64,Vector{Int64}},
725727
elseif !isnothing(c_44) && !isnothing(c_55) && !isnothing(c_66)
726728
bulk_modulus = maximum([c_44 / 2, c_55 / 2, c_66 / 2])
727729
#TODO: temporary solution!!!
730+
elseif !isnothing(g_xy)
731+
bulk_modulus = g_xy / 2
732+
#TODO: temporary solution!!!
728733
else
729734
@error "No time step for material is determined because of missing properties."
730735
return nothing

0 commit comments

Comments
 (0)