It may be reasonable to think that Revit could automate the calculation of plumbing fixtures from a given schedule of areas and occupancy loads. Well, think twice. A comprehensive calculation of fixtures in Revit that automates the required number of all types of fixtures (Water Closets, Lavatories, Urinals, Drinking Fountains, Showers, Service Sink, Unisex fixtures) still remains a somewhat elusive exercise. The underlying problem is that the Schedules are meant to quantify the parameter values of Revit project families, and are not really suitable to be used as worksheet for things that are not in the model. This hasn’t stopped us from searching for a way to push Revit to that point, or getting close to a parametric solution.

For someone starting to build this type of calculation in Revit, I will review the advantages and limitations of the different approaches used.

Before you start building your calculations, keep a few things in mind. First, make sure to keep the units for each calculated value consistent. I recommend building all the parameters of the ‘Number’ type and override the field format to ‘Fixed’ with a 2 decimal rounding increment. This will make the schedule values readable and clean.

Second, consider recapturing the load data from the Revit occupancy calculations. These calculations are typically based on Revit Area Plans instead of Rooms because Area plans are more suitable to define the boundary limits of both Gross and Net areas as required by code factors. (See Fig. 2.) To maintain consistency of the of the occupancy load, duplicate the schedule of the building load calculation and use those calculated values to get started with your plumbing fixture calculation. More on Occupancy Load Calculations.

The third consideration is regarding the rounding of values in mixed occupancies. Most codes are silent or generally vague about the rounding rules for aggregated data. In the absence of a clear cut direction, code specialist agree that the best approach is round to the upper integer the aggregated totals of every occupancy instead of the partial subtotals. Rounding up both the occupancy and fixture load in partial subtotals would increase the total count somewhere between 2%-5%, depending of the building size, increasing unnecessarily the building cost. The rounding, they agree, should occur after summing the fractional fixture counts for each occupancy group, keeping the total fixture count as low as permissible. Since Revit cannot round schedule grand totals, the task remains an outstanding feature request. Workarounds require manually rounding up the total and transcribing the result in a dummy key schedule, a process that would be repeated at every program change.

**Current Solutions**

Different solutions have been proposed to tackle the minimum plumbing calculation requirements. Regardless of the method, the actual difficulties become evident when applying different rules for mixed occupancy loads.

**Single Schedule:**While it is possible to conceive of a single schedule for all of the plumbing calculations, this would be inaccurate and extremely complex to achieve. Since the formulas of calculated values apply to every instance, there is no choice but to build each assembly requirement as a separate schedule column, creating a lot of redundant calculations. For example, each calculation of the Assembly, Business, and Mercantile occupancies will require a separate calculated value for every fixture type. Excluding the values belonging to other occupancies is hard to do using Conditional Formulas. One cannot mix the text-formatted values of the Occupancies (ie B, or M) with any Numerical formulas, unless you assign a numerical value for each group. And even if the conditional formulas end up working, the totals of fixtures per type will be dispersed, turning the effort somewhat futile.**Multiple Schedules by Occupancy Group:**Because each occupancy utilizes different plumbing factors and/or load formulas, it may be more reasonable to build a single schedule for every occupancy. Formulas used in calculated values will respond to each occupancy requirement, and the major advantage is that all calculations get updated if the area boundaries change. Still, there will be no way to build a parametric summary of fixture totals. One workaround is to manually add the data into a Summary schedule key. The other alternate is to export each of the schedules as a .TXT file that are opened in Excel and pasted into a single worksheet to calculate totals. The data would require exporting to the schedules at every plan update, and the total need to be manually transposed into a summary schedule.**Excel Calculations:**This solution takes all the fixture calculations outside of the Revit environment. Excel certainly provides a wider flexibility to create the fixture count by occupancy group and a summary table. Areas and fixed counts would need to be exported or manually transcribed into an Excel Spreadsheet. The twofold problem is that there is not a way to push the totals back into Revit out of the box, and secondly any change in the area calculation would need to be manually transcribed every time the plan changes. Ideate BIMLink, a Revit add-on that pull and push Revit data with Excel, can certainly facilitate the process of re-importing the data into an existing area schedule or key schedule.

An Excel based script available for free is the Plumbing Fixture calculator posted by Ara Sargsyan. The calculator uses a built-in script in Excel and complies with 2012 IBC & IPC.

**Annotation Family:**This is a very elegant solution posted in AUGI forums by user cberteaux371801. Instead of using schedule with calculation values, the plumbing fixture calculations are shifted away from the project and managed as formulas embedded in family instance parameters. The benefit is a visually consistent schedule-like table for every occupancy groups. The user would load in the project an annotation symbol family for each of the occupancies in the building, and the calculation will run based on the occupancy load for the group. This method is almost perfect except that it will not read the occupancy load automatically. Any change in the occupancy loads would need to be transcribed at every change of the program and a summary table with the aggregated totals would still be required. See the original post for more information.

**API / Scripts?:**Can some experimentation with API or Dynamo Scripting provide a better solution? With scripting, it is conceivable to develop a way to extract the occupancy totals and plug them as values into an Annotation Family. In a forthcoming post, I will explore in greater detail the potential of this approach.

The bottom line here is not a perfect automated solution yet that provides a parametric calculation of plumbing fixtures, nor a single solution that is universal. While it is possible to push the calculation into schedules and families, every solution requires some level of manual transcription.

If you decide to build your calculation using Families or Schedules in Revit, the code requirement would need to be translated into formulas compatible with Revit. In Part II of this blog post, I will discuss in greater detail the typical formulas used to construct these calculations.

For more information on the software solutions, training, and consulting Ideate provides, visit the Ideate, Inc. homepage.

##### Cesar Escalante, AIA, LEED AP, CCCA

AEC Solutions Application Specialist

Cesar has a Bachelor of Architecture degree from the University of Central America in El Salvador, a Master of Architecture from the University of Texas, and is a CCCA (Certified Construction Contract Administrator). His experience includes roles as Project Manager and Project Captain at architecture firms in Oakland, California. As a member of the Ideate Tech Expert team, Cesar teaches Revit Architecture Fundamentals and provides client support and consulting. Cesar’s interest in the built environment includes his work as a volunteer for Habitat for Humanity.