openfoam/tutorials/incompressible/lumpedPointMotion/bridge
Mark Olesen dbfd1f90b1 ENH: add single-time handling to timeSelector
- the timeSelector is often used to select single or multiple times
  (eg, for post-processing). However, there are a few applications
  where only a *single* time should be selected and set.

  These are now covered by this type of use:

      timeSelector::addOptions_singleTime();  // Single-time options
      ...
      // Allow override of time from specified time options, or no-op
      timeSelector::setTimeIfPresent(runTime, args);

   In some cases, if can be desirable to force starting from the
   initial Time=0 when no time options have been specified:

      // Set time from specified time options, or force start from Time=0
      timeSelector::setTimeIfPresent(runTime, args, true);

   These changes make a number of includes redundant:

     * addTimeOptions.H
     * checkConstantOption.H
     * checkTimeOption.H
     * checkTimeOptions.H
     * checkTimeOptionsNoConstant.H

ENH: add time handling to setFields, setAlphaField (#3143)

    Co-authored-by: Johan Roenby <>

STYLE: replace instant("constant") with instant(0, "constant")

- avoids relying on atof parse behaviour returning zero
2024-05-06 22:22:42 +02:00
..
code ENH: add single-time handling to timeSelector 2024-05-06 22:22:42 +02:00
files TUT: bridge using external lumped point motion (#1341) 2020-06-17 15:16:27 +02:00
steady RELEASE: Updated headers to v2312 2023-12-20 19:42:55 +01:00
Allclean TUT: bridge using external lumped point motion (#1341) 2020-06-17 15:16:27 +02:00
Allrun TUT: incompressible: clean up tutorials 2021-06-08 20:15:47 +00:00
Allrun.move TUT: bridge using external lumped point motion (#1341) 2020-06-17 15:16:27 +02:00
README.md TUT: bridge using external lumped point motion (#1341) 2020-06-17 15:16:27 +02:00

Setting up the FSI linear controllers can be easy or difficult, depending on the complexity of the structure and the source of the input data.

If you already have an FEA model with nodes and beam elements, it will be fairly straightforward to instrument your structure. If you just have the control points but need to define the connectivity yourself, it will obviously be more work.

In this case it can help to import your raw points as a csv table in paraview and use the TableToPoints filter to visualize their locations and overlay this with the surface geometry. With this you can piece together the connectivity, which specifies the motion controllors.

To debug the setup, within steady/

Copy the geometry

./Allrun.init

Verify connectivity

lumpedPointZones -dry-run

This will generate a state.vtp file with the lumped points, connected as per the controller description.

Next generate the mesh (eg, with snappyHexMesh). For example,

./Allrun.pre

Test the mapping

lumpedPointZones   # serial or parallel

paraview lumpedPointZones.vtp

Inspect the nearest/next nearest and weighting. Adjust the controllers definitions if required.

For setup, it is often helpful if you have some predefined structural response data that can be used for testing.

Check the quality of response data by visualizing how it affects the movement of the points:

lumpedPointMovement {options} -dry-run response.txt

paraview state.vtk.series

You can add visualization options such as -scale or -visual-length. If the there are many time points in the response data, use -span to skip over some of them.

The lumpedPointMovement command can be used as above, but without the -dry-run option. This will extract the patch surface associated with the controllers and generate corresponding surface files in VTK format.

lumpedPointMovement {options} response.txt

paraview geom.vtp.series

Using a larger scale factor (eg, -scale 10) can help highlight potential interpolation problems.

Additional Notes

The files/polynomials.dict represent a vague approximation of measurement data, but are only intended as a compacter means of representing the movement. They can be used with the accompanying code/polynomial-motion.C to act as a response slave, or to pre-generate a response file. For example,

code/polynomial-motion -output response.txt -deltaT 0.001 -nTimes 5001 files/polynomials.dict

To query the values at an individual time:

code/polynomial-motion -query -time 0.5 files/polynomials.dict