Improvement suggestions

24

Comments

  • edited May 2021
    @disla I suggest you look into getting good at reading/writing liml files. Once you set up this reader/writer, you can do a lot of things, and probably faster than waiting for an update from Victor (who in fairness, has to manage priorities).

    We use Python for this, and I don't know a stick of Python, but that's what interns are for :)

    Note, I am not referring to the script-based internal Iron Python approach (which is also good). This is simply looking at the liml file as an input to a Python3 program. With this approach we can do a lot of direct manipulation on the database - replace/modify nodes, re-organize tree elements, manipulate loads and material properties.
    I think with just a little effort you can get quite efficient at this. This works well with batch running, as once you've modifed your files (and have a "save liml" in your setup) you can just solve all of them.

    Below is a simple example. This Python program reads the liml and drops all but the last solution result at time = 1s.

    @Victor, I wonder if it would be possible to create a repository for sharing things like this. I would be happy to contribute both external python and internal Iron Python programs, especially when I see others contributing as well! It would be a "use at your own risk" user sharing spot, maybe as simple as a Git?


    #--------------------------------------------------
    #
    # LIML TIMESTEP TRIMMER
    # Trims all but the timestep occurring at 1 second
    #
    #--------------------------------------------------

    import xml.etree.ElementTree as eltree

    # Rule determining if an individual timestep should be removed
    # Removes anything not the 1 second timestep
    def should_remove(ts):
    if not(ts.attrib['time'] == '1 s'):
    return True
    else:
    return False

    # Gets the topmost level tree and root tag from file
    tree = eltree.parse('BIGRESULT.liml')
    root = tree.getroot()

    # Navigate to the results sub-tag where timesteps are stored
    results = root.find('solution').find('results')
    timesteps = [ts for ts in results.findall('timestep')]

    # Removes each timestep based on should_remove rule
    for ts in timesteps:
    if should_remove(ts):
    results.remove(ts)

    # Write trimmed file (same file name should overwrite)
    tree.write('TRIMMED.liml')
  • I'm unlikely to add CAD-like editing tools.

    To edit nodes/elements in bulk, you can edit the .liml file with a text editor or maybe spreadsheet.

    Multi-select for the outline tree is on my list but not yet sorry.

    Preview image is possible but low priority.
  • Ok JohnM, I get it . Less Improvement suggestions and more autosuggestion to improve. :D

    Thanks both for your comments. I have just found that netgen can actually mesh internally a contour which solves most of my problem. I do not have fully control on the meshing process but it's enough for the moment.

    The idea of sharing some scripts seems nice.

  • edited May 2021
    Python script to create center node of circle between 3 points.
    I just adapted this from old FORTRAN (no jokes), and it "seems" to work. I can't tell you what it is doing with more than 3 nodes selected - I tested a few examples and it wasn't clear. But if 3 nodes are selected, it seems to work.

    If anyone improves on this (it needs error checking) please re-post.


    # Get the coordinates of the points that define the circle from 3 selected nodes.
    # Given three points in space (A,B,C)perimeter_node_ids = mw.selected_nodes()
    perimeter_node_ids = mw.selected_nodes()
    point_1 = mw.node(perimeter_node_ids[0])
    point_2 = mw.node(perimeter_node_ids[1])
    point_3 = mw.node(perimeter_node_ids[2])

    # ... do some math but not this ...
    Xa=point_1.x
    Ya=point_1.y
    Za=point_1.z

    Xb=point_2.x
    Yb=point_2.y
    Zb=point_2.z

    Xc=point_3.x
    Yc=point_3.y
    Zc=point_3.z

    # Lengths of AB, AC, AC
    AB = (((Xa-Xb)**2) + ((Ya-Yb)**2) + ((Za-Zb)**2))**0.5
    BC = (((Xb-Xc)**2) + ((Yb-Yc)**2) + ((Zb-Zc)**2))**0.5
    AC = (((Xa-Xc)**2) + ((Ya-Yc)**2) + ((Za-Zc)**2))**0.5
    # Direction cosines of AB(ABi,ABj,ABk)
    ABi = (Xb-Xa) / AB
    ABj = (Yb-Ya) / AB
    ABk = (Zb-Za) / AB
    # Direction cosines of AC(ACi,ACj,ACk)
    ACi = (Xc-Xa) / AC
    ACj = (Yc-Ya) / AC
    ACk = (Zc-Za) / AC
    # Cosine of angle BAC
    cosBAC = (AB**2 + AC**2-BC**2) / (2 * AB * AC)
    AD = cosBAC * AC
    CD = (AC**2-AD**2)**0.5
    # Position of point D, which is C projected normally onto AB
    Xd = Xa + (AD * ABi)
    Yd = Ya + (AD * ABj)
    Zd = Za + (AD * ABk)
    # Direction cosines of CD(Cdi,CDj,CDk)
    CDi = (Xc-Xd) / CD
    CDj = (Yc-Yd) / CD
    CDk = (Zc-Zd) / CD
    # Direction cosines of normal to AB and CD
    # to be used for rotations of circle center
    Ni = (ABk * CDj)-(ABj * CDk)
    Nj = (ABi * CDk)-(ABk * CDi)
    Nk = (ABj * CDi)-(ABi * CDj)
    # # Diameter of circumscribed circle of a triangle is equal to the
    # the length of any side divided by sine of the opposite angle.
    # This is done in a coordinate system where X is colinear with AB, Y is // to CD,
    # and Z is the normal (N) to X and Y, and the origin is point A
    # R = D / 2
    sinBAC = (1-cosBAC**2)**0.5
    R = (BC / sinBAC) / 2
    # center of circumscribed circle is point E
    X2e = AB / 2
    Y2e = (R**2-X2e**2)**0.5
    Z2e = 0
    # Transform matrix
    # Rotations Translations
    #
    # ABi , ABj , ABk Xa
    # CDi , CDj , CDk Ya
    # Ni , Nj , Nk Za
    #
    # Position of circle center in absolute axis system
    X_center = Xa + (X2e * ABi) + (Y2e * CDi) + (Z2e * Ni)
    Y_center = Ya + (X2e * ABj) + (Y2e * CDj) + (Z2e * Nj)
    Z_center = Za + (X2e * ABk) + (Y2e * CDk) + (Z2e * Nk)
    #
    center = Vector(X_center,Y_center,Z_center)

    # Create the center node
    mw.new_node(center)
  • I write code in Fortran 77. I hate coding and learning Fortran was an awful experience. But it works good. Nice to see a fellow old timer.
  • @prop_design F77 here as well. But everyone around here is a JavaKid or PythonKid. They've missed out on the thrill of debugging a 5000 line spaghetti code :)
  • hi john,

    i don't want to side track this thread, so I messaged you a response.
  • Victor --

    Multi-select (Ctrl+mouse and Shift+mouse) would be one of my highest priorities. In particular --

    -- Multi-select components to apply the same material.

    -- Multi-select geometry stp to apply the same meshing parameters. (As an intermediate solution, perhaps the user-defined default liml files could have default meshing parameters that would apply to all geometries. The user could then manually change any of the default meshes, as needed.)
  • @Victor, in the mesh definition, the units once defined are not keeped between parts, so it must be adjusted for everyone. Would be greate to have the mesh definition stored similar to a material, so we could apply it for several parts in the model, or saved in the library. Best regards
  • Victor --

    Highest priority = Frequency response (harmonic) analysis. I understand from emails that this isn't imminent but perhaps others might give some support.

    Next priority = automatic bonding.

    Don C.
  • @dculp It turns out you can do frequency response by manually specifying the CCX cards. and interpreting time as frequency in the loads and solution. Here's an example.
  • Thank You JohnM
    for making a
    Python script to create center node of circle between 3 points.

    I am happy that you found the source in good old FORTRAN, I still use it and love it, clear straight and fast :-) The only programming language that allows to run code made during decades of years with only minor modifications.
  • I would like to see a logarithmic sweep for solve points, any chance?
  • @drose. If you mean time points for dynamic/nonlienar/etc., you should be able to do that by manually adding the *TIME POINTS card for CCX.

    If you mean frequency "data points" (I'm not sure what that is) in a frequency response, it looks like you have to use the automatically chosen distribution which is based on the natural frequencies of the structure.

    If you mean the frequencies of loads in frequency response, you should be able to do that by entering the log formula in the load using time (t) to mean frequency.

  • edited June 2021
    Hi Victor, maybe for future releases, can you add the possibility of grouping componentes in the model tree? Something like subassemblies for easily navigate (by reducing the lenght of the component branch), manipulate (hide/show related sectors of the model at once) and organize complex models. Another ones could it be an option in the component contextual menu to apply a random diferent color to all parts at once, and/or a different color depending of the material. Assigning same material to multiple parts has been asked for?
    Imagine a tabular form with all the components, with several columns for name, material, shell offset, color..., so you could assign and play with materials and offsets all at once, and have this table also for reporting.

    Regards
  • Hi Victor

    I'm still new to this community, I've been testing some flows to work with mecway, and it has responded very well to my comparisons with other Fea packages that I've come across from where I've been. [Ansys; Rfem ].

    I want to point out that any comparison beyond the quality of the result would not be fair, as they are very different budgets.

    First suggestion [ Image 1 ]
    - Date Structure

    In civil engineering, when we build a frame structure we have to deal with a large number of different sections, and it would be interesting to disconnect the material from the section properties thus allowing for better data handling, with filter feature and visualization models based on materials or in section properties, as shown in the image below



    Second suggestion

    many simulated products are repetitive only with larger or smaller dimensions of already simulated models or with discrete changes in hole placement after these small changes, you have to work the entire model again defining loads, constraints and contacts.

    to avoid rework an option can be linking the loads and constraints to the geometry [STEP] and not to the mesh would allow keeping all the work done in the load definition , contact and restriction in the model . only needing to reload the mesh.



    I understand that the purpose of mecway is not to be an interface like autocad, I believe it would work if limitedly select the final nodes of surfaces [STEP] and we could move them, copy or move holes in surfaces e copy and move parts that have already been imported into the model, simple adjustments , anything more complex would have to be redone

    Third Suggestion

    In the rectangular tube option it is important to have the option to customize the tube thicknesses individually to be able to create all of the equivalent profiles of more organic geometries as in the image below



    Fourth suggestion - loads and constraints selectable

    when building meshes by hand it is common to know the distances of the elements being able to select them , apply loads and constraints and being able to copy them multiple times can be interesting.

    I'm uncomfortable with my excitement at making so many suggestions , Mecway is an incredible tool, and I have been able to do everything I need through several ways.
    1.png 67.3K
    2.png 189.3K
    3.png 36.5K
  • Victor,
    Thanks for a powerful and accessible tool. I have a few usability suggestions related to selecting geometry:

    1. Selecting many disconnected geometry or element faces can be difficult because the rotate and zoom performance is diminished when the CTRL key is depressed. And repeatedly depressing/releasing the CTRL key risks making a mistake and clearing the selections. Suggest making a toolbar button which locks in select/deselect mode (just as holding the CTRL key does), and also does not cause the rotate and zoom performance to decrease.

    2. In the case where there are many small and disconnected faces to select, it may be easier to select a few large faces, and then invert the selection. However this cannot be done if there are several STEP files in the project because the invert selection function affects all files and selects many unwanted faces, even if a STEP geometry is hidden. Suggest making the invert selection function not affect any geometry that is hidden.

    3. When creating a named selection of geometry faces, there doesn't seem to be a means to view afterward the faces which were included in the selection without first meshing then viewing the mesh. When clicking the selection in the tree in an attempt to see the faces highlighted on the geometry, the geometry just vanishes. Suggest making the faces highlight on the geometry when the named selection is clicked.
  • @Vinicius_Petrucci Thanks for the detailed ideas.

    First suggestion: Mecway isn't really aimed at civil engineers, so I don't want to bend it too far that way. But Sergio has also asked for more convenient ways put similar material properties on large numbers of different materials/components. So hopefully I'll at least get it somewhere in that direction.

    Second suggestion: Agreed. This is already possible for 2D surfaces but edges and vertices are still a problem so hopefully in future!

    Third suggestion: Noted.

    Forth suggestion: I don't quite understand. Do you mean selecting loads and constraints by picking their graphical symbols with the mouse and separately, a button to duplicate existing ones? Duplicating is on my list. Graphical picking is unlikely because it's hard and low importance.
  • Hi @Victor

    Last time I put the pictures I think I screwed things up so I'm just going to attach them

    the idea is that links[contacts] , load attributes and constraints attributes can be graphically selectable to allow multiple copiesas in the attached images.

    another important feature would be the links, [contacts] I took the descriptive some of them out of the strand7 description and I think of sense for many applications

    graphically manipulating all these elements would give the mecway great power to define advanced contacts and build large models manually.
    1.png 49.4K
    2.png 74.5K
    3.png 32.2K
    4.png 34.1K
  • @pberry, Thanks for the suggestions. All noted.

    @Vinicius_Petrucci

    For 1.png, you can use Extrude. But maybe number of copies input in Move/copy would be helpful. What I usually do for a huge number of copies is make several copies, then select all of them and copy again with a bigger delta.

    For 2.png and 3.png, seems too specific. I'd have to know more about what the aim is. Does it really need multiple copies of the load or can it just have more faces added to the same load? In the latter case, operating on selections would make more sense, but not sure how useful that would be on an unstructured mesh. I don't want too many tools that only work on special regular meshes with known element size. These kinds of tools may be efficient for certain kinds of work but they add a lot of complication to the UI with not much power. I'm trying to keep Mecway's menus simpler than Strand7's.

    For 4.png, constraint equations serve that purpose in Mecway. You can also use bonded contact to rigidly connecting beams/shells to solids.
  • edited January 2022
    Hi Victor,

    Two suggestions for improvement that I think are not very difficult to implement.

    When dealing with rotations, rigid bodies and Distributing Coupling the REF node is usually required to be at the centroid of the surface or at the Center of Mass of the set. (Centroid is Imperative for correct *DISTRIBUTING).
    I would suggest if you could provide the location of the centroid (Center of Mass already exist) and a button to generate the nodes in the dialog box. See picture.

    Thanks


  • @disla, could you elaborate a bit on how you'd use this proposed feature? I imagine something like:
    1. Select some faces
    2. Add the node at the centroid
    3. Put node-surface coupling on them
    4. Then what? I don't thing there's much you can do with the *DISTRIBUTING reference node that actually depends on its position. Just putting loads, constraints, or springs that are constrained at their other end shouldn't need it to be positioned at the centroid. However, connecting it to an element that's also part of the rest of the structure requires that position to properly balance moments. Is there something else I've missed?
    For a symmetric mesh you can use Mesh tools -> Insert node between to get it at the centroid of the nodes but for general meshes, that won't be the same as the centroid of the faces.
  • edited January 2022
    Hi Victor,

    Thanks for the interest.
    What I’m mostly interested is the capability of the surface to follow the REF node and deform at the same time. Without some Dynamics I do not think there is much difference with actions “directly” applied on the surface.
    For example, my first intention on the file posted at Torsional spring - Large Rotations - Remote Displacement. was to distribute the reaction forces on the upper side of the key by means of a *Distributing contact and allow the key itself to slightly deform at the contact surface. (Pict 1)For that I need the centroid of a cylinder section as shown on the guide lines. The section is symmetric, but the centroid is not “on” the surface. For some reason as I comment on the post *Distributing was not working for me (Rigid and Kinematic works perfect). I’m not sure if it is because the node is not properly located at the centroid or what.

    An offset in the position of the REF node also causes an artificial moment when there is a Force applied to it. (Pict 2)
    I can also figure *Distributing can also be useful for determining reactions at the baseplate of a tank or vessel due to varying wind actions that should be applied to the “centroid” of the surface.




  • Maybe it's changed in the latest version but I didn't think there could be a moment due to an offset reference node. Is that really *DISTRIBUTING, not *RIGID BODY? From what I understand, the position of the reference node is ignored by *DISTRIBUTING so you can put it anywhere but you might want it at the centroid so it's not silently eating a moment that you might expect to exist.
  • I will post in new subject to not contaminate the Improvement suggestions.
  • Victor, ¿would it be possible to modify the parameter that scales the "Open cracks" separation.
    I think this way the user could adjust the required space to see in between the composite layers.

  • Hi Victor

    Would it be possible to get an option to view the nodal element forces for plate and brick elements? With a tool which would sum reactions about a point. For example if one has a beam modelled from plate elements, one could then select nodes and attain the associated loads as if it were a beam element (not sure if this makes sense)
  • Hi, Mishal,

    Not sure if this is what you are looking for, but Cornelius provided an API Script
    that computes the "Sum forces over a given set of nodes"
  • Hi,

    I'm not sure if I’m doing something wrong or if it is not possible. In case it is not possible I would like if it could be enabled.
    In Mecway , when I do consecutive selections using Ctrl, any pre-selected elements contained in the new selection are removed from the new selection.
    In the example I want a select nodes close to the X and Y Axis. First selection is the vertical. The second selection (the horizontal ) removes the nodes already selected close to the origin.

    ¿Is there any key combination to only add elements to the selection?

    Thanks in advance.



  • Only know of creating a Named Selection for the first windowed group, then adding nodes (faces, elements) for the subsequent groups. I often have several Named Selections running to perform Adds or Subtracts and arrive at what I want.
Sign In or Register to comment.

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!