update meteolib functions

This commit is contained in:
wyq 2022-02-23 17:13:50 +08:00
parent 45ca566145
commit d2de12c825
18 changed files with 350 additions and 194 deletions

View File

@ -1,30 +1,30 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<MeteoInfo File="milconfig.xml" Type="configurefile">
<Path OpenPath="D:\Working\MIScript\Jython\mis\io\grib">
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\volume"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\city"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\contour"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\streamplot"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\isosurface"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\surf"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\3d"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\io\burf"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\io"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\bar"/>
<Path OpenPath="D:\Working\MIScript\Jython\mis\meteo\wrf">
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\geoshow"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\3d_earth"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\io\grib"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\io"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\contour"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\satellite"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\satellite\FY"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\meteo\calc"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\meteo\interpolation"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\meteo\data"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\meteo"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\meteo\wrf"/>
</Path>
<File>
<OpenedFiles>
<OpenedFile File="D:\Working\MIScript\Jython\mis\plot_types\3d_earth\CALIPSO_L1_3d_axis.py"/>
<OpenedFile File="D:\Working\MIScript\Jython\mis\io\grib\grib_ensemble.py"/>
<OpenedFile File="D:\Working\MIScript\Jython\mis\meteo\vort_advection_2.py"/>
<OpenedFile File="D:\Working\MIScript\Jython\mis\meteo\wrf\typhoon_path_trace.py"/>
</OpenedFiles>
<RecentFiles>
<RecentFile File="D:\Working\MIScript\Jython\mis\plot_types\3d_earth\CALIPSO_L1_3d_axis.py"/>
<RecentFile File="D:\Working\MIScript\Jython\mis\io\grib\grib_ensemble.py"/>
<RecentFile File="D:\Working\MIScript\Jython\mis\meteo\vort_advection_2.py"/>
<RecentFile File="D:\Working\MIScript\Jython\mis\meteo\wrf\typhoon_path_trace.py"/>
</RecentFiles>
</File>
<Font>
@ -32,5 +32,5 @@
</Font>
<LookFeel DockWindowDecorated="true" LafDecorated="true" Name="FlatDarkLaf"/>
<Figure DoubleBuffering="true"/>
<Startup MainFormLocation="-7,0" MainFormSize="1361,845"/>
<Startup MainFormLocation="-7,0" MainFormSize="1364,783"/>
</MeteoInfo>

View File

@ -1,9 +1,10 @@
from .meteo import *
import wrf
from . import wrf
from . import constants
from .calc import *
from .interpolate import *
__all__ = []
__all__ = ['wrf','constants','meteo','calc','interpolate']
__all__ += meteo.__all__
__all__ += calc.__all__
__all__ += interpolate.__all__

View File

@ -7,7 +7,7 @@ Ported from MetPy.
from org.meteoinfo.math.meteo import MeteoMath
import mipylib.numeric as np
from mipylib.numeric.core import NDArray, DimArray
from .tools import first_derivative, gradient, get_layer_heights
from .tools import first_derivative, gradient, get_layer_heights, lat_lon_grid_deltas
from .basic import coriolis_parameter
from .. import constants
@ -78,12 +78,33 @@ def vorticity(u, v, dx=None, dy=None, x_dim=-1, y_dim=-2):
xx = u.dimvalue(x_dim)
yy = u.dimvalue(y_dim)
xx, yy = np.meshgrid(xx, yy)
if u.proj.isLonLat():
dx, dy = lat_lon_grid_deltas(xx, yy)
if dx.ndim < u.ndim:
ea = range(u.ndim - dx.ndim)
dx = np.expand_dims(dx, axis=ea)
dy = np.expand_dims(dy, axis=ea)
dudy = first_derivative(u, delta=dy, axis=y_dim)
dvdx = first_derivative(v, delta=dx, axis=x_dim)
else:
if xx.ndim < u.ndim:
ea = range(u.ndim - xx.ndim)
xx = np.expand_dims(xx, axis=ea)
yy = np.expand_dims(yy, axis=ea)
dudy = first_derivative(u, x=yy, axis=y_dim)
dvdx = first_derivative(v, x=xx, axis=x_dim)
else:
if dx.ndim < u.ndim:
ea = range(u.ndim - dx.ndim)
dx = np.expand_dims(dx, axis=ea)
dy = np.expand_dims(dy, axis=ea)
dudy = first_derivative(u, delta=dy, axis=y_dim)
dvdx = first_derivative(v, delta=dx, axis=x_dim)
return dvdx - dudy
r = dvdx - dudy
if isinstance(u, DimArray):
return DimArray(r, u.dims, u.fill_value, u.proj)
else:
return r
def vorticity_bak(u, v, x=None, y=None):
"""
@ -166,12 +187,34 @@ def divergence(u, v, dx=None, dy=None, x_dim=-1, y_dim=-2):
xx = u.dimvalue(x_dim)
yy = u.dimvalue(y_dim)
xx, yy = np.meshgrid(xx, yy)
if u.proj.isLonLat():
dx, dy = lat_lon_grid_deltas(xx, yy)
if dx.ndim < u.ndim:
ea = range(u.ndim - dx.ndim)
dx = np.expand_dims(dx, axis=ea)
dy = np.expand_dims(dy, axis=ea)
dudx = first_derivative(u, delta=dx, axis=x_dim)
dvdy = first_derivative(v, delta=dy, axis=y_dim)
else:
if xx.ndim < u.ndim:
ea = range(u.ndim - xx.ndim)
xx = np.expand_dims(xx, axis=ea)
yy = np.expand_dims(yy, axis=ea)
dudx = first_derivative(u, x=xx, axis=x_dim)
dvdy = first_derivative(v, x=yy, axis=y_dim)
else:
if dx.ndim < u.ndim:
ea = range(u.ndim - dx.ndim)
dx = np.expand_dims(dx, axis=ea)
dy = np.expand_dims(dy, axis=ea)
dudx = first_derivative(u, delta=dx, axis=x_dim)
dvdy = first_derivative(v, delta=dy, axis=y_dim)
return dudx + dvdy
r = dudx + dvdy
if isinstance(u, DimArray):
return DimArray(r, u.dims, u.fill_value, u.proj)
else:
return r
def divergence_bak(u, v, x=None, y=None):
'''

View File

@ -4,6 +4,7 @@ Contains a collection of thermodynamic calculations.
Ported from MetPy.
"""
import warnings
from .. import constants
from ..cbook import broadcast_indices
from .tools import find_bounding_indices, _less_or_close
@ -16,31 +17,39 @@ __all__ = [
'mixing_ratio','mixing_ratio_from_specific_humidity','potential_temperature',
'relative_humidity_from_specific_humidity',
'saturation_mixing_ratio','saturation_vapor_pressure','temperature_from_potential_temperature',
'virtual_temperature','dry_static_energy','isentropic_interpolation'
'virtual_temperature','dry_static_energy','isentropic_interpolation',
'dewpoint','dewpoint_from_relative_humidity','specific_humidity_from_dewpoint',
'specific_humidity_from_mixing_ratio','specific_humidity_from_relative_humidity'
]
def saturation_vapor_pressure(temperature):
r"""Calculate the saturation water vapor (partial) pressure.
Parameters
----------
temperature : `float`
The temperature (celsius)
The temperature (kelvin)
Returns
-------
`float`
The saturation water vapor (partial) pressure
See Also
--------
vapor_pressure, dewpoint
Notes
-----
Instead of temperature, dewpoint may be used in order to calculate
the actual (ambient) water vapor (partial) pressure.
The formula used is that from [Bolton1980]_ for T in degrees Celsius:
.. math:: 6.112 e^\frac{17.67T}{T + 243.5}
"""
# Converted from original in terms of C to use kelvin.
return constants.sat_pressure_0c * np.exp(17.67 * (temperature - 273.15) / (temperature - 29.65))
return constants.sat_pressure_0c * np.exp(17.67 * (temperature - 273.15) /
(temperature - 29.65))
def mixing_ratio_from_specific_humidity(specific_humidity):
r"""Calculate the mixing ratio from specific humidity.
@ -68,18 +77,22 @@ def mixing_ratio(part_press, tot_press):
"""
Calculates the mixing ratio of gas given its partial pressure
and the total pressure of the air.
There are no required units for the input arrays, other than that
they have the same units.
Parameters
----------
part_press : array_like
Partial pressure of the constituent gas
tot_press : array_like
Total air pressure
Returns
-------
array_like
The (mass) mixing ratio, dimensionless (e.g. Kg/Kg or g/g)
See Also
--------
vapor_pressure
@ -91,17 +104,22 @@ def saturation_mixing_ratio(tot_press, temperature):
"""
Calculates the saturation mixing ratio given total pressure
and the temperature.
The implementation uses the formula outlined in [4]
Parameters
----------
tot_press: array_like
Total atmospheric pressure (hPa)
temperature: array_like
The temperature (celsius)
The temperature (kelvin)
Returns
-------
array_like
The saturation mixing ratio, dimensionless
References
----------
.. [4] Hobbs, Peter V. and Wallace, John M., 1977: Atmospheric Science, an Introductory
@ -176,95 +194,110 @@ def exner_function(pressure, reference_pressure=constants.P0):
def potential_temperature(pressure, temperature):
"""
Calculate the potential temperature.
Uses the Poisson equation to calculation the potential temperature
given `pressure` and `temperature`.
Parameters
----------
pressure : array_like
The total atmospheric pressure
temperature : array_like
The temperature
Returns
-------
array_like
The potential temperature corresponding to the the temperature and
pressure.
See Also
--------
dry_lapse
Notes
-----
Formula:
.. math:: \Theta = T (P_0 / P)^\kappa
"""
return temperature * (constants.P0 / pressure)**constants.kappa
return temperature / exner_function(pressure)
def temperature_from_potential_temperature(pressure, theta):
def temperature_from_potential_temperature(pressure, potential_temperature):
r"""Calculate the temperature from a given potential temperature.
Uses the inverse of the Poisson equation to calculate the temperature from a
given potential temperature at a specific pressure level.
Parameters
----------
pressure : `pint.Quantity`
The total atmospheric pressure
theta : `pint.Quantity`
The potential temperature
pressure : `array`
The total atmospheric pressure (hPa)
potential_temperature : `array`
The potential temperature (Kelvin)
Returns
-------
`pint.Quantity`
`array` (kelvin)
The temperature corresponding to the potential temperature and pressure.
See Also
--------
dry_lapse
potential_temperature
Notes
-----
Formula:
.. math:: T = \Theta (P / P_0)^\kappa
"""
return theta * exner_function(pressure)
return potential_temperature * exner_function(pressure)
def equivalent_potential_temperature(pressure, temperature, dewpoint):
r"""Calculate equivalent potential temperature.
This calculation must be given an air parcel's pressure, temperature, and dewpoint.
The implementation uses the formula outlined in [Bolton1980]_:
First, the LCL temperature is calculated:
.. math:: T_{L}=\frac{1}{\frac{1}{T_{D}-56}+\frac{ln(T_{K}/T_{D})}{800}}+56
Which is then used to calculate the potential temperature at the LCL:
.. math:: \theta_{DL}=T_{K}\left(\frac{1000}{p-e}\right)^k
\left(\frac{T_{K}}{T_{L}}\right)^{.28r}
Both of these are used to calculate the final equivalent potential temperature:
.. math:: \theta_{E}=\theta_{DL}\exp\left[\left(\frac{3036.}{T_{L}}
-1.78\right)*r(1+.448r)\right]
Parameters
----------
pressure: `float`
Total atmospheric pressure (hPa)
temperature: `float`
Temperature of parcel (celsius)
Temperature of parcel (kelvin)
dewpoint: `float`
Dewpoint of parcel (celsius)
Dewpoint of parcel (kelvin)
Returns
-------
`float`
The equivalent potential temperature of the parcel (celsius)
The equivalent potential temperature of the parcel (kelvin)
Notes
-----
[Bolton1980]_ formula for Theta-e is used, since according to
[DaviesJones2009]_ it is the most accurate non-iterative formulation
available.
"""
t = temperature + 273.15
td = dewpoint + 273.15
p = pressure
t = temperature
td = dewpoint
e = saturation_vapor_pressure(dewpoint)
r = saturation_mixing_ratio(pressure, dewpoint)
t_l = 56 + 1. / (1. / (td - 56) + np.log(t / td) / 800.)
th_l = t * (1000 / (p - e)) ** constants.kappa * (t / t_l) ** (0.28 * r)
th_e = th_l * np.exp((3036. / t_l - 1.78) * r * (1 + 0.448 * r))
return th_e - 273.15
th_l = potential_temperature(pressure - e, temperature) * (t / t_l) ** (0.28 * r)
return th_l * np.exp(r * (1 + 0.448 * r) * (3036. / t_l - 1.78))
def virtual_temperature(temperature, mixing, molecular_weight_ratio=constants.epsilon):
r"""Calculate virtual temperature.
@ -473,3 +506,122 @@ def isentropic_interpolation(levels, pressure, temperature, *args, **kwargs):
ret.extend(others)
return ret
def dewpoint_from_relative_humidity(temperature, rh):
r"""Calculate the ambient dewpoint given air temperature and relative humidity.
Parameters
----------
temperature : `float`
Air temperature (celsius)
rh : `float`
Relative humidity expressed as a ratio in the range 0 < rh <= 1
Returns
-------
`float`
The dew point temperature (celsius)
See Also
--------
dewpoint, saturation_vapor_pressure
"""
if np.any(rh > 1.2):
warnings.warn('Relative humidity >120%, ensure proper units.')
return dewpoint(rh * saturation_vapor_pressure(temperature))
def dewpoint(vapor_pressure):
r"""Calculate the ambient dewpoint given the vapor pressure.
Parameters
----------
vapor_pressure : `array`
Water vapor partial pressure
Returns
-------
`array`
Dew point temperature
See Also
--------
dewpoint_rh, saturation_vapor_pressure, vapor_pressure
Notes
-----
This function inverts the [Bolton1980]_ formula for saturation vapor
pressure to instead calculate the temperature. This yield the following
formula for dewpoint in degrees Celsius:
.. math:: T = \frac{243.5 log(e / 6.112)}{17.67 - log(e / 6.112)}
"""
val = np.log(vapor_pressure / constants.nounit.sat_pressure_0c)
return constants.nounit.zero_degc + 243.5 * val / (17.67 - val)
def specific_humidity_from_mixing_ratio(mixing_ratio):
r"""Calculate the specific humidity from the mixing ratio.
Parameters
----------
mixing_ratio: `array`
Mixing ratio
Returns
-------
`array`
Specific humidity
See Also
--------
mixing_ratio, mixing_ratio_from_specific_humidity
Notes
-----
Formula from [Salby1996]_ pg. 118.
.. math:: q = \frac{w}{1+w}
* :math:`w` is mixing ratio
* :math:`q` is the specific humidity
"""
return mixing_ratio / (1 + mixing_ratio)
def specific_humidity_from_dewpoint(pressure, dewpoint):
r"""Calculate the specific humidity from the dewpoint temperature and pressure.
Parameters
----------
dewpoint: `array`
Dewpoint temperature
pressure: `array`
Pressure
Returns
-------
`array`
Specific humidity
See Also
--------
mixing_ratio, saturation_mixing_ratio
"""
mixing_ratio = saturation_mixing_ratio(pressure, dewpoint)
return specific_humidity_from_mixing_ratio(mixing_ratio)
def specific_humidity_from_relative_humidity(pressure, temperature, rh):
"""Calculate specific humidity from relative humidity, pressure and temperature.
Parameters
----------
pressure: `array`
Pressure
temperature: `array`
temperature
rh: `array`
relative humidity
Returns
-------
`array`
Specific humidity
"""
dp = dewpoint_from_relative_humidity(temperature, rh)
return specific_humidity_from_dewpoint(pressure, dp)

View File

@ -0,0 +1,2 @@
from . import nounit
from .default import *

View File

@ -1,10 +1,3 @@
#-----------------------------------------------------
# Author: Yaqiang Wang
# Date: 2018-11-23
# Purpose: MeteoInfoLab constants module
# Note: Jython
#-----------------------------------------------------
P0 = 1000. #reference pressure for potential temperature (hPa)
R = 8.3144598 #molar gas constant (J / K / mol)
Mw = 18.01528 #Molecular weight of water (g / mol)
@ -16,6 +9,6 @@ epsilon = Mw / Md
kappa = 0.286
degCtoK = 273.15 # Temperature offset between K and C (deg C)
g = 9.8 # Gravitational acceleration (m / s^2)
sat_pressure_0c = 6.112 #Saturation presssure at 0 degree (hPa)
sat_pressure_0c = 6.112 #Saturation pressure at 0 degree (hPa)
T_BASE = 300.
omega = 7292115e-11 # Avg. angular velocity of Earth (rad / s)

View File

@ -0,0 +1,4 @@
from . import default
zero_degc = 273.15 # K
sat_pressure_0c = default.sat_pressure_0c * 100 # Pa

View File

@ -260,49 +260,6 @@ def rh2dewpoint(rh, temp):
else:
return MeteoMath.rh2dewpoint(rh, temp)
def dewpoint(e):
r"""Calculate the ambient dewpoint given the vapor pressure.
Parameters
----------
e : `pint.Quantity`
Water vapor partial pressure
Returns
-------
`pint.Quantity`
Dew point temperature
See Also
--------
dewpoint_rh, saturation_vapor_pressure, vapor_pressure
Notes
-----
This function inverts the [Bolton1980]_ formula for saturation vapor
pressure to instead calculate the temperature. This yield the following
formula for dewpoint in degrees Celsius:
.. math:: T = \frac{243.5 log(e / 6.112)}{17.67 - log(e / 6.112)}
"""
val = np.log(e / constants.sat_pressure_0c)
return 243.5 * val / (17.67 - val)
def dewpoint_from_relative_humidity(temperature, rh):
r"""Calculate the ambient dewpoint given air temperature and relative humidity.
Parameters
----------
temperature : `float`
Air temperature (celsius)
rh : `float`
Relative humidity expressed as a ratio in the range 0 < rh <= 1
Returns
-------
`float`
The dew point temperature (celsius)
See Also
--------
dewpoint, saturation_vapor_pressure
"""
#if np.any(rh > 1.2):
# warnings.warn('Relative humidity >120%, ensure proper units.')
return dewpoint(rh * saturation_vapor_pressure(temperature))
def dewpoint_rh(temperature, rh):
r"""Calculate the ambient dewpoint given air temperature and relative humidity.
@ -424,16 +381,20 @@ def vapor_pressure(pressure, mixing):
def cumsimp(y):
"""
Simpson-rule column-wise cumulative summation.
Numerical approximation of a function F(x) such that
Y(X) = dF/dX. Each column of the input matrix Y represents
the value of the integrand Y(X) at equally spaced points
X = 0,1,...size(Y,1).
The output is a matrix F of the same size as Y.
The first row of F is equal to zero and each following row
is the approximation of the integral of each column of matrix
Y up to the givem row.
Y up to the given row.
CUMSIMP assumes continuity of each column of the function Y(X)
and uses Simpson rule summation.
Similar to the command F = CUMSUM(Y), exept for zero first
row and more accurate summation (under the assumption of
continuous integrand Y(X)).

View File

@ -104,7 +104,7 @@ def get_rh(wrfin, timeidx=0):
full_p = p + pb
qvapor[qvapor < 0] = 0.
tk = temperature_from_potential_temperature(full_p * 0.01, full_t)
rh = relative_humidity_from_specific_humidity(qvapor, tk - 273.15, full_p * 0.01) * 100
rh = relative_humidity_from_specific_humidity(full_p * 0.01, tk, qvapor)
return rh
@ -124,6 +124,6 @@ def get_rh2m(wrfin, timeidx=0):
psfc = wrfin['PSFC'][timeidx,:,:]
q2 = wrfin['Q2'][timeidx,:,:]
q2[q2 < 0] = 0.
rh = relative_humidity_from_specific_humidity(q2, t2 - 273.15, psfc * 0.01) * 100
rh = relative_humidity_from_specific_humidity(psfc * 0.01, t2, q2)
return rh

View File

@ -14,10 +14,9 @@ from . import signal
from . import spatial
from . import special
__all__ = []
__all__ = ['linalg', 'fitting', 'random', 'ma', 'stats', 'interpolate', 'optimize', 'signal', 'spatial',
'special']
__all__.extend(['__version__'])
__all__.extend(core.__all__)
__all__.extend(lib.__all__)
__all__.extend(['linalg', 'fitting', 'random', 'ma', 'stats', 'interpolate', 'optimize', 'signal', 'spatial',
'special'])
__all__.extend(['griddata'])

View File

@ -12,100 +12,17 @@
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module" module-name="meteoinfo-chart" />
<orderEntry type="module" module-name="meteoinfo-console" />
<orderEntry type="module" module-name="meteoinfo-geo" />
<orderEntry type="module" module-name="meteoinfo-math" />
<orderEntry type="module" module-name="meteoinfo-ndarray" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-math3:3.6.1" level="project" />
<orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:2.0.0" level="project" />
<orderEntry type="library" name="Maven: org.ejml:ejml-experimental:0.40" level="project" />
<orderEntry type="library" name="Maven: org.ejml:ejml-core:0.40" level="project" />
<orderEntry type="library" name="Maven: org.ejml:ejml-ddense:0.40" level="project" />
<orderEntry type="library" name="Maven: org.ejml:ejml-dsparse:0.40" level="project" />
<orderEntry type="library" name="Maven: org.ejml:ejml-zdense:0.40" level="project" />
<orderEntry type="library" name="Maven: org.ejml:ejml-simple:0.40" level="project" />
<orderEntry type="library" name="Maven: org.ejml:ejml-fdense:0.40" level="project" />
<orderEntry type="library" name="Maven: org.ejml:ejml-cdense:0.40" level="project" />
<orderEntry type="library" name="Maven: org.ejml:ejml-fsparse:0.40" level="project" />
<orderEntry type="library" name="Maven: org.ojalgo:ojalgo:48.4.1" level="project" />
<orderEntry type="library" name="Maven: com.github.haifengl:smile-interpolation:2.6.0" level="project" />
<orderEntry type="library" name="Maven: com.github.haifengl:smile-math:2.6.0" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.30" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:javacpp-platform:1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:javacpp:1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:javacpp:android-arm:1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:javacpp:android-arm64:1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:javacpp:android-x86:1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:javacpp:android-x86_64:1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:javacpp:ios-arm64:1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:javacpp:ios-x86_64:1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:javacpp:linux-armhf:1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:javacpp:linux-arm64:1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:javacpp:linux-ppc64le:1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:javacpp:linux-x86:1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:javacpp:linux-x86_64:1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:javacpp:macosx-x86_64:1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:javacpp:windows-x86:1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:javacpp:windows-x86_64:1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:openblas-platform:0.3.10-1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:openblas:0.3.10-1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:openblas:android-arm:0.3.10-1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:openblas:android-arm64:0.3.10-1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:openblas:android-x86:0.3.10-1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:openblas:android-x86_64:0.3.10-1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:openblas:ios-arm64:0.3.10-1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:openblas:ios-x86_64:0.3.10-1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:openblas:linux-x86:0.3.10-1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:openblas:linux-x86_64:0.3.10-1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:openblas:linux-armhf:0.3.10-1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:openblas:linux-arm64:0.3.10-1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:openblas:linux-ppc64le:0.3.10-1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:openblas:macosx-x86_64:0.3.10-1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:openblas:windows-x86:0.3.10-1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:openblas:windows-x86_64:0.3.10-1.5.4" level="project" />
<orderEntry type="module" module-name="meteoinfo-geometry" />
<orderEntry type="library" name="Maven: org.locationtech.jts:jts-core:1.17.0" level="project" />
<orderEntry type="module" module-name="meteoinfo-table" />
<orderEntry type="module" module-name="meteoinfo-image" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-imaging:1.0-alpha2" level="project" />
<orderEntry type="module" module-name="meteoinfo-data" />
<orderEntry type="module" module-name="meteoinfo-projection" />
<orderEntry type="library" name="Maven: org.locationtech.proj4j:proj4j:1.1.4" level="project" />
<orderEntry type="library" name="Maven: net.sf.geographiclib:GeographicLib-Java:1.52" level="project" />
<orderEntry type="module" module-name="meteoinfo-dataframe" />
<orderEntry type="library" name="Maven: edu.ucar:netcdfAll:5.5.3-SNAPSHOT" level="project" />
<orderEntry type="library" name="Maven: com.github.albfernandez:juniversalchardet:2.4.0" level="project" />
<orderEntry type="library" name="Maven: commons-io:commons-io:2.11.0" level="project" />
<orderEntry type="library" name="Maven: com.formdev:flatlaf:2.0.1" level="project" />
<orderEntry type="library" name="Maven: com.formdev:flatlaf-extras:2.0.1" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: com.formdev:svgSalamander:1.1.3" level="project" />
<orderEntry type="library" name="Maven: com.itextpdf:itextpdf:5.5.13.2" level="project" />
<orderEntry type="module" module-name="meteoinfo-ui" />
<orderEntry type="module" module-name="meteoinfo-common" />
<orderEntry type="library" name="Maven: com.google.guava:guava:30.1.1-jre" level="project" />
<orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project" />
<orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project" />
<orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
<orderEntry type="library" name="Maven: org.checkerframework:checker-qual:3.8.0" level="project" />
<orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.5.1" level="project" />
<orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project" />
<orderEntry type="library" name="Maven: com.toedter:jcalendar:1.4" level="project" />
<orderEntry type="library" name="Maven: org.meteothink:wContour:1.7.1" level="project" />
<orderEntry type="library" name="Maven: org.scilab.forge:jlatexmath:1.0.7" level="project" />
<orderEntry type="library" name="Maven: org.scilab.forge:jlatexmath-font-greek:1.0.7" level="project" />
<orderEntry type="library" name="Maven: org.scilab.forge:jlatexmath-font-cyrillic:1.0.7" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.12.0" level="project" />
<orderEntry type="library" name="Maven: com.l2fprod:l2fprod-common-all:0.1" level="project" />
<orderEntry type="library" name="Maven: org.freehep:freehep-util:2.0.2" level="project" />
<orderEntry type="library" name="Maven: org.netbeans:openide-lookup:1.9-patched-1.0" level="project" />
<orderEntry type="library" name="Maven: org.freehep:freehep-graphicsio-emf:2.4" level="project" />
<orderEntry type="library" name="Maven: org.freehep:freehep-graphicsio:2.4" level="project" />
<orderEntry type="library" name="Maven: org.freehep:freehep-io:2.2.2" level="project" />
<orderEntry type="library" name="Maven: org.freehep:freehep-graphicsio-tests:2.4" level="project" />
<orderEntry type="library" name="Maven: org.freehep:freehep-graphicsbase:2.4" level="project" />
<orderEntry type="library" name="Maven: org.freehep:freehep-graphicsio-pdf:2.4" level="project" />
<orderEntry type="library" name="Maven: org.freehep:freehep-graphics2d:2.4" level="project" />
<orderEntry type="library" name="Maven: junit:junit:4.10" level="project" />
<orderEntry type="library" name="Maven: org.hamcrest:hamcrest-core:1.1" level="project" />
<orderEntry type="library" name="Maven: org.freehep:freehep-graphicsio-ps:2.4" level="project" />
<orderEntry type="library" name="Maven: org.jogamp.jogl:jogl-all:v2.4.0-rc4" level="project" />
<orderEntry type="library" name="Maven: org.jogamp.jogl:jogl-all-natives-linux-aarch64:v2.4.0-rc4" level="project" />
@ -124,9 +41,92 @@
<orderEntry type="library" name="Maven: org.jogamp.gluegen:gluegen-rt-natives-windows-amd64:v2.4.0-rc4" level="project" />
<orderEntry type="library" name="Maven: org.jogamp.gluegen:gluegen-rt-natives-windows-i586:v2.4.0-rc4" level="project" />
<orderEntry type="library" name="Maven: org.joml:joml:1.9.25" level="project" />
<orderEntry type="module" module-name="meteoinfo-console" />
<orderEntry type="library" name="Maven: org.python:jython-standalone:2.7.2" level="project" />
<orderEntry type="library" name="Maven: com.fifesoft:rsyntaxtextarea:3.1.1" level="project" />
<orderEntry type="library" name="Maven: com.fifesoft:autocomplete:3.1.0" level="project" />
<orderEntry type="module" module-name="meteoinfo-math" />
<orderEntry type="module" module-name="meteoinfo-geometry" />
<orderEntry type="module" module-name="meteoinfo-table" />
<orderEntry type="module" module-name="meteoinfo-image" />
<orderEntry type="module" module-name="meteoinfo-data" />
<orderEntry type="library" name="Maven: com.formdev:flatlaf:2.0.1" level="project" />
<orderEntry type="library" name="Maven: com.formdev:flatlaf-extras:2.0.1" level="project" />
<orderEntry type="library" name="Maven: com.itextpdf:itextpdf:5.5.13.2" level="project" />
<orderEntry type="module" module-name="meteoinfo-common" />
<orderEntry type="library" name="Maven: com.toedter:jcalendar:1.4" level="project" />
<orderEntry type="library" name="Maven: org.scilab.forge:jlatexmath-font-greek:1.0.7" level="project" />
<orderEntry type="library" name="Maven: org.scilab.forge:jlatexmath-font-cyrillic:1.0.7" level="project" />
<orderEntry type="library" name="Maven: org.netbeans:openide-lookup:1.9-patched-1.0" level="project" />
<orderEntry type="library" name="Maven: org.freehep:freehep-graphicsio:2.4" level="project" />
<orderEntry type="library" name="Maven: org.freehep:freehep-graphicsio-tests:2.4" level="project" />
<orderEntry type="library" name="Maven: org.freehep:freehep-graphicsbase:2.4" level="project" />
<orderEntry type="library" name="Maven: junit:junit:4.10" level="project" />
<orderEntry type="module" module-name="meteoinfo-ndarray" />
<orderEntry type="library" name="Maven: org.ejml:ejml-experimental:0.40" level="project" />
<orderEntry type="library" name="Maven: org.ejml:ejml-simple:0.40" level="project" />
<orderEntry type="library" name="Maven: org.ojalgo:ojalgo:48.4.1" level="project" />
<orderEntry type="library" name="Maven: com.github.haifengl:smile-interpolation:2.6.0" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:javacpp-platform:1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:openblas-platform:0.3.10-1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.locationtech.jts:jts-core:1.17.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-imaging:1.0-alpha2" level="project" />
<orderEntry type="module" module-name="meteoinfo-projection" />
<orderEntry type="module" module-name="meteoinfo-dataframe" />
<orderEntry type="library" name="Maven: edu.ucar:netcdfAll:5.5.3-SNAPSHOT" level="project" />
<orderEntry type="library" name="Maven: com.github.albfernandez:juniversalchardet:2.4.0" level="project" />
<orderEntry type="library" name="Maven: commons-io:commons-io:2.11.0" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: com.formdev:svgSalamander:1.1.3" level="project" />
<orderEntry type="library" name="Maven: com.google.guava:guava:30.1.1-jre" level="project" />
<orderEntry type="library" name="Maven: org.freehep:freehep-io:2.2.2" level="project" />
<orderEntry type="library" name="Maven: org.hamcrest:hamcrest-core:1.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-math3:3.6.1" level="project" />
<orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:2.0.0" level="project" />
<orderEntry type="library" name="Maven: org.ejml:ejml-core:0.40" level="project" />
<orderEntry type="library" name="Maven: org.ejml:ejml-ddense:0.40" level="project" />
<orderEntry type="library" name="Maven: org.ejml:ejml-dsparse:0.40" level="project" />
<orderEntry type="library" name="Maven: org.ejml:ejml-zdense:0.40" level="project" />
<orderEntry type="library" name="Maven: org.ejml:ejml-fdense:0.40" level="project" />
<orderEntry type="library" name="Maven: org.ejml:ejml-cdense:0.40" level="project" />
<orderEntry type="library" name="Maven: org.ejml:ejml-fsparse:0.40" level="project" />
<orderEntry type="library" name="Maven: com.github.haifengl:smile-math:2.6.0" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:javacpp:1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:javacpp:android-arm:1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:javacpp:android-arm64:1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:javacpp:android-x86:1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:javacpp:android-x86_64:1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:javacpp:ios-arm64:1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:javacpp:ios-x86_64:1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:javacpp:linux-armhf:1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:javacpp:linux-arm64:1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:javacpp:linux-ppc64le:1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:javacpp:linux-x86:1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:javacpp:linux-x86_64:1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:javacpp:macosx-x86_64:1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:javacpp:windows-x86:1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:javacpp:windows-x86_64:1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:openblas:0.3.10-1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:openblas:android-arm:0.3.10-1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:openblas:android-arm64:0.3.10-1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:openblas:android-x86:0.3.10-1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:openblas:android-x86_64:0.3.10-1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:openblas:ios-arm64:0.3.10-1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:openblas:ios-x86_64:0.3.10-1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:openblas:linux-x86:0.3.10-1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:openblas:linux-x86_64:0.3.10-1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:openblas:linux-armhf:0.3.10-1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:openblas:linux-arm64:0.3.10-1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:openblas:linux-ppc64le:0.3.10-1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:openblas:macosx-x86_64:0.3.10-1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:openblas:windows-x86:0.3.10-1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.bytedeco:openblas:windows-x86_64:0.3.10-1.5.4" level="project" />
<orderEntry type="library" name="Maven: org.locationtech.proj4j:proj4j:1.1.4" level="project" />
<orderEntry type="library" name="Maven: net.sf.geographiclib:GeographicLib-Java:1.52" level="project" />
<orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project" />
<orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project" />
<orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
<orderEntry type="library" name="Maven: org.checkerframework:checker-qual:3.8.0" level="project" />
<orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.5.1" level="project" />
<orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.30" level="project" />
</component>
</module>

View File

@ -5669,6 +5669,7 @@ public class ArrayMath {
while (iter.hasNext()) {
list.add(iter.getIntNext());
}
shape[i] = list.size();
} else {
list = (List<Integer>) k;
shape[i] = list.size();