/// <summary>
        /// Initializes a new instance of the <see cref="ForcedAirFurnace" /> class.
        /// </summary>
        /// <param name="vintage">Text for the vintage of the template system. This will be used to set efficiencies for various pieces of equipment within the system. Further information about these defaults can be found in the version of ASHRAE 90.1 corresponding to the selected vintage. Read-only versions of the standard can be found at: https://www.ashrae.org/technical-resources/standards-and-guidelines/read-only-versions-of-ashrae-standards.</param>
        /// <param name="economizerType">Text to indicate the type of air-side economizer used on the system (from the AllAirEconomizerType enumeration). If Inferred, the economizer will be set to whatever is recommended for the given vintage..</param>
        /// <param name="sensibleHeatRecovery">A number between 0 and 1 for the effectiveness of sensible heat recovery within the system. If None or Autosize, it will be whatever is recommended for the given vintage..</param>
        /// <param name="latentHeatRecovery">A number between 0 and 1 for the effectiveness of latent heat recovery within the system. If None or Autosize, it will be whatever is recommended for the given vintage..</param>
        /// <param name="equipmentType">Text for the specific type of system equipment from the FurnaceEquipmentType enumeration..</param>
        /// <param name="identifier">Text string for a unique object ID. This identifier remains constant as the object is mutated, copied, and serialized to different formats (eg. dict, idf, osm). This identifier is also used to reference the object across a Model. It must be &lt; 100 characters, use only ASCII characters and exclude (, ; ! \\n \\t). (required).</param>
        /// <param name="displayName">Display name of the object with no character restrictions..</param>
        public ForcedAirFurnace
        (
            string identifier,                                                                                                                                                                                                                                                                                                            // Required parameters
            string displayName = default, Vintages vintage = Vintages.ASHRAE_2013, AllAirEconomizerType economizerType = AllAirEconomizerType.Inferred, AnyOf <Autosize, double> sensibleHeatRecovery = default, AnyOf <Autosize, double> latentHeatRecovery = default, FurnaceEquipmentType equipmentType = FurnaceEquipmentType.Furnace // Optional parameters
        ) : base(identifier: identifier, displayName: displayName)                                                                                                                                                                                                                                                                        // BaseClass
        {
            this.Vintage              = vintage;
            this.EconomizerType       = economizerType;
            this.SensibleHeatRecovery = sensibleHeatRecovery;
            this.LatentHeatRecovery   = latentHeatRecovery;
            this.EquipmentType        = equipmentType;

            // Set non-required readonly properties with defaultValue
            this.Type = "ForcedAirFurnace";
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="ForcedAirFurnace" /> class.
        /// </summary>
        /// <param name="vintage">Text for the vintage of the template system. This will be used to set efficiencies for various pieces of equipment within the system. Further information about these defaults can be found in the version of ASHRAE 90.1 corresponding to the selected vintage. Read-only versions of the standard can be found at: https://www.ashrae.org/technical-resources/standards-and-guidelines/read-only-versions-of-ashrae-standards.</param>
        /// <param name="economizerType">Text to indicate the type of air-side economizer used on the system (from the AllAirEconomizerType enumeration)..</param>
        /// <param name="sensibleHeatRecovery">A number between 0 and 1 for the effectiveness of sensible heat recovery within the system. (default to 0D).</param>
        /// <param name="latentHeatRecovery">A number between 0 and 1 for the effectiveness of latent heat recovery within the system. (default to 0D).</param>
        /// <param name="demandControlledVentilation">Boolean to note whether demand controlled ventilation should be used on the system, which will vary the amount of ventilation air according to the occupancy schedule of the Rooms. (default to false).</param>
        /// <param name="equipmentType">Text for the specific type of system equipment from the FurnaceEquipmentType enumeration..</param>
        /// <param name="identifier">Text string for a unique object ID. This identifier remains constant as the object is mutated, copied, and serialized to different formats (eg. dict, idf, osm). This identifier is also used to reference the object across a Model. It must be &lt; 100 characters, use only ASCII characters and exclude (, ; ! \\n \\t). (required).</param>
        /// <param name="displayName">Display name of the object with no character restrictions..</param>
        /// <param name="userData">Optional dictionary of user data associated with the object.All keys and values of this dictionary should be of a standard data type to ensure correct serialization of the object (eg. str, float, int, list)..</param>
        public ForcedAirFurnace
        (
            string identifier,                                                                                                                                                                                                                                                                                                                                       // Required parameters
            string displayName = default, Object userData = default, Vintages vintage = Vintages.ASHRAE_2019, AllAirEconomizerType economizerType = AllAirEconomizerType.NoEconomizer, double sensibleHeatRecovery = 0D, double latentHeatRecovery = 0D, bool demandControlledVentilation = false, FurnaceEquipmentType equipmentType = FurnaceEquipmentType.Furnace // Optional parameters
        ) : base(identifier: identifier, displayName: displayName, userData: userData)                                                                                                                                                                                                                                                                               // BaseClass
        {
            this.Vintage                     = vintage;
            this.EconomizerType              = economizerType;
            this.SensibleHeatRecovery        = sensibleHeatRecovery;
            this.LatentHeatRecovery          = latentHeatRecovery;
            this.DemandControlledVentilation = demandControlledVentilation;
            this.EquipmentType               = equipmentType;

            // Set non-required readonly properties with defaultValue
            this.Type = "ForcedAirFurnace";

            // check if object is valid, only check for inherited class
            if (this.GetType() == typeof(ForcedAirFurnace))
            {
                this.IsValid(throwException: true);
            }
        }