Skip to content

2.2. Getting started with butterfly in dynamo

Chris Mackey edited this page Feb 12, 2019 · 1 revision

Read below or click on the image below to watch the video on YouTube

Click to watch the video


1. Introduction

Butterfly is python library to create and execute OpenFOAM cases. This page discusses how you can use butterfly from the Butterfly plugin for Dynamo. We appreciate your comments. Let us know your thoughts on github.

installer Follow Ladybug Tools on twitter or like the page on Facebook to get the latest updates.

In order to use butterfly you need to install OpenFOAM for Windows separately before installing butterfly. If you already haven't installed OpenFOAM check the installation page for OpenFOAM and come back here once you have OpenFOAM installed.

2.1. Installing Butterfly

You can install butterfly from Dynamo package manager. In Dynamo click on Packages tab and select Search for a Package....

installer

Search for butterfly and install the latest version.

installer

Once the installation is completed successfully you should see butterfly tab added to Dynamo.

butterfly.png

2.2. Installing MeshToolkit

Butterfly is using MeshToolkit package to mesh the geometries. At some point MeshToolkit will be installed with Dynamo's installation. Until then you need to install MeshToolkit separately following the similar steps as 2.1.

installer

3. Getting Started with Butterfly

In order to use Butterfly you need to run Revit as an administrator otherwise you will get an error when you're trying to create a butterfly case. If you're not using an admin account close Dynamo and Revit and run it as administrator.

A number of sample files are available in the installation folder which demonstrate different approaches to use butterfly. Here we cover the two most typical workflows for preparing you model in Butterfly. The process of meshing and running the analysis is the same for both workflows.

3.1. Preparing the case

First step is to prepare the OpenFOAM case folder. The process is explained for outdoor and indoor analysis separately.

3.1.1. Outdoor analysis

The outdoor analysis workflow lets you create an OpenFOAM case from a wind tunnel. The size of the wind tunnel is calculated based on the heights of the test geometries and windTunnelParameters. You can use windTunnelParameters component to adjust the size if necessary. The boundary conditions for inlet, outlet, sides, top and ground surfaces are set by Butterfly. You can change wind speed and wind direction, add refinement regions and set up grading.

Wind Tunnel Preparation

3.1.2 Indoor analysis

For indoor cases, you need to create the butterfly geometries for each group of geometries with similar boundary condition. You can use one of the default boundaries or create your own boundary. Once you have all butterfly geometries you can put them together as a Case.

Create butterfly geometries

3.2. Meshing

There are two required steps for meshing in butterfly which follows OpenFOAM standard workflow. The first step is blockMesh which is followed by running snappyHexMesh. Before running the meshing components you need to have the OpenFOAM docker container running otherwise you will receive an error. You may need to run the Rhino and OpenFoam container as an administrator.

Use decomposeParDict component to run snappyHexMesh in parallel. Butterfly currently supports scotch and simple modes.

Check these discussions for troubleshooting in case you get an error message.

After running each step of meshing you can read the report from the readMe! output. You can also use loadMesh component to load the mesh into Dynamo. If you're dealing with a very large case then you are probably better off using ParaView. Loading a heavy mesh to Dynamo can take a lot of memory.

Use snappyHexMeshDict component to set-up the parameters for snappyHexMesh. The refinement values are already set in the previous step. Once you're happy with the mesh density and quality you can move forward to run the analysis. You can also use checkMesh component to check the mesh quality.

3.3. Running the Case

3.3.1 Creating a Recipe

The next step before running the analysis is to use pick the right recipe for your analysis. Currently, Butterfly supports two recipes. Steady Incompressible recipe uses simpleFoam and Heat Transfer recipe uses buoyantBoussinesqSimpleFoam. You can customize turbulenceProperties, fvSchemes, fvSolution, residualControl and relaxationFactors for each recipe. You can also create your own recipe by writing a new class.

recipe

3.3.2 Preparing the Solution

For running the analysis you need to create a solution. Solution component has several inputs that let you make the final changes to the case or change them while the analysis is running. Similar to snappyHexMesh you can run the solution in parallel.

solution

3.3.3 Preparing Solution Parameters

solution parameters

SolutionParameters is a collection of parameters that can be modified while the analysis is running. In Dynamo you can make the changes before starting a run or after pausing the run. controlDict, probes are default parameters that can be modified using their separate components, however, you can use solutionParameter [with no s] component to update any parameter in Case folders.

solution parameter

3.3.3 Running the Analysis and Visualizing Results

You can run the solution by setting _write and run_ to True. Unlike Butterfly in Grasshopper Butterfly in Dynamo doesn't supports real-time results visualization. You can stop the analysis once in awhile by closing the batch window and checking the residual values.

Use Sample Case to get the result for a number of test points. If the results are vectors you can use Visualize Vectors node to visualize the vectors as geometries.

result visualization

result visualization

You can also use other tools outside of Dynamo to visualize the results. The image below shows an example of loading the results in ParaView.

load results in ParaView

4. Comments, suggestions, bugs

We need your input on almost everything! How do you like the current workflow? How do you think the workflow can be improved? What are your thoughts on default boundary conditions? Do you have a set of boundary conditions that you think we should add to the library? What will be your wish for the next release?

Please open an issue for your comments, suggestions and bug reports so other users can also add their inputs. We will get back to you as soon as we can.

5. Do you Python?

Butterfly also has a Python API which lets you to create your own components or modify the butterfly case with typing a couple of lines. Here is the API documentation. You can double click on any of the components to see an example! I will try to provide more examples in the near future.