Example #1
0
        public GaSymMapBilinearCombined AddMapping(MathematicaScalar coef, IGaSymMapBilinear linearMap)
        {
            if (
                linearMap.DomainVSpaceDimension != DomainVSpaceDimension ||
                linearMap.TargetVSpaceDimension != TargetVSpaceDimension
                )
            {
                throw new InvalidOperationException("Linear map dimensions mismatch");
            }

            _termsList.Add(new GaSymMapBilinearCombinedTerm(coef, linearMap));

            return(this);
        }
Example #2
0
        internal GaSymFrameEuclidean(int vSpaceDim)
        {
            EuclideanMetric = GaSymMetricEuclidean.Create(vSpaceDim);

            Op  = ComputedOp = new GaSymOp(VSpaceDimension);
            Gp  = ComputedGp = new GaSymEuclideanGp(VSpaceDimension);
            Sp  = ComputedSp = new GaSymEuclideanSp(VSpaceDimension);
            Lcp = ComputedLcp = new GaSymEuclideanLcp(VSpaceDimension);
            Rcp = ComputedRcp = new GaSymEuclideanRcp(VSpaceDimension);
            Fdp = ComputedFdp = new GaSymEuclideanFdp(VSpaceDimension);
            Hip = ComputedHip = new GaSymEuclideanHip(VSpaceDimension);
            Acp = ComputedAcp = new GaSymEuclideanAcp(VSpaceDimension);
            Cp  = ComputedCp = new GaSymEuclideanCp(VSpaceDimension);

            UnitPseudoScalarCoef = CasConstants.One;
        }
Example #3
0
        public static GaSymMapBilinearTree ToTreeMap(this IGaSymMapBilinear bilinearMap)
        {
            var resultMap = GaSymMapBilinearTree.Create(
                bilinearMap.DomainVSpaceDimension,
                bilinearMap.TargetVSpaceDimension
                );

            foreach (var basisBladeMapping in bilinearMap.BasisBladesMaps())
            {
                var id1 = basisBladeMapping.Item1;
                var id2 = basisBladeMapping.Item2;
                var mv  = basisBladeMapping.Item3;

                resultMap.SetBasisBladesMap(id1, id2, mv);
            }

            return(resultMap);
        }
Example #4
0
        public static GaSymMapBilinearCoefSums ToCoefSumsMap(this IGaSymMapBilinear bilinearMap)
        {
            var resultMap = GaSymMapBilinearCoefSums.Create(
                bilinearMap.DomainVSpaceDimension,
                bilinearMap.TargetVSpaceDimension
                );

            foreach (var basisBladeMapping in bilinearMap.BasisBladesMaps())
            {
                var id1 = basisBladeMapping.Item1;
                var id2 = basisBladeMapping.Item2;
                var mv  = basisBladeMapping.Item3;

                foreach (var term in mv.NonZeroExprTerms)
                {
                    resultMap.SetFactor(term.Key, id1, id2, term.Value);
                }
            }

            return(resultMap);
        }
Example #5
0
        internal GaSymFrameOrthogonal(IEnumerable <MathematicaScalar> basisVectorsSignaturesList)
        {
            BasisVectorsSignatures = basisVectorsSignaturesList.ToArray();

            OrthogonalMetric = GaSymMetricOrthogonal.Create(BasisVectorsSignatures);

            Op  = ComputedOp = new GaSymOp(VSpaceDimension);
            Gp  = ComputedGp = new GaSymOrthogonalGp(OrthogonalMetric);
            Sp  = ComputedSp = new GaSymOrthogonalSp(OrthogonalMetric);
            Lcp = ComputedLcp = new GaSymOrthogonalLcp(OrthogonalMetric);
            Rcp = ComputedRcp = new GaSymOrthogonalRcp(OrthogonalMetric);
            Fdp = ComputedFdp = new GaSymOrthogonalFdp(OrthogonalMetric);
            Hip = ComputedHip = new GaSymOrthogonalHip(OrthogonalMetric);
            Acp = ComputedAcp = new GaSymOrthogonalAcp(OrthogonalMetric);
            Cp  = ComputedCp = new GaSymOrthogonalCp(OrthogonalMetric);

            UnitPseudoScalarCoef = (
                MaxBasisBladeId.BasisBladeIdHasNegativeReverse()
                    ? CasConstants.MinusOne
                    : CasConstants.One
                ) / OrthogonalMetric.GetSignature(MaxBasisBladeId);
        }
        internal GaSymFrameNonOrthogonal(GaSymFrame baseOrthoFrame, ISymbolicMatrix ipm, GaSymOutermorphism derivedToBaseOm, GaSymOutermorphism baseToDerivedOm)
        {
            if (baseOrthoFrame.IsOrthogonal == false)
            {
                throw new GMacSymbolicException("Base frame must be orthogonal");
            }

            if (ipm.IsSymmetric() == false || ipm.IsDiagonal())
            {
                throw new GMacSymbolicException("Inner product matrix must be symmetric and non-diagonal");
            }

            InnerProductMatrix = ipm.ToMathematicaMatrix();

            NonOrthogonalMetric =
                new GaSymMetricNonOrthogonal(
                    baseOrthoFrame,
                    this,
                    derivedToBaseOm,
                    baseToDerivedOm
                    );

            Op  = ComputedOp = new GaSymOp(VSpaceDimension);
            Gp  = ComputedGp = GaSymBilinearProductCba.CreateGp(NonOrthogonalMetric);
            Sp  = ComputedSp = GaSymBilinearProductCba.CreateSp(NonOrthogonalMetric);
            Lcp = ComputedLcp = GaSymBilinearProductCba.CreateLcp(NonOrthogonalMetric);
            Rcp = ComputedRcp = GaSymBilinearProductCba.CreateRcp(NonOrthogonalMetric);
            Fdp = ComputedFdp = GaSymBilinearProductCba.CreateFdp(NonOrthogonalMetric);
            Hip = ComputedHip = GaSymBilinearProductCba.CreateHip(NonOrthogonalMetric);
            Acp = ComputedAcp = GaSymBilinearProductCba.CreateAcp(NonOrthogonalMetric);
            Cp  = ComputedCp = GaSymBilinearProductCba.CreateCp(NonOrthogonalMetric);

            UnitPseudoScalarCoef =
                MaxBasisBladeId.BasisBladeIdHasNegativeReverse()
                    ? CasConstants.MinusOne / BasisBladeSignature(MaxBasisBladeId)[0].ToMathematicaScalar()
                    : CasConstants.One / BasisBladeSignature(MaxBasisBladeId)[0].ToMathematicaScalar();
        }
Example #7
0
        /// <summary>
        /// frameSigList must have all items equal to 1 (false) or -1 (true) with at least one negative item
        /// </summary>
        /// <param name="frameSigList"></param>
        internal GaSymFrameOrthonormal(IEnumerable <bool> frameSigList)
        {
            BasisVectorsSignatures = frameSigList.Select(b => b ? -1 : 1).ToArray();

            OrthonormalMetric = GaSymMetricOrthonormal.Create(BasisVectorsSignatures);

            Op  = ComputedOp = new GaSymOp(VSpaceDimension);
            Gp  = ComputedGp = new GaSymOrthonormalGp(OrthonormalMetric);
            Sp  = ComputedSp = new GaSymOrthonormalSp(OrthonormalMetric);
            Lcp = ComputedLcp = new GaSymOrthonormalLcp(OrthonormalMetric);
            Rcp = ComputedRcp = new GaSymOrthonormalRcp(OrthonormalMetric);
            Fdp = ComputedFdp = new GaSymOrthonormalFdp(OrthonormalMetric);
            Hip = ComputedHip = new GaSymOrthonormalHip(OrthonormalMetric);
            Acp = ComputedAcp = new GaSymOrthonormalAcp(OrthonormalMetric);
            Cp  = ComputedCp = new GaSymOrthonormalCp(OrthonormalMetric);

            UnitPseudoScalarCoef =
                MathematicaScalar.Create(
                    SymbolicUtils.Cas,
                    MaxBasisBladeId.BasisBladeIdHasNegativeReverse()
                        ? -1.0d / OrthonormalMetric[MaxBasisBladeId]
                        : 1.0d / OrthonormalMetric[MaxBasisBladeId]
                    );
        }
 private GaSymBilinearProductCba(GaSymMetricNonOrthogonal metric, IGaSymMapBilinear baseProductMap)
 {
     NonOrthogonalMetric = metric;
     BaseProductMap      = baseProductMap;
 }
Example #9
0
 internal GaSymMapBilinearCombinedTerm(MathematicaScalar coef, IGaSymMapBilinear linearMap)
 {
     Coef      = coef;
     LinearMap = linearMap;
 }