@@ -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 ]
0 commit comments