Coverage for src/beamme/abaqus/beam.py: 76%

17 statements  

« prev     ^ index     » next       coverage.py v7.10.7, created at 2025-09-29 11:30 +0000

1# The MIT License (MIT) 

2# 

3# Copyright (c) 2018-2025 BeamMe Authors 

4# 

5# Permission is hereby granted, free of charge, to any person obtaining a copy 

6# of this software and associated documentation files (the "Software"), to deal 

7# in the Software without restriction, including without limitation the rights 

8# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 

9# copies of the Software, and to permit persons to whom the Software is 

10# furnished to do so, subject to the following conditions: 

11# 

12# The above copyright notice and this permission notice shall be included in 

13# all copies or substantial portions of the Software. 

14# 

15# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 

16# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 

17# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 

18# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 

19# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 

20# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 

21# THE SOFTWARE. 

22"""This file provides functions to create Abaqus beam element classes.""" 

23 

24from beamme.core.element_beam import Beam2 as _Beam2 

25from beamme.core.element_beam import Beam3 as _Beam3 

26 

27 

28def generate_abaqus_beam(beam_type: str): 

29 """Return a class representing a beam in Abaqus. This class can be used in 

30 the standard mesh generation functions. 

31 

32 Args: 

33 beam_type: Abaqus identifier for this beam element. For more details, 

34 have a look at the Abaqus manual on "Choosing a beam element". 

35 

36 Returns: 

37 A class representing the Abaqus beam element. The class inherits from 

38 the BeamX class, depending on the number of nodes. 

39 """ 

40 

41 if not beam_type[0].lower() == "b": 

42 raise TypeError("Could not identify the given Abaqus beam element") 

43 

44 n_dim = int(beam_type[1]) 

45 element_type = int(beam_type[2]) 

46 

47 if not n_dim == 3: 

48 raise ValueError("Currently only 3D beams in Abaqus are supported") 

49 if element_type == 1: 

50 base_class = _Beam2 

51 elif element_type == 2: 

52 base_class = _Beam3 

53 elif element_type == 3: 

54 base_class = _Beam2 

55 else: 

56 raise ValueError(f"Got unexpected element_type {element_type}") 

57 

58 # Create the Abaqus beam class. 

59 return type( 

60 "BeamAbaqus" + beam_type, 

61 (base_class,), 

62 { 

63 "beam_type": beam_type, 

64 "n_dim": n_dim, 

65 }, 

66 )