Kai Kirk

[2 units]

I used the Twisting Cog conceptual mass family for the form-flexing exercise in Revit/Dynamo (two instances shown below). The mass floors are spaced equally every 12ft up to a top height of 720ft (30ft below the maximum height spec), and the maximum outer radius is set at the base to 100ft.

The total occupied plan and height of the tower is 200’ x 200’ x 720’.

(Revit Project Location set to SF, CA)

Mid Height = 400ft, Mid Outer Radius = 100ft, various spread angles: 50 degrees (left) and 30 degrees (right).
Mid Height = 400ft, Mid Outer Radius = 100ft, various spread angles: 50 degrees (left) and 30 degrees (right).

Conceptual Mass Properties/Parameters

The Twisting Cog is defined by Height, Rotation, Radius, and Spread Angle at 3 heights (base, middle, top). The rotation defines the positioning of the 3 teeth: changing the relative rotation between base/mid/top results in twisting. The spread angle defines how wide the teeth are: a large spread gives the look of nooks in the surface, while a small spread looks like a thin protrusion on the surface.

Parameters of the Twisting Cog Conceptual Mass. All stories are 12 ft tall, and all parameters except Mid Height/Outer Radius/Spread Angle are held constant.
Parameters of the Twisting Cog Conceptual Mass. All stories are 12 ft tall, and all parameters except Mid Height/Outer Radius/Spread Angle are held constant.

The mass was simulated in Dynamo with various combinations of Mid Height, Mid Radius, and Mid Spread to evaluate the effects of tapering the mid-section on Gross Volume/Surface/Floor Area.

The main Dynamo script is comprised of:

-Revit Element, Input and Output variable selection

-A custom node EvaluateInputCombos, used to compute the Output variables via Function Apply

-A data export to Excel for report generation

Total view of Dynamo script with custom node block
Total view of Dynamo script with custom node block

Input variables to the script

The Revit Element is selected by clicking the “Change” button, then clicking on the mass in the Revit window where the element is in view.

To take advantage of the ability to pass in lists to Element.SetParameterByName and Element.GetParameterValueByName function blocks, the Input Names/Values and Output Names are passed in as lists of strings/numbers.*

*I notice, however, that this requires matching the number of Input Names with the number of Output Names. Make sure to do this if you want to keep the flexibility of the custom node to take in any number of Input/Output parameters—even if it means passing in an input parameter twice or getting an output parameter twice.

Dynamo script input variables
Dynamo script input variables

The List.Join block defines the rule governing the List.CartesianProduct block when combining the 3 input value lists; the product of that block is then flattened before passed on to Function Apply for simulation.

Custom Node definition

Custom node EvaluateInputCombos is executed for each input combination in the flattened input values list via Function Apply. It takes in a list of strings and numbers, as mentioned, and sets/gets parameter values accordingly in just 2 code blocks. The SetParameter block is enclosed by Transaction.Start/End to capture each test case passed in by function apply (like a for loop). The GetParameter block is placed after Transaction.End to allow Revit slightly more time to compute and record the output values (yes, I observed this difference in debugging).

Custom node block EvaluateInputCombos in dynamo script
Custom node block EvaluateInputCombos in dynamo script
Custom node definition: EvaluateInputCombos
Custom node definition: EvaluateInputCombos

Report generation

Finally, once all test cases have been run using Function Apply, the resulting list is combined with the input values, as well as the input/output names as headers, into an Excel spreadsheet as a report.

Dynamo script: Excel data report generation se
Dynamo script: Excel data report generation se

Report results

8 of the 36 test cases resulted in 1.2 to 1.5 million square feet of floor space. For cases with Mid Radius < 100ft, it’s tough to reach 1.2M SF with fixed base and top radii at 100ft and 50ft, but 1M SF is more obtainable (see unshaded rows in filtered results below). Of the 8 qualified test cases, the 100ft radius - 40deg spread - 300ft mid height test case resulted in the lowest surface area (513K SF).

Excel data report: 8 of 36 test cases meeting the 1.2-1.5M SF floorplan requirement.
Excel data report: 8 of 36 test cases meeting the 1.2-1.5M SF floorplan requirement.