/// <summary>
        /// Create a default subspaces of k-vectors with a given grade and name
        /// </summary>
        private void DefineDefaultSubspaces_KVectors(GMacFrame frame, int grade, string subspaceName)
        {
            var basisCount = FrameUtils.KvSpaceDimension(frame.VSpaceDimension, grade);
            var idsList    = new List <int>(basisCount);

            for (var index = 0; index < basisCount; index++)
            {
                idsList.Add(FrameUtils.BasisBladeId(grade, index));
            }

            var subspaceSignature = BooleanPattern.CreateFromTrueIndexes(frame.GaSpaceDimension, idsList);

            var subspace = frame.DefineSubspace(subspaceName, subspaceSignature);

            subspace.AddCodeLocation(Context.GetCodeLocation(frame.ParseNode));
        }
示例#2
0
文件: AstFrame.cs 项目: phreed/GMac
        /// <summary>
        /// Returns the basis blades having the given grades grouped by their grade
        /// </summary>
        /// <param name="gradesSeq"></param>
        /// <returns></returns>
        public Dictionary <int, List <AstFrameBasisBlade> > BasisBladesGroupedByGrade(params int[] gradesSeq)
        {
            var result = new Dictionary <int, List <AstFrameBasisBlade> >();

            foreach (var grade in gradesSeq)
            {
                var kvSpaceDim = FrameUtils.KvSpaceDimension(VSpaceDimension, grade);

                var newList = new List <AstFrameBasisBlade>(kvSpaceDim);

                for (var index = 0; index < kvSpaceDim; index++)
                {
                    newList.Add(BasisBlade(grade, index));
                }

                result.Add(grade, newList);
            }

            return(result);
        }
示例#3
0
文件: AstFrame.cs 项目: phreed/GMac
        /// <summary>
        /// Returns the basis blades having the given grades grouped by their grade
        /// </summary>
        /// <param name="startGrade"></param>
        /// <returns></returns>
        public Dictionary <int, List <AstFrameBasisBlade> > BasisBladesGroupedByGrade(int startGrade = 0)
        {
            var result = new Dictionary <int, List <AstFrameBasisBlade> >();

            for (var grade = startGrade; grade <= VSpaceDimension; grade++)
            {
                var kvSpaceDim = FrameUtils.KvSpaceDimension(VSpaceDimension, grade);

                var newList = new List <AstFrameBasisBlade>(kvSpaceDim);

                for (var index = 0; index < kvSpaceDim; index++)
                {
                    newList.Add(BasisBlade(grade, index));
                }

                result.Add(grade, newList);
            }

            return(result);
        }
        /// <summary>
        /// Create the default subspace of odd multivectors named @odd@
        /// </summary>
        /// <returns></returns>
        private GMacFrameSubspace DefineDefaultSubspaces_Odd(GMacFrame frame)
        {
            var idsList = new List <int>(frame.GaSpaceDimension);

            for (var grade = 1; grade <= frame.VSpaceDimension; grade = grade + 2)
            {
                var basisCount = FrameUtils.KvSpaceDimension(frame.VSpaceDimension, grade);

                for (var index = 0; index < basisCount; index++)
                {
                    idsList.Add(FrameUtils.BasisBladeId(grade, index));
                }
            }

            const string subspaceName      = "Odd";
            var          subspaceSignature = BooleanPattern.CreateFromTrueIndexes(frame.GaSpaceDimension, idsList);

            var subspace = frame.DefineSubspace(subspaceName, subspaceSignature);

            subspace.AddCodeLocation(Context.GetCodeLocation(frame.ParseNode));

            return(subspace);
        }