Feedback for unidirectional supports - mkraska/meclib GitHub Wiki

This function handles any unidirectional support ("bar", "dashpot", "springt", "springc", "fix1", "rope") in Feedback for Free Body Diagrams.

These supports are to be replaced by a single "force".

Checks done by the fb_unidir():

  • Is the object really of unidirectional type (just for developers)?
  • Is the object deactivated?
  • Has meclib found any reactions by proximity check?
  • Is there exactly one reaction?
  • Is the reaction of type "force"?
  • Is the reaction normal to the direction of unconstrained translation?

Special name checking functions:

  • fb_bar_name checks if the name matches the number of the bar.
  • fb_name checks if the name is in a given set of names.

Example question: FBD Tutorial Parallelführung (I) at abacus.aalto.fi/develop/4.4beta

image

Point A has a unidirectional support formed by a bar and a pinned support.

There is no dedicated name checking, as the force name doesn't need to follow particular rules.

See Feedback for "fix1" for more specific feedback, in particular name checking.

Typical PRT

Feedback variables:

obj: stackjson_parse(objects);
[text, isOK]: fb_unidir(obj, names, i_A, "Lagerung bei A: ");

PRT node 1 test for correct direction

Algebraic test for isOK = true and feedback of {@text@} for both branches.

[txt, isOK]: fb_unidir(o, n, i, description)

  • txt feedback text
  • isOK flag for test result
  • o list of objects
  • n names field
  • i index of unidirectional object
  • description string with Text to identify the object for the user

Requires: parallelp()

Source

Check angle between support and reaction

This can be used to check if the reaction is parallel or antiparallel to the support (rope or bar)

fb_angle(%_o, %_n, %_i):= block([%_o1,%_o2],
  %_o1: %_o[ %_i ],
  %_o2: %_o[ %_n[%_i][1] ],
  return(angle(%_o1,%_o2))
);

Display in the function if angle is not correct

 \\({@dispdp(angle(R, o[i])*180/pi,2)@}\\)°