Skip to content

Commit

Permalink
Add logging of error when converting general beam to Beam object usin…
Browse files Browse the repository at this point in the history
…g convert fem to obj.

minor change to abaqus read grab_init_props
  • Loading branch information
Krande committed Mar 26, 2021
1 parent 3c2115c commit f524aca
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 35 deletions.
4 changes: 4 additions & 0 deletions src/ada/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -482,6 +482,10 @@ def elem_to_beam(elem, parent):
e1 = ecc
if no.id == n2.id:
e2 = ecc

if elem.fem_sec.section.type == 'GENBEAM':
logging.error(f'Beam elem {elem.id} uses a GENBEAM which might not represent an actual cross section')

return Beam(
f"bm{elem.id}",
n1,
Expand Down
90 changes: 55 additions & 35 deletions src/ada/fem/io/abaqus/reader.py
Original file line number Diff line number Diff line change
Expand Up @@ -267,16 +267,18 @@ def grab_init_props(m):
props = [sort_props(line) for line in bcs.splitlines()]
set_name, dofs, magn = list(zip(*props))
fem_set = None
if set_name[0] in assembly.fem.elsets.keys():
fem_set = assembly.fem.elsets[set_name[0]]
elif set_name[0] in assembly.fem.nsets.keys():
fem_set = assembly.fem.nsets[set_name[0]]
set_name_up = set_name[0]
if set_name_up in assembly.fem.elsets.keys():
fem_set = assembly.fem.elsets[set_name_up]
elif set_name_up in assembly.fem.nsets.keys():
fem_set = assembly.fem.nsets[set_name_up]
else:
for p in assembly.get_all_parts_in_assembly():
if set_name[0] in p.fem.elsets.keys():
fem_set = p.fem.elsets[set_name[0]]
if set_name_up in p.fem.elsets.keys():
fem_set = p.fem.elsets[set_name_up]
if fem_set is None:
raise ValueError(f'Unable to find fem set "{set_name[0]}"')

return PredefinedField(bc_name, bc_type, fem_set, dofs, magn, parent=assembly.fem)

for match in re.finditer(re_str, bulk_str, _re_in):
Expand Down Expand Up @@ -562,12 +564,19 @@ def grab_elements(match):
)


def get_sections_from_inp(bulk_str, parent):
iter_beams = get_beam_sections_from_inp(bulk_str, parent)
iter_shell = get_shell_sections_from_inp(bulk_str, parent)
iter_solid = get_solid_sections_from_inp(bulk_str, parent)
def get_sections_from_inp(bulk_str, fem):
"""
return FemSections(chain.from_iterable([iter_beams, iter_shell, iter_solid]), parent)
:param bulk_str:
:param fem:
:type fem: ada.fem.FEM
:return:
"""
iter_beams = get_beam_sections_from_inp(bulk_str, fem)
iter_shell = get_shell_sections_from_inp(bulk_str, fem)
iter_solid = get_solid_sections_from_inp(bulk_str, fem)

return FemSections(chain.from_iterable([iter_beams, iter_shell, iter_solid]), fem)


def get_sets_from_bulk(bulk_str, fem):
Expand Down Expand Up @@ -609,7 +618,7 @@ def get_parent_instance(instance):
raise ValueError(f'Unable to find instance "{instance}" amongst assembly parts')

def get_set(match):
name = match.group(2).upper()
name = match.group(2)
set_type = match.group(1)
internal = True if match.group(3) is not None else False
instance = match.group(4)
Expand Down Expand Up @@ -692,23 +701,23 @@ def get_dofs(content):
magn = None if len(magn) == 0 else magn
return set_name, dofs, magn

def get_set(part_instance_name, set_name):
def get_nset(part_instance_name, set_name):
for p in fem.parent.parts.values():
if p.fem.instance_name == part_instance_name:
return p.fem.nsets[set_name]
return p.fem.sets.get_nset_from_name(set_name)

def get_bc(match):
d = match.groupdict()
bc_name = d["name"] if d["name"] is not None else next(bc_counter)
bc_type = d["type"]
set_name, dofs, magn = get_dofs(d["content"])
set_name = set_name.upper()

if "." in set_name:
part_instance_name, set_name = set_name.split(".")
fem_set = get_set(part_instance_name, set_name)
fem_set = get_nset(part_instance_name, set_name)
else:
if set_name in fem.nsets.keys():
fem_set = fem.nsets[set_name]
fem_set = fem.sets.get_nset_from_name(set_name)
else:
val = str_to_int(set_name)
if val in fem.nodes.dmap.keys():
Expand Down Expand Up @@ -831,7 +840,7 @@ def interpret_member(mem):
else:
weight_factor = None
face_id_label = set_id_ref
fem_set = parent.elsets[set_ref]
fem_set = parent.sets.get_elset_from_name(set_ref)
else:
fem_set = None
weight_factor = None
Expand Down Expand Up @@ -1052,10 +1061,14 @@ def get_connectors_from_inp(bulk_str, fem):
return cons


def get_beam_sections_from_inp(bulk_str, parent):
def get_beam_sections_from_inp(bulk_str, fem):
"""
https://abaqus-docs.mit.edu/2017/English/SIMACAEELMRefMap/simaelm-c-beamcrosssectlib.htm
:param bulk_str:
:param fem:
:type fem: ada.fem.FEM
"""
from ada import Section
from ada.sections import GeneralProperties
Expand Down Expand Up @@ -1083,10 +1096,10 @@ def interpret_section(profile_name, sec_type, props):
t_w=t1,
t_fbtn=t4,
t_ftop=t2,
parent=parent,
parent=fem,
)
elif sec_type.upper() == "CIRC":
return Section(profile_name, "CIRC", r=props_clean[0], parent=parent)
return Section(profile_name, "CIRC", r=props_clean[0], parent=fem)
elif sec_type.upper() == "I":
(
l,
Expand All @@ -1106,14 +1119,14 @@ def interpret_section(profile_name, sec_type, props):
t_w=t3,
t_fbtn=t1,
t_ftop=t2,
parent=parent,
parent=fem,
)
elif sec_type.upper() == "L":
b, h, t1, t2 = props_clean
return Section(profile_name, "HP", h=h, w_btn=b, t_w=t2, t_fbtn=t1, parent=parent)
return Section(profile_name, "HP", h=h, w_btn=b, t_w=t2, t_fbtn=t1, parent=fem)
elif sec_type.upper() == "PIPE":
r, t = props_clean
return Section(profile_name, "TUB", r=r, wt=t, parent=parent)
return Section(profile_name, "TUB", r=r, wt=t, parent=fem)
elif sec_type.upper() == "TRAPEZOID":
# Currently converts Trapezoid to general beam
b, h, a, d = props_clean
Expand Down Expand Up @@ -1152,16 +1165,16 @@ def interpret_section(profile_name, sec_type, props):
)
/ 12,
)
return Section(profile_name, "GENBEAM", genprops=genprops, parent=parent)
return Section(profile_name, "GENBEAM", genprops=genprops, parent=fem)
else:
raise ValueError(f'Currently unsupported section type "{sec_type}"')

def grab_beam(match):
d = match.groupdict()
elset = parent.elsets[d["elset"]]
elset = fem.elsets[d["elset"]]
name = d["sec_name"] if d["sec_name"] is not None else elset.name
profile = d["profile_name"] if d["profile_name"] is not None else elset.name
ass = parent.parent.get_assembly()
ass = fem.parent.get_assembly()
material = ass.materials.get_by_name(d["material"])
# material = parent.parent.materials.get_by_name(d['material'])
temperature = d["temperature"]
Expand All @@ -1175,7 +1188,7 @@ def grab_beam(match):
section_type=section_type,
line1=geo_props,
)
res = parent.parent.sections.add(sec)
res = fem.parent.sections.add(sec)
if res is not None:
sec = res
return FemSection(
Expand All @@ -1186,19 +1199,23 @@ def grab_beam(match):
local_y=beam_y,
material=material,
metadata=metadata,
parent=parent,
parent=fem,
)

return map(grab_beam, re_beam.finditer(bulk_str))


def get_solid_sections_from_inp(bulk_str, parent):
def get_solid_sections_from_inp(bulk_str, fem):
"""
** Section: Section-80-MAT2TH1
*Shell Section, elset=MAT2TH1, material=S3_BS__S355_16_T__40_M2
0.02, 5
:param bulk_str:
:param fem:
:type fem: ada.fem.FEM
"""
secnames = Counter(1, "solidsec")

Expand All @@ -1219,20 +1236,23 @@ def grab_solid(m_in):
sec_type="solid",
elset=elset,
material=material,
parent=parent,
parent=fem,
)

return map(grab_solid, solid_iter)


def get_shell_sections_from_inp(bulk_str, parent):
def get_shell_sections_from_inp(bulk_str, fem):
"""
** Section: Section-80-MAT2TH1
*Shell Section, elset=MAT2TH1, material=S3_BS__S355_16_T__40_M2
0.02, 5
:param bulk_str:
:param fem:
:type fem: ada.fem.FEM
:return: map object containing list of FemSection objects
:return:
"""

shname = Counter(1, "sh")
Expand All @@ -1252,7 +1272,7 @@ def get_shell_sections_from_inp(bulk_str, parent):
def grab_shell(m):
d = m.groupdict()
name = d["name"] if d["name"] is not None else next(shname)
elset = parent.elsets[d["elset"]]
elset = fem.sets.get_elset_from_name(d["elset"])
material = d["material"]
thickness = float(d["t"])
offset = d["offset"]
Expand All @@ -1266,7 +1286,7 @@ def grab_shell(m):
material=material,
int_points=int_points,
offset=offset,
parent=parent,
parent=fem,
metadata=metadata,
)

Expand Down

0 comments on commit f524aca

Please sign in to comment.