月度归档: 2019年1月

  • Bash脚本中的向量微积分

    在进行 CFD 或 FEM 分析等准备工作时,通常需要指定矢量参数。矢量常数易于处理:

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

    然而,如果必须对向量进行运算,例如进行标量乘法或旋转,情况会迅速变得复杂。.

    一个强大的解决方案是使用 Matlab 的 Octave 克隆来进行操作。Octave 的两个特性在这种情况下很有用:

    • 命令行选项“–eval”用于指定要处理的表达式
    • 函数`disp`以单行纯文本格式输出结果

    一个例子:

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

    更复杂的操作也是可能的。虽然需要注意产生线矢量作为结果。例如旋转:

    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""