From b2d4f25fff71d5d79e96791e90467ac85bfcbabf Mon Sep 17 00:00:00 2001 From: Will Bainbridge Date: Wed, 21 Jun 2023 16:01:38 +0100 Subject: [PATCH] codeStream: Typed substitutions Dictionary entries constructed with #calc and #codeStream can now conveniently access and use typed variables. This means calculations involving vectors and tensors and list and field types are now possible. To access a variable and construct it as a given type within a #calc or #codeStream entry, put the type immediately after the $ symbol inside angled brackets <>. So, $var or ${var} substitutes a variable named var as a vector. Examples: - Reflect a point in a plane defined by a normal p (1 2 3); n (1 1 0); pStar #calc "$p - (2*sqr($n)/magSqr($n)&$p)"; - Rotate a list of points around an axis by a given angle points ((3 0 0) (2 1 1) (1 2 2) (0 3 3)); rotation { axis (0 1 1); angle 45; } #codeStream { codeInclude #{ #include "pointField.H" #include "transform.H" #}; code #{ const pointField points($>points); const vector axis = $!rotation/axis; const scalar angle = degToRad($!rotation/angle); os << "pointsRotated" << nl << (Ra(axis, angle) & points)() << ";"; #}; }; - Compute the centre and trianglation of a polygon polygon ((0 0 0) (1 0 0) (2 1 0) (0 2 0) (-1 1 0)); #codeStream { codeInclude #{ #include "polygonTriangulate.H" #}; code #{ const List polygon($>polygon); writeEntry(os, "polygonCentre", face::centre(polygon)); polygonTriangulate triEngine; triEngine.triangulate(polygon); os << "polygonTris" << ' ' << triEngine.triPoints() << ";"; #}; }; - Generate a single block blockMeshDict for use with snappyHexMesh with no redundant information min (-2.5 -1.2 -3.0); // Minimum coordinates of the block max (2.5 1.2 3.0); // Maximum coordinates of the block nCellsByL 33.3333; // Number of cells per unit length // Calculate the number of cells in each block direction nCells #calc "Vector