diff options
author | Karl Shaffer <karlshaffer@google.com> | 2023-08-11 00:04:18 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2023-08-11 00:04:18 +0000 |
commit | d3fac44428dd0296a04a50c6827e3205b8dbea8a (patch) | |
tree | ace24ba4307d4978ee3134f7da671a77ad172da0 /src/main/java/org/apache/commons/math3/ode/FieldODEState.java | |
parent | 5df6e262b13a4e2a008638ceea2b1f99db0d2331 (diff) | |
parent | 029d049e490dcd5fa609bb7632b0262d95f1bcce (diff) | |
download | apache-commons-math-d3fac44428dd0296a04a50c6827e3205b8dbea8a.tar.gz |
Check-in commons-math 3.6.1 am: 1354beaf45 am: 0018f64b87 am: b3715644fb am: 5484895ffd am: 029d049e49HEADandroid-14.0.0_r37android-14.0.0_r36android-14.0.0_r35android-14.0.0_r34android-14.0.0_r33android-14.0.0_r32android-14.0.0_r31android-14.0.0_r30android-14.0.0_r29mastermainandroid14-qpr2-s5-releaseandroid14-qpr2-s4-releaseandroid14-qpr2-s3-releaseandroid14-qpr2-s2-releaseandroid14-qpr2-s1-releaseandroid14-qpr2-release
Original change: https://android-review.googlesource.com/c/platform/external/apache-commons-math/+/2702413
Change-Id: I6451550459c6d42417e3214f1db820289d799bc7
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
Diffstat (limited to 'src/main/java/org/apache/commons/math3/ode/FieldODEState.java')
-rw-r--r-- | src/main/java/org/apache/commons/math3/ode/FieldODEState.java | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/src/main/java/org/apache/commons/math3/ode/FieldODEState.java b/src/main/java/org/apache/commons/math3/ode/FieldODEState.java new file mode 100644 index 0000000..baa7c96 --- /dev/null +++ b/src/main/java/org/apache/commons/math3/ode/FieldODEState.java @@ -0,0 +1,155 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.commons.math3.ode; + +import org.apache.commons.math3.Field; +import org.apache.commons.math3.RealFieldElement; +import org.apache.commons.math3.util.MathArrays; + +/** + * Container for time, main and secondary state vectors. + * + * @see FirstOrderFieldDifferentialEquations + * @see FieldSecondaryEquations + * @see FirstOrderFieldIntegrator + * @see FieldODEStateAndDerivative + * @param <T> the type of the field elements + * @since 3.6 + */ +public class FieldODEState<T extends RealFieldElement<T>> { + + /** Time. */ + private final T time; + + /** Main state at time. */ + private final T[] state; + + /** Secondary state at time. */ + private final T[][] secondaryState; + + /** + * Simple constructor. + * + * <p>Calling this constructor is equivalent to call {@link #FieldODEState(RealFieldElement, + * RealFieldElement[], RealFieldElement[][]) FieldODEState(time, state, null)}. + * + * @param time time + * @param state state at time + */ + public FieldODEState(T time, T[] state) { + this(time, state, null); + } + + /** + * Simple constructor. + * + * @param time time + * @param state state at time + * @param secondaryState state at time (may be null) + */ + public FieldODEState(T time, T[] state, T[][] secondaryState) { + this.time = time; + this.state = state.clone(); + this.secondaryState = copy(time.getField(), secondaryState); + } + + /** + * Copy a two-dimensions array. + * + * @param field field to which elements belong + * @param original original array (may be null) + * @return copied array or null if original array was null + */ + protected T[][] copy(final Field<T> field, final T[][] original) { + + // special handling of null arrays + if (original == null) { + return null; + } + + // allocate the array + final T[][] copied = MathArrays.buildArray(field, original.length, -1); + + // copy content + for (int i = 0; i < original.length; ++i) { + copied[i] = original[i].clone(); + } + + return copied; + } + + /** + * Get time. + * + * @return time + */ + public T getTime() { + return time; + } + + /** + * Get main state dimension. + * + * @return main state dimension + */ + public int getStateDimension() { + return state.length; + } + + /** + * Get main state at time. + * + * @return main state at time + */ + public T[] getState() { + return state.clone(); + } + + /** + * Get the number of secondary states. + * + * @return number of secondary states. + */ + public int getNumberOfSecondaryStates() { + return secondaryState == null ? 0 : secondaryState.length; + } + + /** + * Get secondary state dimension. + * + * @param index index of the secondary set as returned by {@link + * FieldExpandableODE#addSecondaryEquations(FieldSecondaryEquations)} (beware index 0 + * corresponds to main state, additional states start at 1) + * @return secondary state dimension + */ + public int getSecondaryStateDimension(final int index) { + return index == 0 ? state.length : secondaryState[index - 1].length; + } + + /** + * Get secondary state at time. + * + * @param index index of the secondary set as returned by {@link + * FieldExpandableODE#addSecondaryEquations(FieldSecondaryEquations)} (beware index 0 + * corresponds to main state, additional states start at 1) + * @return secondary state at time + */ + public T[] getSecondaryState(final int index) { + return index == 0 ? state.clone() : secondaryState[index - 1].clone(); + } +} |