// Initialize the four axis
    public PhoneManager()
    {
        emptyConsonant            = new ConsonantPhone();
        emptyConsonant.IPA        = "'";
        emptyConsonant.POA        = "null";
        emptyConsonant.MOA        = "null";
        emptyConsonant.FCB        = "back";
        emptyConsonant.Aspiration = "no";
        emptyConsonant.Voiceness  = "no";

        emptyVowel           = new VowelPhone();
        emptyVowel.IPA       = "ΙΏ";
        emptyVowel.Openness  = "close";
        emptyVowel.Roundness = "unrounded";
        emptyVowel.FCB       = "front";

        consonantHorizontal.Clear();
        consonantVertical.Clear();
        vowelHorizontal.Clear();
        vowelVertical.Clear();

        consonantHorizontal.Add(new StringIndexVector("nasal", 0));
        consonantHorizontal.Add(new StringIndexVector("plosive", 2));
        consonantHorizontal.Add(new StringIndexVector("fricative", 6));
        consonantHorizontal.Add(new StringIndexVector("sibilant", 8));
        consonantHorizontal.Add(new StringIndexVector("flap", 10));
        consonantHorizontal.Add(new StringIndexVector("trill", 11));
        consonantHorizontal.Add(new StringIndexVector("lateral", 12));
        consonantHorizontal.Add(new StringIndexVector("ejective plosive", 13));
        consonantHorizontal.Add(new StringIndexVector("ejective fricative", 14));
        consonantHorizontal.Add(new StringIndexVector("ejective sibilant", 15));
        consonantHorizontal.Add(new StringIndexVector("click", 16));
        consonantHorizontal.Add(new StringIndexVector("implosive", 18));

        consonantVertical.Add(new StringIndexVector("bilabial", 0));
        consonantVertical.Add(new StringIndexVector("labiodental", 1));
        consonantVertical.Add(new StringIndexVector("linguolabial", 2));
        consonantVertical.Add(new StringIndexVector("dental", 3));
        consonantVertical.Add(new StringIndexVector("alveolar", 4));
        consonantVertical.Add(new StringIndexVector("postalveolar", 5));
        consonantVertical.Add(new StringIndexVector("retroflex", 6));
        consonantVertical.Add(new StringIndexVector("palatal", 7));
        consonantVertical.Add(new StringIndexVector("velar", 8));
        consonantVertical.Add(new StringIndexVector("uvular", 9));
        consonantVertical.Add(new StringIndexVector("glottal", 10));

        vowelHorizontal.Add(new StringIndexVector("open", 0));
        vowelHorizontal.Add(new StringIndexVector("near-open", 1));
        vowelHorizontal.Add(new StringIndexVector("half-open", 2));
        vowelHorizontal.Add(new StringIndexVector("middle", 3));
        vowelHorizontal.Add(new StringIndexVector("half-close", 4));
        vowelHorizontal.Add(new StringIndexVector("near-close", 5));
        vowelHorizontal.Add(new StringIndexVector("close", 6));

        vowelVertical.Add(new StringIndexVector("front", 0));
        vowelVertical.Add(new StringIndexVector("central", 2));
        vowelVertical.Add(new StringIndexVector("back", 4));
    }
        public VowelPhone[][] getVowelPool()
        {
            VowelPhone[][] result = new VowelPhone[6][];
            for (int i = 0; i < 6; i++)
            {
                result[i] = new VowelPhone[7];
            }

            // Populate the returning value with the simple vowel
            foreach (VowelPhone vp in SimpleVowels)
            {
                int h = 0, v = 0;

                // Get the horizontal index
                foreach (StringIndexVector siv in vowelHorizontal)
                {
                    if (vp.Openness.Equals(siv.stringKey))
                    {
                        h = siv.index;
                        break;
                    }
                }

                // Get the vertical index
                foreach (StringIndexVector siv in vowelVertical)
                {
                    if (vp.FCB.Equals(siv.stringKey))
                    {
                        v = siv.index;
                        break;
                    }
                }

                // Change vertical index for special case
                if (vp.Roundness.Equals("unrounded"))
                {
                    v++;
                }

                // Put the phone to its place
                result[v][h] = vp;
            }

            return(result);
        }