1 /* 2 * Licensed to the Hipparchus project under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The Hipparchus project licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * https://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 package org.hipparchus.analysis.integration.gauss; 18 19 import org.hipparchus.CalculusFieldElement; 20 import org.hipparchus.FieldElement; 21 import org.hipparchus.exception.MathIllegalArgumentException; 22 import org.hipparchus.util.Pair; 23 24 /** 25 * Factory converting {@link CalculusFieldElement field-based} {@link FieldRuleFactory} into {@link RuleFactory}. 26 * @param <T> Type of the number used to represent the points and weights of 27 * the quadrature rules. 28 * @since 2.0 29 */ 30 public class ConvertingRuleFactory<T extends FieldElement<T>> extends AbstractRuleFactory { 31 32 /** Underlying field-based factory. */ 33 private final FieldRuleFactory<T> fieldFactory; 34 35 /** Simple constructor. 36 * @param fieldFactory field-based factory to convert 37 */ 38 public ConvertingRuleFactory(final FieldRuleFactory<T> fieldFactory) { 39 this.fieldFactory = fieldFactory; 40 } 41 42 /** {@inheritDoc} */ 43 @Override 44 protected Pair<double[], double[]> computeRule(final int numberOfPoints) 45 throws MathIllegalArgumentException { 46 47 // get the field-based rule 48 Pair<T[], T[]> rule = fieldFactory.getRule(numberOfPoints); 49 50 // convert the nodes and weights 51 final T[] pT = rule.getFirst(); 52 final T[] wT = rule.getSecond(); 53 54 final int len = pT.length; 55 final double[] pD = new double[len]; 56 final double[] wD = new double[len]; 57 58 for (int i = 0; i < len; i++) { 59 pD[i] = pT[i].getReal(); 60 wD[i] = wT[i].getReal(); 61 } 62 63 return new Pair<>(pD, wD); 64 65 } 66 67 }