User's Guide

Guia do Usuário, introdução ao projeto, objetivos, como instalar, como usar os exemplos básicos...

https://www.thecloudtutorial.com/user-manual-for-software-applications/

Pre-Process

myfempy.mesh.genmesh.ModelGen.get_model(meshdata: dict{})

Model Setting

meshdata{"PROPMAT"}: list[mat_set_1: dict{}, ..., mat_set_n: dict{}]

mat_set_n = {
# parameters
    "NAME":str(def.val.='mat_1')            # material name def
    "EXX":float(def.val.=1.0)               # elasticity modulus in x direction [link](https://en.wikipedia.org/wiki/Young%27s_modulus)
    "VXX":float(def.val.=1.0)               # poisson's ratio in x direction  [link](https://en.wikipedia.org/wiki/Poisson%27s_ratio)
    "GXX":float(def.val.=1.0)               # shear modulus in x direction  [link](https://en.wikipedia.org/wiki/Shear_modulus)
    "EYY":float(optional)                   # elasticity modulus in y direction, to orthotropic material only 
    "VYY":float(optional)                   # poisson's ratio in y direction, to orthotropic material only 
    "GYY":float(optional)                   # shear modulus in y direction, to orthotropic material only 
    "RHO":float(optional)                   # density, to dynamic analysis only [link](https://en.wikipedia.org/wiki/Density)
    "STIF":float(optional)                  # stiffness lumped, to lumped model
    "DAMP":float(optional)                  # damping lumped, to lumped model
    "MAT":str(def.val.='isotropic')         # material definition
        # options
            'springlinear'                  # spring linear lumped 
            'springnonlin'                  # spring non linear lumped
            'isotropic'                     # isotropic stress/strain material
            'orthotropic'                   # orthotropic stress/strain material
    "DEF":str(def.val.='planestress')       # material behavior
        # options
            'lumped'                        # lumped material
            'axial'                         # axial{rod, beams...} behavior material
            'planestress'                   # plane stress behavior
            'planestrain'                   # plane strain behavior
            'solid'                         # solid behavior material

meshdata{"PROPGEO"}: list[geo_set_1: dict{}, ..., geo_set_n: dict{}]


geo_set_n = {
# parameters
    "NAME":str(def.val.='geo_1')            # geometry name def
    "AREACS":float(def.val.=1.0)            # area cross section
    "INERXX":float(def.val.=1.0)            # inercia x diretion [link](https://en.wikipedia.org/wiki/List_of_moments_of_inertia)
    "INERYY":float(def.val.=1.0)            # inercia y diretion 
    "INERZZ":float(def.val.=1.0)            # inercia z diretion 
    "THICKN":float(def.val.=1.0)            # thickness of plane/plate
    "SEC":str(optional)                     # type of cross section, view list
    "DIM":dict(optional)(def.val.={         # dimensional cross section def, view list <goto> Cross Section Dimensions
        "b":float(def.val.=1.0)             # b size
        "h":float(def.val.=1.0)             # h size
        "t":float(def.val.=1.0)             # t size
        "d":float(def.val.=1.0)})           # d size

meshdata{"FORCES"}: list[force_set_1: dict{},..., force_set_n: dict{}]


force_set_n = {
# parameters
    "DEF":str(def.val.='forcenode')         # type force n def.
        # options
            'forcenode'                     # force in nodes, concentrated load
            'forceedge'                     # force in edge, distributed load
            'forcebeam'                     # force in beam only opt., distributed load [legacy version]
            'forcesurf'                     # force in surface, distributed load
    "DOF":str(def.val.='fx')                # dof direction of force n
        # options
            'fx'                            # force in x dir.
            'fy'                            # force in y dir.
            'fz'                            # force in z dir.
            'tx'                            # torque/moment in x dir.
            'ty'                            # torque/moment in y dir.
            'tz'                            # torque/moment in z dir.
            'masspoint'                     # mass concentrated applied in node/point 
            'spring2ground'                 # spring connected node to ground/fixed end
            'damper2ground'                 # damper connected node to ground/fixed end
    "DIR":str(def.val.='node')              # set direction <goto> Axis Diretions
        # options
            # ----- OPT. WITH LOC SEEKERS 
            'node'                          # node in mesh
            'lengthx'                       # length line in x dir., beam only option [legacy version]
            'lengthy'                       # length line in y dir., beam only option [legacy version]
            'lengthz'                       # length line in z dir., beam only option [legacy version]
            'edgex'                         # edge def in x dir. >'LOC': {'x':float(coord. x nodes), 'y':999(select all node in y dir.), 'z':float(coord. z nodes)}
            'edgey'                         # edge def in y dir.
            'edgez'                         # edge def in z dir.
            'surfxy'                        # surf def in xy plane >'LOC': {'x':999, 'y': 999, 'z':float(coord. z nodes)}
            'surfyz'                        # surf def in yz plane
            'surfzx'                        # surf def in zx plane
            # ----- OPT. WITH TAG SEEKERS
            'point'                         # point number in tag list
            'edge'                          # edge number in tag list
            'surf'                          # surface number in tag list
    "LOC":dict(def.val.={                   # coord. node locator <goto> Axis Diretions
        'x':float(def.val.=1.0)             # x coord. node
        'y':float(def.val.=1.0)             # y coord. node
        'z':float(def.val.=0.0)})           # z coord. node
    "TAG":int(optional)                     # tag number of regions type, used with gmsh mesh gen, view list
    "VAL":list(def.val.=[-1.0])             # value list of force on steps, signal +/- is the direction
        # options
            [val_force_step_1,              # force on steps, in solver opt. is possible to indicate the one step or all steps number
            ...,
            val_force_step_n]

meshdata{"BOUNDCOND"}: list[boundcond_set_1: dict{},..., boundcond_set_n: dict{}]


boundcond_set_n = {
# parameters
    "DEF":str(def.val.='fixed')             # type force n def.
        # options
            'fixed'                         # fixed boundary condition u=0. More in [link](https://en.wikipedia.org/wiki/Boundary_value_problem)
            'displ'                         # displ boundary condition u!=0. [dev]
    "DOF":str(def.val.='all')               # dof direction of force n
        # options
            'ux'                            # force in x dir.
            'uy'                            # force in y dir.
            'uz'                            # force in z dir.
            'rx'                            # torque/moment in x dir.
            'ry'                            # torque/moment in y dir.
            'rz'                            # torque/moment in z dir.
            'all'                           # mass concentrated applied in node/point 
    "DIR":str(def.val.='edgex')             # set direction <goto> Axis Diretions
        # options
            # ----- OPT. WITH LOC SEEKERS 
            'node'                          # node in mesh
            'edgex'                         # edge def in x dir. >'LOC': {'x':float(coord. x nodes), 'y':999(select all node in y dir.), 'z':float(coord. z nodes)}
            'edgey'                         # edge def in y dir.
            'edgez'                         # edge def in z dir.
            'surfxy'                        # surf def in xy plane >'LOC': {'x':999, 'y': 999, 'z':float(coord. z nodes)}
            'surfyz'                        # surf def in yz plane
            'surfzx'                        # surf def in zx plane
            # ----- OPT. WITH TAG SEEKERS
            'point'                         # point number in tag list
            'edge'                          # edge number in tag list
            'surf'                          # surface number in tag list
    "LOC":dict(def.val.={                   # coord. node locator <goto> Axis Diretions
        'x':float(def.val.=0.0)             # x coord. node
        'y':float(def.val.=999)             # y coord. node
        'z':float(def.val.=0.0)})           # z coord. node
    "TAG":int(optional)                     # tag number of regions type, used with gmsh mesh gen, view list
    "VAL":list(def.val.=[1.0])              # value list of dislp on steps [dev]
        # options
            [val_displ_step_1,              # dislp on steps, in solver opt. is possible to indicate the one step or all steps number
            ...,
            val_displ_step_n]

See Table 3 Consistent Units

meshdata{"QUADRATURE"}: dict{}


# parameters
    'meth':str(def.val.='no_interpol')      # method to integration 
        # options
            'gaussian'                      # [link](https://en.wikipedia.org/wiki/Gaussian_quadrature)
            'no_interpol'
    'npp':int(def.val.=0)                   # number of points to integrations
        # options
            1
            2
            3
            4
            8                   

meshdata{"DOMAIN"}: str


    # options
        'structural'                        # set a structural model        

Mesh Legacy Options

meshdata{"LEGACY"}: dict{} # LEGACY mesh return a rectangular plane only [test option]


# parameters
    'lx':float(def.val.=1.0)                # set a length in x diretion
    'ly':float(def.val.=1.0)                # set a length in y diretion
    'nx':int(def.val.=10)                   # set a number of elements in x diretion    
    'yx':int(def.val.=10)                   # set a number of elements in y diretion
    'mesh':str(def.val.=tria3)              # set a type of mesh used in analysis
        <goto> Table 1 Mesh List 
    'elem':str(def.val.=plane31)            # set a type of element used in analysis
        <goto> Table 2 Elements List

meshdata{"ELEMLIST"}: list[] # ELEMLIST return a element list from a manual mesh [old option]


# set
    [
    [elem_number_n:int, 'elem':str, mat_set_n{'NAME'}(set first mat_set_n:dict{}), geo_set_n{'NAME'}(set first geo_set_n:dict{}), nodes_list_conec_n:list[]]
    ...
    ]
    >> [[1, 'plane31', 'steel', 'geo', [1, 2, 3]]]

meshdata{"NODELIST"}: list[] # NODELIST return a nodes list from a manual mesh [old option]


# set
    [
    [node_number_n:int, coord_x:float, coord_y:float, coord_z:float]
    ...
    ]
    >> [[1, 0, 0, 0]
        [2, 1, 0, 0]
        [3, 0, 1, 0]]

Gmsh Mesh Options

Notes: 1 - Gmsh is NOT part of myfempy projects; 2 - Is Needed install Gmsh manually

meshdata{"GMSH"}: dict{} # GMSH mesh return a advacend mesh from gmsh external lib [link](https://pypi.org/project/gmsh/) [advanced option]


# parameters
    'filename':str                          # name of files exit
    'meshimport':dict{}                     # opt. to import a external gmsh mesh
        # option
            'object':str(object name .msh1) # file .msh1 only, legacy mesh from gmsh [current version]
    'cadimport':dict{}                      # opt. to import a cad model from any cad program [link](https://en.wikipedia.org/wiki/Computer-aided_design) [FreeCAD](https://www.freecad.org/index.php?lang=pt_BR)
        # option                                                                                      
            'object':str(object name .step) # file .step/.stp only [current version]
    *** Options to build a self model in .geo file (from gmsh)
    'pointlist':list[]                      # poinst coord. list
        # set
            [
            [coord_x_point_1:float, coord_y_point_1:float, coord_z_point_1:float]
            ...
            [coord_x_point_n:float, coord_y_point_n:float, coord_z_point_n:float]
            ]

        #  y
        #  |
        #  |
        # (1)----x
        #   \
        #    \
        #     z

        #-- lines points conec., counterclockwise count         
        # set
            [
            [point_i_line_1:int, point_j_line_1:int]
            ...
            [point_i_line_n:int, point_j_line_n:int]
            ]

        # (i)-----{1}-----(j)

    'planelist':list[]                      # planes lines conec., counterclockwise count
        # set                                                         
            [                                                         
            [line_1_plane_1:int, ..., line_n_plane_1:int]             
            ...                                                       
            [line_1_plane_n:int, ..., line_n_plane_n:int]             
            ]               

        # (l)-----{3}-----(k)
        #  |               |
        #  |               |
        # {4}     [1]     {2}
        #  |               |
        #  |               |
        # (i)-----{1}-----(j)

    'arc':list[]                            # arc line set, counterclockwise count
        # set
            [
            [R,[CX,CY,CZ],[A0, A1]] # arc_1
            ...
            [R,[CX,CY,CZ],[A0, A1]] # arc_n
            ]

        #       A1    ^
        #       |    /
        #       |   /
        #       |  R
        #       | /
        #       |/
        # (i:CX,CY,CZ)------A0

        # options
            R:float                         # radius
            CX:float                        # point i center x coord.
            CY:float                        # point i center y coord.
            CZ:float                        # point i center z coord.
            A0:str(def.val.='0')            # angle begin rad
            A1:str(def.val.='Pi/2')         # angle end rad

    'meshconfig':dict{}                     # mesh configuration inputs
        # options
            'mesh':str                      # set a type of mesh used in analysis
                <goto> Table 1 Mesh List 
            'elem':str                      # set a type of element used in analysis
                <goto> Table 2 Elements List 
            'sizeelement':float             # size min. of elements
            'numbernodes':int               # select a number of nodes in line, only to 'line2' <goto> Table 1 Mesh List 
            'meshmap':dict{}                # gen. a mapped structured mesh
                # option
                    'on':bool               # turn on(true/ false)
                        True
                        False
                    'edge':two opt.         # select edge to map (only in 'on':True)
                        'numbernodes':int   # select a number of nodes in edge
                        'all'/ TAG NUMB:int # select all edge or a specific edge
            'extrude':float                 # extrude dimensional, in z diretion, from a xy plane

Preview analysis

Solver Set

Post-Process

Appendix

Table 2 Mesh List

mesh supported elements
"line2" "truss21", "beam21", "frame21", "frame22"
"tria3" "plane31"
"quad4" "plane41"
"hexa8" "solid81"
"tetr4" "solid41"

Table 2 Elements List

element key/id description
'spring21' 110 spring 2D 2-node linear Finite Element
'truss21' 120 truss 2D 2-node linear Finite Element
'beam21' 130 beam 1D 2-node linear Finite Element
'frame21' 140 frame 2D 2-node linear Finite Element
'frame22' 141 frame 3D 2-node linear Finite Element
'plane31' 210 triagular Plane 3-node linear Finite Element
'plane41' 220 quatrangular Isoparametric Plane 4-node linear Finite Element
'plate41' 221 quatrangular Isoparametric Plate Mindlin 4-node linear Finite Element [dev]
'solid41' 310 tetrahedron Isoparametric Solid 8-node linear Finite Element
'solid81' 320 hexahedron Isoparametric Solid 8-node linear Finite Element

Table 3 Consistent Units

Quantity SI(m) SI(mm)
length m mm
force N N
mass kg kg
time s s
stress Pa(N/m^2) MPa(N/mm^2)
energy J mJ(J E-3)
density kg/m^3 kg/mm^3(kg/m^3 E-9)

Axis Diretions


#        |
#        [Y]
#        |      P1 -- principal plane
#        |      P2 -- secondary plane
#        |__edgey__
#       /|         |
#      / |   P1    |
#     /  | surfxy  edgex
#    /  f|         |
#   /  r |_________|____________[X]__
#  | u  /          /
#  |s z/   P2     /
#  | y/  surfzx  edgez
#  | /          /
#  |/__________/        
#  /         
# [Z]
#/

Cross Section Dimensions


#                       :
#                       [Y]
#                       :
#  ___       ___________:___________
#   |       |_______    :    _______|   
#   |               |   :   |
#   |            -->|   :   |<-------------(t)
#   |               |   :   |
#   |               |   :   |
#   |               |   :   |
#   (h)             |  (CG).|..........[Z]..
#   |               |       |
#   |               |       |
#   |               |       |
#   |               |       |
#   |        _______|       |_______    ___  
#  _|_      |_______________________|   _|_(d)


#           |-----------(b)---------|                       

Tag Legends

  • [advanced option]: Inputs advanced options, require a external package
  • [current version]: Inputs options in the latest stable version of myfempy
  • [dev]: Inputs options in development (next update), to test only
  • [legacy version]: Inputs of legacy/old version