DiracSimplify1(DiracOptions options) { super(options, IDENTITY); ParseToken[] ss = {s1, s2, s3, s4}; this.subs = new Expression[ss.length]; for (int i = 0; i < ss.length; ++i) subs[i] = (Expression) deltaTrace.transform(tokenTransformer.transform(ss[i]).toTensor()); }
/** * @param expression string expression * @param tensorPreprocessors transformation * @param nodesPreprocessors AST transformers * @return tensor */ public Tensor parse(String expression, Transformation[] tensorPreprocessors, ParseTokenTransformer[] nodesPreprocessors) { ParseToken node = parser.parse(expression); for (ParseTokenTransformer tr : nodesPreprocessors) node = tr.transform(node); Tensor t = node.toTensor(); for (Transformation tr : tensorPreprocessors) if (tr != t) t = tr.transform(t); return t; }
/** * @param expression string expression * @param tensorPreprocessors transformation * @param nodesPreprocessors AST transformers * @return tensor */ public Tensor parse(String expression, List<Transformation> tensorPreprocessors, List<ParseTokenTransformer> nodesPreprocessors) { ParseToken node = parser.parse(expression); for (ParseTokenTransformer tr : nodesPreprocessors) node = tr.transform(node); Tensor t = node.toTensor(); for (Transformation tr : tensorPreprocessors) if (tr != t) t = tr.transform(t); return t; }
private Tensor traceWith5(Tensor product, int numberOfGammas) { if (traceOf4GammasWith5 == null) { traceOf4GammasWith5 = (Expression) tokenTransformer.transform(traceOf4GammasWith5Token).toTensor(); chiholmKahaneIdentity = (Expression) tokenTransformer.transform(chiholmKahaneToken).toTensor(); chiholmKahaneIdentityReversed = (Expression) tokenTransformer.transform(chiholmKahaneTokenReversed).toTensor(); chiholmKahaneIdentityReversed = (Expression) deltaTrace.transform(chiholmKahaneIdentityReversed); } if (numberOfGammas == 5)//including one gama5 product = traceOf4GammasWith5.transform(product); else { product = chiholmKahaneIdentityReversed.transform(product); //no gamma5 leaved product = getTraceSubstitution(numberOfGammas + 1).transform(product); } product = expandAndEliminate.transform(product); product = deltaTrace.transform(product); product = traceOfOne.transform(product); if (simplifyLeviCivita != null) { product = simplifyLeviCivita.transform(product); product = deltaTrace.transform(product); product = traceOfOne.transform(product); } return product; }
protected AbstractTransformationWithGammas(DiracOptions options) { checkNotation(options.gammaMatrix, options.gamma5, options.leviCivita); if (!options.created) options.triggerCreate(); this.gammaName = options.gammaMatrix.getName(); this.gamma5Name = options.gamma5 == null ? Integer.MIN_VALUE : options.gamma5.getName(); final IndexType[] types = TraceUtils.extractTypesFromMatrix(options.gammaMatrix); this.metricType = types[0]; this.matrixType = types[1]; this.tokenTransformer = createTokenTransformer(metricType, matrixType, options.gammaMatrix, options.gamma5, options.leviCivita); this.expandAndEliminate = options.expandAndEliminate; this.traceOfOne = (Expression) tokenTransformer.transform(CC.current().getParseManager().getParser().parse("d^a'_a'=" + options.traceOfOne)).toTensor(); this.deltaTrace = (Expression) tokenTransformer.transform(CC.current().getParseManager().getParser().parse("d^a_a=" + options.dimension)).toTensor(); }