From e89a2ae027d4522b6f7c478cc534f2f983fd6670 Mon Sep 17 00:00:00 2001 From: PythonFZ Date: Thu, 5 Feb 2026 14:38:42 +0100 Subject: [PATCH 1/4] Refactor YehHummer to use linear (D_0, slope) parameterization --- kinisi/fitting.py | 4 ++ kinisi/yeh_hummer.py | 118 ++++++++++++++++++------------------------- 2 files changed, 52 insertions(+), 70 deletions(-) diff --git a/kinisi/fitting.py b/kinisi/fitting.py index 5ff1573..dd6b3bb 100644 --- a/kinisi/fitting.py +++ b/kinisi/fitting.py @@ -112,6 +112,10 @@ def log_likelihood(self, parameters: tuple[float]) -> float: x_values = self.get_independent_variable() model = self.function(x_values, *parameters) + # Handle invalid model values (e.g., from VTF when T0 >= T) + if np.any(~np.isfinite(model)) or np.any(model <= 0): + return -np.inf + covariance_matrix = np.diag(self.data.variances) y_values = self.data.values diff --git a/kinisi/yeh_hummer.py b/kinisi/yeh_hummer.py index 961caf0..3f9eeb6 100644 --- a/kinisi/yeh_hummer.py +++ b/kinisi/yeh_hummer.py @@ -16,6 +16,7 @@ from kinisi import __version__ from kinisi.fitting import FittingBase +from kinisi.samples import Samples from .due import Doi, due @@ -34,9 +35,12 @@ class YehHummer(FittingBase): The Yeh-Hummer correction formula is: D_PBC = D_0 - (k_B * T * xi) / (6 * pi * eta * L) + Internally, fitting is performed in (D_0, slope) space where the model is linear, + then slope is converted to viscosity for output. + :param diffusion: sc.DataArray with diffusion coefficients and box_length coordinate :param temperature: Temperature (will be extracted from coords if not provided) - :param bounds: Optional bounds for [D_0, viscosity] parameters + :param bounds: Optional bounds for [D_0, viscosity] parameters (viscosity in Pa*s) """ def __init__(self, diffusion, temperature: sc.Variable, bounds=None): @@ -48,69 +52,54 @@ def __init__(self, diffusion, temperature: sc.Variable, bounds=None): # Constants self.xi_cubic = 2.837297 # Ewald constant for cubic boxes - # Set up parameters for YehHummer fitting - parameter_names = ('D_0', 'viscosity') - parameter_units = (diffusion.unit, sc.Unit('Pa*s')) - # Set default bounds if not provided + # Slope has units of [diffusion] * [length] = cm^2/s * Å + self._slope_unit = diffusion.unit * self.box_lengths.unit + + # Set up parameters for fitting - use (D_0, slope) for linear model + parameter_names = ('D_0', 'slope') + parameter_units = (diffusion.unit, self._slope_unit) + + # Compute bounds: use provided or defaults if bounds is None: - # Auto-generate reasonable bounds D_max = np.max(diffusion.values) - bounds = ( - (D_max * 0.8 * diffusion.unit, D_max * 2.0 * diffusion.unit), - (1e-5 * sc.Unit('Pa*s'), 1e-1 * sc.Unit('Pa*s')), - ) + D_bounds = (D_max * 0.8 * diffusion.unit, D_max * 2.0 * diffusion.unit) + visc_lower, visc_upper = 1e-5 * sc.Unit('Pa*s'), 1e-1 * sc.Unit('Pa*s') + else: + D_bounds = (bounds[0][0].to(unit=parameter_units[0]), bounds[0][1].to(unit=parameter_units[0])) + visc_lower, visc_upper = bounds[1] + + # Higher viscosity = lower slope, so bounds are inverted + slope_bounds = ( + self.viscosity_to_slope(visc_upper) * self._slope_unit, + self.viscosity_to_slope(visc_lower) * self._slope_unit, + ) - # Initialize base class with custom function + # Initialize base class with linear function super().__init__( data=diffusion, function=self._yeh_hummer_function, parameter_names=parameter_names, parameter_units=parameter_units, - bounds=bounds, + bounds=[D_bounds, slope_bounds], coordinate_name='box_length', ) - # Convert bounds to values for optimization (for backward compatibility) - self.bounds_values = tuple( - [ - (b[0].to(unit=u).value, b[1].to(unit=u).value) - for b, u in zip(self.bounds, self.parameter_units, strict=False) - ] - ) - def _yeh_hummer_function( self, box_lengths: np.ndarray, D_0: float, - viscosity: float, + slope: float, ) -> np.ndarray: """ - Yeh-Hummer function for finitie-size correction fit. + Yeh-Hummer function for finite-size correction fit (linear form). + D_PBC = D_0 - slope / L - :param box_lengths: Array of box lengths / Å + :param box_lengths: Array of box lengths / Angstrom :param D_0: Infinite-system diffusion coefficient - :param viscosity: Shear viscosity + :param slope: Slope = (k_B * T * xi) / (6 * pi * eta) """ - # Handle both scalar and array inputs - box_lengths = np.asarray(box_lengths) - viscosity = np.asarray(viscosity) - - inv_L = 1.0 / box_lengths - - if viscosity.ndim == 0: - eta_with_unit = viscosity * self.parameter_units[1] - slope = self.viscosity_to_slope(eta_with_unit) - else: - # viscosity as an array (from MCMC samples) - slopes = [] - for visc_val in viscosity: - eta_with_unit = visc_val * self.parameter_units[1] - slope = self.viscosity_to_slope(eta_with_unit) - slopes.append(slope) - slope = np.array(slopes) - - return self.yeh_hummer_linear(inv_L, D_0, slope) + return D_0 - slope / np.asarray(box_lengths) def _prepare_data_for_fit(self): """Prepare data in correct format for fitting.""" @@ -131,10 +120,8 @@ def _slope_to_viscosity(self, slope): k_B_T = sc.to_unit(const.Boltzmann * self.temperature, 'J') - # slope has units of [diffusion] / [1/length] = [diffusion] * [length] - # diffusion is cm^2/s, box_lengths is Å, so slope * diffusion.unit / (1/box_lengths.unit) - # This gives us (cm^2/s) / (1/Å) = cm^2/s * Å = cm^2 * Å / s - slope_with_units = slope * self.diffusion.unit / (1 / self.box_lengths.unit) + # slope has units of [diffusion] * [length] + slope_with_units = slope * self._slope_unit slope_SI = sc.to_unit(slope_with_units, 'm^3/s') eta = (k_B_T * self.xi_cubic) / (6 * np.pi * slope_SI) @@ -167,11 +154,8 @@ def linear_func(x, a, b): D_0_init = popt[0] slope_init = popt[1] - # Convert slope to viscosity - eta_init = self._slope_to_viscosity(slope_init).value - # Use these as initial parameters for optimization - x0 = [D_0_init, eta_init] + x0 = [D_0_init, slope_init] from scipy.optimize import minimize @@ -181,7 +165,7 @@ def linear_func(x, a, b): # Store results self.data_group['D_0'] = result.x[0] * self.parameter_units[0] - self.data_group['viscosity'] = result.x[1] * self.parameter_units[1] + self.data_group['slope'] = result.x[1] * self.parameter_units[1] @property def D_infinite(self): @@ -189,22 +173,16 @@ def D_infinite(self): return self.data_group['D_0'] @property - def shear_viscosity(self): - """Return estimated shear viscosity.""" - return self.data_group['viscosity'] - - @staticmethod - def yeh_hummer_linear(inv_L, D_0, slope): - """ - Linear form of Yeh-Hummer equation for fitting. - - D_PBC = D_0 - slope * (1/L) - - where slope = (k_B * T * xi) / (6 * pi * eta) + def shear_viscosity(self) -> sc.Variable | Samples: + """Return estimated shear viscosity (converted from slope samples).""" + slope_data = self.data_group['slope'] + if isinstance(slope_data, Samples): + # Convert each slope sample to viscosity + viscosities = [] + for s in slope_data.values: + eta = self._slope_to_viscosity(s) + viscosities.append(eta.value) + return Samples(np.array(viscosities), unit=sc.Unit('Pa*s')) + else: + return self._slope_to_viscosity(slope_data.value) - :param inv_L: Inverse box lengths (1/L) - :param D_0: Infinite-system diffusion coefficient - :param slope: Slope containing viscosity information - :return: D_PBC values - """ - return D_0 - slope * inv_L From 53ff8cf872f70ac365f1759a4a4360ef8ec31ab0 Mon Sep 17 00:00:00 2001 From: PythonFZ Date: Thu, 5 Feb 2026 14:54:56 +0100 Subject: [PATCH 2/4] lint --- kinisi/yeh_hummer.py | 1 - 1 file changed, 1 deletion(-) diff --git a/kinisi/yeh_hummer.py b/kinisi/yeh_hummer.py index 3f9eeb6..77cec98 100644 --- a/kinisi/yeh_hummer.py +++ b/kinisi/yeh_hummer.py @@ -185,4 +185,3 @@ def shear_viscosity(self) -> sc.Variable | Samples: return Samples(np.array(viscosities), unit=sc.Unit('Pa*s')) else: return self._slope_to_viscosity(slope_data.value) - From e5fb13b6b84735946ae86d173c227576d29e0567 Mon Sep 17 00:00:00 2001 From: PythonFZ Date: Thu, 5 Feb 2026 15:40:12 +0100 Subject: [PATCH 3/4] tests --- kinisi/tests/test_yeh_hummer.py | 26 +++++++++++++++++++------- kinisi/yeh_hummer.py | 2 ++ 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/kinisi/tests/test_yeh_hummer.py b/kinisi/tests/test_yeh_hummer.py index 5ee1435..92d48cf 100644 --- a/kinisi/tests/test_yeh_hummer.py +++ b/kinisi/tests/test_yeh_hummer.py @@ -12,14 +12,24 @@ class TestYehHummer: """Tests for the YehHummer class.""" - def test_yeh_hummer_linear(self): - """Test the linear Yeh-Hummer function.""" - inv_L = np.array([0.04, 0.05, 0.06]) + def test_yeh_hummer_function(self): + """Test the Yeh-Hummer fitting function.""" + box_lengths = np.array([20.0, 30.0, 40.0]) + D_values = np.array([5.0e-5, 5.2e-5, 5.4e-5]) + D_errors = np.array([0.1e-5, 0.1e-5, 0.1e-5]) + + td = sc.DataArray( + data=sc.array(dims=['system'], values=D_values, variances=D_errors**2, unit='cm^2/s'), + coords={'box_length': sc.Variable(dims=['system'], values=box_lengths, unit='angstrom')}, + ) + + yh = YehHummer(td, temperature=sc.scalar(298, unit='K')) + + # Test the internal function: D_PBC = D_0 - slope / L D_0 = 6.0e-5 slope = 1.0e-6 - - result = YehHummer.yeh_hummer_linear(inv_L, D_0, slope) - expected = D_0 - slope * inv_L + result = yh._yeh_hummer_function(box_lengths, D_0, slope) + expected = D_0 - slope / box_lengths np.testing.assert_array_almost_equal(result, expected) @@ -119,7 +129,9 @@ def test_yeh_hummer_properties(self): # Test property accessors assert yh.D_infinite == yh.data_group['D_0'] - assert yh.shear_viscosity == yh.data_group['viscosity'] + # slope is stored in data_group, viscosity is computed from slope + assert 'slope' in yh.data_group.keys() + assert yh.shear_viscosity.unit == sc.Unit('Pa*s') # Test that the object has string representations assert len(str(yh)) > 0 diff --git a/kinisi/yeh_hummer.py b/kinisi/yeh_hummer.py index 77cec98..f3cfe49 100644 --- a/kinisi/yeh_hummer.py +++ b/kinisi/yeh_hummer.py @@ -66,6 +66,8 @@ def __init__(self, diffusion, temperature: sc.Variable, bounds=None): D_bounds = (D_max * 0.8 * diffusion.unit, D_max * 2.0 * diffusion.unit) visc_lower, visc_upper = 1e-5 * sc.Unit('Pa*s'), 1e-1 * sc.Unit('Pa*s') else: + if len(bounds) != 2: + raise ValueError('Bounds must be a tuple of length 2: (D_0_bounds, viscosity_bounds)') D_bounds = (bounds[0][0].to(unit=parameter_units[0]), bounds[0][1].to(unit=parameter_units[0])) visc_lower, visc_upper = bounds[1] From 37c9aa17674fed1a637325db10fe53472c4cb4fc Mon Sep 17 00:00:00 2001 From: Fabian Zills Date: Wed, 11 Feb 2026 16:48:22 +0100 Subject: [PATCH 4/4] fix docs; address comments --- docs/source/yeh_hummer.ipynb | 533 ++--------------------------------- kinisi/fitting.py | 4 - kinisi/yeh_hummer.py | 20 +- 3 files changed, 27 insertions(+), 530 deletions(-) diff --git a/docs/source/yeh_hummer.ipynb b/docs/source/yeh_hummer.ipynb index 409af6d..6aef68e 100644 --- a/docs/source/yeh_hummer.ipynb +++ b/docs/source/yeh_hummer.ipynb @@ -21,7 +21,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "imports", "metadata": {}, "outputs": [], @@ -49,7 +49,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "tip4p-data", "metadata": {}, "outputs": [], @@ -70,47 +70,10 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "create-dataarray", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "Show/Hide data repr\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Show/Hide attributes\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
scipp.DataArray (1001 Bytes)
    • system: 5
    • box_length
      (system)
      float64
      Å
      18.58, 23.42, 29.51, 37.19, 46.86
      Values:
      array([18.58, 23.42, 29.51, 37.19, 46.86])
    • (system)
      float64
      cm^2/s
      4.884e-05, 5.123e-05, 5.315e-05, 5.466e-05, 5.590e-05
      σ = 3.200e-07, 2.700e-07, 1.400e-07, 1.100e-07, 1.300e-07
      Values:
      array([4.884e-05, 5.123e-05, 5.315e-05, 5.466e-05, 5.590e-05])

      Variances (σ²):
      array([1.024e-13, 7.290e-14, 1.960e-14, 1.210e-14, 1.690e-14])
" - ], - "text/plain": [ - "\n", - "Dimensions: Sizes[system:5, ]\n", - "Coordinates:\n", - "* box_length float64 [Å] (system) [18.58, 23.42, ..., 37.19, 46.86]\n", - "Data:\n", - " float64 [cm^2/s] (system) [4.884e-05, 5.123e-05, ..., 5.466e-05, 5.59e-05] [1.024e-13, 7.29e-14, ..., 1.21e-14, 1.69e-14]\n" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "td = sc.DataArray(\n", " data=sc.array(dims=['system'], values=D_values, variances=D_errors**2, unit='cm^2/s'),\n", @@ -131,7 +94,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "create-yeh-hummer", "metadata": {}, "outputs": [], @@ -152,25 +115,10 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "run-mcmc", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "MCMC Sampling: 0%| | 0/1000 [00:00" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "from corner import corner\n", "\n", @@ -222,442 +159,20 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "id": "show-d-infinite", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "Show/Hide data repr\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Show/Hide attributes\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
kinisi.Samples
    • (samples: 800)
      float64
      cm^2/s
      (6.052+/-0.025)e-05
      Values:
      array([6.04125834e-05, 6.07504100e-05, 5.99169775e-05, 6.09137864e-05,\n", - " 5.99874383e-05, 6.03256851e-05, 5.98389338e-05, 6.07141440e-05,\n", - " 6.10288879e-05, 6.09424864e-05, 6.03589779e-05, 6.03720490e-05,\n", - " 6.06000336e-05, 6.04003056e-05, 6.07848832e-05, 6.02471869e-05,\n", - " 6.03400301e-05, 6.04554940e-05, 6.02584704e-05, 6.08654739e-05,\n", - " 6.02971862e-05, 6.04491714e-05, 6.02986903e-05, 6.12246695e-05,\n", - " 6.08398247e-05, 6.08549727e-05, 6.04107947e-05, 6.05373335e-05,\n", - " 6.03253096e-05, 6.02377685e-05, 6.03661254e-05, 6.05224893e-05,\n", - " 6.10262188e-05, 6.04719532e-05, 6.05640260e-05, 6.06625534e-05,\n", - " 6.03575727e-05, 6.09149260e-05, 6.00522500e-05, 6.07028130e-05,\n", - " 6.02267145e-05, 6.09071947e-05, 6.05680368e-05, 6.04911293e-05,\n", - " 6.06326397e-05, 6.01270913e-05, 6.02305303e-05, 6.04837284e-05,\n", - " 6.07068429e-05, 6.03506553e-05, 6.05854482e-05, 6.09073994e-05,\n", - " 6.09705809e-05, 6.05081049e-05, 6.04688691e-05, 6.05382389e-05,\n", - " 6.04481647e-05, 6.06392688e-05, 6.04933576e-05, 6.04403576e-05,\n", - " 6.03988573e-05, 6.05285357e-05, 6.03060898e-05, 6.04388407e-05,\n", - " 6.07459924e-05, 6.03081247e-05, 6.04751883e-05, 6.07644579e-05,\n", - " 6.08985516e-05, 6.07832266e-05, 6.01068134e-05, 6.04027392e-05,\n", - " 6.04165354e-05, 6.10703316e-05, 6.04927215e-05, 6.03477204e-05,\n", - " 6.00936741e-05, 6.03952275e-05, 6.03146231e-05, 6.04934654e-05,\n", - " 6.06003827e-05, 6.02899172e-05, 6.03925117e-05, 6.11510341e-05,\n", - " 6.04234152e-05, 6.05475343e-05, 6.02119432e-05, 6.06527083e-05,\n", - " 6.05444251e-05, 6.11183134e-05, 6.04415818e-05, 6.03161453e-05,\n", - " 6.00573991e-05, 6.06556159e-05, 6.03131590e-05, 6.02390668e-05,\n", - " 6.02061403e-05, 6.03220637e-05, 6.08006274e-05, 6.09052066e-05,\n", - " 6.05341572e-05, 6.01628393e-05, 6.03137711e-05, 6.04429703e-05,\n", - " 6.07427724e-05, 6.05564371e-05, 6.03246035e-05, 6.02795141e-05,\n", - " 6.08648117e-05, 6.05976757e-05, 6.03743355e-05, 6.01117599e-05,\n", - " 6.03759164e-05, 6.02925930e-05, 6.09820959e-05, 6.04993573e-05,\n", - " 6.05258439e-05, 6.05122561e-05, 6.04692470e-05, 6.04596236e-05,\n", - " 6.09132967e-05, 6.05722619e-05, 6.02970309e-05, 6.03757722e-05,\n", - " 6.10120388e-05, 6.05913093e-05, 6.04370511e-05, 6.02628008e-05,\n", - " 6.06665639e-05, 6.04411931e-05, 6.10409616e-05, 6.05614203e-05,\n", - " 6.03642815e-05, 6.06263138e-05, 6.05590246e-05, 6.04100732e-05,\n", - " 6.05840539e-05, 6.04627513e-05, 6.00914958e-05, 6.04238997e-05,\n", - " 6.08153217e-05, 6.05730661e-05, 6.02939062e-05, 6.01377339e-05,\n", - " 6.10157535e-05, 6.02365375e-05, 6.08247891e-05, 6.05523774e-05,\n", - " 6.00753965e-05, 6.03955682e-05, 6.07291379e-05, 6.03663874e-05,\n", - " 6.09455354e-05, 6.04394784e-05, 5.99121208e-05, 6.06142926e-05,\n", - " 6.10353189e-05, 6.08828132e-05, 6.05075824e-05, 5.97776898e-05,\n", - " 6.08163489e-05, 6.02986852e-05, 6.09758254e-05, 6.07359576e-05,\n", - " 6.00931169e-05, 6.02027737e-05, 6.03320337e-05, 6.07413189e-05,\n", - " 6.08315504e-05, 6.07989603e-05, 6.00325076e-05, 6.06329579e-05,\n", - " 6.07120930e-05, 6.04848855e-05, 6.05827787e-05, 5.99284838e-05,\n", - " 6.08581603e-05, 6.05514144e-05, 6.09289059e-05, 6.07690518e-05,\n", - " 6.04421063e-05, 6.07723933e-05, 6.01957790e-05, 6.07062010e-05,\n", - " 6.06612006e-05, 6.05674758e-05, 6.02214697e-05, 6.03471110e-05,\n", - " 6.07673331e-05, 6.06226536e-05, 6.01751703e-05, 5.99976705e-05,\n", - " 6.10819481e-05, 6.04126752e-05, 6.06002418e-05, 6.08349537e-05,\n", - " 6.04606043e-05, 6.04499299e-05, 5.99651496e-05, 6.04658315e-05,\n", - " 6.06825595e-05, 6.07181048e-05, 6.03067106e-05, 6.05186665e-05,\n", - " 6.06103990e-05, 6.05233746e-05, 6.01243068e-05, 6.05934832e-05,\n", - " 6.06707120e-05, 6.02772529e-05, 6.04477546e-05, 6.03354426e-05,\n", - " 6.01718193e-05, 6.03790328e-05, 6.00252552e-05, 6.06133132e-05,\n", - " 6.06890936e-05, 6.06533027e-05, 6.04539699e-05, 6.03866911e-05,\n", - " 6.02894302e-05, 6.03911839e-05, 6.04399735e-05, 6.06630958e-05,\n", - " 6.04505153e-05, 6.04402936e-05, 6.07217674e-05, 6.01913089e-05,\n", - " 6.02269824e-05, 6.05460314e-05, 6.03687396e-05, 6.05909586e-05,\n", - " 6.06292351e-05, 6.05459065e-05, 6.04256577e-05, 6.02691297e-05,\n", - " 6.04486321e-05, 6.09440031e-05, 6.05334896e-05, 6.04438262e-05,\n", - " 6.02191197e-05, 6.04136527e-05, 6.10778232e-05, 6.02752226e-05,\n", - " 6.01695956e-05, 6.03315818e-05, 6.02956632e-05, 6.04598486e-05,\n", - " 6.07005269e-05, 6.07737217e-05, 6.04527036e-05, 6.06617866e-05,\n", - " 6.04111929e-05, 6.06943358e-05, 6.01907292e-05, 5.99306688e-05,\n", - " 6.04548129e-05, 6.05352018e-05, 6.06950458e-05, 6.06301440e-05,\n", - " 6.02304897e-05, 6.04988998e-05, 6.04180423e-05, 6.05479159e-05,\n", - " 6.08285294e-05, 6.06061759e-05, 6.04869635e-05, 6.05180254e-05,\n", - " 6.02648193e-05, 6.04929856e-05, 6.06716903e-05, 6.02299032e-05,\n", - " 6.04137189e-05, 6.08144515e-05, 6.07116836e-05, 6.07314909e-05,\n", - " 6.04547132e-05, 6.06094749e-05, 6.00797934e-05, 6.05719724e-05,\n", - " 6.06454037e-05, 6.07048546e-05, 6.02661062e-05, 6.04030963e-05,\n", - " 6.06327095e-05, 6.03159996e-05, 6.06098639e-05, 6.01867586e-05,\n", - " 6.02830444e-05, 6.06142720e-05, 6.05494269e-05, 6.08075423e-05,\n", - " 6.02474467e-05, 6.07159687e-05, 6.04234549e-05, 6.10337233e-05,\n", - " 6.05499466e-05, 6.08315832e-05, 6.05803575e-05, 6.05270859e-05,\n", - " 6.09122451e-05, 6.05156407e-05, 6.05511002e-05, 6.02266561e-05,\n", - " 6.03139092e-05, 6.05383356e-05, 6.04068495e-05, 6.07586002e-05,\n", - " 6.05368636e-05, 6.01698126e-05, 6.06129039e-05, 6.10347383e-05,\n", - " 6.07359125e-05, 6.08155221e-05, 6.05850918e-05, 6.07323895e-05,\n", - " 6.05697071e-05, 6.05346793e-05, 6.03198701e-05, 6.02876032e-05,\n", - " 6.02613477e-05, 6.05660457e-05, 6.03544703e-05, 6.07900712e-05,\n", - " 6.07106515e-05, 6.03237459e-05, 6.08457012e-05, 6.07828146e-05,\n", - " 6.07328905e-05, 6.07089784e-05, 6.11114828e-05, 6.05708697e-05,\n", - " 6.05578115e-05, 6.04171691e-05, 6.00725528e-05, 6.05568368e-05,\n", - " 6.01070988e-05, 6.01586468e-05, 6.02973878e-05, 6.05997526e-05,\n", - " 6.04794439e-05, 6.05291428e-05, 6.11416841e-05, 6.08278623e-05,\n", - " 6.08223460e-05, 6.02945268e-05, 6.05031389e-05, 6.05478298e-05,\n", - " 6.05456644e-05, 6.07837530e-05, 6.03080161e-05, 6.05796548e-05,\n", - " 6.02355940e-05, 6.01988407e-05, 6.05210709e-05, 6.05888182e-05,\n", - " 6.06243506e-05, 6.03127006e-05, 6.10239099e-05, 6.06355897e-05,\n", - " 6.07031726e-05, 6.04810249e-05, 6.07180309e-05, 6.00106191e-05,\n", - " 6.05767062e-05, 6.04583984e-05, 6.05041984e-05, 6.05797987e-05,\n", - " 6.04532780e-05, 6.03644564e-05, 6.04385164e-05, 6.07104778e-05,\n", - " 6.01925550e-05, 6.05020850e-05, 6.07607448e-05, 6.07721608e-05,\n", - " 6.09467014e-05, 6.06467517e-05, 6.06087848e-05, 6.00769081e-05,\n", - " 6.06768020e-05, 6.03720075e-05, 6.04511350e-05, 6.00953893e-05,\n", - " 6.05096253e-05, 6.02861383e-05, 6.05098384e-05, 6.06683191e-05,\n", - " 6.03681824e-05, 6.03539152e-05, 6.05680383e-05, 6.04315960e-05,\n", - " 6.07046259e-05, 6.02588916e-05, 6.09410769e-05, 6.03723504e-05,\n", - " 6.05454179e-05, 6.02867503e-05, 6.04445678e-05, 6.04550899e-05,\n", - " 6.02794614e-05, 6.04590343e-05, 6.04262923e-05, 6.09159550e-05,\n", - " 6.06287840e-05, 6.04434024e-05, 6.07316008e-05, 6.07227527e-05,\n", - " 6.07907708e-05, 6.02437327e-05, 6.07601164e-05, 6.02910855e-05,\n", - " 6.03895214e-05, 6.03720171e-05, 6.04885684e-05, 6.00183372e-05,\n", - " 5.98630729e-05, 6.07055664e-05, 6.06397428e-05, 6.04953677e-05,\n", - " 6.09980532e-05, 6.05401612e-05, 6.08610833e-05, 6.12938754e-05,\n", - " 6.10442790e-05, 6.00609611e-05, 6.06904851e-05, 6.06930012e-05,\n", - " 6.04203068e-05, 6.02716256e-05, 6.04482260e-05, 6.02953817e-05,\n", - " 6.05924564e-05, 6.06955458e-05, 6.05631884e-05, 5.99237226e-05,\n", - " 6.10254884e-05, 6.04418937e-05, 6.08204291e-05, 6.10289505e-05,\n", - " 6.09541271e-05, 6.07594860e-05, 6.06427006e-05, 6.06284966e-05,\n", - " 6.05800674e-05, 6.08732094e-05, 6.04565485e-05, 6.03101920e-05,\n", - " 6.07518315e-05, 6.05165265e-05, 6.07935132e-05, 6.01129452e-05,\n", - " 6.03898965e-05, 6.06282574e-05, 6.06928708e-05, 6.07019612e-05,\n", - " 6.09812485e-05, 6.06520490e-05, 6.02459458e-05, 6.06767104e-05,\n", - " 6.06969545e-05, 6.04105009e-05, 6.01673497e-05, 6.04623061e-05,\n", - " 6.10291179e-05, 6.06978039e-05, 6.06421775e-05, 6.04441776e-05,\n", - " 6.02518550e-05, 6.05247242e-05, 6.06891281e-05, 6.08784806e-05,\n", - " 6.06544284e-05, 6.03918380e-05, 6.04127111e-05, 6.06967128e-05,\n", - " 6.05767717e-05, 6.05816078e-05, 6.01361783e-05, 6.06482473e-05,\n", - " 6.07089448e-05, 6.04469567e-05, 6.06775616e-05, 6.03567267e-05,\n", - " 6.03068092e-05, 6.06405804e-05, 6.03169087e-05, 6.05754441e-05,\n", - " 5.99610593e-05, 6.03066364e-05, 6.09279693e-05, 6.04389090e-05,\n", - " 6.04783674e-05, 6.05035168e-05, 6.03151492e-05, 6.09585907e-05,\n", - " 6.03887512e-05, 6.05198245e-05, 6.11257109e-05, 6.03971812e-05,\n", - " 6.03021749e-05, 6.05913495e-05, 6.03626434e-05, 6.04910215e-05,\n", - " 6.00772714e-05, 6.02511252e-05, 6.06007025e-05, 6.04229962e-05,\n", - " 6.07533263e-05, 6.07938617e-05, 6.04276245e-05, 6.02832202e-05,\n", - " 6.04918724e-05, 6.05276039e-05, 6.07401677e-05, 6.03308604e-05,\n", - " 6.01692199e-05, 6.05571980e-05, 6.03870289e-05, 6.01933770e-05,\n", - " 6.02835105e-05, 6.06165859e-05, 6.06391007e-05, 6.03777677e-05,\n", - " 6.06285086e-05, 6.06561111e-05, 6.06218841e-05, 6.01535149e-05,\n", - " 6.03604796e-05, 6.02834660e-05, 6.05366185e-05, 6.02767356e-05,\n", - " 5.98443623e-05, 6.10236171e-05, 6.08032716e-05, 6.03634970e-05,\n", - " 6.01524844e-05, 6.05189990e-05, 6.05394722e-05, 6.05067476e-05,\n", - " 6.06040821e-05, 6.05996092e-05, 6.06501530e-05, 6.08651179e-05,\n", - " 6.05133258e-05, 6.09087580e-05, 6.04545485e-05, 6.01464135e-05,\n", - " 6.03417825e-05, 6.05124941e-05, 6.07420044e-05, 6.02220636e-05,\n", - " 6.01576921e-05, 6.03903622e-05, 6.05576044e-05, 6.03258744e-05,\n", - " 6.04784229e-05, 6.03900568e-05, 6.05018816e-05, 6.07864630e-05,\n", - " 6.05283891e-05, 6.07867745e-05, 6.02725795e-05, 6.02084215e-05,\n", - " 6.08705982e-05, 6.09473810e-05, 6.05571667e-05, 6.03238153e-05,\n", - " 6.04982191e-05, 6.04181696e-05, 6.05720170e-05, 6.05733311e-05,\n", - " 6.04431315e-05, 6.05913118e-05, 6.07723957e-05, 6.06014461e-05,\n", - " 6.06242980e-05, 6.03568621e-05, 6.02198811e-05, 6.01083665e-05,\n", - " 6.05316962e-05, 6.08606677e-05, 6.07647853e-05, 6.03722306e-05,\n", - " 6.05718650e-05, 6.02829976e-05, 6.08738404e-05, 6.05180698e-05,\n", - " 6.04915082e-05, 6.08870967e-05, 6.07450198e-05, 6.02672498e-05,\n", - " 6.08269272e-05, 6.04199310e-05, 6.05580856e-05, 6.03326471e-05,\n", - " 6.00046001e-05, 6.05251116e-05, 6.05476408e-05, 6.05250699e-05,\n", - " 6.06582230e-05, 6.04020039e-05, 6.07510171e-05, 6.07004418e-05,\n", - " 6.05519411e-05, 6.08356067e-05, 6.07664953e-05, 6.06728126e-05,\n", - " 6.05118622e-05, 6.02984445e-05, 6.03385901e-05, 6.02452847e-05,\n", - " 6.01242369e-05, 6.06635837e-05, 6.06992382e-05, 6.05165766e-05,\n", - " 6.06779138e-05, 6.00537447e-05, 6.07272943e-05, 6.01704306e-05,\n", - " 6.05083346e-05, 6.05683196e-05, 6.04992145e-05, 6.07229725e-05,\n", - " 6.03394056e-05, 6.02218059e-05, 6.04336996e-05, 6.02986360e-05,\n", - " 6.02788456e-05, 6.03642608e-05, 6.05152901e-05, 6.01544555e-05,\n", - " 6.06387200e-05, 5.97111859e-05, 6.07062880e-05, 6.04924922e-05,\n", - " 6.01152531e-05, 6.05064175e-05, 6.01340617e-05, 6.07971305e-05,\n", - " 6.08979853e-05, 6.03597879e-05, 6.04958030e-05, 6.04033567e-05,\n", - " 6.02611863e-05, 6.06139336e-05, 6.06397122e-05, 6.05952102e-05,\n", - " 6.05775999e-05, 6.05461090e-05, 6.05619352e-05, 6.07000120e-05,\n", - " 6.02642846e-05, 6.05418256e-05, 6.05731671e-05, 6.09024471e-05,\n", - " 6.07843065e-05, 6.04296071e-05, 6.08929951e-05, 6.04501828e-05,\n", - " 6.00776649e-05, 6.05842215e-05, 6.05907817e-05, 6.03715879e-05,\n", - " 6.08755662e-05, 6.06772629e-05, 6.07764601e-05, 6.04746462e-05,\n", - " 6.01127364e-05, 6.04356495e-05, 6.04774224e-05, 6.07047490e-05,\n", - " 6.08161766e-05, 6.04961561e-05, 6.07719513e-05, 6.01808613e-05,\n", - " 6.04351436e-05, 6.02875317e-05, 6.09834190e-05, 6.03352857e-05,\n", - " 6.08180542e-05, 6.07188290e-05, 6.07649779e-05, 6.05496078e-05,\n", - " 6.01890596e-05, 6.03493364e-05, 6.05873359e-05, 6.02537944e-05,\n", - " 6.09091374e-05, 6.06428577e-05, 6.07357281e-05, 6.04536112e-05,\n", - " 6.06347228e-05, 6.02317971e-05, 6.08653208e-05, 6.00390755e-05,\n", - " 6.02951767e-05, 6.08000143e-05, 6.09423988e-05, 6.07008043e-05,\n", - " 6.07386233e-05, 6.03023357e-05, 6.06209500e-05, 6.05871358e-05,\n", - " 6.03276360e-05, 6.07661354e-05, 6.08867764e-05, 6.02421622e-05,\n", - " 6.06191844e-05, 5.99233996e-05, 6.03118521e-05, 6.03082819e-05,\n", - " 6.07253924e-05, 6.08175058e-05, 6.10321892e-05, 6.03158916e-05,\n", - " 6.09168018e-05, 6.04749883e-05, 6.04347582e-05, 6.04889094e-05,\n", - " 6.06314168e-05, 6.07958106e-05, 6.06179062e-05, 6.08520282e-05,\n", - " 6.06803209e-05, 6.00488786e-05, 6.05011855e-05, 6.07600898e-05,\n", - " 6.05369161e-05, 6.09094951e-05, 6.09123336e-05, 6.04338320e-05,\n", - " 6.06823813e-05, 6.06006326e-05, 6.07524730e-05, 6.08205773e-05,\n", - " 6.05037387e-05, 6.06096676e-05, 6.03005311e-05, 6.10534592e-05,\n", - " 6.08219339e-05, 5.99417367e-05, 6.01391190e-05, 6.03184811e-05,\n", - " 6.03763547e-05, 6.05195621e-05, 6.06044090e-05, 6.07294402e-05,\n", - " 6.03771950e-05, 6.09271790e-05, 6.01831290e-05, 6.08792081e-05,\n", - " 6.05163854e-05, 6.06433959e-05, 5.98609808e-05, 6.08850714e-05,\n", - " 6.08738308e-05, 6.03917875e-05, 6.03941368e-05, 6.02790389e-05,\n", - " 6.03568645e-05, 6.08923305e-05, 6.05279284e-05, 6.06340410e-05,\n", - " 6.06051844e-05, 6.06528085e-05, 6.03416973e-05, 6.07194295e-05,\n", - " 6.03422742e-05, 6.07897454e-05, 6.02831149e-05, 6.06525885e-05,\n", - " 6.08680163e-05, 6.03893363e-05, 6.09657544e-05, 6.02066394e-05,\n", - " 6.01447042e-05, 6.06083225e-05, 6.06279059e-05, 6.06646893e-05,\n", - " 6.06150938e-05, 6.03631498e-05, 6.04788024e-05, 6.07411468e-05,\n", - " 6.03337604e-05, 6.06084889e-05, 6.06296874e-05, 6.06973287e-05,\n", - " 6.06802096e-05, 6.04538437e-05, 6.07501342e-05, 6.05338622e-05,\n", - " 6.03630961e-05, 6.06940610e-05, 6.05430936e-05, 6.02940403e-05,\n", - " 6.06876157e-05, 6.06484642e-05, 6.05377648e-05, 6.07070485e-05])
" - ], - "text/plain": [ - " (samples: 800) float64 [cm^2/s] [6.04126e-05, 6.07504e-05, ..., 6.05378e-05, 6.0707e-05]" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "yh.D_infinite" ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "id": "show-viscosity", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "Show/Hide data repr\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Show/Hide attributes\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
kinisi.Samples
    • (samples: 800)
      float64
      Pa*s
      0.000285+/-0.000011
      Values:
      array([0.00029584, 0.00027411, 0.00031553, 0.00027227, 0.00030938,\n", - " 0.00029013, 0.00032496, 0.00028264, 0.00026609, 0.00027102,\n", - " 0.00028593, 0.00029508, 0.00028137, 0.00029094, 0.0002765 ,\n", - " 0.00029895, 0.00029559, 0.00028883, 0.0003026 , 0.00027195,\n", - " 0.00029639, 0.00028597, 0.00029536, 0.0002636 , 0.00027505,\n", - " 0.00027311, 0.00028639, 0.00028778, 0.00029198, 0.00029425,\n", - " 0.00029657, 0.00028274, 0.00027019, 0.00028616, 0.00028736,\n", - " 0.00028097, 0.00029283, 0.00026827, 0.00030529, 0.00028181,\n", - " 0.00029922, 0.00027147, 0.00028323, 0.00029036, 0.00027965,\n", - " 0.00030011, 0.0003049 , 0.00028361, 0.00028201, 0.00028982,\n", - " 0.00028533, 0.00027023, 0.00026606, 0.00028657, 0.00029045,\n", - " 0.00028678, 0.00028967, 0.00027972, 0.00028225, 0.00028878,\n", - " 0.00028899, 0.00028469, 0.00029869, 0.00028801, 0.00027632,\n", - " 0.00029247, 0.00028925, 0.00027925, 0.00026743, 0.0002776 ,\n", - " 0.00030321, 0.00029179, 0.00028965, 0.00026231, 0.00027893,\n", - " 0.00029082, 0.00030254, 0.00028693, 0.00029774, 0.00028615,\n", - " 0.00028112, 0.00029629, 0.00029273, 0.00026192, 0.00028666,\n", - " 0.00028543, 0.00029615, 0.00028032, 0.00028638, 0.00026084,\n", - " 0.00028177, 0.00029438, 0.00030368, 0.00027661, 0.00029779,\n", - " 0.00029623, 0.00030153, 0.00029244, 0.00027716, 0.00027063,\n", - " 0.00028534, 0.00030009, 0.00029393, 0.00029313, 0.00027308,\n", - " 0.00028514, 0.00029107, 0.00029295, 0.00027323, 0.00027842,\n", - " 0.00029792, 0.00030357, 0.00029311, 0.00029596, 0.0002696 ,\n", - " 0.00029239, 0.00028682, 0.0002869 , 0.00028549, 0.00029481,\n", - " 0.00026636, 0.00028387, 0.00029308, 0.0002905 , 0.00026412,\n", - " 0.00028038, 0.00029259, 0.00029287, 0.00027993, 0.00028849,\n", - " 0.00026669, 0.0002865 , 0.00029232, 0.00028217, 0.00027791,\n", - " 0.00029607, 0.00028275, 0.00028898, 0.00030407, 0.00028511,\n", - " 0.00027335, 0.00028102, 0.00030058, 0.00029801, 0.00026709,\n", - " 0.00029864, 0.00027421, 0.00028694, 0.00030676, 0.00028956,\n", - " 0.00027294, 0.00029132, 0.00027226, 0.00028787, 0.00031473,\n", - " 0.000279 , 0.00026351, 0.00026613, 0.00028949, 0.00031717,\n", - " 0.00027493, 0.00029383, 0.00026725, 0.00027807, 0.00030342,\n", - " 0.00029675, 0.00029269, 0.00027193, 0.00027699, 0.00027612,\n", - " 0.00031433, 0.00028005, 0.0002773 , 0.00028364, 0.00028536,\n", - " 0.00031128, 0.00027237, 0.00028298, 0.00027107, 0.00028086,\n", - " 0.00029222, 0.00027224, 0.00030198, 0.0002795 , 0.00028296,\n", - " 0.00028539, 0.00030246, 0.00029336, 0.00027635, 0.00027403,\n", - " 0.00029847, 0.00030859, 0.00026701, 0.00028799, 0.00028378,\n", - " 0.00027674, 0.00028711, 0.00028868, 0.00031014, 0.0002899 ,\n", - " 0.00028063, 0.00027913, 0.0002943 , 0.00029064, 0.00028083,\n", - " 0.00028306, 0.00029897, 0.00028317, 0.00028137, 0.00029517,\n", - " 0.00028312, 0.00029675, 0.0003009 , 0.00029463, 0.00030613,\n", - " 0.0002797 , 0.00027588, 0.0002828 , 0.00028483, 0.00029518,\n", - " 0.00028386, 0.00029436, 0.0002883 , 0.00027945, 0.00028881,\n", - " 0.00029024, 0.0002748 , 0.00030463, 0.00029924, 0.00028608,\n", - " 0.00028572, 0.00027895, 0.00028168, 0.00028619, 0.00029151,\n", - " 0.00030543, 0.00028498, 0.00026751, 0.00028123, 0.00028919,\n", - " 0.00029966, 0.00029145, 0.00026426, 0.00029773, 0.00029927,\n", - " 0.00029401, 0.00029468, 0.00028765, 0.00027911, 0.00027771,\n", - " 0.00028767, 0.00028237, 0.00028612, 0.00027723, 0.00029483,\n", - " 0.00031478, 0.00028873, 0.00028237, 0.00028151, 0.00028265,\n", - " 0.00029462, 0.00028579, 0.00029377, 0.00028324, 0.00027268,\n", - " 0.00028198, 0.0002867 , 0.00028487, 0.00029677, 0.00028318,\n", - " 0.00028208, 0.00030322, 0.00028827, 0.0002777 , 0.00027948,\n", - " 0.00027831, 0.00028691, 0.0002806 , 0.00030417, 0.00028037,\n", - " 0.00027758, 0.000277 , 0.00029231, 0.00028753, 0.00027944,\n", - " 0.00028908, 0.00028393, 0.00030604, 0.00029549, 0.00028318,\n", - " 0.00028719, 0.00027848, 0.00029702, 0.00027577, 0.00029033,\n", - " 0.00026383, 0.00027755, 0.00027076, 0.00028014, 0.0002874 ,\n", - " 0.00027278, 0.00028376, 0.00028581, 0.0002999 , 0.00029293,\n", - " 0.00028326, 0.00029404, 0.00027823, 0.00028309, 0.00030031,\n", - " 0.00028357, 0.00026831, 0.00027631, 0.00027132, 0.00028422,\n", - " 0.00028109, 0.0002846 , 0.00028472, 0.00029377, 0.00029397,\n", - " 0.00029367, 0.00028156, 0.0002983 , 0.00027397, 0.00027596,\n", - " 0.00029551, 0.00027066, 0.00027498, 0.00027634, 0.00027802,\n", - " 0.0002644 , 0.00028597, 0.0002812 , 0.00028615, 0.00030396,\n", - " 0.0002836 , 0.00029826, 0.00029618, 0.00029713, 0.0002811 ,\n", - " 0.00028792, 0.00028409, 0.00026159, 0.00027364, 0.00027176,\n", - " 0.00029431, 0.00028701, 0.0002919 , 0.00028304, 0.00027275,\n", - " 0.00029048, 0.00028293, 0.00029674, 0.00029512, 0.0002882 ,\n", - " 0.00028068, 0.00028086, 0.00029234, 0.00026476, 0.00028237,\n", - " 0.00027659, 0.00028601, 0.00027769, 0.00030551, 0.00027926,\n", - " 0.00028405, 0.00028496, 0.00028296, 0.00028479, 0.00029331,\n", - " 0.00029044, 0.00027553, 0.0002937 , 0.00028769, 0.00027868,\n", - " 0.00027889, 0.00026796, 0.00028425, 0.00027854, 0.00030217,\n", - " 0.00027508, 0.00028957, 0.00028794, 0.00030984, 0.00027558,\n", - " 0.00029678, 0.00028948, 0.00027773, 0.00029095, 0.00029283,\n", - " 0.00028033, 0.00029078, 0.00027681, 0.00029667, 0.00026995,\n", - " 0.00028759, 0.00028212, 0.00029165, 0.00029199, 0.0002919 ,\n", - " 0.00028983, 0.00028946, 0.0002886 , 0.000267 , 0.00028077,\n", - " 0.00028544, 0.00027522, 0.00027528, 0.00027313, 0.000297 ,\n", - " 0.00027599, 0.0002912 , 0.00028723, 0.00029005, 0.00028615,\n", - " 0.00031037, 0.00030721, 0.00028294, 0.0002756 , 0.00029031,\n", - " 0.00026652, 0.0002816 , 0.0002705 , 0.00025524, 0.00026326,\n", - " 0.00030599, 0.00027895, 0.00027419, 0.00028704, 0.00029485,\n", - " 0.00029152, 0.00029263, 0.00028229, 0.00028069, 0.00027987,\n", - " 0.00031613, 0.00026586, 0.00028734, 0.00027362, 0.00026544,\n", - " 0.00026734, 0.00027362, 0.00027758, 0.00027666, 0.00028191,\n", - " 0.00027243, 0.00028733, 0.00029288, 0.00027411, 0.00028643,\n", - " 0.00027309, 0.00030734, 0.00029557, 0.00027793, 0.00027644,\n", - " 0.00028162, 0.00026574, 0.0002766 , 0.00029046, 0.00027606,\n", - " 0.00028217, 0.00029442, 0.00029841, 0.00029126, 0.00026515,\n", - " 0.00027615, 0.00027835, 0.00029223, 0.00029657, 0.00028572,\n", - " 0.00027686, 0.00027304, 0.00028104, 0.00029008, 0.00028757,\n", - " 0.00027477, 0.00028807, 0.00028602, 0.00029892, 0.00028114,\n", - " 0.00027683, 0.00028861, 0.00027539, 0.0003037 , 0.00029488,\n", - " 0.00027849, 0.00029243, 0.00028348, 0.00031067, 0.00029602,\n", - " 0.00026579, 0.00028618, 0.00028727, 0.00028613, 0.00029494,\n", - " 0.00027093, 0.00029036, 0.00028327, 0.00025871, 0.00029387,\n", - " 0.00029958, 0.00028088, 0.00028974, 0.00028729, 0.00030472,\n", - " 0.00029954, 0.00028058, 0.00028656, 0.00027549, 0.00027737,\n", - " 0.00028808, 0.00029753, 0.00028533, 0.00028455, 0.00028056,\n", - " 0.00029511, 0.00030454, 0.00028457, 0.00028838, 0.00029903,\n", - " 0.00028934, 0.0002785 , 0.00027799, 0.00029415, 0.00027863,\n", - " 0.00028222, 0.00027941, 0.00030697, 0.00028759, 0.00029277,\n", - " 0.0002846 , 0.00029516, 0.00031742, 0.00026618, 0.00027312,\n", - " 0.00029455, 0.00029962, 0.00028109, 0.00027602, 0.00029035,\n", - " 0.00028033, 0.00028517, 0.00027615, 0.00027644, 0.00028382,\n", - " 0.000268 , 0.00029049, 0.00029912, 0.0002983 , 0.00028779,\n", - " 0.00027836, 0.00030525, 0.0002996 , 0.00028763, 0.00027592,\n", - " 0.00029886, 0.00028369, 0.00028928, 0.0002879 , 0.00027467,\n", - " 0.000285 , 0.00027306, 0.0003009 , 0.00029814, 0.00027077,\n", - " 0.00026419, 0.00028504, 0.00029687, 0.00028536, 0.00029066,\n", - " 0.00028115, 0.00028581, 0.00028769, 0.00028298, 0.00027838,\n", - " 0.00028381, 0.00028233, 0.00029115, 0.00030675, 0.00030294,\n", - " 0.00028244, 0.00027254, 0.00027775, 0.00029635, 0.00027936,\n", - " 0.00029747, 0.00026405, 0.00028742, 0.00028834, 0.00026499,\n", - " 0.00028011, 0.00029317, 0.00027396, 0.00028722, 0.00028248,\n", - " 0.00029037, 0.00030996, 0.00028847, 0.00028356, 0.00028396,\n", - " 0.00027838, 0.00029326, 0.00026724, 0.00027752, 0.0002875 ,\n", - " 0.00026738, 0.00027422, 0.00027726, 0.00028643, 0.0002964 ,\n", - " 0.00029193, 0.00029323, 0.00030436, 0.0002799 , 0.00027604,\n", - " 0.00028646, 0.00028159, 0.00030965, 0.00026939, 0.00029811,\n", - " 0.00028832, 0.00028237, 0.00028508, 0.00027603, 0.00029392,\n", - " 0.00029493, 0.00028955, 0.00029226, 0.00029831, 0.00028968,\n", - " 0.00028495, 0.00030043, 0.00028213, 0.00032963, 0.00027351,\n", - " 0.00028297, 0.00030419, 0.0002827 , 0.00030193, 0.00027209,\n", - " 0.00026937, 0.00028758, 0.00028737, 0.00028801, 0.00029668,\n", - " 0.00027953, 0.0002799 , 0.00027931, 0.00028651, 0.00028275,\n", - " 0.00027865, 0.00027228, 0.00029828, 0.00028023, 0.00028156,\n", - " 0.00026815, 0.00027532, 0.00028392, 0.00027058, 0.00028979,\n", - " 0.00030569, 0.00027943, 0.00027973, 0.00029041, 0.00027247,\n", - " 0.00028061, 0.00026891, 0.00028476, 0.0003071 , 0.00028464,\n", - " 0.00028603, 0.00028039, 0.00027322, 0.0002834 , 0.00027494,\n", - " 0.00029543, 0.00028911, 0.00030001, 0.00026298, 0.00029343,\n", - " 0.00027998, 0.00027771, 0.00027348, 0.0002798 , 0.00030499,\n", - " 0.00028868, 0.00028075, 0.00029874, 0.00026926, 0.00027855,\n", - " 0.00027799, 0.0002893 , 0.00027904, 0.00030187, 0.0002708 ,\n", - " 0.00031162, 0.00030176, 0.00027721, 0.00026745, 0.00027549,\n", - " 0.0002768 , 0.00029899, 0.00028026, 0.00028067, 0.00029268,\n", - " 0.0002724 , 0.0002713 , 0.00030244, 0.00027418, 0.00031628,\n", - " 0.0002919 , 0.00029648, 0.00027764, 0.00027038, 0.00026267,\n", - " 0.0002956 , 0.00027203, 0.00028486, 0.00029332, 0.0002876 ,\n", - " 0.00027881, 0.00027171, 0.00028311, 0.0002704 , 0.00027062,\n", - " 0.00030842, 0.00028116, 0.00027947, 0.00028236, 0.00026767,\n", - " 0.00026758, 0.00028696, 0.00028151, 0.00028368, 0.00027488,\n", - " 0.00027643, 0.0002841 , 0.00027755, 0.00029692, 0.00025994,\n", - " 0.00026911, 0.00030675, 0.00029963, 0.00029815, 0.0002908 ,\n", - " 0.00028928, 0.00028293, 0.00027377, 0.00029199, 0.00026989,\n", - " 0.00029674, 0.00027309, 0.00028409, 0.00027727, 0.00031788,\n", - " 0.00026961, 0.00026532, 0.0002907 , 0.00028906, 0.00030185,\n", - " 0.00029084, 0.00027019, 0.00028798, 0.00028002, 0.00027983,\n", - " 0.00027941, 0.0002934 , 0.00027771, 0.00029003, 0.00027159,\n", - " 0.00029594, 0.00027762, 0.0002659 , 0.00028685, 0.00026727,\n", - " 0.00030464, 0.00030176, 0.00028052, 0.0002852 , 0.00027764,\n", - " 0.00027954, 0.0002943 , 0.00028644, 0.00027407, 0.00028886,\n", - " 0.00028281, 0.0002804 , 0.00027905, 0.00027583, 0.00028201,\n", - " 0.00027553, 0.00028601, 0.00029255, 0.00028078, 0.00028945,\n", - " 0.00029674, 0.00027595, 0.00027813, 0.00028494, 0.00028239])
" - ], - "text/plain": [ - " (samples: 800) float64 [Pa*s] [0.00029584, 0.000274112, ..., 0.000284939, 0.000282393]" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "yh.shear_viscosity" ] @@ -675,21 +190,10 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "id": "plot-results", "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "fig, ax = plt.subplots()\n", "\n", @@ -711,13 +215,12 @@ ")\n", "\n", "D_0_samples = yh.data_group['D_0'].values\n", - "eta_samples = yh.data_group['viscosity'].values\n", + "slope_samples = yh.data_group['slope'].values\n", "n_samples = len(D_0_samples)\n", "predictions_extended = np.zeros((len(inv_L_extended), n_samples))\n", "\n", - "for i in range(len(yh.data_group['D_0'])):\n", - " slope = yh.viscosity_to_slope(eta_samples[i] * yh.parameter_units[1])\n", - " predictions_extended[:, i] = yh.yeh_hummer_linear(inv_L_extended, D_0_samples[i], slope)\n", + "for i in range(n_samples):\n", + " predictions_extended[:, i] = D_0_samples[i] - slope_samples[i] * inv_L_extended\n", "\n", "for i, ci in enumerate(credible_intervals):\n", " ax.fill_between(\n", diff --git a/kinisi/fitting.py b/kinisi/fitting.py index dd6b3bb..5ff1573 100644 --- a/kinisi/fitting.py +++ b/kinisi/fitting.py @@ -112,10 +112,6 @@ def log_likelihood(self, parameters: tuple[float]) -> float: x_values = self.get_independent_variable() model = self.function(x_values, *parameters) - # Handle invalid model values (e.g., from VTF when T0 >= T) - if np.any(~np.isfinite(model)) or np.any(model <= 0): - return -np.inf - covariance_matrix = np.diag(self.data.variances) y_values = self.data.values diff --git a/kinisi/yeh_hummer.py b/kinisi/yeh_hummer.py index f3cfe49..ba2136e 100644 --- a/kinisi/yeh_hummer.py +++ b/kinisi/yeh_hummer.py @@ -12,7 +12,7 @@ import numpy as np import scipp as sc import scipp.constants as const -from scipy.optimize import curve_fit +from scipy.optimize import curve_fit, minimize from kinisi import __version__ from kinisi.fitting import FittingBase @@ -99,7 +99,7 @@ def _yeh_hummer_function( :param box_lengths: Array of box lengths / Angstrom :param D_0: Infinite-system diffusion coefficient - :param slope: Slope = (k_B * T * xi) / (6 * pi * eta) + :param slope: i.e., (k_B * T * xi) / (6 * pi * eta) """ return D_0 - slope / np.asarray(box_lengths) @@ -159,8 +159,6 @@ def linear_func(x, a, b): # Use these as initial parameters for optimization x0 = [D_0_init, slope_init] - from scipy.optimize import minimize - # Convert bounds to format expected by scipy bounds_scipy = [(b[0].value, b[1].value) for b in self.bounds] result = minimize(self.nll, x0, bounds=bounds_scipy, method='L-BFGS-B') @@ -170,7 +168,7 @@ def linear_func(x, a, b): self.data_group['slope'] = result.x[1] * self.parameter_units[1] @property - def D_infinite(self): + def D_infinite(self) -> sc.Variable | Samples: """Return infinite-system diffusion coefficient.""" return self.data_group['D_0'] @@ -179,11 +177,11 @@ def shear_viscosity(self) -> sc.Variable | Samples: """Return estimated shear viscosity (converted from slope samples).""" slope_data = self.data_group['slope'] if isinstance(slope_data, Samples): - # Convert each slope sample to viscosity - viscosities = [] - for s in slope_data.values: - eta = self._slope_to_viscosity(s) - viscosities.append(eta.value) - return Samples(np.array(viscosities), unit=sc.Unit('Pa*s')) + # eta = (k_B * T * xi) / (6 * pi * slope) + k_B_T = sc.to_unit(const.Boltzmann * self.temperature, 'J').value + slope_to_SI = sc.to_unit(1.0 * self._slope_unit, 'm^3/s').value + slopes_SI = slope_data.values * slope_to_SI + viscosities = (k_B_T * self.xi_cubic) / (6 * np.pi * slopes_SI) + return Samples(viscosities, unit=sc.Unit('Pa*s')) else: return self._slope_to_viscosity(slope_data.value)