Month: January 2019

  • Vector Calculus in Bash Scripts

    When performing preparatory operations for e.g. CFD or FEM analyses, it is often necessary to specify vector parameters. Vector constants are easy to handle:

    DIR="1 0 0"
    
    myMesh --direction "$DIR"

    However, it quickly becomes complicated if the vectors have to be manipulated, e.g. multiplied by scalars or rotated.

    A powerful solution is to use the Matlab Octave clone to perform the operations. Two features of octave are useful in this context:

    • the command line option “–eval” to specify the expression to handle
    • the function “disp” to output the results in plain format in a single line

    An example:

    DIR="1 0 0"
    VELOCITY=$(octave --eval "disp( 11.*[$DIR] )")
    
    myMesh --direction "$DIR"
    mySolver --velocity "$VELOCITY"

    More complicated operation are possible. Though one needs to take care to produce line vectors as results. Rotation as an example:

    DIR="1 0 0"
    ANG=45
    
    DIR_ROT=$(octave --eval "pkg load linear-algebra; disp( (rotv([0 0 1], $ANG*pi/180)*[$DIR]')' )")
    
    myMesh --direction "$DIR_ROT"

     

en_USEnglish