1 /* Copyright 2022-2025 Thales Alenia Space
2 * Licensed to CS Communication & Systèmes (CS) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * CS 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 * http://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.orekit.models.earth.weather.water;
18
19 import org.hipparchus.CalculusFieldElement;
20
21 /** Interface for converting between relative humidity and water vapor pressure.
22 * @author Luc Maisonobe
23 * @since 12.1
24 */
25 public interface WaterVaporPressureProvider {
26
27 /** Compute water vapor pressure.
28 * @param p pressure (Pa)
29 * @param t temperature (Kelvin)
30 * @param rh relative humidity, as a ratio (50% → 0.5)
31 * @return water vapor pressure (Pa)
32 */
33 double waterVaporPressure(double p, double t, double rh);
34
35 /** Compute relative humidity.
36 * @param p pressure (Pa)
37 * @param t temperature (Kelvin)
38 * @param e water vapor pressure (Pa)
39 * @return relative humidity, as a ratio (50% → 0.5)
40 */
41 default double relativeHumidity(final double p, final double t, final double e) {
42 final double saturationPressure = waterVaporPressure(p, t, 1.0);
43 return e / saturationPressure;
44 }
45
46 /** Compute water vapor pressure.
47 * @param <T> type of the field elements
48 * @param p pressure (Pa)
49 * @param t temperature (Kelvin)
50 * @param rh relative humidity, as a ratio (50% → 0.5)
51 * @return water vapor pressure (Pa)
52 */
53 <T extends CalculusFieldElement<T>> T waterVaporPressure(T p, T t, T rh);
54
55 /** Compute relative humidity.
56 * @param <T> type of the field elements
57 * @param p pressure (Pa)
58 * @param t temperature (Kelvin)
59 * @param e water vapor pressure (Pa)
60 * @return relative humidity, as a ratio (50% → 0.5)
61 */
62 default <T extends CalculusFieldElement<T>> T relativeHumidity(final T p, T t, T e) {
63 final T saturationPressure = waterVaporPressure(p, t, p.getField().getOne());
64 return e.divide(saturationPressure);
65 }
66
67 }