963 lines
141 KiB (Stored with Git LFS)
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"id": "1b9ef33d-7799-42fd-a496-d5ed5255939e",
"metadata": {},
"source": [
"noskievic"
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "33ac917f-a831-4d9c-99e2-dc072fb7a9da",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([-8.62157596e+04, -8.41671517e+01, -4.10293280e+01, -2.66304660e+01,\n",
" -1.94167355e+01, -1.50776049e+01])"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def noskievic(t, alpha, beta, a, b):\n",
" import numpy as np\n",
" d = alpha/beta\n",
" tau = beta*t\n",
" if np.isclose(d,0.0):\n",
" print(\"d=0\")\n",
" f0 = 1 - np.cos(tau)\n",
" f1 = 1 - ((np.sin(tau))/(tau))\n",
" elif np.isclose(d,1.0):\n",
" print(\"d=1\")\n",
" f0 = 1 - (1 + tau)*np.exp(-tau)\n",
" f1 = 1 - 2*((1 - np.exp(-tau))/(tau)) + np.exp(-tau)\n",
" elif -1 < d and d < 1:\n",
" e = (d**2 - 0.5)/(d*np.sqrt(1 - d**2))\n",
" w = np.sqrt(1 - d**2)\n",
" f0 = 1 - np.exp(-d*tau)*((d/w)*np.sin(w*tau) + np.cos(w*tau))\n",
" f1 = 1 - ((2*d)/(tau))*(1 - np.exp(-d*tau)*( np.cos(w*tau) + e*np.sin(w*tau) ))\n",
" elif d > 1:\n",
" d_0 = d + np.sqrt(d**2 - 1)\n",
" f0 = 1 - (1/(d_0**2 - 1))*(d_0**2 * np.exp(-tau/d_0) - np.exp(-d_0 * tau))\n",
" f1 = 1 - (1/tau)*(2*d - (1/(d_0*(d_0**2-1)))*( np.exp(-d_0*tau) - d**4*np.exp(-tau/d_0) ) )\n",
" else:\n",
" raise ValueError(\"d is not within bounds\")\n",
"\n",
" return a*f0 + b*f1\n",
"\n",
"noskievic(np.array([0.0001,0.1,0.2,0.3,0.4,0.5]),2,1,1,2)\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "3418a24d-7219-4bf7-b480-4ce7820b5cbb",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"--- Weibull Analysis Started ---\n",
"\n",
"Step 1: Preparing Data...\n",
"ML_final used for normalization: 33.00 mg\n",
"Number of data points for Weibull plot: 14\n",
"\n",
"Step 2: Transforming Data and Estimating Parameters...\n",
"Estimated Beta (shape parameter): 1.887\n",
"Estimated Eta (scale parameter/characteristic time): 11.267 h\n",
"R-squared for the fit: 0.9993\n",
"\n",
"Step 3: Calculating Key Erosion Parameters...\n",
"Time to reach F(t)=0.01% (proxy for practical incubation): 0.086 h\n",
"Calculated t_MER: 7.553 h\n",
"Calculated t_in (Nominal Incubation Time): 2.443 h\n",
"Calculated t_threshold (for F(t)=1.0%): 0.984 h\n",
"\n",
"--- Weibull Analysis Finished ---\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA0wAAAIhCAYAAAB9gDqHAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAiHtJREFUeJzs3XdcVfUfx/HXBZkiLlRQENx709DEmSMzLXemaZktceYs92i5V2X1y1FZlpKVlaNyYGqpaTlxpLlwm6go43J+f5y4iYICAvcC7+fjwUO/555z7+eeL+h98/2e77EYhmEgIiIiIiIit3GydwEiIiIiIiKOSoFJREREREQkBQpMIiIiIiIiKVBgEhERERERSYECk4iIiIiISAoUmERERERERFKgwCQiIiIiIpICBSYREREREZEUKDCJiIiIiIikQIFJRETSZOnSpVgsFpYsWXLbYzVq1MBisbBq1arbHitTpgy1a9dO02v17NmToKCgJNssFguhoaFpep67adSoEY0aNbrtdcaOHXvXYy0WS5Kv/Pnz06hRI7777rsk+wUFBdGzZ8801xYdHc3YsWNZt25dmo8VEZF7p8AkIiJp0qhRIywWC2vXrk2y/eLFi+zatYu8efPe9tiJEyf466+/aNy4cZpea9SoUXz11Vf3XHNm69ChA5s3b+aXX35h7ty5nD59mscee+y20JQe0dHRjBs3ToFJRMRO8ti7ABERyV58fHyoWrXqbR/g169fT548eejVq9dtgSmxndbAVKZMmXuqNasUK1aMBx98EIB69epRt25dypYty4wZM3j00UftXJ2IiNwLjTCJiEiaNW7cmIiICCIjI23b1q1bx3333UerVq3Yvn07V65cSfKYs7MzISEhABiGwTvvvEPNmjXx8PCgYMGCdOjQgb/++ivJ6yQ3JS/RvHnzKF++PG5ublSuXJnPP/88yeNjx47FYrHcdtyCBQuwWCwcPXo0ne/+7sqUKUORIkX4+++/77jfsWPH6NatG0WLFsXNzY1KlSoxdepUEhISADh69ChFihQBYNy4cbZpf+mZ2iciIumjwCQiImmWOFJ08yjT2rVradiwIQ899BAWi4Xw8PAkj9WuXZv8+fMD8MILLzBgwAAefvhhli9fzjvvvMOePXuoV68eZ86cuevrf/PNN8yaNYvx48ezdOlSAgMDefLJJ1m6dGnGvtF0unTpEhcuXLCFneScO3eOevXqsXr1aiZMmMA333zDww8/zODBg23XaPn5+bFy5UoAevXqxebNm9m8eTOjRo3KkvchIiKakiciIunQsGFDnJycWLduHU8++SQXLlxg9+7dTJ48GS8vL2rXrs3atWtp1aoVx48f58iRI3Ts2BGALVu28MEHHzB16lQGDRpke86QkBDKly/PtGnTeOutt+74+ufPn2fr1q0UK1YMgFatWlG1alVGjBhBhw4dMu+Np8AwDOLj4zEMg8OHDzNo0CASEhJ46qmnUjxm2rRpnDx5kl9//ZX7778fgBYtWmC1WnnvvfcYMGAA5cuXp06dOgD4+/vbpv2JiEjW0QiTiIikWcGCBalRo4ZthGn9+vU4Ozvz0EMPAWagSrxu6dbrl1asWIHFYqFbt27Ex8fbvnx9fZM85500bdrUFpYAnJ2d6dy5M4cOHeLEiRMZ+E5T55133sHFxQVXV1cqVarEpk2bGD9+PC+//HKKx/z8889UrlzZFpYS9ezZE8Mw+PnnnzO7bBERSQWNMImISLo0btyYadOmcerUKdauXUudOnXw8vICzMA0depULl++zNq1a8mTJw/169cH4MyZMxiGkSTw3Kx06dJ3fW1fX98Ut124cAF/f//0vq106dSpE0OGDMFisZAvXz7KlCmDs7PzHY+5cOFCstdnFS9e3Pa4iIjYnwKTiIikS2JgWrduHevWraNVq1a2xxLD0YYNG2yLQSSGKR8fH9s1Tm5ubrc9b3LbbnX69OkUtxUuXBgAd3d3AGJiYpI85/nz51P7FlOtSJEiBAcHp+mYwoULJ1k0I9GpU6cA8zyJiIj9aUqeiIikS4MGDXB2dmbp0qXs2bMnyY1f8+fPT82aNVm4cCFHjx5Nspx469atMQyDkydPEhwcfNtXtWrV7vraP/30U5LFIaxWK0uWLKFMmTK20aXE0Zs///wzybHffvvtPbzrjNO0aVP27t3L77//nmT7okWLsFgstnOWGPauX7+e5TWKiIhGmEREJJ28vb2pXbs2y5cvx8nJyXb9UqKGDRsyY8YMIOn9lx566CGef/55nnnmGbZt20aDBg3ImzcvkZGRbNy4kWrVqvHSSy/d8bV9fHxo0qQJo0aNIm/evLzzzjvs378/ydLirVq1olChQvTq1Yvx48eTJ08eFixYwPHjxzPuJNyDgQMHsmjRIh599FHGjx9PYGAg3333He+88w4vvfQS5cuXByBfvnwEBgby9ddf07RpUwoVKoSPj0+Ky62LiEjG0giTiIikW+PGjTEMg1q1auHt7Z3ksYYNG2IYBq6urtSrVy/JY/PmzWPOnDls2LCBLl268OijjzJ69GiuXbt22yIIyWnTpg2hoaGMHDmS9u3bc/ToUT799FM6d+5s28fb25uVK1eSL18+unXrxosvvkjVqlV57bXXMubN36MiRYqwadMmmjRpwogRI2jdujWrVq3i7bffZvbs2Un2/d///oenpydt2rThvvvuY+zYsfYpWkQkF7IYhmHYuwgRERERERFHpBEmERERERGRFCgwiYiIiIiIpECBSUREREREJAUKTCIiIiIiIilQYBIREREREUmBApOIiIiIiEgKctWNaxMSEjh16hT58uXDYrHYuxwREREREbETwzC4cuUKxYsXx8kp5XGkXBWYTp06RUBAgL3LEBERERERB3H8+HH8/f1TfDxXBaZ8+fIB5km59Y70klRcXByrV6+mefPmuLi42LscuYX6x3Gpbxyb+sdxqW8cm/rHcalv0i8qKoqAgABbRkhJrgpMidPwvL29FZjuIi4uDk9PT7y9vfXD54DUP45LfePY1D+OS33j2NQ/jkt9c+/udqmOFn0QERERERFJgQKTiIiIiIhIChSYREREREREUpCrrmFKDcMwiI+Px2q12rsUu4qLiyNPnjzcuHEj158LR6T+cVxZ2TcuLi44Oztn6muIiIjkdgpMN4mNjSUyMpLo6Gh7l2J3hmHg6+vL8ePHdc8qB6T+cVxZ2TcWiwV/f3+8vLwy9XVERERyMwWmfyUkJHDkyBGcnZ0pXrw4rq6uufqDaEJCAlevXsXLy+uON/IS+1D/OK6s6hvDMDh37hwnTpygXLlyGmkSERHJJApM/4qNjSUhIYGAgAA8PT3tXY7dJSQkEBsbi7u7uz6QOyD1j+PKyr4pUqQIR48eJS4uToFJREQkk+iT1i304VNEsovcPAouIiKSVZQOREREREREUqDAJCIiIiIikgIFJslw0dHRtG/fHm9vbywWC//884+9S0qVoKAgZsyYYe8ysty6deuyVT+JiIiIZCUFpmzMYrHc8atnz552qWvhwoWEh4ezadMmIiMjyZ8/v13qyGhjx461nds8efLg4+NDgwYNmDFjBjExMWl6rowMKT179rTV5eLiQunSpRk8eDDXrl1L1fH16tVLcz/17NmTxx9/PJ0Vi4iIiGQfWiUvg1mtEB4OkZHg5wchIZBZi1dFRkba/r5kyRJGjx5NRESEbZuHh0eS/ePi4nBxccmcYm5y+PBhKlWqRNWqVdP9HFarFYvF4nCLcFSpUoUff/yRhIQELly4wLp165g4cSIff/wx69atI1++fHapq2XLlsyfP5+4uDjCw8N57rnnuHbtGu++++5dj3V1dcXX1zcLqhQRERHJfhzr02g2FxYGQUHQuDF07Wr+GRRkbs8Mvr6+tq/8+fNjsVhs7Rs3blCgQAG++OILGjVqhLu7O5988gkXLlzgySefxN/fH09PT6pVq8Znn32W5HkbNWpE//79GT16ND4+Pvj6+jJ27Ngk+4wdO5aSJUvi5uZG8eLF6devn+3YqVOnsmHDBiwWC40aNQLg0qVLPP300xQsWBBPT08eeeQRDh48aHu+BQsWUKBAAVasWEHlypVxc3Pj77//JigoiIkTJ/L000/j5eVFYGAgX3/9NefOnaNt27Z4eXlRrVo1tm3blqS+TZs20aBBAzw8PAgICKBfv35JRlzOnj3LY489hoeHB6VKleLTTz9N1TnPkycPvr6+FC9enGrVqtG3b1/Wr1/P7t27eeutt2z7ffLJJwQHB5MvXz58fX3p2rUrZ8+eBeDo0aM0btwYgIIFCyYZDVy5ciX169enQIECFC5cmNatW3P48OG71uXm5oavry8BAQF07dqVp556iuXLlwMQExNDv379KFq0KO7u7tSvX5+tW7fajr11tCuxL1atWkWlSpXw8vKiZcuWtoA+duxYFi5cyNdff20b2Vq3bh2xsbGEhobi5+eHu7s7QUFBvPHGG6k6ryIiIpLzWa2wbh189pn5p9Vq74pSR4Epg4SFQYcOcOJE0u0nT5rbMys03c2wYcPo168f+/bto0WLFty4cYM6deqwYsUKdu/ezfPPP0/37t359ddfkxy3aNEi8ubNy+bNm3n77bcZP348a9asAWDp0qVMnz6defPmcfDgQZYvX061atUACAsLo3fv3tStW5fIyEjC/n3jPXv2ZNu2bXzzzTds3rwZwzBo1aoVcXFxtteMjo7mjTfe4MMPP2TPnj0ULVoUgOnTp/PQQw+xY8cOHn30Ubp3787TTz9Nt27d+P333ylbtixPP/00hmEAsGvXLlq0aEG7du34888/WbJkCRs3biQ0NNT2Wj179uTo0aP8/PPPLF26lHfeeccWaNKqYsWKPPLII7b3CuZ9vSZMmMAff/zB8uXLOXLkiC0UBQQEsGzZMgAiIiKIjIxk5syZAFy7do1BgwaxdetWfvrpJ5ycnHjiiSdISEhIU00eHh62czt06FCWLVvGwoULbeerRYsWXLx4McXjo6OjmTJlCh9//DEbNmzg2LFjDB48GIDBgwfTqVMnW4iKjIykXr16zJo1i2+++YYvvviCiIgIPvnkE4KCgtJUt4iIiORMWT2wkKGMXOTy5csGYFy+fPm2x65fv27s3bvXuH79epqfNz7eMPz9DQOS/7JYDCMgwNwvs8yfP9/Inz+/rX3kyBEDMGbMmHHXY1u1amW88sortnbDhg2N+vXrG5cuXTKsVqthGIZx3333GcOGDTMMwzCmTp1qlC9f3oiNjU32+fr37280bNjQ1j5w4IABGL/88ott2/nz5w0PDw/jiy++sNUPGDt37kzyXIGBgUa3bt1s7cjISAMwRo0aZdu2efNmAzAiIyMNwzCM7t27G88//3yS5wkPDzecnJyM69evGxEREQZgbNmyxfb4vn37DMCYPn16iudpzJgxRo0aNZJ9bNiwYYaHh0eKx/72228GYFy5csUwDMNYu3atARiXLl1K8RjDMIyzZ88agLFr164k261Wq61/evToYbRt29b22K+//moULlzY6NSpk3H16lXDxcXF+PTTT22Px8bGGsWLFzfefvvtZGtJ7ItDhw7Zjpk7d65RrFgxW/vW1zQMw+jbt6/RpEkTIyEh4Y7vKae7uW8y2738u5VbxcbGGsuXL0/x3y+xH/WNY1P/OK7s0DfLlpmfh5P7jGyxmI/bw52ywc00wpQBwsNvH1m6mWHA8ePmflktODg4SdtqtTJp0iSqV69O4cKF8fLyYvXq1Rw7dizJfokjRon8/PxsIzAdO3bk+vXrlC5dmt69e/PVV18RHx+fYg379u0jT548PPDAA7ZthQsXpkKFCuzbt8+2zdXVlerVq992/M3bihUrdlt9idsS69u+fTsLFizAy8vL9tWiRQsSEhI4cuSIrZ6bz03FihUpUKBAiu/hbgzDSHIT0R07dtC2bVsCAwPJly+fbWriref5VocPH6Zr166ULl0ab29vSpUqlarj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",
"text/plain": [
"<Figure size 1000x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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97+kRL169ShVqhSfffYZX375JT179rzrUugDBgxg6NChtG3blu+//56ff/6Z7du3U6lSpUSfeciQIXz88cds27aN5s2bkydPHho2bJhoSe+FCxfSrVs3Zs6cSa1atcidOzddu3bl1KlT9nRZEhcvXsQwjGSnNxYqVAjANrXuk08+4c0332Tp0qU0aNCA3Llz07ZtWw4dOgSY08J++uknmjZtytixY3niiSfIly8fffv2ve/UuObNm+Pj42MLvRcvXmTZsmV07doVq9UKQI4cOdiwYQOVK1fmrbfeoly5chQqVIh333031YKjPez5uwTY/j4lTB0LDg5O8j354YcfYhjGPR8BULRoUUqUKMHatWu5du0aW7dutQWlhGC7du1aPDw8qF279kN9xjx58iTaTrhvMiV/Zxs0aMCff/7JyZMnWb9+PVWrVrWF8fr167N7926ioqJYv349Li4u1K1bFzD7x/j3Xqw7+2fbtm0p+vtasGDBu7alxnRVe+XLl49q1aoleiUsDy4iqUOr3olkcFarlYYNG/LDDz8QERGRohWq3N3diYmJSdKe2j8MZM2aFSDJtVLyQ8u6des4efIkYWFhtlEk4J73raRUjx49+Oijj1iwYAHt27dn2bJl9O/f3/bDNZgBtGLFiowaNSrZcyQEAnuu+c4772CxWOjWrdtdj/vqq6/o2rUro0ePTtR+7ty5RPeNuLi4MGDAAAYMGMClS5dYu3Ytb731Fk2bNuX48eN4enqSN29eQkJCCAkJ4Z9//mHZsmUMHjyYM2fOPNQqiAmLAPz3pvsEJ0+eBLD9QJctWzZGjBjBiBEjOH36tG10qXXr1vzxxx+A+UP8559/DsCff/7JN998w/Dhw7l58yaffvrpXetIGMH65JNPuHTpEvPmzSMmJoYePXokOq5ChQosWLAAwzDYu3cvs2fP5r333sPDw4PBgwc/cD+kpYT+nDRp0l1XQvvvaEhyGjZsyHfffceGDRuIj48nMDAQLy8vChUqxJo1a1i7di0BAQHJLgiTVho0aMD48eMJCwsjLCyMFi1a2PYlhKKNGzfaFnlICFF58+a13cOUXP0p+UzJ/QIhoS0h/P3337T/ntOeX5yISPqhESWRTGDIkCEYhsELL7zAzZs3k+yPjY3l+++/t237+/uzd+/eRMesW7eOK1eupGpdCStL3XmtZcuW3fe9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eDE7d+5kypQpALb7m0REREQk5dLrgIK9FJQekI+PT6oel1J58uShcePGTJ06levXryfad+rUKb7++mvat2+fJPjcS5kyZdi+fXuith07djxUnefPn+f333/nnXfeoWHDhrYpgallzpw5XLx40Ta9b/PmzRQtWpSBAwdSrVo1SpUqxbFjxxK9x83NLclvLnbs2MGtW7cYN24cNWvWpHTp0pw8eTLV6hQRERHJbJw1oJDaFJQeUEBAAL6+vncNJBaLBT8/PwICAlL92pMnTyYmJoamTZuyceNGjh8/zqpVq2zTx+53b9GdXnzxRf744w/efPNN/vzzT7755hvbinD2BK7/ypUrF3ny5GH69On89ddfrFu3jgEDBjzQua5du8apU6eIiIjg559/5s033+Sll17i5ZdfpkGDBoA50vbPP/+wePFiDh8+zCeffMKSJUsSncff358jR46wZ88ezp07R0xMDCVKlODWrVtMmjSJv//+my+//JJPP/30geoUEREREecNKKQ2BaUHZLVamThxIpA0TCRsh4SEpOpCDglKlSrFjh07KFGiBO3bt6dEiRL07t2bBg0asHXrVnLnzm3X+YoVK8aiRYsIDQ2lYsWKTJs2zbbqnbu7+wPVmCVLFhYsWMDOnTspX748r732mm2xCHvNmDEDHx8fSpQoQbt27Thw4AALFy5MtNhCmzZt6N+/P4MGDeKJJ55gy5YtSVb4e+aZZ2jWrBkNGjQgX758zJ8/n8qVKzN+/Hg+/PBDypcvz9dff80HH3zwQHWKiIiIiHMHFFKVkcFFRUUZgBEVFZVk3/Xr140DBw4Y169ff+DzL1682PD19TUA28vPz89YvHhxkmPj4uKMixcvGnFxcQ98vbQycuRIw9fX19ll2OVR6l9netDv+5s3bxpLly41bt686aDKMjf1r+Opjx1L/etY6l/HUv+mvsWLFxsWi8WwWCyGh4eHsXTpUsPDw8PWltzPymnhXtngTloe/CEFBQXRpk0bwsPDiYyMxMfHh4CAAIeMJDnS1KlTefLJJ8mTJw+bN2/mo48+4tVXX3V2WSIiIiLyCAoKCmLRokX069eP8+fP29p9fX0JCQlJ90uDg56jlCqsViuBgYHOLuOhHDp0iJEjR3LhwgWKFCnC66+/zpAhQ5xdloiIiIg8ohIGFDZu3Eh0dDQrVqygXr16j8yAgoKSADBhwgQmTJjg7DJEREREJAOxWq3UrVuXlStXUrdu3UcmJIEWcxAREREREUlCQUlEREREROQOCkoiIiIiIiJ3UFASERERERG5g4KSiIiIiIjIHRSURERERERE7qCglMEEBgbSv3//NLve7NmzyZkzZ5pdL8Gdn9Pf35+JEyc+1DnDwsKwWCxcunQJcN5nExERERHnU1B6BHXv3h2LxZLk9ddffxEaGsr7779vO9bf35+QkJBE70/LAFCzZk1efvnlRG3Tpk3DYrHw+eefJ2rv1asXtWvXTtF57/yczrR+/XpatGhBnjx58PT0pGzZsrz++uucOHHC2aWJiIiIyANSUHpENWvWjMjIyESvYsWKkTt3bry8vJxdnk2DBg1Yv359orawsDD8/PySbW/QoEGKzptePudnn31Go0aNKFiwIIsXL+bAgQN8+umnREVFMW7cuAc+782bN1OxShERERGxl4LSnQwDrl5N+5dh2FWmu7s7BQsWTPSyWq2JpqQFBgZy7NgxXnvtNduoU1hYGD169CAqKsrWNnz4cMD84XzQoEEULlyYbNmyUaNGDcLCwhJdd/bs2RQpUgRPT0/atWvH+fPn71lngwYNOHjwIJGRkba2DRs2MGTIkETnPn78OH///bctKB04cIAWLVqQPXt2ChQoQJcuXTh37pzt+OSmGF6+fJnnn38eb29vChUqxKRJk2z7jh49isViYc+ePba2S5cu2frkQURERNC3b1/69u3LF198QWBgIP7+/tSrV4+ZM2cybNgwAIYPH07lypUTvTckJAR/f3/bdvfu3Wnbti0ffPABhQoVonTp0gwZMoSaNWsmuW7FihV59913bduzZs3i8ccfJ2vWrJQpU4apU6c+0OcRERERkdsUlO507Rpkz+6QVxZvb3L6+pLF2zvp/mvXUv2jhIaG4uvry3vvvWcbdapduzYhISF4e3vb2gYOHAhAjx492Lx5MwsWLGDv3r08++yzNGvWjEOHDgHw888/07NnT1555RX27NlDgwYNGDly5D1rqFOnDq6urrYwcuDAAa5fv07Pnj2Jjo62nXv9+vW4ublRu3ZtIiMjqV+/PpUrV2bHjh2sWrWK06dP89xzz93zWh9//DHlypVjx44dDBkyhNdee401a9Y8ZC/e3bfffmsLl8mxd3rjTz/9xO+//86aNWtYvnw5nTt35ueff+bw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im677TZ16dJFPXv21P3336+CggKnfbKysmSxWOrd/v3vf7fSrNuO1NTUenEKCQlx2ofcbZ5+/fo5zMfHH3/cYXvy17mcnBzdd999CgsLk8Vi0UcffWTzuDFGqampCgsLU0BAgMaPH68vvvii0XG3bNmiW2+9VX5+frr11lu1detWF70Cz+YsvtXV1Vq0aJGGDx+uTp06KSwsTA899JDOnTvndMx3333XYU5XVFS4+NV4nsbyd968efXiFBsb2+i45O81jcXXUR5aLBa99tprDY5J/l7TlPdj7en8S6HUgjZt2qSUlBT96le/Un5+vu644w5NmjRJp06dcti+sLBQP/7xj3XHHXcoPz9fS5Ys0S9/+Utt2bKllWfu+bKzs/X4449rz549ysjI0NWrV5WQkKBvvvmm0b4FBQUqKiqy3gYOHNgKM257hg4dahOngwcPNtiW3G2+ffv22cQ3IyNDkvTAAw847Uf+OvbNN99o5MiRWrlypcPHX331VS1fvlwrV67Uvn37FBISogkTJqisrKzBMXfv3q2kpCQlJyfrX//6l5KTkzVz5kzt3bvXVS/DYzmLb3l5uQ4cOKAXXnhBBw4cUFpamr788ktNnTq10XEDAwNt8rmoqEj+/v6ueAkerbH8laSJEyfaxOmTTz5xOib5+53G4mufg2vXrpXFYtH06dOdjkv+Nu39WLs6/xq0mNtvv90sWLDA5tjgwYPN4sWLHbZ/7rnnzODBg22O/exnPzOxsbEum2N7cf78eSPJZGdnN9gmMzPTSDIXL15svYm1UUuXLjUjR45scnty9/t78sknzYABA0xtba3Dx8nfppNktm7dar1fW1trQkJCzLJly6zHKioqTFBQkHnrrbcaHGfmzJlm4sSJNsfuvfdeM2vWrBafc1tiH19H/vGPfxhJ5uTJkw22WbdunQkKCmrZybUDjuI7d+5cM23atGaNQ/461pT8nTZtmrnrrructiF/HbN/P9bezr+sKLWQqqoq7d+/XwkJCTbHExIStGvXLod9du/eXa/9vffeq3/+85+qrq522Vzbg8uXL0uSunXr1mjbqKgohYaG6u6771ZmZqarp9ZmHT16VGFhYerfv79mzZql48ePN9iW3P1+qqqq9Je//EXz58+XxWJx2pb8bb7CwkIVFxfb5Kifn5/GjRvX4PlYajivnfXBNZcvX5bFYtEt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",
"text/plain": [
"<Figure size 1000x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import numpy as np\n",
"from scipy.stats import linregress\n",
"\n",
"# --- Step 1: Data Preparation ---\n",
"def prepare_data(times, cumulative_mass_loss):\n",
" \"\"\"\n",
" Converts cumulative mass loss to cumulative fraction failed F(t).\n",
"\n",
" Args:\n",
" times (np.array): Array of time points.\n",
" cumulative_mass_loss (np.array): Array of cumulative mass loss values.\n",
"\n",
" Returns:\n",
" tuple: (filtered_times, F_t_values, ml_final)\n",
" filtered_times: Times corresponding to valid F(t) values.\n",
" F_t_values: Cumulative fraction failed.\n",
" ml_final: The final (maximum) mass loss used for normalization.\n",
" \"\"\"\n",
" if len(times) != len(cumulative_mass_loss):\n",
" raise ValueError(\"Times and cumulative_mass_loss arrays must have the same length.\")\n",
" if not len(times):\n",
" raise ValueError(\"Input arrays cannot be empty.\")\n",
"\n",
" # Use the maximum observed mass loss as ML_final\n",
" ml_final = np.max(cumulative_mass_loss)\n",
" if ml_final == 0:\n",
" print(\"Warning: ML_final is 0. F(t) cannot be calculated properly. Returning empty arrays.\")\n",
" return np.array([]), np.array([]), 0\n",
"\n",
" # Calculate F(t) = ML_i / ML_final\n",
" F_t_values = cumulative_mass_loss / ml_final\n",
"\n",
" # Filter out data points where F(t) is 0 or 1, or time is 0, as these\n",
" # cannot be used in the logarithmic transformations for Weibull plotting.\n",
" # We need 0 < F(t) < 1 and t > 0.\n",
" valid_indices = (F_t_values > 0) & (F_t_values < 1) & (times > 0)\n",
" \n",
" filtered_times = times[valid_indices]\n",
" filtered_F_t = F_t_values[valid_indices]\n",
"\n",
" if len(filtered_times) == 0:\n",
" print(\"Warning: No valid data points after filtering for 0 < F(t) < 1 and t > 0.\")\n",
" \n",
" return filtered_times, filtered_F_t, ml_final\n",
"\n",
"# --- Step 2: Weibull Plotting and Parameter Estimation ---\n",
"def transform_for_weibull_plot(times, F_t_values):\n",
" \"\"\"\n",
" Transforms data for Weibull plotting.\n",
" X = ln(t)\n",
" Y = ln(ln(1 / (1 - F(t))))\n",
"\n",
" Args:\n",
" times (np.array): Array of time points (already filtered, t > 0).\n",
" F_t_values (np.array): Array of F(t) values (already filtered, 0 < F(t) < 1).\n",
"\n",
" Returns:\n",
" tuple: (X_weibull, Y_weibull)\n",
" \"\"\"\n",
" if not len(times): # Should be caught by prepare_data, but good to have a check\n",
" return np.array([]), np.array([])\n",
"\n",
" X_weibull = np.log(times)\n",
" Y_weibull = np.log(np.log(1 / (1 - F_t_values)))\n",
" return X_weibull, Y_weibull\n",
"\n",
"def estimate_weibull_parameters(X_weibull, Y_weibull):\n",
" \"\"\"\n",
" Estimates Weibull parameters eta and beta using linear regression.\n",
" Y = beta * X - beta * ln(eta)\n",
" Slope m = beta\n",
" Intercept c = -beta * ln(eta) => eta = exp(-c / beta)\n",
"\n",
" Args:\n",
" X_weibull (np.array): Transformed time data (ln(t)).\n",
" Y_weibull (np.array): Transformed F(t) data (ln(ln(1/(1-F(t))))).\n",
"\n",
" Returns:\n",
" tuple: (beta, eta, r_squared) or (None, None, None) if regression fails.\n",
" beta: Shape parameter.\n",
" eta: Scale parameter (characteristic time).\n",
" r_squared: Coefficient of determination for the fit.\n",
" \"\"\"\n",
" if len(X_weibull) < 2 or len(Y_weibull) < 2:\n",
" print(\"Warning: Not enough data points for linear regression.\")\n",
" return None, None, None\n",
"\n",
" slope, intercept, r_value, p_value, std_err = linregress(X_weibull, Y_weibull)\n",
"\n",
" beta = slope\n",
" if beta == 0: # Avoid division by zero\n",
" print(\"Warning: Estimated beta (slope) is 0. Cannot calculate eta.\")\n",
" return beta, None, r_value**2\n",
" \n",
" eta = np.exp(-intercept / beta)\n",
" r_squared = r_value**2\n",
" \n",
" return beta, eta, r_squared\n",
"\n",
"# --- Step 3: Calculating Key Erosion Parameters ---\n",
"def calculate_t_mer(eta, beta):\n",
" \"\"\"\n",
" Calculates Time at Maximum Erosion Rate (t_MER).\n",
" t_MER = eta * ((beta - 1) / beta)^(1 / beta)\n",
" Valid for beta > 1.\n",
"\n",
" Args:\n",
" eta (float): Scale parameter.\n",
" beta (float): Shape parameter.\n",
"\n",
" Returns:\n",
" float: t_MER, or None if beta <= 1 or parameters are invalid.\n",
" \"\"\"\n",
" if eta is None or beta is None:\n",
" return None\n",
" if beta <= 1:\n",
" print(f\"Warning: beta ({beta:.2f}) <= 1. t_MER is not well-defined or occurs at t=0.\")\n",
" return 0 # Or None, depending on desired interpretation\n",
" \n",
" try:\n",
" t_mer = eta * ((beta - 1) / beta)**(1 / beta)\n",
" except (ZeroDivisionError, TypeError, ValueError) as e:\n",
" print(f\"Error calculating t_MER: {e}\")\n",
" return None\n",
" return t_mer\n",
"\n",
"def calculate_t_in(eta, beta, t_mer):\n",
" \"\"\"\n",
" Calculates Nominal Incubation Time (t_in).\n",
" k = exp(-(t_MER / eta)^beta)\n",
" t_in = t_MER - (1 - k) / ((beta / eta^beta) * t_MER^(beta - 1) * k)\n",
"\n",
" Args:\n",
" eta (float): Scale parameter.\n",
" beta (float): Shape parameter.\n",
" t_mer (float): Time at Maximum Erosion Rate.\n",
"\n",
" Returns:\n",
" float: t_in, or None if inputs are invalid.\n",
" \"\"\"\n",
" if eta is None or beta is None or t_mer is None or t_mer < 0: # t_mer can be 0 if beta <=1\n",
" return None\n",
" if eta == 0: # Avoid division by zero\n",
" print(\"Warning: eta is 0 in calculate_t_in.\")\n",
" return None\n",
"\n",
" try:\n",
" # Handle t_mer = 0 case (e.g., when beta is close to 1)\n",
" if t_mer == 0:\n",
" # If t_MER is 0, the tangent starts at the origin, so t_in would also be 0.\n",
" # This aligns with MER occurring at t=0 for beta=1.\n",
" return 0\n",
"\n",
" k = np.exp(-(t_mer / eta)**beta)\n",
" \n",
" if k == 0: # Avoid division by zero in the denominator\n",
" print(\"Warning: k is 0 in t_in calculation. Denominator would be zero.\")\n",
" # This can happen if (t_mer/eta)^beta is very large.\n",
" # If k=0, it implies F(t_MER) is 1. The tangent might be vertical or ill-defined.\n",
" # Or, if MER is very high, delta_t could be very small.\n",
" # For practical purposes, if k is extremely small, 1-k is approx 1.\n",
" # If the MER term (denominator) is also very large, t_in might approach t_MER.\n",
" return None # Or handle as a special case based on erosion curve shape.\n",
"\n",
"\n",
" mer_at_t_mer = (beta / (eta**beta)) * (t_mer**(beta - 1)) * k\n",
" if mer_at_t_mer == 0:\n",
" print(\"Warning: Calculated MER at t_MER is 0. Cannot calculate t_in (division by zero).\")\n",
" return None\n",
"\n",
" delta_t = (1 - k) / mer_at_t_mer\n",
" t_in = t_mer - delta_t\n",
" except (ZeroDivisionError, OverflowError, ValueError) as e:\n",
" print(f\"Error calculating t_in: {e}\")\n",
" return None\n",
" return t_in\n",
"\n",
"def calculate_t_threshold(eta, beta, F_threshold):\n",
" \"\"\"\n",
" Calculates Erosion Threshold Time (t_1 or similar) for a given F_threshold.\n",
" t_threshold = eta * (ln(1 / (1 - F_threshold)))^(1 / beta)\n",
"\n",
" Args:\n",
" eta (float): Scale parameter.\n",
" beta (float): Shape parameter.\n",
" F_threshold (float): Cumulative fraction failed defining the threshold (e.g., 0.01 for 1%).\n",
" Must be 0 < F_threshold < 1.\n",
"\n",
" Returns:\n",
" float: t_threshold, or None if inputs are invalid.\n",
" \"\"\"\n",
" if eta is None or beta is None:\n",
" return None\n",
" if not (0 < F_threshold < 1):\n",
" raise ValueError(\"F_threshold must be between 0 and 1 (exclusive).\")\n",
" if beta == 0: # Avoid division by zero\n",
" print(\"Warning: beta is 0 in calculate_t_threshold.\")\n",
" return None\n",
"\n",
" try:\n",
" # ln(1 / (1 - F_threshold)) is -ln(1 - F_threshold)\n",
" log_term = np.log(1 / (1 - F_threshold))\n",
" if log_term < 0 and (1/beta) % 1 != 0: # Avoid complex numbers for non-integer roots of negative numbers\n",
" print(\"Warning: log_term is negative, and 1/beta is not an integer. Result might be complex or undefined.\")\n",
" return None\n",
" t_thresh = eta * (log_term**(1 / beta))\n",
" except (ZeroDivisionError, ValueError, OverflowError) as e:\n",
" print(f\"Error calculating t_threshold: {e}\")\n",
" return None\n",
" return t_thresh\n",
"\n",
"# --- Main Example Usage ---\n",
"if __name__ == \"__main__\":\n",
" # Example Data (replace with your actual experimental data)\n",
" # times_h: time in hours\n",
" # mass_loss_mg: cumulative mass loss in mg\n",
" times_h = np.array([0, 0.5, 1, 1.5, 2, 2.5, 3, 4, 5, 6, 7, 8, 10, 12, 15, 20])\n",
" mass_loss_mg = np.array([0, 0.1, 0.3, 0.7, 1.2, 1.9, 2.8, 4.5, 6.5, 8.8, 11.0, 13.5, 18.0, 22.0, 27.0, 33.0])\n",
" \n",
" # If you have MDE data and want to use a specific MDE for threshold (e.g., 1 um MDE)\n",
" # You would first convert that MDE_threshold to ML_threshold using density and area,\n",
" # then ML_threshold to F_threshold.\n",
" # For this example, let's define a threshold as 1% of final mass loss.\n",
" F_threshold_for_t1 = 0.01 # Corresponds to 1% of ML_final\n",
"\n",
" print(\"--- Weibull Analysis Started ---\")\n",
"\n",
" # Step 1: Prepare Data\n",
" print(\"\\nStep 1: Preparing Data...\")\n",
" filtered_times, F_t, ml_final_actual = prepare_data(times_h, mass_loss_mg)\n",
" if ml_final_actual == 0 or len(filtered_times) == 0:\n",
" print(\"Exiting due to data preparation issues.\")\n",
" else:\n",
" print(f\"ML_final used for normalization: {ml_final_actual:.2f} mg\")\n",
" print(f\"Number of data points for Weibull plot: {len(filtered_times)}\")\n",
"\n",
" # Step 2: Transform Data and Estimate Weibull Parameters\n",
" print(\"\\nStep 2: Transforming Data and Estimating Parameters...\")\n",
" X_wb, Y_wb = transform_for_weibull_plot(filtered_times, F_t)\n",
" \n",
" # For bi-modal, you would visually inspect the plot of Y_wb vs X_wb\n",
" # and split X_wb, Y_wb into segments for separate regressions.\n",
" # This example assumes a single mode for simplicity.\n",
" beta_est, eta_est, r2_est = estimate_weibull_parameters(X_wb, Y_wb)\n",
"\n",
" if beta_est is not None and eta_est is not None:\n",
" print(f\"Estimated Beta (shape parameter): {beta_est:.3f}\")\n",
" print(f\"Estimated Eta (scale parameter/characteristic time): {eta_est:.3f} h\")\n",
" print(f\"R-squared for the fit: {r2_est:.4f}\")\n",
"\n",
" # Step 3: Calculate Key Erosion Parameters\n",
" print(\"\\nStep 3: Calculating Key Erosion Parameters...\")\n",
" \n",
" # t_i (Incubation Time)\n",
" # As per theory, Weibull model predicts t_i -> 0 as F(t) -> 0.\n",
" # The practical incubation time is when mass loss is below detection.\n",
" # We can calculate time to a very small F(t), e.g., F(t) = 0.001\n",
" F_very_small = 0.0001 \n",
" t_practical_incubation = calculate_t_threshold(eta_est, beta_est, F_very_small)\n",
" if t_practical_incubation is not None:\n",
" print(f\"Time to reach F(t)={F_very_small*100}% (proxy for practical incubation): {t_practical_incubation:.3f} h\")\n",
"\n",
"\n",
" # t_MER (Time at Maximum Erosion Rate)\n",
" t_mer_calc = calculate_t_mer(eta_est, beta_est)\n",
" if t_mer_calc is not None:\n",
" print(f\"Calculated t_MER: {t_mer_calc:.3f} h\")\n",
"\n",
" # t_in (Nominal Incubation Time)\n",
" t_in_calc = calculate_t_in(eta_est, beta_est, t_mer_calc)\n",
" if t_in_calc is not None:\n",
" print(f\"Calculated t_in (Nominal Incubation Time): {t_in_calc:.3f} h\")\n",
" else:\n",
" print(\"Could not calculate t_in.\")\n",
" else:\n",
" print(\"Could not calculate t_MER (and thus t_in).\")\n",
"\n",
" # t_1 (Erosion Threshold Time for F_threshold_for_t1)\n",
" t1_calc = calculate_t_threshold(eta_est, beta_est, F_threshold_for_t1)\n",
" if t1_calc is not None:\n",
" print(f\"Calculated t_threshold (for F(t)={F_threshold_for_t1*100}%): {t1_calc:.3f} h\")\n",
" else:\n",
" print(f\"Could not calculate t_threshold for F(t)={F_threshold_for_t1*100}%.\")\n",
"\n",
" else:\n",
" print(\"Weibull parameter estimation failed.\")\n",
" \n",
" print(\"\\n--- Weibull Analysis Finished ---\")\n",
"\n",
" # For visualization (optional, requires matplotlib)\n",
" import matplotlib.pyplot as plt\n",
" if beta_est is not None and eta_est is not None and len(X_wb)>0:\n",
" plt.figure(figsize=(10, 6))\n",
" plt.scatter(X_wb, Y_wb, label='Transformed Data Points', color='blue')\n",
" Y_fit = beta_est * X_wb - beta_est * np.log(eta_est)\n",
" plt.plot(X_wb, Y_fit, label=f'Weibull Fit (beta={beta_est:.2f}, eta={eta_est:.2f}h)\\nR²={r2_est:.3f}', color='red')\n",
" plt.xlabel('ln(t)')\n",
" plt.ylabel('ln(ln(1/(1-F(t))))')\n",
" plt.title('Weibull Plot')\n",
" plt.legend()\n",
" plt.grid(True)\n",
" plt.show()\n",
"\n",
" plt.figure(figsize=(10, 6))\n",
" plt.scatter(times_h, mass_loss_mg, label='Original Data', color='black', marker='o')\n",
" # Plot the fitted Weibull curve on original scale\n",
" t_plot = np.linspace(min(filtered_times) if len(filtered_times)>0 else 0.1, max(times_h) if len(times_h)>0 else 1, 100)\n",
" F_t_fitted = 1 - np.exp(-(t_plot / eta_est)**beta_est)\n",
" ML_fitted = F_t_fitted * ml_final_actual\n",
" plt.plot(t_plot, ML_fitted, label='Fitted Weibull Curve', color='red')\n",
" plt.xlabel('Time (h)')\n",
" plt.ylabel('Cumulative Mass Loss (mg)')\n",
" plt.title('Cumulative Mass Loss vs. Time with Weibull Fit')\n",
" plt.legend()\n",
" plt.grid(True)\n",
" plt.show()\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "033ed615-4806-48b1-b3d3-29fe13c6afbe",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 22,
"id": "29b0ef12-6092-464a-9348-25e1f615fbc6",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"--- Cavitation Erosion Model Calculations (Numpy-only) ---\n",
"\n",
"--- Predictive Model Examples (with dummy parameters) ---\n",
"Parameters: I=0.5, A=10.0, h=0.1, V0=1.0, H=1.0\n",
"Kc=100.0, W_pl=2.0, V_initial=10.0\n",
"\n",
"1. Probability of Elementary Volume Loss P(V0) at t=60.0: 0.3211\n",
"2. Probability of Arbitrary Volume Loss P(V) at t=60.0: 0.0000\n",
"3. Volume Loss V(t) at t=60.0: 0.0001 mm^3\n",
"4. Volume Loss Rate dV/dt at t=60.0: 7.9536e-06 mm^3/min\n",
"\n",
"--- Evaluation Factor Examples ---\n",
"\n",
"5. Cavitation Resistance Factor (R) with dummy data:\n",
" t_inc = 50.0 min\n",
" v_max = 0.2 mm^3/min\n",
" t_v_max = 120.0 min\n",
" Calculated R = 850.00 min^2/mm^3\n",
"\n",
"6. Mean Durability (delta_cav) with dummy rate data:\n",
" Calculated delta_cav = 508.10 min/mm^3 (approx)\n",
"\n",
"7. Mean Durability (delta_cav) with some zero rates in data:\n",
" Calculated delta_cav (with zeros) = 4.74 min/mm^3 (approx)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/tmp/ipykernel_528332/2247045026.py:318: DeprecationWarning: `trapz` is deprecated. Use `trapezoid` instead, or one of the numerical integration functions in `scipy.integrate`.\n",
" integral_val = np.trapz(inverse_rates[valid_indices], time_points[valid_indices])\n"
]
}
],
"source": [
"import numpy as np # For numerical integration, array operations, and math functions\n",
"\n",
"# --- Helper functions (if needed, e.g., for clarity or repeated calculations) ---\n",
"def _exponent_term(I, A, h, t, Kc, W_pl):\n",
" \"\"\"\n",
" Calculates the common exponential term found in several equations.\n",
" IAh(t/Kc)^(1/W_pl)\n",
" \"\"\"\n",
" if Kc == 0 or W_pl == 0: # Avoid division by zero\n",
" return np.inf if I > 0 and A > 0 and h > 0 and t > 0 else 0.0\n",
" if t < 0: # Time cannot be negative\n",
" return 0.0 # Or raise an error\n",
" \n",
" # Ensure base is not negative if power is fractional to avoid complex numbers\n",
" # or handle as per model's physical assumptions.\n",
" # Assuming t and Kc are positive in physical scenarios.\n",
" if Kc <= 0: # Kc must be positive\n",
" print(f\"Warning: Kc must be positive. Kc={Kc}. Returning 0 for exponent term part.\")\n",
" return 0.0\n",
"\n",
" base = t / Kc\n",
" \n",
" # Handle base < 0 for fractional powers if it can occur and needs specific handling\n",
" # For this model, t and Kc are typically positive, so base >= 0.\n",
" # If t=0, base = 0. (0)**positive_power = 0. (0)**0 is 1. (0)**negative_power is inf.\n",
" # Power is 1/W_pl. W_pl is typically > 0.\n",
"\n",
" if base == 0:\n",
" if (1 / W_pl) == 0: power_val = 1.0 # 0**0 case\n",
" elif (1 / W_pl) < 0: power_val = np.inf # 0**negative case\n",
" else: power_val = 0.0 # 0**positive case\n",
" elif base < 0 and (1/W_pl) % 1 != 0:\n",
" print(f\"Warning: Potential complex number with base {base} and exponent {1/W_pl}. Returning 0 for exponent term part.\")\n",
" return 0.0\n",
" else:\n",
" try:\n",
" power_val = base**(1 / W_pl)\n",
" except ValueError: # Handles cases like (-ve)**fraction more explicitly if any slip through\n",
" print(f\"Warning: ValueError during power calculation with base {base} and exponent {1/W_pl}. Returning 0 for exponent term part.\")\n",
" return 0.0\n",
" except ZeroDivisionError: # Should be caught by W_pl == 0 earlier\n",
" print(f\"Warning: ZeroDivisionError during power calculation for W_pl={W_pl}. Returning inf for exponent term part.\")\n",
" return np.inf # Or handle appropriately\n",
"\n",
" return I * A * h * power_val\n",
"\n",
"# --- Equation 1: Cumulative Volume Loss Probability for Elementary Volume (P(V0)) ---\n",
"def prob_elementary_volume_loss(I, V0, t, Kc, W_pl):\n",
" \"\"\"\n",
" Calculates the cumulative volume loss probability for an elementary volume V0.\n",
" P(V0) = 1 - exp[-I*V0*(t/Kc)^(1/W_pl)]\n",
"\n",
" Args:\n",
" I (float): Relative intensity of cavitation.\n",
" V0 (float): Elementary volume (e.g., A*h).\n",
" t (float): Time.\n",
" Kc (float): Relative stress intensity factor (impact toughness).\n",
" W_pl (float): Relative work of plastic deformation.\n",
" (Resistance to plastic deformation is 1/W_pl).\n",
"\n",
" Returns:\n",
" float: Probability P(V0).\n",
" \"\"\"\n",
" if Kc <= 0 or W_pl <= 0: # Kc and W_pl should be positive\n",
" # If t > 0, I > 0, V0 > 0, this situation implies infinite erosion or undefined.\n",
" # Let's assume P(V0) = 1 (max probability) if erosion is expected.\n",
" # Or 0 if no erosion (e.g. t=0).\n",
" if I > 0 and V0 > 0 and t > 0:\n",
" # print(f\"Warning: Non-positive Kc ({Kc}) or W_pl ({W_pl}). Returning max probability 1.0 for P(V0).\")\n",
" return 1.0\n",
" else:\n",
" return 0.0\n",
" if t < 0:\n",
" return 0.0 # No loss for negative time\n",
"\n",
" base_t_Kc = t / Kc\n",
" power_val = 0.0 # Default\n",
"\n",
" if base_t_Kc == 0:\n",
" if (1 / W_pl) == 0: power_val = 1.0\n",
" elif (1 / W_pl) < 0: power_val = np.inf\n",
" else: power_val = 0.0\n",
" elif base_t_Kc < 0 and (1/W_pl) % 1 != 0: \n",
" print(f\"Warning: Potential complex number in P(V0) with base {base_t_Kc} and exponent {1/W_pl}. Returning 0 for power_val.\")\n",
" power_val = 0.0\n",
" else:\n",
" try:\n",
" power_val = base_t_Kc**(1 / W_pl)\n",
" except ValueError:\n",
" print(f\"Warning: ValueError during power calculation in P(V0) with base {base_t_Kc} and exponent {1/W_pl}. Returning 0 for power_val.\")\n",
" power_val = 0.0\n",
" # ZeroDivisionError for W_pl should be caught by initial W_pl <= 0 check\n",
"\n",
" exponent_val = -I * V0 * power_val \n",
" # exponent_val is typically negative or zero. np.exp handles large negative values correctly (-> 0.0)\n",
" return 1 - np.exp(exponent_val)\n",
"\n",
"\n",
"# --- Equation 6: Cumulative Volume Loss Probability for Arbitrary Eroded Volume (P(V)) ---\n",
"def prob_arbitrary_volume_loss(H, h, I, A, t, Kc, W_pl):\n",
" \"\"\"\n",
" Calculates the cumulative volume loss probability for an arbitrary eroded volume V.\n",
" P(V) = exp{(H/h) * ln[1 - exp(-IAh*(t/Kc)^(1/W_pl))]}\n",
" This is P(V) from Eq. 6.\n",
"\n",
" Args:\n",
" H (float): Height of the sample.\n",
" h (float): Depth of strain hardening or max crack length.\n",
" I (float): Relative intensity of cavitation.\n",
" A (float): Surface area of erosion.\n",
" t (float): Time.\n",
" Kc (float): Relative stress intensity factor.\n",
" W_pl (float): Relative work of plastic deformation.\n",
"\n",
" Returns:\n",
" float: Probability P(V).\n",
" \"\"\"\n",
" if h == 0: # Avoid division by zero for H/h\n",
" return 0.0 # Or handle as an error indicating invalid input\n",
" if Kc <= 0 or W_pl <= 0: # Safeguard, though _exponent_term might also handle Kc\n",
" if I > 0 and A > 0 and t > 0: # Conditions for erosion\n",
" # This implies P(V) would be 1 (total loss probability) or undefined.\n",
" # For simplicity, let's assume it leads to maximum probability if erosion occurs.\n",
" # print(f\"Warning: Non-positive Kc ({Kc}) or W_pl ({W_pl}). Returning max probability 1.0 for P(V).\")\n",
" return 1.0\n",
" else:\n",
" return 0.0\n",
"\n",
"\n",
" # Calculate the term: IAh*(t/Kc)^(1/W_pl)\n",
" exp_term_val = _exponent_term(I, A, h, t, Kc, W_pl)\n",
"\n",
" # inner_exp = np.exp(-exp_term_val)\n",
" # -exp_term_val is typically negative or zero.\n",
" inner_exp = np.exp(-exp_term_val) # Handles large negative arg by returning 0.0\n",
"\n",
" term_in_ln = 1 - inner_exp\n",
"\n",
" ln_val = 0.0\n",
" if term_in_ln == 0:\n",
" # log(0) is -inf. (H/h) * (-inf) is -inf (if H/h > 0). exp(-inf) is 0.\n",
" return 0.0\n",
" elif term_in_ln < 0:\n",
" # Log of a negative number is undefined in real numbers (or complex).\n",
" # Previous code returned 0.0 and printed a warning.\n",
" print(f\"Warning: Logarithm of non-positive value ({term_in_ln}) in P(V). Returning 0.\")\n",
" return 0.0\n",
" else:\n",
" ln_val = np.log(term_in_ln)\n",
"\n",
" final_exponent = (H / h) * ln_val\n",
" # np.exp handles large positive (-> np.inf) and large negative (-> 0.0) exponents.\n",
" return np.exp(final_exponent)\n",
"\n",
"\n",
"# --- Equation 7: Volume Loss of Material (V(t)) ---\n",
"def volume_loss_over_time(V_initial_sample, H, h, I, A, t, Kc, W_pl):\n",
" \"\"\"\n",
" Calculates the volume loss of material as a function of time.\n",
" V(t) = V_initial_sample * P(V)\n",
" where P(V) is from prob_arbitrary_volume_loss (Eq. 6)\n",
"\n",
" Args:\n",
" V_initial_sample (float): Initial total volume of the material sample.\n",
" H (float): Height of the sample.\n",
" h (float): Depth of strain hardening.\n",
" I (float): Relative intensity of cavitation.\n",
" A (float): Surface area of erosion.\n",
" t (float or np.ndarray): Time or array of time points.\n",
" Kc (float): Relative stress intensity factor.\n",
" W_pl (float): Relative work of plastic deformation.\n",
"\n",
" Returns:\n",
" float or np.ndarray: Volume loss V(t).\n",
" \"\"\"\n",
" if isinstance(t, (list, np.ndarray)):\n",
" # Ensure internal calculations can handle arrays if t is an array,\n",
" # or use list comprehension as done here.\n",
" return np.array([V_initial_sample * prob_arbitrary_volume_loss(H, h, I, A, ti, Kc, W_pl) for ti in t])\n",
" else:\n",
" return V_initial_sample * prob_arbitrary_volume_loss(H, h, I, A, t, Kc, W_pl)\n",
"\n",
"# --- Equation 8: Volume Loss Rate of Erosion (dV/dt) ---\n",
"def volume_loss_rate(V_t, V_initial_sample, I, t, W_pl, Kc, A, h):\n",
" \"\"\"\n",
" Calculates the volume loss rate of erosion.\n",
" dV/dt = V(t) * { V_initial_sample * I * t^((1-W_pl)/W_pl) * exp[-IAh(t/Kc)^(1/W_pl)] } /\n",
" { W_pl * (Kc)^(1/W_pl) * (1 - exp[-IAh(t/Kc)^(1/W_pl)]) }\n",
"\n",
" Args:\n",
" V_t (float): Volume loss at time t (V(t) from previous function).\n",
" V_initial_sample (float): Initial total volume of the material sample.\n",
" I (float): Relative intensity of cavitation.\n",
" t (float): Time.\n",
" W_pl (float): Relative work of plastic deformation.\n",
" Kc (float): Relative stress intensity factor.\n",
" A (float): Surface area of erosion.\n",
" h (float): Depth of strain hardening.\n",
"\n",
" Returns:\n",
" float: Volume loss rate dV/dt.\n",
" \"\"\"\n",
" if W_pl <= 0 or Kc <= 0 or t < 0: # W_pl and Kc must be positive\n",
" return 0.0\n",
" if t == 0: # At t=0, rate should be 0\n",
" return 0.0\n",
"\n",
" # Term: IAh(t/Kc)^(1/W_pl)\n",
" exp_arg_val = _exponent_term(I, A, h, t, Kc, W_pl)\n",
"\n",
" # Numerator part: V_initial_sample * I * t^((1-W_pl)/W_pl) * exp[-exp_arg_val]\n",
" # Power for t: (1-W_pl)/W_pl\n",
" t_exponent = (1 - W_pl) / W_pl\n",
" t_power_val = 0.0\n",
" if t == 0: # Should be caught by t=0 check above, but for safety\n",
" if t_exponent == 0: t_power_val = 1.0\n",
" elif t_exponent < 0: t_power_val = np.inf\n",
" else: t_power_val = 0.0\n",
" else:\n",
" try:\n",
" t_power_val = t**(t_exponent)\n",
" except ValueError: \n",
" print(f\"Warning: ValueError for t_power_val in dV/dt. t={t}, W_pl={W_pl}\")\n",
" return 0.0 \n",
" except ZeroDivisionError: # Should not happen if W_pl > 0\n",
" print(f\"Warning: ZeroDivisionError for t_power_val in dV/dt. t={t}, W_pl={W_pl}\")\n",
" return 0.0 \n",
"\n",
" numerator_exp_term = np.exp(-exp_arg_val) # Handles large negative exp_arg_val\n",
"\n",
" numerator = V_initial_sample * I * t_power_val * numerator_exp_term\n",
"\n",
" # Denominator part: W_pl * (Kc)^(1/W_pl) * (1 - exp[-exp_arg_val])\n",
" Kc_power_val = 0.0\n",
" # Power for Kc: 1/W_pl\n",
" kc_exponent = 1 / W_pl\n",
" if Kc == 0: # Should be caught by Kc <=0 check\n",
" if kc_exponent == 0: Kc_power_val = 1.0\n",
" elif kc_exponent < 0: Kc_power_val = np.inf\n",
" else: Kc_power_val = 0.0\n",
" else:\n",
" try:\n",
" Kc_power_val = Kc**(kc_exponent)\n",
" except ValueError:\n",
" print(f\"Warning: ValueError for Kc_power_val in dV/dt. Kc={Kc}, W_pl={W_pl}\")\n",
" return 0.0\n",
" # ZeroDivisionError for W_pl handled by W_pl <= 0 check\n",
"\n",
" denominator_exp_term = numerator_exp_term # Same as np.exp(-exp_arg_val)\n",
" denominator_bracket = 1 - denominator_exp_term\n",
"\n",
" if denominator_bracket == 0:\n",
" # This implies exp_arg_val is 0 (e.g. t=0, or I,A,h=0), making exp(-exp_arg_val)=1.\n",
" # If t=0, already handled. If I,A,h=0, exp_arg_val=0, numerator_exp_term=1.\n",
" # If I,A,h=0, numerator might also be 0.\n",
" # This path needs careful thought if reached for t > 0.\n",
" # It suggests no decay in the probability term, which is unusual.\n",
" print(f\"Warning: Denominator bracket is zero in dV/dt for t={t}. exp_arg_val={exp_arg_val}\")\n",
" return np.nan # Indicates an issue, or could be very large if numerator is non-zero\n",
"\n",
" denominator = W_pl * Kc_power_val * denominator_bracket\n",
"\n",
" if denominator == 0:\n",
" print(f\"Warning: Division by zero in dV/dt for t={t}. Numerator={numerator}, DenomPart1={W_pl * Kc_power_val}, DenomBracket={denominator_bracket}\")\n",
" return np.nan \n",
"\n",
" return V_t * (numerator / denominator)\n",
"\n",
"\n",
"# --- Equation 9: Mean Durability (delta_cav) ---\n",
"def mean_durability(time_points, volume_loss_rate_points):\n",
" \"\"\"\n",
" Calculates the mean durability using numerical integration (trapezoidal rule).\n",
" delta_cav = (1/T) * integral from 0 to T of (1 / (d(DeltaV)/dt)) dt\n",
"\n",
" Args:\n",
" time_points (np.ndarray): Array of time points for the test.\n",
" volume_loss_rate_points (np.ndarray): Array of volume loss rates\n",
" corresponding to time_points.\n",
"\n",
" Returns:\n",
" float: Mean durability delta_cav.\n",
" \"\"\"\n",
" if not isinstance(time_points, np.ndarray): time_points = np.array(time_points)\n",
" if not isinstance(volume_loss_rate_points, np.ndarray): volume_loss_rate_points = np.array(volume_loss_rate_points)\n",
"\n",
" if len(time_points) != len(volume_loss_rate_points) or len(time_points) < 2:\n",
" raise ValueError(\"time_points and volume_loss_rate_points must have the same length >= 2.\")\n",
"\n",
" T = time_points[-1] - time_points[0] # Total exposition period\n",
" if T == 0:\n",
" return 0.0\n",
"\n",
" inverse_rates = np.zeros_like(volume_loss_rate_points, dtype=float)\n",
" non_zero_mask = volume_loss_rate_points != 0\n",
" \n",
" # Calculate 1/rate for non-zero rates\n",
" inverse_rates[non_zero_mask] = 1.0 / volume_loss_rate_points[non_zero_mask]\n",
" \n",
" # Handle cases where rate was zero: 1/0 results in np.inf\n",
" # np.trapz can handle np.inf, but if all are inf, result is inf.\n",
" # If some are np.inf due to actual zero rates, this means infinite resistance at those points.\n",
" # The integral might still be meaningful.\n",
" # If np.trapz is given NaNs, it might ignore them or propagate.\n",
" # We'll replace np.inf with np.nan if trapz is better with NaNs, or let it handle inf.\n",
" # The original code set np.isinf(inverse_rates) to np.nan.\n",
" inverse_rates[np.isinf(inverse_rates)] = np.nan\n",
"\n",
" # Numerical integration using trapezoidal rule\n",
" # np.trapz(y, x)\n",
" # Need to handle NaNs if they are present.\n",
" # A simple way is to filter out NaNs along with their corresponding time points.\n",
" valid_indices = ~np.isnan(inverse_rates)\n",
" if np.sum(valid_indices) < 2: # Not enough points to integrate\n",
" print(\"Warning: Not enough valid (non-NaN) points for integration in mean_durability.\")\n",
" return np.nan\n",
" \n",
" integral_val = np.trapz(inverse_rates[valid_indices], time_points[valid_indices])\n",
"\n",
" if np.isnan(integral_val): # Should be less likely after filtering\n",
" print(\"Warning: NaN result from integration in mean_durability. Check for extensive zero rates.\")\n",
" return np.nan\n",
"\n",
" return (1 / T) * integral_val\n",
"\n",
"# --- Equation 10: Cavitation Erosion Resistance Factor (R) ---\n",
"def cavitation_resistance_factor(t_inc, t_v_max, v_max):\n",
" \"\"\"\n",
" Calculates the Cavitation Erosion Resistance Factor (R).\n",
" R = (t_inc + t_v_max) / v_max\n",
"\n",
" Args:\n",
" t_inc (float): Incubation time.\n",
" t_v_max (float): Time after which v_max (max volume loss rate) occurs.\n",
" v_max (float): Maximum volume loss rate.\n",
"\n",
" Returns:\n",
" float: Cavitation resistance factor R. Returns NaN if v_max is zero.\n",
" \"\"\"\n",
" if v_max == 0:\n",
" print(\"Warning: v_max is zero, R factor is undefined (division by zero).\")\n",
" return np.nan\n",
" return (t_inc + t_v_max) / v_max\n",
"\n",
"# --- Example Usage ---\n",
"if __name__ == \"__main__\":\n",
" print(\"--- Cavitation Erosion Model Calculations (Numpy-only) ---\")\n",
"\n",
" # Dummy parameters for predictive models (illustrative)\n",
" I_param = 0.5 # Relative intensity of cavitation\n",
" A_param = 10.0 # Surface area (e.g., mm^2)\n",
" h_param = 0.1 # Depth of strain hardening (e.g., mm)\n",
" V0_param = A_param * h_param # Elementary volume\n",
" H_param = 1.0 # Height of sample (e.g., mm)\n",
" V_initial = A_param * H_param # Initial volume of sample (e.g., mm^3)\n",
"\n",
" Kc_param = 100.0 # Relative stress intensity factor\n",
" W_pl_param = 2.0 # Relative work of plastic deformation\n",
" time_val = 60.0 # Time (e.g., minutes)\n",
"\n",
" print(f\"\\n--- Predictive Model Examples (with dummy parameters) ---\")\n",
" print(f\"Parameters: I={I_param}, A={A_param}, h={h_param}, V0={V0_param}, H={H_param}\")\n",
" print(f\"Kc={Kc_param}, W_pl={W_pl_param}, V_initial={V_initial}\")\n",
"\n",
" # Eq 1: P(V0)\n",
" prob_elem = prob_elementary_volume_loss(I_param, V0_param, time_val, Kc_param, W_pl_param)\n",
" print(f\"\\n1. Probability of Elementary Volume Loss P(V0) at t={time_val}: {prob_elem:.4f}\")\n",
"\n",
" # Eq 6: P(V)\n",
" prob_arb = prob_arbitrary_volume_loss(H_param, h_param, I_param, A_param, time_val, Kc_param, W_pl_param)\n",
" print(f\"2. Probability of Arbitrary Volume Loss P(V) at t={time_val}: {prob_arb:.4f}\")\n",
"\n",
" # Eq 7: V(t)\n",
" vol_loss = volume_loss_over_time(V_initial, H_param, h_param, I_param, A_param, time_val, Kc_param, W_pl_param)\n",
" print(f\"3. Volume Loss V(t) at t={time_val}: {vol_loss:.4f} mm^3\")\n",
"\n",
" # Eq 8: dV/dt\n",
" current_vol_loss_for_rate = volume_loss_over_time(V_initial, H_param, h_param, I_param, A_param, time_val, Kc_param, W_pl_param)\n",
" rate_loss = volume_loss_rate(current_vol_loss_for_rate, V_initial, I_param, time_val, W_pl_param, Kc_param, A_param, h_param)\n",
" print(f\"4. Volume Loss Rate dV/dt at t={time_val}: {rate_loss:.4e} mm^3/min\")\n",
"\n",
" # Example for generating a curve with V(t)\n",
" time_array = np.linspace(0.1, 200, 100) # Start from a small positive time to avoid t=0 issues in rate for plotting\n",
" volume_loss_curve = volume_loss_over_time(V_initial, H_param, h_param, I_param, A_param, time_array, Kc_param, W_pl_param)\n",
" \n",
" # Calculate rate curve (example)\n",
" # rate_curve = np.zeros_like(time_array)\n",
" # for i, t_point in enumerate(time_array):\n",
" # if t_point == 0: # volume_loss_rate handles t=0\n",
" # rate_curve[i] = 0.0\n",
" # continue\n",
" # v_at_t = volume_loss_curve[i] # V(t)\n",
" # rate_curve[i] = volume_loss_rate(v_at_t, V_initial, I_param, t_point, W_pl_param, Kc_param, A_param, h_param)\n",
" # (Plotting would require matplotlib)\n",
" # import matplotlib.pyplot as plt\n",
" # fig, ax1 = plt.subplots()\n",
" # color = 'tab:red'\n",
" # ax1.set_xlabel('Time (min)')\n",
" # ax1.set_ylabel('Volume Loss (mm^3)', color=color)\n",
" # ax1.plot(time_array, volume_loss_curve, color=color)\n",
" # ax1.tick_params(axis='y', labelcolor=color)\n",
" # ax2 = ax1.twinx()\n",
" # color = 'tab:blue'\n",
" # ax2.set_ylabel('Volume Loss Rate (mm^3/min)', color=color)\n",
" # ax2.plot(time_array, rate_curve, color=color)\n",
" # ax2.tick_params(axis='y', labelcolor=color)\n",
" # fig.tight_layout()\n",
" # plt.title('Predicted Cavitation Erosion')\n",
" # plt.show()\n",
"\n",
"\n",
" print(f\"\\n--- Evaluation Factor Examples ---\")\n",
" # Dummy data for R factor (as from your previous example)\n",
" t_inc_dummy = 50.0 # minutes\n",
" v_max_dummy = 0.2 # mm^3/minute\n",
" t_v_max_dummy = 120.0 # minutes\n",
"\n",
" # Eq 10: R Factor\n",
" r_factor = cavitation_resistance_factor(t_inc_dummy, t_v_max_dummy, v_max_dummy)\n",
" print(f\"\\n5. Cavitation Resistance Factor (R) with dummy data:\")\n",
" print(f\" t_inc = {t_inc_dummy} min\")\n",
" print(f\" v_max = {v_max_dummy} mm^3/min\")\n",
" print(f\" t_v_max = {t_v_max_dummy} min\")\n",
" print(f\" Calculated R = {r_factor:.2f} min^2/mm^3\")\n",
"\n",
" # Dummy data for Mean Durability\n",
" example_time_points = np.array([0, 20, 40, 60, 80, 100, 120, 140, 160, 180, 200])\n",
" example_rates = np.array([0.0001, 0.05, 0.12, 0.18, 0.19, 0.2, 0.18, 0.15, 0.12, 0.10, 0.08]) # Avoid true zero for stable inverse\n",
"\n",
" # Eq 9: Mean Durability\n",
" try:\n",
" mean_dur = mean_durability(example_time_points, example_rates)\n",
" print(f\"\\n6. Mean Durability (delta_cav) with dummy rate data:\")\n",
" print(f\" Calculated delta_cav = {mean_dur:.2f} min/mm^3 (approx)\")\n",
" except ValueError as e:\n",
" print(f\"\\nError calculating mean durability: {e}\")\n",
" \n",
" example_rates_with_actual_zeros = np.array([0.0, 0.0, 0.12, 0.18, 0.0, 0.2, 0.18, 0.15, 0.0, 0.10, 0.08])\n",
" try:\n",
" mean_dur_zero = mean_durability(example_time_points, example_rates_with_actual_zeros)\n",
" print(f\"\\n7. Mean Durability (delta_cav) with some zero rates in data:\")\n",
" print(f\" Calculated delta_cav (with zeros) = {mean_dur_zero:.2f} min/mm^3 (approx)\")\n",
" except Exception as e:\n",
" print(f\"\\nError calculating mean durability with zeros: {e}\")\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "53fce0c5-84e3-4646-88a8-f904f7987e61",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.16"
}
},
"nbformat": 4,
"nbformat_minor": 5
}