public void configure_facet_topology(int[] facet_topology, Instantiator.UnitMappingType[] unit_mapping)
        {
            IDictionary <int, IList <int> > facet_instances_list = new Dictionary <int, IList <int> > ();

            foreach (Instantiator.UnitMappingType unit_mapping_item in unit_mapping)
            {
                int         facet               = unit_mapping_item.facet;
                int         facet_instance      = unit_mapping_item.facet_instance;
                IList <int> facet_instance_list = null;
                if (!facet_instances_list.TryGetValue(facet, out facet_instance_list))
                {
                    facet_instance_list = new List <int>();
                    facet_instances_list.Add(facet, facet_instance_list);
                }
                facet_instance_list.Add(facet_instance);
            }

            Console.WriteLine("configure_facet_topology 2 - " + facet_instances_list.Count);

            foreach (KeyValuePair <int, IList <int> > f in facet_instances_list)
            {
                int         facet = f.Key;
                IList <int> facet_instance_list = f.Value;
                FacetMultiplicity.Add(facet, facet_instance_list.Count);
                int[] facet_instance_array = new int[FacetMultiplicity [facet]];
                facet_instance_list.CopyTo(facet_instance_array, 0);
                FacetIndexes.Add(facet, facet_instance_array);
            }

            foreach (Instantiator.UnitMappingType unit_mapping_item in unit_mapping)
            {
                int    facet_instance = unit_mapping_item.facet_instance;
                string unit_id        = unit_mapping_item.unit_id;
                int    size           = unit_mapping_item.node.Length;
                IDictionary <string, int> dict;
                Console.WriteLine("configure_facet_topology --- facet_instance=" + facet_instance + " / unit_id=" + unit_id + " / size=" + size);
                if (!UnitSizeInFacet.TryGetValue(facet_instance, out dict))
                {
                    dict = new Dictionary <string, int> ();
                    UnitSizeInFacet [facet_instance] = dict;
                }
                dict[unit_id] = size;
            }
        }
        public void configure_facet_topology(int[] facet_topology, Instantiator.UnitMappingType[] unit_mapping)
        {
            IDictionary <int, IList <int> > facet_instances_list = new Dictionary <int, IList <int> > ();

            foreach (Instantiator.UnitMappingType unit_mapping_item in unit_mapping)
            {
                int         facet               = unit_mapping_item.facet;
                int         facet_instance      = unit_mapping_item.facet_instance;
                IList <int> facet_instance_list = null;
                if (!facet_instances_list.TryGetValue(facet, out facet_instance_list))
                {
                    facet_instance_list = new List <int>();
                    facet_instances_list.Add(facet, facet_instance_list);
                }
                facet_instance_list.Add(facet_instance);
            }


            /*for (int facet_instance = 0; facet_instance < facet_topology.Length; facet_instance++)
             * {
             *      int facet = facet_topology [facet_instance];
             *      if (facet >= 0)
             *      {
             *              IList<int> facet_instance_list = null;
             *              if (!facet_instances_list.TryGetValue (facet, out facet_instance_list))
             *              {
             *                      facet_instance_list = new List<int> ();
             *                      facet_instances_list.Add (facet, facet_instance_list);
             *              }
             *              facet_instance_list.Add (facet_instance);
             *      }
             * }*/

            Console.WriteLine("{1} - facet_instance={0}, configure_facet_topology 2 - " + facet_instances_list.Count, this_facet_instance, this.GetHashCode());

            foreach (KeyValuePair <int, IList <int> > f in facet_instances_list)
            {
                int         facet = f.Key;
                IList <int> facet_instance_list = f.Value;
                FacetMultiplicity.Add(facet, facet_instance_list.Count);
                int[] facet_instance_array = new int[FacetMultiplicity [facet]];
                facet_instance_list.CopyTo(facet_instance_array, 0);
                FacetIndexes.Add(facet, facet_instance_array);
            }

            foreach (KeyValuePair <int, int[]> kv in FacetIndexes)
            {
                Console.Write("{1} - facet_instance={0}, configure_facet_topology - facet=" + kv.Key + ": ", this_facet_instance, this.GetHashCode());
                foreach (int v in kv.Value)
                {
                    Trace.Write(v + " ");
                }
                Console.WriteLine(".");
            }

            foreach (KeyValuePair <int, int> kv in FacetMultiplicity)
            {
                Console.WriteLine("{1} - facet_instance={0}, configure_facet_topology - facet=" + kv.Key + " - size=" + kv.Value, this_facet_instance, this.GetHashCode());
            }



            foreach (Instantiator.UnitMappingType unit_mapping_item in unit_mapping)
            {
                int    facet_instance = unit_mapping_item.facet_instance;
                int    facet          = unit_mapping_item.facet;
                string unit_id        = unit_mapping_item.unit_id;
                int    size           = unit_mapping_item.node.Length;
                IDictionary <string, int> dict;
                Console.WriteLine("{1} - facet_instance={0}, configure_facet_topology --- facet=" + facet + " / facet_instance=" + facet_instance + " / unit_id=" + unit_id + " / size=" + size, this_facet_instance, this.GetHashCode());
                if (!UnitSizeInFacet.TryGetValue(facet_instance, out dict))
                {
                    dict = new Dictionary <string, int> ();
                    UnitSizeInFacet [facet_instance] = dict;
                }
                dict[unit_id] = size;
            }

            foreach (KeyValuePair <int, IDictionary <string, int> > r in UnitSizeInFacet)
            {
                foreach (KeyValuePair <string, int> s in r.Value)
                {
                    Console.WriteLine("{1} - facet_instance={0}, " + this.GlobalRank + ": UnitSizeInFacet: facet_instance = " + r.Key + " --  unit_id = " + s.Key + " -- size = " + s.Value, this_facet_instance, this.GetHashCode());
                }
            }
        }