public GasMaterial Add(GasMaterial obj)
 {
     if (obj == null)
     {
         return(null);
     }
     if (GasMaterials == null)
     {
         GasMaterials = new List <GasMaterial>();
     }
     if (!GasMaterials.Any(i => i.Name == obj.Name))
     {
         GasMaterials.Add(obj);
         return(obj);
     }
     else
     {
         var oc = GasMaterials.Single(o => o.Name == obj.Name);
         CopyObjectData(obj, oc, "", BindingFlags.Public | BindingFlags.Instance);
         return(oc);
     }
 }
        public T getElementByName <T>(string name)
        {
            // materials and constructions

            try
            {
                if (typeof(T) == typeof(OpaqueConstruction))
                {
                    return((T)Convert.ChangeType(OpaqueConstructions.Single(o => o.Name == name), typeof(T)));
                }
                else if (typeof(T) == typeof(GlazingConstruction))
                {
                    return((T)Convert.ChangeType(GlazingConstructions.Single(o => o.Name == name), typeof(T)));
                }
                else if (typeof(T) == typeof(OpaqueMaterial))
                {
                    return((T)Convert.ChangeType(OpaqueMaterials.Single(o => o.Name == name), typeof(T)));
                }
                else if (typeof(T) == typeof(GlazingMaterial))
                {
                    return((T)Convert.ChangeType(GlazingMaterials.Single(o => o.Name == name), typeof(T)));
                }
                else if (typeof(T) == typeof(GasMaterial))
                {
                    return((T)Convert.ChangeType(GasMaterials.Single(o => o.Name == name), typeof(T)));
                }
                else if (typeof(T) == typeof(GlazingConstructionSimple))
                {
                    return((T)Convert.ChangeType(GlazingConstructionsSimple.Single(o => o.Name == name), typeof(T)));
                }

                // schedules

                else if (typeof(T) == typeof(DaySchedule))
                {
                    return((T)Convert.ChangeType(DaySchedules.Single(o => o.Name == name), typeof(T)));
                }
                //else if (typeof(T) == typeof(WeekSchedule))
                //{
                //    return (T)Convert.ChangeType(WeekSchedules.Single(o => o.Name == name), typeof(T));
                //}
                else if (typeof(T) == typeof(YearSchedule))
                {
                    return((T)Convert.ChangeType(YearSchedules.Single(o => o.Name == name), typeof(T)));
                }

                else if (typeof(T) == typeof(ScheduleArray))
                {
                    return((T)Convert.ChangeType(ArraySchedules.Single(o => o.Name == name), typeof(T)));
                }

                // zone def

                else if (typeof(T) == typeof(ZoneLoad))
                {
                    return((T)Convert.ChangeType(ZoneLoads.Single(o => o.Name == name), typeof(T)));
                }
                else if (typeof(T) == typeof(ZoneVentilation))
                {
                    return((T)Convert.ChangeType(ZoneVentilations.Single(o => o.Name == name), typeof(T)));
                }
                else if (typeof(T) == typeof(ZoneConstruction))
                {
                    return((T)Convert.ChangeType(ZoneConstructions.Single(o => o.Name == name), typeof(T)));
                }
                else if (typeof(T) == typeof(ZoneConditioning))
                {
                    return((T)Convert.ChangeType(ZoneConditionings.Single(o => o.Name == name), typeof(T)));
                }
                else if (typeof(T) == typeof(DomHotWater))
                {
                    return((T)Convert.ChangeType(DomHotWaters.Single(o => o.Name == name), typeof(T)));
                }
                else if (typeof(T) == typeof(ZoneDefinition))
                {
                    return((T)Convert.ChangeType(ZoneDefinitions.Single(o => o.Name == name), typeof(T)));
                }

                else if (typeof(T) == typeof(WindowSettings))
                {
                    return((T)Convert.ChangeType(WindowSettings.Single(o => o.Name == name), typeof(T)));
                }

                else if (typeof(T) == typeof(FloorDefinition))
                {
                    return((T)Convert.ChangeType(FloorDefinitions.Single(o => o.Name == name), typeof(T)));
                }

                // dont know what this is???

                else
                {
                    return((T)Convert.ChangeType(null, typeof(T)));
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine("Could not find " + name + ": " + ex.Message);
                return(default(T));
            }
        }