private void Resistivity_ValueChanged(object sender, EventArgs e)
            {
                if (Sigma.Value < 7000)
                {
                    Resistivity_Feedback.Text = "i.e. Polyfill";
                    Porosity_Percent.Value    = (decimal)99.7;
                }
                else if (Sigma.Value < 15000)
                {
                    Resistivity_Feedback.Text = "i.e. Melamine Foam";
                    //11 [kg/cu m] / 1570 [kg/cu m]
                    Porosity_Percent.Value = (decimal)99.3;
                }
                else if (Sigma.Value < 30000)
                {
                    Resistivity_Feedback.Text = "i.e. Mineral Wool (45 kg/m^3)";
                    Porosity_Percent.Value    = (decimal)98.4;
                }
                else if (Sigma.Value < 65000)
                {
                    Resistivity_Feedback.Text = "i.e. Mineral Wool (90 kg/m^3)";
                    Porosity_Percent.Value    = (decimal)96.8;
                }
                else if (Sigma.Value < 100000)
                {
                    Resistivity_Feedback.Text = "i.e. Mineral Wool (145 kg/m^3)";
                    Porosity_Percent.Value    = (decimal)95.2;
                }
                else
                {
                    Resistivity_Feedback.Text = "???";
                    Porosity_Percent.Value    = (decimal)95.2;
                }

                if (LayerList.SelectedIndex < 0)
                {
                    return;
                }
                ABS_Layer L = (LayerList.Items[LayerList.SelectedIndex] as ABS_Layer);

                L.Flow_Resist = (double)Sigma.Value;
                L.porosity    = (double)Porosity_Percent.Value / 100;

                LayerList.Items[LayerList.SelectedIndex] = L;

                Update_Graphs();
            }
            private void LayerList_SelectedIndexChanged(object sender, EventArgs e)
            {
                //Tell the interface that we have selected a material from the list, so that it doesn't update the graph, as the material settings populate.
                indexchanged = true;
                if (LayerList.SelectedIndex < 0)
                {
                    return;
                }
                ABS_Layer L = (LayerList.Items[LayerList.SelectedIndex] as ABS_Layer);

                switch (L.T)
                {
                case ABS_Layer.LayerType.AirSpace:
                    Material_Type.SelectedIndex = 0;
                    break;

                case ABS_Layer.LayerType.BiotPorousAbsorber_Limp:
                    Material_Type.SelectedIndex = 1;
                    break;

                case ABS_Layer.LayerType.PorousDB:
                    Material_Type.SelectedIndex = 2;
                    break;

                case ABS_Layer.LayerType.PorousCA:
                    Material_Type.SelectedIndex = 3;
                    break;

                case ABS_Layer.LayerType.PorousM:
                    Material_Type.SelectedIndex = 4;
                    break;

                case ABS_Layer.LayerType.SolidPlate:
                    Material_Type.SelectedIndex = 5;
                    break;

                case ABS_Layer.LayerType.CircularPerforations:
                    Material_Type.SelectedIndex = 8;
                    break;

                case ABS_Layer.LayerType.SquarePerforations:
                    Material_Type.SelectedIndex = 9;
                    break;

                case ABS_Layer.LayerType.Perforated_Modal:
                    Material_Type.SelectedIndex = 6;
                    break;

                case ABS_Layer.LayerType.Slotted_Modal:
                    Material_Type.SelectedIndex = 7;
                    break;

                case ABS_Layer.LayerType.MicroPerforated:
                    Material_Type.SelectedIndex = 12;
                    break;

                case ABS_Layer.LayerType.Microslit:
                    Material_Type.SelectedIndex = 11;
                    break;

                case ABS_Layer.LayerType.Slots:
                    Material_Type.SelectedIndex = 10;
                    break;

                default:
                    return;
                }
                depth.Value            = (decimal)L.depth * 1000;
                pitch.Value            = (decimal)L.pitch * 1000;
                diameter.Value         = (decimal)L.width * 1000;
                Porosity_Percent.Value = (decimal)L.porosity * 100;
                Sigma.Value            = (decimal)L.Flow_Resist;

                indexchanged = false;
                //Done Loading material. Updating may continue.
            }
            private void Add_Click(object sender, EventArgs e)
            {
                if (Material_Type.SelectedIndex < 0)
                {
                    return;
                }
                switch (Material_Type.SelectedIndex)
                {
                case 0:
                    LayerList.Items.Add(new ABS_Layer(ABS_Layer.LayerType.AirSpace, (double)depth.Value / 1000, (double)pitch.Value / 1000, (double)diameter.Value / 1000, (double)Sigma.Value, (double)Porosity_Percent.Value / 100));
                    break;

                case 1:
                    LayerList.Items.Add(ABS_Layer.CreateBiot(true, (double)depth.Value / 1000, (double)Solid_Density.Value, (double)YoungsModulus.Value * 1E9, (double)PoissonsRatio.Value, (double)SoundSpeed.Value, (double)Tortuosity.Value, (double)Sigma.Value, (double)Porosity_Percent.Value / 100, (double)ViscousCharacteristicLength.Value, (double)ThermalPermeability.Value));
                    break;

                case 2:
                    LayerList.Items.Add(new ABS_Layer(ABS_Layer.LayerType.PorousDB, (double)depth.Value / 1000, (double)pitch.Value / 1000, (double)diameter.Value / 1000, (double)Sigma.Value, (double)Porosity_Percent.Value / 100));
                    break;

                case 3:
                    LayerList.Items.Add(new ABS_Layer(ABS_Layer.LayerType.PorousCA, (double)depth.Value / 1000, (double)pitch.Value / 1000, (double)diameter.Value / 1000, (double)Sigma.Value, (double)Porosity_Percent.Value / 100));
                    break;

                case 4:
                    LayerList.Items.Add(new ABS_Layer(ABS_Layer.LayerType.PorousM, (double)depth.Value / 1000, (double)pitch.Value / 1000, (double)diameter.Value / 1000, (double)Sigma.Value, (double)Porosity_Percent.Value / 100));
                    break;

                case 5:
                    LayerList.Items.Add(ABS_Layer.CreateSolid((double)depth.Value / 1000, (double)Solid_Density.Value, (double)YoungsModulus.Value * 1E9, (double)PoissonsRatio.Value));
                    break;

                case 6:
                    LayerList.Items.Add(new ABS_Layer(ABS_Layer.LayerType.Perforated_Modal, (double)depth.Value / 1000, (double)pitch.Value / 1000, (double)diameter.Value / 1000, (double)Sigma.Value, (double)Porosity_Percent.Value / 100));
                    break;

                case 7:
                    LayerList.Items.Add(new ABS_Layer(ABS_Layer.LayerType.Slotted_Modal, (double)depth.Value / 1000, (double)pitch.Value / 1000, (double)diameter.Value / 1000, (double)Sigma.Value, (double)Porosity_Percent.Value / 100));
                    break;

                case 8:
                    LayerList.Items.Add(new ABS_Layer(ABS_Layer.LayerType.CircularPerforations, (double)depth.Value / 1000, (double)pitch.Value / 1000, (double)diameter.Value / 1000, (double)Sigma.Value, (double)Porosity_Percent.Value / 100));
                    break;

                case 9:
                    LayerList.Items.Add(new ABS_Layer(ABS_Layer.LayerType.SquarePerforations, (double)depth.Value / 1000, (double)pitch.Value / 1000, (double)diameter.Value / 1000, (double)Sigma.Value, (double)Porosity_Percent.Value / 100));
                    break;

                case 10:
                    LayerList.Items.Add(new ABS_Layer(ABS_Layer.LayerType.Slots, (double)depth.Value / 1000, (double)pitch.Value / 1000, (double)diameter.Value / 1000, (double)Sigma.Value, (double)Porosity_Percent.Value / 100));
                    break;

                case 11:
                    LayerList.Items.Add(new ABS_Layer(ABS_Layer.LayerType.Microslit, (double)depth.Value / 1000, (double)pitch.Value / 1000, (double)diameter.Value / 1000, (double)Sigma.Value, (double)Porosity_Percent.Value / 100));
                    break;

                case 12:
                    LayerList.Items.Add(new ABS_Layer(ABS_Layer.LayerType.MicroPerforated, (double)depth.Value / 1000, (double)pitch.Value / 1000, (double)diameter.Value / 1000, (double)Sigma.Value, (double)Porosity_Percent.Value / 100));
                    break;
                }

                Update_Graphs();
            }
            private void param_ValueChanged(object sender, EventArgs e)
            {
                if (indexchanged == true)
                {
                    return;
                }
                if (LayerList.SelectedIndex < 0)
                {
                    return;
                }
                ABS_Layer L = (LayerList.Items[LayerList.SelectedIndex] as ABS_Layer);

                switch (Material_Type.SelectedIndex)
                {
                case 0:
                    if (L.T != ABS_Layer.LayerType.AirSpace)
                    {
                        return;
                    }
                    break;

                case 1:
                    if (L.T != ABS_Layer.LayerType.BiotPorousAbsorber_Limp)
                    {
                        return;
                    }
                    break;

                case 2:
                    if (L.T != ABS_Layer.LayerType.PorousDB)
                    {
                        return;
                    }
                    break;

                case 3:
                    if (L.T != ABS_Layer.LayerType.PorousCA)
                    {
                        return;
                    }
                    break;

                case 4:
                    if (L.T != ABS_Layer.LayerType.PorousM)
                    {
                        return;
                    }
                    break;

                case 5:
                    if (L.T != ABS_Layer.LayerType.Perforated_Modal)
                    {
                        return;
                    }
                    break;

                case 6:
                    if (L.T != ABS_Layer.LayerType.Slotted_Modal)
                    {
                        return;
                    }
                    break;

                case 7:
                    if (L.T != ABS_Layer.LayerType.SquarePerforations)
                    {
                        return;
                    }
                    break;

                case 8:
                    if (L.T != ABS_Layer.LayerType.CircularPerforations)
                    {
                        return;
                    }
                    break;

                case 9:
                    if (L.T != ABS_Layer.LayerType.Slots)
                    {
                        return;
                    }
                    break;

                case 10:
                    if (L.T != ABS_Layer.LayerType.Microslit)
                    {
                        return;
                    }
                    break;

                case 11:
                    if (L.T != ABS_Layer.LayerType.MicroPerforated)
                    {
                        return;
                    }
                    break;
                }

                L.Flow_Resist                   = (double)Sigma.Value;
                L.depth                         = (double)depth.Value / 1000;
                L.pitch                         = (double)pitch.Value / 1000;
                L.width                         = (double)diameter.Value / 1000;
                L.porosity                      = (double)Porosity_Percent.Value / 100;
                L.PoissonsRatio                 = (double)PoissonsRatio.Value;
                L.Thermal_Permeability          = (double)ThermalPermeability.Value;
                L.YoungsModulus                 = (double)YoungsModulus.Value;
                L.Viscous_Characteristic_Length = (double)ViscousCharacteristicLength.Value;
                L.density                       = (double)Solid_Density.Value;
                L.tortuosity                    = (double)Tortuosity.Value;
                L.SpeedOfSound                  = (double)SoundSpeed.Value;

                LayerList.Items[LayerList.SelectedIndex] = L;

                Update_Graphs();
            }