Skip to content

Commit

Permalink
Merge pull request #24 from Krande/dev
Browse files Browse the repository at this point in the history
Bugfix and minor refactor [release]
  • Loading branch information
Krande authored Jul 7, 2021
2 parents cb513bf + 797a48d commit 32ae9a0
Show file tree
Hide file tree
Showing 7 changed files with 705 additions and 681 deletions.
2 changes: 1 addition & 1 deletion setup.cfg
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[metadata]
name = ada-py
version = 0.0.15
version = 0.0.16
author = Kristoffer H. Andersen
author_email = kristoffer_andersen@outlook.com
description = Assembly for Design & Analysis - A python library for structural analysis and design
Expand Down
8 changes: 6 additions & 2 deletions src/ada/fem/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -474,7 +474,7 @@ def _volume_edges(self):
# (0,8), (8,1), (3,13), (13,2)
# ]
else:
print("Element type {} is currently not supported".format(self.type))
logging.error(f"Element type {self.type} is currently not supported")

@property
def _cube_faces(self):
Expand Down Expand Up @@ -886,6 +886,10 @@ def converthinges(fs):
elem.parent.nodes.add(n2, allow_coincident=True)
i = elem.nodes.index(n)
elem.nodes[i] = n2
if elem.fem_sec.offset is not None:
if n in [x[0] for x in elem.fem_sec.offset]:
elem.fem_sec.offset[i] = (n2, elem.fem_sec.offset[i][1])

s_set = FemSet(f"el{elem.id}_hinge{i + 1}_s", [n], "nset")
m_set = FemSet(f"el{elem.id}_hinge{i + 1}_m", [n2], "nset")
elem.parent.add_set(m_set)
Expand Down Expand Up @@ -1511,7 +1515,7 @@ def id(self):
@id.setter
def id(self, value):
if type(value) not in (np.int32, int, np.uint64) and issubclass(type(self), Connector) is False:
raise ValueError(f'Element name type "{type(value)}" must be numeric')
raise ValueError(f'Element ID "{type(value)}" must be numeric')
self._el_id = value

@property
Expand Down
27 changes: 18 additions & 9 deletions src/ada/fem/containers.py
Original file line number Diff line number Diff line change
Expand Up @@ -538,9 +538,7 @@ def __add__(self, other):
return FemSections(chain(self._sections, other._sections))

def __repr__(self):
return (
f"FemSectionsCollection(Beams: {len(self.beams)}, Shells: {len(self.shells)}, Solids: {len(self.solids)})"
)
return f"FemSections(Beams: {len(self.beams)}, Shells: {len(self.shells)}, Solids: {len(self.solids)})"

@property
def beams(self):
Expand Down Expand Up @@ -665,6 +663,17 @@ def get_elset(elref):
else:
raise ValueError("Elref is not recognized")

def eval_set(fset):
if fset.type == "elset":
el_type = Elem
get_func = get_elset
else:
el_type = Node
get_func = get_nset
res = list(filter(lambda x: type(x) != el_type, fset.members))
if len(res) > 0:
fset._members = [get_func(m) for m in fset.members]

if "generate" in fem_set.metadata.keys():
if fem_set.metadata["generate"] is True and len(fem_set.members) == 0:
gen_mem = fem_set.metadata["gen_mem"]
Expand All @@ -674,13 +683,11 @@ def get_elset(elref):
if fem_set.type == "nset":
if len(fem_set.members) == 1 and type(fem_set.members[0]) is str and type(fem_set.members[0]) is not Node:
fem_set._members = self.nodes[fem_set.members[0]]
else:
fem_set._members = list(map(get_nset, fem_set.members))
fem_set.parent = self._fem_obj
else:
fem_set._members = list(map(get_elset, fem_set.members))
fem_set.parent = self._fem_obj
fem_set.parent = self._fem_obj
return fem_set

eval_set(fem_set)
fem_set.parent = self._fem_obj
return fem_set

def link_data(self):
Expand Down Expand Up @@ -826,8 +833,10 @@ def add(self, fe_set, append_suffix_on_exist=False):
self._elmap[fe_set.name] = fe_set
else:
self._nomap[fe_set.name] = fe_set

if fe_set.parent is None:
fe_set.parent = self._fem_obj

self._instantiate_all_members(fe_set)

return fe_set
3 changes: 2 additions & 1 deletion src/ada/fem/io/abaqus/reader.py
Original file line number Diff line number Diff line change
Expand Up @@ -231,7 +231,8 @@ def get_part_from_bulk_str(name, bulk_str, parent, instance_name=None, metadata=
fem.nodes.move(move=fem.metadata["move"], rotate=fem.metadata["rotate"])
fem._elements = get_elem_from_inp(bulk_str, fem)
fem.elements.build_sets()
fem._sets = fem.sets + get_sets_from_bulk(bulk_str, fem)
bulk_sets = get_sets_from_bulk(bulk_str, fem)
fem._sets = fem.sets + bulk_sets
fem._sections = get_sections_from_inp(bulk_str, fem)
fem._bcs += get_bcs_from_bulk(bulk_str, fem)
fem._masses = get_mass_from_bulk(bulk_str, fem)
Expand Down
4 changes: 2 additions & 2 deletions src/ada/fem/io/io_meshio/writer.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,9 @@ def meshio_to_fem(
os.makedirs(analysis_dir, exist_ok=True)

for p in assembly.get_all_parts_in_assembly(include_self=True):
mesh = fem_to_meshio(p.fem)
if mesh is None:
if len(p.fem.nodes) == 0:
continue
mesh = fem_to_meshio(p.fem)
prefix_mapper = dict(abaqus="inp")
if mesh_format in ["abaqus"]:
prefix = prefix_mapper[mesh_format]
Expand Down
Loading

0 comments on commit 32ae9a0

Please sign in to comment.