Source code for nanite.model.model_hertz_paraboloidal

import lmfit
import numpy as np


def get_parameter_defaults():
    """Return the default model parameters"""
    # The order of the parameters must match the order
    # of ´parameter_names´ and ´parameter_keys´.
    params = lmfit.Parameters()
    params.add("E", value=3e3, min=0)
    params.add("R", value=10e-6, min=0, vary=False)
    params.add("nu", value=.5, min=0, max=0.5, vary=False)
    params.add("contact_point", value=0)
    params.add("baseline", value=0)
    return params


[docs] def hertz_paraboloidal(delta, E, R, nu, contact_point=0, baseline=0): r"""Hertz model for a paraboloidal indenter .. math:: F = \frac{4}{3} \frac{E}{1-\nu^2} \sqrt{R} \delta^{3/2} Parameters ---------- delta: 1d ndarray Indentation [m] E: float Young's modulus [N/m²] R: float Tip radius [m] nu: float Poisson's ratio contact_point: float Indentation offset [m] baseline: float Force offset [N] Returns ------- F: float Force [N] Notes ----- The derivation in :cite:`Sneddon1965` reads .. math:: F = \frac{4}{3} \frac{E}{1-\nu^2} \sqrt{2k} \delta^{3/2}, where :math:`k` is defined by the paraboloid equation .. math:: \rho^2 = 4kz. As follows from the derivations in :cite:`LandauLifshitz`, this model is valid for either of the two cases: - Indentation of a plane (infinite radius) with Young's modulus :math:`E` by a sphere with infinite Young's modulus and radius :math:`R`, or - Indentation of a sphere with radius :math:`R` and Young's modulus :math:`E` by a plane (infinite radius) with infinite Young's modulus. These approximations are made by the Hertz model: - The sample is isotropic. - The sample is a linear elastic solid. - The sample is extended infinitely in one half space. - The indenter is not deformable. - There are no additional interactions between sample and indenter. Additional assumptions: - no surface forces - If the indenter is spherical, then its radius :math:`R` is much larger than the indentation depth :math:`\delta`. References ---------- Sneddon (1965) :cite:`Sneddon1965` (equation 6.9), Theory of Elasticity by Landau and Lifshitz (1959) :cite:`LandauLifshitz` (§9 Solid bodies in contact, equation 9.14) """ aa = 4/3 * E/(1-nu**2)*np.sqrt(R) root = contact_point-delta pos = root > 0 bb = np.zeros_like(delta) bb[pos] = (root[pos])**(3/2) return aa*bb + baseline
model_doc = hertz_paraboloidal.__doc__ model_func = hertz_paraboloidal model_key = "hertz_para" model_name = "parabolic indenter (Hertz)" parameter_keys = ["E", "R", "nu", "contact_point", "baseline"] parameter_names = ["Young's Modulus", "Tip Radius", "Poisson's Ratio", "Contact Point", "Force Baseline"] parameter_units = ["Pa", "m", "", "m", "N"] valid_axes_x = ["tip position"] valid_axes_y = ["force"]