/** * Returns all scalar factors in this product excluding the numerical factor. For example, if * this is 2*a*f_mn*G^mn*f_a*T^ab, the result will be [a,f_mn*G^mn]. * * @return all scalar factors in this product excluding the numerical factor */ public Tensor[] getAllScalarsWithoutFactor() { Tensor[] scalras = getContent().getScalars(); Tensor[] allScalars = new Tensor[indexlessData.length + scalras.length]; System.arraycopy(indexlessData, 0, allScalars, 0, indexlessData.length); System.arraycopy(scalras, 0, allScalars, indexlessData.length, scalras.length); return allScalars; }
/** * Returns all scalar factors in this product. For example, if this is 2*a*f_mn*G^mn*f_a*T^ab, the * result will be [2,a,f_mn*G^mn]. * * @return all scalar factors in this product */ public Tensor[] getAllScalars() { Tensor[] scalras = getContent().getScalars(); if (factor == Complex.ONE) { Tensor[] allScalars = new Tensor[indexlessData.length + scalras.length]; System.arraycopy(indexlessData, 0, allScalars, 0, indexlessData.length); System.arraycopy(scalras, 0, allScalars, indexlessData.length, scalras.length); return allScalars; } else { Tensor[] allScalars = new Tensor[1 + indexlessData.length + scalras.length]; allScalars[0] = factor; System.arraycopy(indexlessData, 0, allScalars, 1, indexlessData.length); System.arraycopy(scalras, 0, allScalars, indexlessData.length + 1, scalras.length); return allScalars; } }
continue; Tensor[] scalars = ((Product) t).getContent().getScalars(); for (Tensor scalar : scalars) { if (!tensorSubstitutions.containsKey(scalar)) {
/** * Generates a set of replacement rules for all scalar (but not symbolic) sub-tensors appearing in the specified * tensor. * * @param tensor tensor * @param generatedCoefficients allows to control how coefficients are generated * @return set of replacement rules for all scalar (but not symbolic) sub-tensors appearing in the specified * tensor * @see LocalSymbolsProvider */ public static Expression[] generateReplacementsOfScalars(Tensor tensor, OutputPort<SimpleTensor> generatedCoefficients) { THashSet<Tensor> scalars = new THashSet<>(); FromChildToParentIterator iterator = new FromChildToParentIterator(tensor); Tensor c; while ((c = iterator.next()) != null) if (c instanceof Product) scalars.addAll(Arrays.asList(((Product) c).getContent().getScalars())); Expression[] replacements = new Expression[scalars.size()]; int i = -1; for (Tensor scalar : scalars) replacements[++i] = expression(scalar, generatedCoefficients.take()); return replacements; }
ProductContent content = product.getContent(); factor = content.getNonScalar(); Tensor[] scalars = content.getScalars(); int dataLength = factor instanceof Product ? product.data.length - ((Product) factor).data.length