public static SimplePermuteUtil Make(Func <int, int> permute, int originalLength, int newLength)
        {
            var buf = new SimplePermuteUtil();

            buf.p              = new int[originalLength];
            buf.ip             = new int[newLength];
            buf.OriginalLength = originalLength;
            buf.NewLength      = newLength;

            for (var i = 0; i < originalLength; i++)
            {
                var pi = buf.p[i] = permute(i);

                if (pi != -1)
                {
                    buf.ip[buf.p[i]] = i;
                }
            }

            return(buf);
        }
Exemplo n.º 2
0
        public static Matrix FullyExpand(Matrix originalMatrix, IEnumerable <ElementLocalDof> src, int totalNodes)
        {
            var source = src.ToArray();

            var dic = new Dictionary <int, ElementLocalDof[]>();

            source.GroupBy(i => i.NodeIndex).ToList().ForEach(i => dic[i.Key] = i.OrderBy(j => j.Dof).ToArray());

            var permArr = new List <int>();

            for (int i = 0; i < source.Length; i++)
            {
                var newLoc = source[i].NodeIndex * 6 + (int)source[i].Dof;

                permArr.Add(newLoc);
            }

            var permute = SimplePermuteUtil.Make(i => permArr[i], source.Length, totalNodes * 6);

            var buf = permute.ApplyTo(originalMatrix);

            return(buf);
        }