Exemplo n.º 1
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;
        }
Exemplo n.º 2
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);
        }
Exemplo n.º 3
0
        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();
        }
Exemplo n.º 4
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]
                    );
        }