Source code for Muscat.IO.AnsysTools
# -*- coding: utf-8 -*-
#
# This file is subject to the terms and conditions defined in
# file 'LICENSE.txt', which is part of this source code package.
#
"""Ansys tools
"""
import Muscat.MeshContainers.ElementsDescription as ED
# for i in range(35): print(i, dpf.element_types.descriptor(i ).name)
AnsysElementDescriptorToMuscatElementType = {}
AnsysElementDescriptorToMuscatElementType[0] = ED.Tetrahedron_10
AnsysElementDescriptorToMuscatElementType[1] = ED.Hexahedron_20
AnsysElementDescriptorToMuscatElementType[2] = ED.Wedge_15
AnsysElementDescriptorToMuscatElementType[3] = ED.Pyramid_13
AnsysElementDescriptorToMuscatElementType[4] = ED.Triangle_6
AnsysElementDescriptorToMuscatElementType[5] = ED.Triangle_6
AnsysElementDescriptorToMuscatElementType[6] = ED.Quadrangle_8
AnsysElementDescriptorToMuscatElementType[7] = ED.Quadrangle_8
AnsysElementDescriptorToMuscatElementType[8] = ED.Bar_3
AnsysElementDescriptorToMuscatElementType[9] = ED.Point_1
AnsysElementDescriptorToMuscatElementType[10] = ED.Tetrahedron_4
AnsysElementDescriptorToMuscatElementType[11] = ED.Hexahedron_8
AnsysElementDescriptorToMuscatElementType[12] = ED.Wedge_6
AnsysElementDescriptorToMuscatElementType[13] = ED.Pyramid_5
AnsysElementDescriptorToMuscatElementType[14] = ED.Triangle_3
AnsysElementDescriptorToMuscatElementType[15] = ED.Triangle_3
AnsysElementDescriptorToMuscatElementType[16] = ED.Quadrangle_4
AnsysElementDescriptorToMuscatElementType[17] = ED.Quadrangle_4
AnsysElementDescriptorToMuscatElementType[18] = ED.Bar_2
AnsysElementDescriptorToMuscatElementType[28] = ED.Bar_2
AnsysElementDescriptorToMuscatElementType[29] = ED.Bar_3
AnsysElementNameToMuscatElementType = {}
AnsysElementNameToMuscatElementType['point1'] = ED.Point_1
AnsysElementNameToMuscatElementType['bar2'] = ED.Bar_2
AnsysElementNameToMuscatElementType['bar3'] = ED.Bar_3
AnsysElementNameToMuscatElementType['quad4'] = ED.Quadrangle_4
AnsysElementNameToMuscatElementType['quad8'] = ED.Quadrangle_8
AnsysElementNameToMuscatElementType['quad9'] = ED.Quadrangle_9
AnsysElementNameToMuscatElementType['tri3'] = ED.Triangle_3
AnsysElementNameToMuscatElementType['tri6'] = ED.Triangle_6
AnsysElementNameToMuscatElementType['tet4'] = ED.Tetrahedron_4
AnsysElementNameToMuscatElementType['pyr5'] = ED.Pyramid_5
AnsysElementNameToMuscatElementType['pyr13'] = ED.Pyramid_13
AnsysElementNameToMuscatElementType['pyr14'] = ED.Pyramid_14
AnsysElementNameToMuscatElementType['wed6'] = ED.Wedge_6
AnsysElementNameToMuscatElementType['wed18'] = ED.Wedge_18
AnsysElementNameToMuscatElementType['wed15'] = ED.Wedge_15
AnsysElementNameToMuscatElementType['hex8'] = ED.Hexahedron_8
AnsysElementNameToMuscatElementType['tet10'] = ED.Tetrahedron_10
AnsysElementNameToMuscatElementType['hex20'] = ED.Hexahedron_20
AnsysElementNameToMuscatElementType['hex27'] = ED.Hexahedron_27
# conversion from Muscat Element to Ansys Finite Element
MuscatToAnsysFormulation = {}
solid3D = {}
solid3D[ED.Tetrahedron_4] = "185" # SOLID185
solid3D[ED.Hexahedron_8] = "185" # SOLID185
solid3D[ED.Hexahedron_20] = "186" # SOLID186
solid3D[ED.Tetrahedron_10] = "187" # SOLID187
MuscatToAnsysFormulation["SOLID3D"] = solid3D
solid2D = {}
solid2D[ED.Quadrangle_4] = "182" # PLANE182
solid2D[ED.Triangle_3] = "182" # PLANE182
solid2D[ED.Quadrangle_8] = "183" # PLANE183
solid2D[ED.Triangle_6] = "183" # PLANE183
MuscatToAnsysFormulation["SOLID2D"] = solid2D
# The integration point data is treated as copy to nodes per element
nbIntegrationsPoints = {}
for k, v in ED.numberOfNodes.items():
nbIntegrationsPoints[k] = v
nbIntegrationsPoints["Hex20"] = 8
nbIntegrationsPoints["Tet10"] = 4
nbIntegrationsPoints["Tet4"] = 4
nbIntegrationsPoints["Tri6"] = 3
nbIntegrationsPoints["Hex8"] = 8
nbIntegrationsPoints["c3d20"] = 8
nbIntegrationsPoints["c3d10"] = 4
nbIntegrationsPoints["c2d6"] = 3
nbIntegrationsPoints["c3d8"] = 8
ElementType_from_MAPDL_to_DPF = {}
# 2D
ElementType_from_MAPDL_to_DPF["154"] = "quad8"
ElementType_from_MAPDL_to_DPF["281"] = "tri6"
# 3D
ElementType_from_MAPDL_to_DPF["281"] = "tri6"
ElementType_from_MAPDL_to_DPF["187"] = "tet10"
ElementType_from_MAPDL_to_DPF["186"] = "hex20"
# eto is the total strain while EPEL is the elastic.
# Ansys does not gives total strain. This must bo fixed in next version
ZsetToAnsys_varialble = {}
ZsetToAnsys_varialble["sig11"] = "SX"
ZsetToAnsys_varialble["sig22"] = "SY"
ZsetToAnsys_varialble["sig33"] = "SZ"
ZsetToAnsys_varialble["sig12"] = "SXY"
ZsetToAnsys_varialble["sig23"] = "SYZ"
ZsetToAnsys_varialble["sig31"] = "SXZ"
ZsetToAnsys_varialble["eel11"] = "EPELX"
ZsetToAnsys_varialble["eel22"] = "EPELY"
ZsetToAnsys_varialble["eel33"] = "EPELZ"
ZsetToAnsys_varialble["eel12"] = "EPELXY"
ZsetToAnsys_varialble["eel23"] = "EPELYZ"
ZsetToAnsys_varialble["eel31"] = "EPELXZ"
ZsetToAnsys_varialble["RU1"] = "RFX"
ZsetToAnsys_varialble["RU2"] = "RFY"
ZsetToAnsys_varialble["RU3"] = "RFZ"
ZsetToAnsys_varialble["BFE"] = "temperature"
ZsetToAnsys_varialble["eto11"] = "EPPLX"
ZsetToAnsys_varialble["eto22"] = "EPPLY"
ZsetToAnsys_varialble["eto33"] = "EPPLZ"
ZsetToAnsys_varialble["eto12"] = "EPPLXY"
ZsetToAnsys_varialble["eto23"] = "EPPLYZ"
ZsetToAnsys_varialble["eto31"] = "EPPLXZ"
AnsysToZset_Variable = {}
for key, value in ZsetToAnsys_varialble.items():
AnsysToZset_Variable[value] = key
AnsysDatToMuscatPermutation = {}
AnsysDatToMuscatPermutation[ED.Tetrahedron_10] = [2, 0, 1, 3, 6, 4, 5, 9, 7, 8]
[docs]
def CheckIntegrity():
return "OK"