You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
691 lines
26 KiB
691 lines
26 KiB
1 year ago
|
(* Content-type: application/vnd.wolfram.mathematica *)
|
||
|
|
||
|
(*** Wolfram Notebook File ***)
|
||
|
(* http://www.wolfram.com/nb *)
|
||
|
|
||
|
(* CreatedBy='Mathematica 11.2' *)
|
||
|
|
||
|
(*CacheID: 234*)
|
||
|
(* Internal cache information:
|
||
|
NotebookFileLineBreakTest
|
||
|
NotebookFileLineBreakTest
|
||
|
NotebookDataPosition[ 158, 7]
|
||
|
NotebookDataLength[ 26945, 682]
|
||
|
NotebookOptionsPosition[ 25028, 642]
|
||
|
NotebookOutlinePosition[ 25367, 657]
|
||
|
CellTagsIndexPosition[ 25324, 654]
|
||
|
WindowFrame->Normal*)
|
||
|
|
||
|
(* Beginning of Notebook Content *)
|
||
|
Notebook[{
|
||
|
Cell[BoxData[
|
||
|
RowBox[{
|
||
|
RowBox[{"(*", "\[IndentingNewLine]", " ",
|
||
|
RowBox[{
|
||
|
"Makes", " ", "a", " ", "mesh", " ", "from", " ", "a", " ", "black", " ",
|
||
|
"and", " ", "white", " ", "image", " ", "with", " ", "white", " ",
|
||
|
"parts", " ", "being", " ", "the", " ",
|
||
|
RowBox[{"interior", ".", "\[IndentingNewLine]", "The"}], " ", "distances",
|
||
|
" ", "between", " ", "nodes", " ", "are", " ", "approximately", " ",
|
||
|
"dx", " ",
|
||
|
RowBox[{"pixels", "."}]}], "\[IndentingNewLine]", "*)"}],
|
||
|
"\[IndentingNewLine]",
|
||
|
RowBox[{
|
||
|
RowBox[{
|
||
|
RowBox[{"makemesh", "[",
|
||
|
RowBox[{"inputFilename_", ",", "dx_"}], "]"}], " ", ":=", " ",
|
||
|
RowBox[{"Module", "[",
|
||
|
RowBox[{
|
||
|
RowBox[{"{",
|
||
|
RowBox[{"img", ",", "region", ",", "mesh"}], "}"}], ",",
|
||
|
"\[IndentingNewLine]",
|
||
|
RowBox[{
|
||
|
RowBox[{"img", "=",
|
||
|
RowBox[{"ColorNegate", "[",
|
||
|
RowBox[{"Import", "[", "inputFilename", "]"}], "]"}]}], ";",
|
||
|
"\[IndentingNewLine]",
|
||
|
RowBox[{"region", " ", "=", " ",
|
||
|
RowBox[{"ImageMesh", "[", "img", "]"}]}], ";", "\[IndentingNewLine]",
|
||
|
|
||
|
RowBox[{"mesh", "=",
|
||
|
RowBox[{"TriangulateMesh", "[",
|
||
|
RowBox[{"region", ",",
|
||
|
RowBox[{"MaxCellMeasure", "\[Rule]", "dx"}]}], "]"}]}]}]}],
|
||
|
"\[IndentingNewLine]", "]"}]}], "\[IndentingNewLine]",
|
||
|
RowBox[{
|
||
|
RowBox[{"getnormal", "[",
|
||
|
RowBox[{
|
||
|
RowBox[{"{",
|
||
|
RowBox[{"i1_", ",", "i2_"}], "}"}], ",", "coords_"}], "]"}], ":=",
|
||
|
RowBox[{
|
||
|
RowBox[{"{",
|
||
|
RowBox[{
|
||
|
RowBox[{"{",
|
||
|
RowBox[{"0", ",",
|
||
|
RowBox[{"-", "1"}]}], "}"}], ",",
|
||
|
RowBox[{"{",
|
||
|
RowBox[{"1", ",", "0"}], "}"}]}], "}"}], ".",
|
||
|
RowBox[{"(",
|
||
|
RowBox[{
|
||
|
RowBox[{"coords", "[",
|
||
|
RowBox[{"[", "i1", "]"}], "]"}], "-",
|
||
|
RowBox[{"coords", "[",
|
||
|
RowBox[{"[", "i2", "]"}], "]"}]}], ")"}]}]}], "\[IndentingNewLine]",
|
||
|
RowBox[{
|
||
|
RowBox[{"getnormal", "[",
|
||
|
RowBox[{
|
||
|
RowBox[{"{",
|
||
|
RowBox[{"i1_", ",", "i2_", ",", "i3_"}], "}"}], ",", "coords_"}],
|
||
|
"]"}], ":=",
|
||
|
RowBox[{"Cross", "[",
|
||
|
RowBox[{
|
||
|
RowBox[{
|
||
|
RowBox[{"coords", "[",
|
||
|
RowBox[{"[", "i1", "]"}], "]"}], "-",
|
||
|
RowBox[{"coords", "[",
|
||
|
RowBox[{"[", "i2", "]"}], "]"}]}], ",",
|
||
|
RowBox[{
|
||
|
RowBox[{"coords", "[",
|
||
|
RowBox[{"[", "i2", "]"}], "]"}], "-",
|
||
|
RowBox[{"coords", "[",
|
||
|
RowBox[{"[", "i3", "]"}], "]"}]}]}], "]"}]}], "\[IndentingNewLine]",
|
||
|
RowBox[{"(*", "\[IndentingNewLine]",
|
||
|
RowBox[{
|
||
|
RowBox[{"Save", " ", "mesh", " ", "in", " ", "HDF5", " ",
|
||
|
RowBox[{"format", ".", " ", "\[IndentingNewLine]", "Normals"}], " ",
|
||
|
"in", " ", "nodes", " ", "are", " ", "computed", " ", "as", " ",
|
||
|
"averages", " ", "of", " ", "normals", " ", "of", " ", "dim"}], "-",
|
||
|
RowBox[{
|
||
|
"1", " ", "\"\<faces\>\"", " ", "bordering", " ", "on", " ", "the", " ",
|
||
|
|
||
|
RowBox[{"node", ".", "\[IndentingNewLine]", "Nodes"}], " ", "closer",
|
||
|
" ", "than", " ", "cutoffDx", " ", "are", " ",
|
||
|
RowBox[{"cleared", ".", "\[IndentingNewLine]", "The"}], " ", "mesh",
|
||
|
" ", "is", " ", "saved", " ", "in", " ", "HDF5", " ", "format", " ",
|
||
|
RowBox[{"(",
|
||
|
RowBox[{"you", " ", "filename", " ", "must", " ", "end", " ",
|
||
|
RowBox[{"in", " ", ".", "h5"}]}], ")"}], " ", "ready", " ", "for",
|
||
|
" ", "import", " ", "into", " ",
|
||
|
RowBox[{"C", "++"}]}]}], "\[IndentingNewLine]", "*)"}],
|
||
|
"\[IndentingNewLine]",
|
||
|
RowBox[{
|
||
|
RowBox[{"savemesh", "[",
|
||
|
RowBox[{"mesh_", ",", " ", "cuttofDx_", ",", "outputFilename_", ",",
|
||
|
RowBox[{"outputGroupname_:", "\"\<domain\>\""}]}], "]"}], ":=",
|
||
|
RowBox[{"Module", "[",
|
||
|
RowBox[{
|
||
|
RowBox[{"{",
|
||
|
RowBox[{
|
||
|
"coords", ",", "dim", ",", "int", ",", "bnd", ",", "bndmap", ",",
|
||
|
"types", ",", "normals", ",", "bndlines", ",", "rot", ",",
|
||
|
"problematic", ",", "problematicBnd", ",", "remove", ",", "labeled",
|
||
|
",", "smallerThan", ",", "cnt", ",", "pidx", ",", "me"}], "}"}], ",",
|
||
|
"\[IndentingNewLine]",
|
||
|
RowBox[{
|
||
|
RowBox[{"coords", "=",
|
||
|
RowBox[{"MeshCoordinates", "[", "mesh", "]"}]}], ";",
|
||
|
"\[IndentingNewLine]",
|
||
|
RowBox[{"dim", " ", "=", " ",
|
||
|
RowBox[{"Length", "[",
|
||
|
RowBox[{"coords", "[",
|
||
|
RowBox[{"[", "1", "]"}], "]"}], "]"}]}], ";", "\[IndentingNewLine]",
|
||
|
RowBox[{"Print", "[",
|
||
|
RowBox[{"\"\<Generated \>\"", "<>",
|
||
|
RowBox[{"ToString", "[",
|
||
|
RowBox[{"Length", "[", "coords", "]"}], "]"}], "<>",
|
||
|
"\"\< points.\>\""}], "]"}], ";", "\[IndentingNewLine]",
|
||
|
RowBox[{"int", "=",
|
||
|
RowBox[{"Map", "[",
|
||
|
RowBox[{"First", ",",
|
||
|
RowBox[{"MeshCells", "[",
|
||
|
RowBox[{"mesh", ",",
|
||
|
RowBox[{"{",
|
||
|
RowBox[{"0", ",", "\"\<Interior\>\""}], "}"}]}], "]"}]}],
|
||
|
"]"}]}], ";", "\[IndentingNewLine]",
|
||
|
RowBox[{"bnd", "=",
|
||
|
RowBox[{"Map", "[",
|
||
|
RowBox[{"First", ",",
|
||
|
RowBox[{"MeshCells", "[",
|
||
|
RowBox[{"mesh", ",",
|
||
|
RowBox[{"{",
|
||
|
RowBox[{"0", ",", "\"\<Boundary\>\""}], "}"}]}], "]"}]}],
|
||
|
"]"}]}], ";", "\[IndentingNewLine]",
|
||
|
RowBox[{"bndmap", " ", "=", " ",
|
||
|
RowBox[{"Table", "[",
|
||
|
RowBox[{
|
||
|
RowBox[{"-", "1"}], ",",
|
||
|
RowBox[{"Length", "[", "coords", "]"}]}], "]"}]}], ";",
|
||
|
"\[IndentingNewLine]",
|
||
|
RowBox[{"types", "=", "bndmap"}], ";", "\[IndentingNewLine]",
|
||
|
RowBox[{
|
||
|
RowBox[{"types", "[",
|
||
|
RowBox[{"[", "int", "]"}], "]"}], "=", "1"}], ";",
|
||
|
"\[IndentingNewLine]",
|
||
|
RowBox[{
|
||
|
RowBox[{"types", "[",
|
||
|
RowBox[{"[", "bnd", "]"}], "]"}], "=",
|
||
|
RowBox[{"-", "1"}]}], ";", "\[IndentingNewLine]",
|
||
|
RowBox[{"Table", "[",
|
||
|
RowBox[{
|
||
|
RowBox[{
|
||
|
RowBox[{
|
||
|
RowBox[{"bndmap", "[",
|
||
|
RowBox[{"[",
|
||
|
RowBox[{"bnd", "[",
|
||
|
RowBox[{"[", "i", "]"}], "]"}], "]"}], "]"}], "=",
|
||
|
RowBox[{"i", "-", "1"}]}], ";"}], ",",
|
||
|
RowBox[{"{",
|
||
|
RowBox[{"i", ",", "1", ",",
|
||
|
RowBox[{"Length", "[", "bnd", "]"}]}], "}"}]}], "]"}], ";",
|
||
|
"\[IndentingNewLine]",
|
||
|
RowBox[{"normals", "=",
|
||
|
RowBox[{"Table", "[",
|
||
|
RowBox[{
|
||
|
RowBox[{"Table", "[",
|
||
|
RowBox[{"0", ",",
|
||
|
RowBox[{"{",
|
||
|
RowBox[{"i", ",", "dim"}], "}"}]}], "]"}], ",", " ",
|
||
|
RowBox[{"{",
|
||
|
RowBox[{"x", ",", "bnd"}], "}"}]}], "]"}]}], ";",
|
||
|
"\[IndentingNewLine]",
|
||
|
RowBox[{"bndlines", " ", "=", " ",
|
||
|
RowBox[{"MeshCells", "[",
|
||
|
RowBox[{"mesh", ",",
|
||
|
RowBox[{"{",
|
||
|
RowBox[{
|
||
|
RowBox[{"dim", "-", "1"}], ",", "\"\<Boundary\>\""}], "}"}]}],
|
||
|
"]"}]}], ";", "\[IndentingNewLine]",
|
||
|
RowBox[{"Table", "[", "\[IndentingNewLine]",
|
||
|
RowBox[{
|
||
|
RowBox[{
|
||
|
RowBox[{"With", "[",
|
||
|
RowBox[{
|
||
|
RowBox[{"{",
|
||
|
RowBox[{"n", "=",
|
||
|
RowBox[{"getnormal", "[",
|
||
|
RowBox[{"line", ",", "coords"}], "]"}]}], "}"}], ",",
|
||
|
"\[IndentingNewLine]",
|
||
|
RowBox[{"Table", "[", "\[IndentingNewLine]",
|
||
|
RowBox[{
|
||
|
RowBox[{
|
||
|
RowBox[{
|
||
|
RowBox[{"normals", "[",
|
||
|
RowBox[{"[",
|
||
|
RowBox[{
|
||
|
RowBox[{"bndmap", "[",
|
||
|
RowBox[{"[", "idx", "]"}], "]"}], "+", "1"}], "]"}],
|
||
|
"]"}], "+=", "n"}], ";"}], "\[IndentingNewLine]", ",",
|
||
|
RowBox[{"{",
|
||
|
RowBox[{"idx", ",", "line"}], "}"}]}], "]"}]}], "]"}], ";"}],
|
||
|
"\[IndentingNewLine]", ",",
|
||
|
RowBox[{"{",
|
||
|
RowBox[{"line", ",",
|
||
|
RowBox[{"First", "/@", "bndlines"}]}], "}"}]}], "]"}], ";",
|
||
|
"\[IndentingNewLine]",
|
||
|
RowBox[{"normals", "=",
|
||
|
RowBox[{"Normalize", "/@", "normals"}]}], ";", "\[IndentingNewLine]",
|
||
|
"\[IndentingNewLine]",
|
||
|
RowBox[{"(*", " ",
|
||
|
RowBox[{"clean", " ", "too", " ", "close", " ", "points"}], " ",
|
||
|
"*)"}], "\[IndentingNewLine]",
|
||
|
RowBox[{"labeled", "=",
|
||
|
RowBox[{"Table", "[",
|
||
|
RowBox[{
|
||
|
RowBox[{
|
||
|
RowBox[{"coords", "[",
|
||
|
RowBox[{"[", "i", "]"}], "]"}], "\[Rule]", "i"}], ",", " ",
|
||
|
RowBox[{"{",
|
||
|
RowBox[{"i", ",", " ",
|
||
|
RowBox[{"Length", "[", "coords", "]"}]}], "}"}]}], "]"}]}], ";",
|
||
|
"\[IndentingNewLine]",
|
||
|
RowBox[{"problematic", " ", "=", " ",
|
||
|
RowBox[{"Nearest", "[",
|
||
|
RowBox[{"labeled", ",", "coords", ",",
|
||
|
RowBox[{"{",
|
||
|
RowBox[{"1000", ",", " ", "cuttofDx"}], "}"}]}], "]"}]}], ";",
|
||
|
"\[IndentingNewLine]",
|
||
|
RowBox[{"remove", " ", "=",
|
||
|
RowBox[{"Union", "@",
|
||
|
RowBox[{"Flatten", "@",
|
||
|
RowBox[{"Rest", "@",
|
||
|
RowBox[{"Reap", "[",
|
||
|
RowBox[{
|
||
|
RowBox[{"Table", "[",
|
||
|
RowBox[{
|
||
|
RowBox[{
|
||
|
RowBox[{"me", "=",
|
||
|
RowBox[{"p", "[",
|
||
|
RowBox[{"[", "1", "]"}], "]"}]}], ";",
|
||
|
RowBox[{"Table", "[",
|
||
|
RowBox[{
|
||
|
RowBox[{"If", "[",
|
||
|
RowBox[{
|
||
|
RowBox[{"me", " ", "<", " ", "o"}], ",", " ",
|
||
|
RowBox[{"Sow", "[", "o", "]"}], ","}], "]"}], ",",
|
||
|
RowBox[{"{",
|
||
|
RowBox[{"o", ",", " ",
|
||
|
RowBox[{"Rest", "[", "p", "]"}]}], "}"}]}], "]"}]}], ",",
|
||
|
|
||
|
RowBox[{"{",
|
||
|
RowBox[{"p", ",", "problematic"}], "}"}]}], "]"}], ";"}],
|
||
|
"]"}]}]}]}]}], ";", "\[IndentingNewLine]",
|
||
|
RowBox[{"problematicBnd", " ", "=",
|
||
|
RowBox[{"Sort", "[",
|
||
|
RowBox[{"Select", "[",
|
||
|
RowBox[{
|
||
|
RowBox[{
|
||
|
RowBox[{"bndmap", "[",
|
||
|
RowBox[{"[",
|
||
|
RowBox[{"Flatten", "@", "remove"}], "]"}], "]"}], "+", "1"}],
|
||
|
",",
|
||
|
RowBox[{
|
||
|
RowBox[{"#", "\[NotEqual]", "0"}], "&"}]}], "]"}], "]"}]}], ";",
|
||
|
"\[IndentingNewLine]",
|
||
|
RowBox[{"normals", "=",
|
||
|
RowBox[{"Delete", "[",
|
||
|
RowBox[{"normals", ",",
|
||
|
RowBox[{"List", "/@", "problematicBnd"}]}], "]"}]}], ";",
|
||
|
"\[IndentingNewLine]",
|
||
|
RowBox[{"smallerThan", "=",
|
||
|
RowBox[{"Table", "[",
|
||
|
RowBox[{"0", ",",
|
||
|
RowBox[{"{",
|
||
|
RowBox[{"i", ",",
|
||
|
RowBox[{"Length", "[", "bndmap", "]"}]}], "}"}]}], "]"}]}], ";",
|
||
|
"\[IndentingNewLine]",
|
||
|
RowBox[{"pidx", "=", "1"}], ";", " ",
|
||
|
RowBox[{"cnt", "=", "0"}], ";", "\[IndentingNewLine]",
|
||
|
RowBox[{"Table", "[", "\[IndentingNewLine]",
|
||
|
RowBox[{
|
||
|
RowBox[{
|
||
|
RowBox[{"If", "[",
|
||
|
RowBox[{
|
||
|
RowBox[{
|
||
|
RowBox[{"pidx", "<=",
|
||
|
RowBox[{"Length", "@", "problematicBnd"}]}], "&&",
|
||
|
RowBox[{
|
||
|
RowBox[{"problematicBnd", "[",
|
||
|
RowBox[{"[", "pidx", "]"}], "]"}], "\[Equal]",
|
||
|
RowBox[{"i", "-", "1"}]}]}], ",",
|
||
|
RowBox[{
|
||
|
RowBox[{"cnt", "++"}], ";",
|
||
|
RowBox[{"pidx", "++"}], ";"}], ","}], "]"}], ";",
|
||
|
"\[IndentingNewLine]",
|
||
|
RowBox[{
|
||
|
RowBox[{"smallerThan", "[",
|
||
|
RowBox[{"[", "i", "]"}], "]"}], "=", "cnt"}], ";"}],
|
||
|
"\[IndentingNewLine]", ",",
|
||
|
RowBox[{"{",
|
||
|
RowBox[{"i", ",",
|
||
|
RowBox[{"Length", "@", "bndmap"}]}], "}"}]}], "]"}], ";",
|
||
|
"\[IndentingNewLine]",
|
||
|
RowBox[{"bndmap", "-=", "smallerThan"}], ";", "\[IndentingNewLine]",
|
||
|
RowBox[{
|
||
|
RowBox[{"bndmap", "[",
|
||
|
RowBox[{"[", "int", "]"}], "]"}], "=",
|
||
|
RowBox[{"-", "1"}]}], ";", "\[IndentingNewLine]",
|
||
|
RowBox[{"bndmap", "=",
|
||
|
RowBox[{"Delete", "[",
|
||
|
RowBox[{"bndmap", ",",
|
||
|
RowBox[{"List", "/@", "remove"}]}], "]"}]}], ";",
|
||
|
"\[IndentingNewLine]",
|
||
|
RowBox[{"coords", "=",
|
||
|
RowBox[{"Delete", "[",
|
||
|
RowBox[{"coords", ",",
|
||
|
RowBox[{"List", "/@", "remove"}]}], "]"}]}], ";",
|
||
|
"\[IndentingNewLine]",
|
||
|
RowBox[{"types", "=",
|
||
|
RowBox[{"Delete", "[",
|
||
|
RowBox[{"types", ",",
|
||
|
RowBox[{"List", "/@", "remove"}]}], "]"}]}], ";",
|
||
|
"\[IndentingNewLine]",
|
||
|
RowBox[{"int", " ", "=", " ",
|
||
|
RowBox[{"Flatten", "@",
|
||
|
RowBox[{"Position", "[",
|
||
|
RowBox[{"types", ",", "1"}], "]"}]}]}], ";", "\[IndentingNewLine]",
|
||
|
|
||
|
RowBox[{"bnd", " ", "=", " ",
|
||
|
RowBox[{"Flatten", "@",
|
||
|
RowBox[{"Position", "[",
|
||
|
RowBox[{"types", ",",
|
||
|
RowBox[{"-", "1"}]}], "]"}]}]}], ";", "\[IndentingNewLine]",
|
||
|
RowBox[{"Print", "[",
|
||
|
RowBox[{"\"\<Exporing \>\"", "<>",
|
||
|
RowBox[{"ToString", "[",
|
||
|
RowBox[{"Length", "[", "coords", "]"}], "]"}], "<>",
|
||
|
"\"\< points.\>\""}], "]"}], ";", "\[IndentingNewLine]",
|
||
|
"\[IndentingNewLine]",
|
||
|
RowBox[{"Export", "[",
|
||
|
RowBox[{"outputFilename", ",",
|
||
|
RowBox[{"{",
|
||
|
RowBox[{"bndmap", ",",
|
||
|
RowBox[{"Transpose", "@", "coords"}], ",", "types", ",",
|
||
|
RowBox[{"Transpose", "@", "normals"}]}], "}"}], ",",
|
||
|
RowBox[{"{",
|
||
|
RowBox[{"\"\<Datasets\>\"", ",",
|
||
|
RowBox[{"{",
|
||
|
RowBox[{
|
||
|
RowBox[{"outputGroupname", "<>", "\"\</bmap\>\""}], ",",
|
||
|
RowBox[{"outputGroupname", "<>", "\"\</pos\>\""}], ",",
|
||
|
RowBox[{"outputGroupname", "<>", "\"\</types\>\""}], ",",
|
||
|
RowBox[{"outputGroupname", "<>", "\"\</normals\>\""}]}], "}"}]}],
|
||
|
"}"}]}], "]"}], ";", "\[IndentingNewLine]",
|
||
|
RowBox[{"Print", "[", "\"\<Exported.\>\"", "]"}], ";",
|
||
|
"\[IndentingNewLine]",
|
||
|
RowBox[{"{",
|
||
|
RowBox[{
|
||
|
"coords", ",", "int", ",", "bnd", ",", "bndmap", ",", "normals"}],
|
||
|
"}"}]}]}], " ", "\[IndentingNewLine]", "]"}]}]}]}]], "Input",
|
||
|
CellChangeTimes->{{3.7247334878243713`*^9, 3.724733541560853*^9}, {
|
||
|
3.724733579854739*^9, 3.724733940807542*^9}, {3.724733980879203*^9,
|
||
|
3.72473400671909*^9}, {3.724735149200598*^9, 3.724735203134527*^9}, {
|
||
|
3.72473811738824*^9, 3.7247381312599688`*^9}, 3.724740923884136*^9,
|
||
|
3.724740973010792*^9, {3.725018465033443*^9, 3.725018479984454*^9}, {
|
||
|
3.7368391176058273`*^9, 3.736839123372776*^9}, {3.736840296147872*^9,
|
||
|
3.736840299554468*^9}, 3.736840331347755*^9, {3.736840812045011*^9,
|
||
|
3.736840873051276*^9}, {3.736840948130877*^9, 3.7368410317001047`*^9}, {
|
||
|
3.7368410856767473`*^9, 3.73684111032653*^9}, {3.7368414244111977`*^9,
|
||
|
3.736841460154666*^9}, {3.7368418089529047`*^9, 3.736841907272053*^9}, {
|
||
|
3.736841943230834*^9, 3.736841954094578*^9}, {3.73684206857778*^9,
|
||
|
3.736842228488431*^9}, {3.7368423131103888`*^9, 3.736842362269998*^9}, {
|
||
|
3.736842401908106*^9, 3.736842509527501*^9}, {3.736842571962947*^9,
|
||
|
3.736842761829723*^9}, {3.736842868524811*^9, 3.736842912854233*^9}, {
|
||
|
3.736843045207212*^9, 3.736843070675877*^9}, {3.736843104708448*^9,
|
||
|
3.736843151612713*^9}, {3.736843205980782*^9, 3.736843241118071*^9}, {
|
||
|
3.737631416835927*^9, 3.737631417410201*^9}, {3.737632429369095*^9,
|
||
|
3.737632456251494*^9}, {3.737632503824068*^9, 3.737632547534273*^9}, {
|
||
|
3.737632629671907*^9, 3.737632636767661*^9}, {3.7376327006370773`*^9,
|
||
|
3.73763270076378*^9}, {3.737633963492127*^9, 3.737633997715987*^9}, {
|
||
|
3.7376341119915867`*^9, 3.737634121026705*^9}, {3.737634156274988*^9,
|
||
|
3.737634168375757*^9}, {3.737634199733982*^9, 3.737634248005319*^9}, {
|
||
|
3.737634299321972*^9, 3.737634591512186*^9}, {3.737634942903132*^9,
|
||
|
3.7376349678879633`*^9}, {3.737635248054596*^9, 3.7376352559210663`*^9}, {
|
||
|
3.737639732953611*^9, 3.737639764423747*^9}, {3.737705666501556*^9,
|
||
|
3.737705676621965*^9}, {3.7377058525968924`*^9, 3.737705893335916*^9}, {
|
||
|
3.737706039938301*^9,
|
||
|
3.737706092649145*^9}},ExpressionUUID->"88fa1ae8-8654-4a78-85a2-\
|
||
|
18944a4ade8e"],
|
||
|
|
||
|
Cell[BoxData[
|
||
|
RowBox[{"mesh", "=",
|
||
|
RowBox[{"makemesh", "[",
|
||
|
RowBox[{"\"\<medusa.png\>\"", ",", "30"}], "]"}]}]], "Input",
|
||
|
CellChangeTimes->{{3.724733888407043*^9, 3.724733901635655*^9}, {
|
||
|
3.724733949829278*^9, 3.724733971941495*^9}, 3.724734021325369*^9, {
|
||
|
3.724734051493593*^9, 3.724734052145832*^9}, {3.724735219748385*^9,
|
||
|
3.7247352245211363`*^9}, {3.724738002176036*^9, 3.724738073848483*^9}, {
|
||
|
3.724738234777645*^9, 3.724738249066004*^9}, {3.724740022508498*^9,
|
||
|
3.7247400268831577`*^9}, {3.724740686694626*^9, 3.724740689458975*^9},
|
||
|
3.7250184877767363`*^9, {3.725019137836894*^9, 3.725019139675047*^9}, {
|
||
|
3.736800611886237*^9, 3.73680061627072*^9}, 3.736839950653474*^9, {
|
||
|
3.7368401499672956`*^9, 3.736840150141581*^9}, {3.736843232121484*^9,
|
||
|
3.7368432328493767`*^9}, {3.7376325569541817`*^9, 3.737632558206593*^9}, {
|
||
|
3.737632650197297*^9, 3.737632655015875*^9}, 3.737634519372143*^9, {
|
||
|
3.737634854911536*^9, 3.73763486569593*^9}, {3.737639617595024*^9,
|
||
|
3.737639617991255*^9}},ExpressionUUID->"c84fa27e-4738-4f52-aa94-\
|
||
|
5c3f9343bb89"],
|
||
|
|
||
|
Cell[CellGroupData[{
|
||
|
|
||
|
Cell[BoxData[
|
||
|
RowBox[{
|
||
|
RowBox[{
|
||
|
RowBox[{"{",
|
||
|
RowBox[{"coords", ",", "int", ",", "bnd", ",", "bndmap", ",", "normals"}],
|
||
|
"}"}], "=",
|
||
|
RowBox[{"savemesh", "[",
|
||
|
RowBox[{"mesh", ",", " ", "3", ",", " ", "\"\<medusa.h5\>\""}], "]"}]}],
|
||
|
";"}]], "Input",
|
||
|
CellChangeTimes->{{3.737632696352434*^9, 3.737632736438958*^9}, {
|
||
|
3.737633563277495*^9, 3.737633625522213*^9}, {3.737633676502956*^9,
|
||
|
3.737633707835682*^9}, {3.737633739579858*^9,
|
||
|
3.7376337396537046`*^9}},ExpressionUUID->"9656cbf4-29ae-4173-91c5-\
|
||
|
9f700bed7fdb"],
|
||
|
|
||
|
Cell[CellGroupData[{
|
||
|
|
||
|
Cell[BoxData["\<\"Generated 3666 points.\"\>"], "Print",
|
||
|
CellChangeTimes->{3.7376397715543337`*^9,
|
||
|
3.737705723556921*^9},ExpressionUUID->"12a07253-847f-474e-a695-\
|
||
|
ea1e07db838a"],
|
||
|
|
||
|
Cell[BoxData["\<\"Exporing 3543 points.\"\>"], "Print",
|
||
|
CellChangeTimes->{3.7376397715543337`*^9,
|
||
|
3.737705723590304*^9},ExpressionUUID->"2ea65938-5ddf-4bac-b061-\
|
||
|
1b01b3894a6c"],
|
||
|
|
||
|
Cell[BoxData["\<\"Exported.\"\>"], "Print",
|
||
|
CellChangeTimes->{3.7376397715543337`*^9,
|
||
|
3.737705723635234*^9},ExpressionUUID->"f346d1c6-9595-4841-b046-\
|
||
|
42cb4e12b3dd"]
|
||
|
}, Open ]]
|
||
|
}, Open ]],
|
||
|
|
||
|
Cell[CellGroupData[{
|
||
|
|
||
|
Cell[BoxData[
|
||
|
RowBox[{"{",
|
||
|
RowBox[{
|
||
|
RowBox[{
|
||
|
RowBox[{"Length", "[", "int", "]"}], "+",
|
||
|
RowBox[{"Length", "[", "bnd", "]"}]}], ",",
|
||
|
RowBox[{"Length", "[", "coords", "]"}], ",",
|
||
|
RowBox[{"Length", "[", "bndmap", "]"}], ",",
|
||
|
RowBox[{"Length", "[", "normals", "]"}], ",",
|
||
|
RowBox[{"Length", "[", "bnd", "]"}]}], "}"}]], "Input",
|
||
|
CellChangeTimes->{{3.736842792533774*^9, 3.7368428107238417`*^9}, {
|
||
|
3.736842927622316*^9,
|
||
|
3.736842987373911*^9}},ExpressionUUID->"1309dbe6-3672-426d-ae8a-\
|
||
|
1f682028e209"],
|
||
|
|
||
|
Cell[BoxData[
|
||
|
RowBox[{"{",
|
||
|
RowBox[{"3543", ",", "3543", ",", "3543", ",", "512", ",", "512"}],
|
||
|
"}"}]], "Output",
|
||
|
CellChangeTimes->{3.7376397728713293`*^9,
|
||
|
3.7377057270117197`*^9},ExpressionUUID->"cb11bf2a-f9eb-42e2-8bef-\
|
||
|
cd4126a595ac"]
|
||
|
}, Open ]],
|
||
|
|
||
|
Cell[BoxData[{
|
||
|
RowBox[{
|
||
|
RowBox[{"arrows", " ", "=", " ",
|
||
|
RowBox[{"Table", "[",
|
||
|
RowBox[{
|
||
|
RowBox[{"Arrow", "[",
|
||
|
RowBox[{"{",
|
||
|
RowBox[{
|
||
|
RowBox[{"coords", "[",
|
||
|
RowBox[{"[", "i", "]"}], "]"}], ",", " ",
|
||
|
RowBox[{
|
||
|
RowBox[{"coords", "[",
|
||
|
RowBox[{"[", "i", "]"}], "]"}], "+",
|
||
|
RowBox[{"30", " ",
|
||
|
RowBox[{"normals", "[",
|
||
|
RowBox[{"[",
|
||
|
RowBox[{
|
||
|
RowBox[{"bndmap", "[",
|
||
|
RowBox[{"[", "i", "]"}], "]"}], "+", "1"}], "]"}], "]"}]}]}]}],
|
||
|
"}"}], "]"}], ",",
|
||
|
RowBox[{"{",
|
||
|
RowBox[{"i", ",", "bnd"}], "}"}]}], "]"}]}],
|
||
|
";"}], "\[IndentingNewLine]",
|
||
|
RowBox[{"Show", "[", "\[IndentingNewLine]",
|
||
|
RowBox[{
|
||
|
RowBox[{"ListPlot", "[",
|
||
|
RowBox[{
|
||
|
RowBox[{"{",
|
||
|
RowBox[{
|
||
|
RowBox[{"coords", "[",
|
||
|
RowBox[{"[", "int", "]"}], "]"}], ",",
|
||
|
RowBox[{"coords", "[",
|
||
|
RowBox[{"[", "bnd", "]"}], "]"}]}], "}"}], ",",
|
||
|
RowBox[{"AspectRatio", "\[Rule]", "Automatic"}]}], "]"}], ",",
|
||
|
"\[IndentingNewLine]",
|
||
|
RowBox[{"Graphics", "[",
|
||
|
RowBox[{"{",
|
||
|
RowBox[{
|
||
|
RowBox[{"Arrowheads", "[", "Medium", "]"}], ",", "arrows"}], "}"}],
|
||
|
"]"}]}], "\[IndentingNewLine]", "]"}]}], "Input",
|
||
|
CellChangeTimes->{{3.725018515244507*^9, 3.725018694264481*^9}, {
|
||
|
3.725018797465255*^9, 3.725018918557602*^9}, 3.725019144052685*^9, {
|
||
|
3.737705733985512*^9,
|
||
|
3.737705738322792*^9}},ExpressionUUID->"26972883-20a6-4890-8092-\
|
||
|
c78548cfb454"],
|
||
|
|
||
|
Cell[CellGroupData[{
|
||
|
|
||
|
Cell[BoxData[{
|
||
|
RowBox[{"model", "=",
|
||
|
RowBox[{"Import", "[",
|
||
|
RowBox[{"\"\<heatsink.stl\>\"", ",", "\"\<BoundaryMeshRegion\>\""}],
|
||
|
"]"}]}], "\[IndentingNewLine]",
|
||
|
RowBox[{
|
||
|
RowBox[{"mesh", " ", "=", " ",
|
||
|
RowBox[{"TriangulateMesh", "[",
|
||
|
RowBox[{"model", ",",
|
||
|
RowBox[{"MaxCellMeasure", "\[Rule]", "1"}]}], "]"}]}],
|
||
|
";"}], "\[IndentingNewLine]",
|
||
|
RowBox[{"MeshCellCount", "[",
|
||
|
RowBox[{"mesh", ",", "0"}], "]"}]}], "Input",
|
||
|
CellChangeTimes->{{3.7377054317273684`*^9, 3.7377054443568573`*^9}, {
|
||
|
3.737705486520459*^9,
|
||
|
3.73770555222602*^9}},ExpressionUUID->"6f95c23c-cda6-4120-90d3-\
|
||
|
7d35d282c451"],
|
||
|
|
||
|
Cell[BoxData["22378"], "Output",
|
||
|
CellChangeTimes->{
|
||
|
3.737705445182889*^9, {3.737705489571312*^9, 3.7377055531491623`*^9},
|
||
|
3.737705744139723*^9},ExpressionUUID->"6b28c9bc-cd08-4072-b7d3-\
|
||
|
5cb53ad834fc"]
|
||
|
}, Open ]],
|
||
|
|
||
|
Cell[CellGroupData[{
|
||
|
|
||
|
Cell[BoxData[
|
||
|
RowBox[{
|
||
|
RowBox[{
|
||
|
RowBox[{"{",
|
||
|
RowBox[{"coords", ",", "int", ",", "bnd", ",", "bndmap", ",", "normals"}],
|
||
|
"}"}], "=",
|
||
|
RowBox[{"savemesh", "[",
|
||
|
RowBox[{"mesh", ",", " ", "0.1", ",", " ", "\"\<heatsink.h5\>\""}],
|
||
|
"]"}]}], ";"}]], "Input",
|
||
|
CellChangeTimes->{{3.737705557848433*^9, 3.737705630736795*^9},
|
||
|
3.737705701072466*^9, {3.737705754229198*^9,
|
||
|
3.737705763578299*^9}},ExpressionUUID->"54e7a7e3-3302-4d27-9c9c-\
|
||
|
58d90807dda9"],
|
||
|
|
||
|
Cell[CellGroupData[{
|
||
|
|
||
|
Cell[BoxData["\<\"Generated 22378 points.\"\>"], "Print",
|
||
|
CellChangeTimes->{{3.737705755866207*^9,
|
||
|
3.737705764357113*^9}},ExpressionUUID->"56f91db4-46c4-4d8c-857e-\
|
||
|
63771964c0ae"],
|
||
|
|
||
|
Cell[BoxData["\<\"Exporing 20891 points.\"\>"], "Print",
|
||
|
CellChangeTimes->{{3.737705755866207*^9,
|
||
|
3.7377057662510033`*^9}},ExpressionUUID->"9e08ca72-ff30-4e72-ab0b-\
|
||
|
c1aa07941c42"],
|
||
|
|
||
|
Cell[BoxData["\<\"Exported.\"\>"], "Print",
|
||
|
CellChangeTimes->{{3.737705755866207*^9,
|
||
|
3.737705766261582*^9}},ExpressionUUID->"07c052f4-414d-458d-92c4-\
|
||
|
0ef42b8ca05f"]
|
||
|
}, Open ]]
|
||
|
}, Open ]],
|
||
|
|
||
|
Cell[BoxData[{
|
||
|
RowBox[{
|
||
|
RowBox[{"arrows", " ", "=", " ",
|
||
|
RowBox[{"Table", "[",
|
||
|
RowBox[{
|
||
|
RowBox[{"Arrow", "[",
|
||
|
RowBox[{"{",
|
||
|
RowBox[{
|
||
|
RowBox[{"coords", "[",
|
||
|
RowBox[{"[", "i", "]"}], "]"}], ",", " ",
|
||
|
RowBox[{
|
||
|
RowBox[{"coords", "[",
|
||
|
RowBox[{"[", "i", "]"}], "]"}], "+",
|
||
|
RowBox[{"2", " ",
|
||
|
RowBox[{"normals", "[",
|
||
|
RowBox[{"[",
|
||
|
RowBox[{
|
||
|
RowBox[{"bndmap", "[",
|
||
|
RowBox[{"[", "i", "]"}], "]"}], "+", "1"}], "]"}], "]"}]}]}]}],
|
||
|
"}"}], "]"}], ",",
|
||
|
RowBox[{"{",
|
||
|
RowBox[{"i", ",", "bnd"}], "}"}]}], "]"}]}],
|
||
|
";"}], "\[IndentingNewLine]",
|
||
|
RowBox[{"Show", "[", "\[IndentingNewLine]",
|
||
|
RowBox[{
|
||
|
RowBox[{"ListPointPlot3D", "[",
|
||
|
RowBox[{
|
||
|
RowBox[{"{",
|
||
|
RowBox[{
|
||
|
RowBox[{"coords", "[",
|
||
|
RowBox[{"[", "int", "]"}], "]"}], ",",
|
||
|
RowBox[{"coords", "[",
|
||
|
RowBox[{"[", "bnd", "]"}], "]"}]}], "}"}], ",",
|
||
|
RowBox[{"AspectRatio", "\[Rule]", "Automatic"}]}], "]"}], ",",
|
||
|
"\[IndentingNewLine]",
|
||
|
RowBox[{"Graphics3D", "[",
|
||
|
RowBox[{"{",
|
||
|
RowBox[{
|
||
|
RowBox[{"Arrowheads", "[", "Small", "]"}], ",", "arrows"}], "}"}],
|
||
|
"]"}]}], "\[IndentingNewLine]", "]"}]}], "Input",
|
||
|
CellChangeTimes->{{3.737705557848433*^9, 3.737705630736795*^9},
|
||
|
3.737705701072466*^9, {3.737705754229198*^9,
|
||
|
3.737705790542426*^9}},ExpressionUUID->"b16d4257-da8d-4d25-835b-\
|
||
|
d2da5e7365b3"]
|
||
|
},
|
||
|
WindowSize->{1920, 1003},
|
||
|
WindowMargins->{{0, Automatic}, {4, Automatic}},
|
||
|
FrontEndVersion->"11.2 for Linux x86 (64-bit) (September 10, 2017)",
|
||
|
StyleDefinitions->"Default.nb"
|
||
|
]
|
||
|
(* End of Notebook Content *)
|
||
|
|
||
|
(* Internal cache information *)
|
||
|
(*CellTagsOutline
|
||
|
CellTagsIndex->{}
|
||
|
*)
|
||
|
(*CellTagsIndex
|
||
|
CellTagsIndex->{}
|
||
|
*)
|
||
|
(*NotebookFileOutline
|
||
|
Notebook[{
|
||
|
Cell[558, 20, 16387, 386, 1534, "Input",ExpressionUUID->"88fa1ae8-8654-4a78-85a2-18944a4ade8e"],
|
||
|
Cell[16948, 408, 1088, 17, 31, "Input",ExpressionUUID->"c84fa27e-4738-4f52-aa94-5c3f9343bb89"],
|
||
|
Cell[CellGroupData[{
|
||
|
Cell[18061, 429, 546, 13, 34, "Input",ExpressionUUID->"9656cbf4-29ae-4173-91c5-9f700bed7fdb"],
|
||
|
Cell[CellGroupData[{
|
||
|
Cell[18632, 446, 182, 3, 25, "Print",ExpressionUUID->"12a07253-847f-474e-a695-ea1e07db838a"],
|
||
|
Cell[18817, 451, 181, 3, 25, "Print",ExpressionUUID->"2ea65938-5ddf-4bac-b061-1b01b3894a6c"],
|
||
|
Cell[19001, 456, 169, 3, 25, "Print",ExpressionUUID->"f346d1c6-9595-4841-b046-42cb4e12b3dd"]
|
||
|
}, Open ]]
|
||
|
}, Open ]],
|
||
|
Cell[CellGroupData[{
|
||
|
Cell[19219, 465, 531, 13, 34, "Input",ExpressionUUID->"1309dbe6-3672-426d-ae8a-1f682028e209"],
|
||
|
Cell[19753, 480, 247, 6, 35, "Output",ExpressionUUID->"cb11bf2a-f9eb-42e2-8bef-cd4126a595ac"]
|
||
|
}, Open ]],
|
||
|
Cell[20015, 489, 1537, 44, 134, "Input",ExpressionUUID->"26972883-20a6-4890-8092-c78548cfb454"],
|
||
|
Cell[CellGroupData[{
|
||
|
Cell[21577, 537, 632, 16, 80, "Input",ExpressionUUID->"6f95c23c-cda6-4120-90d3-7d35d282c451"],
|
||
|
Cell[22212, 555, 208, 4, 35, "Output",ExpressionUUID->"6b28c9bc-cd08-4072-b7d3-5cb53ad834fc"]
|
||
|
}, Open ]],
|
||
|
Cell[CellGroupData[{
|
||
|
Cell[22457, 564, 479, 12, 34, "Input",ExpressionUUID->"54e7a7e3-3302-4d27-9c9c-58d90807dda9"],
|
||
|
Cell[CellGroupData[{
|
||
|
Cell[22961, 580, 183, 3, 25, "Print",ExpressionUUID->"56f91db4-46c4-4d8c-857e-63771964c0ae"],
|
||
|
Cell[23147, 585, 184, 3, 25, "Print",ExpressionUUID->"9e08ca72-ff30-4e72-ab0b-c1aa07941c42"],
|
||
|
Cell[23334, 590, 169, 3, 25, "Print",ExpressionUUID->"07c052f4-414d-458d-92c4-0ef42b8ca05f"]
|
||
|
}, Open ]]
|
||
|
}, Open ]],
|
||
|
Cell[23530, 597, 1494, 43, 132, "Input",ExpressionUUID->"b16d4257-da8d-4d25-835b-d2da5e7365b3"]
|
||
|
}
|
||
|
]
|
||
|
*)
|
||
|
|