1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.models.earth.weather.water;
18
19 import org.hipparchus.CalculusFieldElement;
20 import org.hipparchus.Field;
21 import org.hipparchus.util.Binary64Field;
22 import org.junit.jupiter.api.Assertions;
23 import org.junit.jupiter.api.Test;
24 import org.orekit.models.earth.troposphere.TroposphericModelUtils;
25
26 public abstract class AbstractWaterVaporPressureProviderTest {
27
28 protected abstract WaterVaporPressureProvider buildProvider();
29
30 @Test
31 public abstract void testReferenceWaterVaporPressure();
32
33 protected void doTestReferenceWaterVaporPressure(final double tolerance) {
34
35 final WaterVaporPressureProvider provider = buildProvider();
36 Assertions.assertEquals(TroposphericModelUtils.HECTO_PASCAL.toSI(10.55154),
37 provider.waterVaporPressure(TroposphericModelUtils.HECTO_PASCAL.toSI(1013.25), 273.5 + 18, 0.5),
38 tolerance);
39 }
40
41 @Test
42 public abstract void testReferenceWaterVaporPressureField();
43
44 protected <T extends CalculusFieldElement<T>> void doTestReferenceWaterVaporPressureField(final Field<T> field,
45 final double tolerance) {
46
47 final WaterVaporPressureProvider provider = buildProvider();
48 Assertions.assertEquals(TroposphericModelUtils.HECTO_PASCAL.toSI(10.55154),
49 provider.waterVaporPressure(TroposphericModelUtils.HECTO_PASCAL.toSI(field.getZero().newInstance(1013.25)),
50 field.getZero().newInstance(273.5 + 18),
51 field.getZero().newInstance(0.5)).getReal(),
52 tolerance);
53 }
54
55 @Test
56 public void testRelativeHumidity() {
57 final WaterVaporPressureProvider provider = buildProvider();
58 for (double pPa = 700; pPa < 1100; pPa += 0.5) {
59 final double p = TroposphericModelUtils.HECTO_PASCAL.toSI(pPa);
60 for (double tC = 0.01; tC < 99; tC += 0.25) {
61 final double t = 273.15 + tC;
62 for (double rH = 0.0; rH < 1.0; rH += 0.02) {
63 final double e = provider.waterVaporPressure(p, t, rH);
64 Assertions.assertEquals(rH, provider.relativeHumidity(p, t, e), 1.0e-10);
65 }
66 }
67 }
68 }
69
70 @Test
71 public void testRelativeHumidityField() {
72 doTestRelativeHumidityField(Binary64Field.getInstance());
73 }
74
75 private <T extends CalculusFieldElement<T>> void doTestRelativeHumidityField(final Field<T> field) {
76 final WaterVaporPressureProvider provider = buildProvider();
77 for (double pPa = 700; pPa < 1100; pPa += 0.5) {
78 final T p = TroposphericModelUtils.HECTO_PASCAL.toSI(field.getZero().newInstance(pPa));
79 for (double tC = 0.01; tC < 99; tC += 0.25) {
80 final T t = field.getZero().newInstance(273.15 + tC);
81 for (double rH = 0.0; rH < 1.0; rH += 0.02) {
82 final T e = provider.waterVaporPressure(p, t, field.getZero().newInstance(rH));
83 Assertions.assertEquals(rH, provider.relativeHumidity(p, t, e).getReal(), 1.0e-10);
84 }
85 }
86 }
87 }
88
89 }