You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

505 lines
91 KiB

  1. {
  2. "cells": [
  3. {
  4. "cell_type": "markdown",
  5. "metadata": {},
  6. "source": [
  7. "# Joule heating model\n",
  8. "The thoretical information comes from [here](https://reference.wolfram.com/language/PDEModels/tutorial/Multiphysics/ModelCollection/JouleHeating.html). \n",
  9. "\n",
  10. "## Electroestatic model\n",
  11. "In this model the electric potential field $V(x,y,z)$ is assumed to be independent of the temperature $T$. That is, the electrical conductivity $G$ is kept at a constant value at all time. By Guass's law the stationary potential field satisfies Poisson's equation:\n",
  12. "\n",
  13. "$$\\nabla \\cdot (-G \\cdot \\nabla V)=0$$\n",
  14. "\n",
  15. "## Heat transfer model\n",
  16. "The heat equation is used to solve for the temperature field in a heat transfer model:\n",
  17. "\n",
  18. "$$\\rho C_p \\frac{dT}{dt}+\\rho C_p v\\cdot \\nabla T + \\nabla \\cdot(-k \\nabla T) = Q$$\n",
  19. " \n",
  20. "For a steady-state heat transfer model the transient term in the equation are set to zero. Since a solid is modeled, the internal velocity also vanishes and the heat equation simplifies to:\n",
  21. "\n",
  22. "$$ \\nabla \\cdot(-k \\nabla T) = Q $$\n",
  23. "\n"
  24. ]
  25. },
  26. {
  27. "cell_type": "markdown",
  28. "metadata": {},
  29. "source": [
  30. "# Solving the PDE Model\n",
  31. "In order to solve the PDE model, first the electroestatic model will be solved first to simulate/obtain the potential field $V$ of the wire. The heat transfer model is then constructed to show the heating effect of the electric current.\n",
  32. "\n",
  33. "## The electroestatic model\n",
  34. "There are two types of the boundary conditions involved in the electrostatics model. At both ends of the wire an electric potential difference $V_0=0.2$ is applied.\n",
  35. "\n",
  36. "\n"
  37. ]
  38. },
  39. {
  40. "cell_type": "code",
  41. "execution_count": 2,
  42. "metadata": {},
  43. "outputs": [],
  44. "source": [
  45. "from fenics import *"
  46. ]
  47. },
  48. {
  49. "cell_type": "code",
  50. "execution_count": 4,
  51. "metadata": {},
  52. "outputs": [
  53. {
  54. "data": {
  55. "text/plain": [
  56. "[<matplotlib.lines.Line2D at 0x7f89569e9160>,\n",
  57. " <matplotlib.lines.Line2D at 0x7f89569e92e8>]"
  58. ]
  59. },
  60. "execution_count": 4,
  61. "metadata": {},
  62. "output_type": "execute_result"
  63. },
  64. {
  65. "data": {
  66. "image/png": "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
  67. "text/plain": [
  68. "<Figure size 432x288 with 1 Axes>"
  69. ]
  70. },
  71. "metadata": {
  72. "needs_background": "light"
  73. },
  74. "output_type": "display_data"
  75. }
  76. ],
  77. "source": [
  78. "#Creating mesh and define function space\n",
  79. "Nx = 0.013\n",
  80. "Ny = 0.0015\n",
  81. "eleX = 10\n",
  82. "eleY = 5\n",
  83. "mesh = RectangleMesh(Point(0,0),Point(Nx,Ny),eleX, eleY,'left')\n",
  84. "V = FunctionSpace(mesh, 'P', 1)\n",
  85. "plot(mesh)"
  86. ]
  87. },
  88. {
  89. "cell_type": "code",
  90. "execution_count": 6,
  91. "metadata": {},
  92. "outputs": [],
  93. "source": [
  94. "#Boundary conditions\n",
  95. "tol = 1E-14 # tolerance for coordinate comparisons\n",
  96. "#at y=1\n",
  97. "def Dirichlet_boundary1(x, on_boundary):\n",
  98. " return on_boundary and abs(x[1] - Ny) < tol\n",
  99. "#at y=0\n",
  100. "def Dirichlet_boundary0(x, on_boundary):\n",
  101. " return on_boundary and abs(x[1] - 0) < tol\n",
  102. "#at x=0\n",
  103. "def Dirichlet_boundarx0(x, on_boundary):\n",
  104. " return on_boundary and abs(x[0] - 0) < tol\n",
  105. "#at x=20\n",
  106. "def Dirichlet_boundarx1(x, on_boundary):\n",
  107. " return on_boundary and abs(x[0] - Nx) < tol\n",
  108. "\n",
  109. "#bc0 = DirichletBC(V, Constant(0), Dirichlet_boundary0)\n",
  110. "#bc1 = DirichletBC(V, Constant(0), Dirichlet_boundary1) \n",
  111. "bc2 = DirichletBC(V, Constant(0), Dirichlet_boundarx0)\n",
  112. "bc3 = DirichletBC(V, Constant(0.003), Dirichlet_boundarx1)\n",
  113. "bcs = [bc2,bc3]"
  114. ]
  115. },
  116. {
  117. "cell_type": "code",
  118. "execution_count": 7,
  119. "metadata": {},
  120. "outputs": [
  121. {
  122. "data": {
  123. "text/plain": [
  124. "[<matplotlib.lines.Line2D at 0x7f8956953eb8>,\n",
  125. " <matplotlib.lines.Line2D at 0x7f8955f23278>]"
  126. ]
  127. },
  128. "execution_count": 7,
  129. "metadata": {},
  130. "output_type": "execute_result"
  131. },
  132. {
  133. "data": {
  134. "image/png": "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
  135. "text/plain": [
  136. "<Figure size 432x288 with 1 Axes>"
  137. ]
  138. },
  139. "metadata": {
  140. "needs_background": "light"
  141. },
  142. "output_type": "display_data"
  143. }
  144. ],
  145. "source": [
  146. "#4 Defining variational problem and its solution\n",
  147. "rho = 1.43E-7 #ohm*m\n",
  148. "G = 1/rho\n",
  149. "voltage = TrialFunction(V)\n",
  150. "v = TestFunction(V)\n",
  151. "f = Constant(0)\n",
  152. "a = dot(G*grad(voltage), grad(v))*dx\n",
  153. "L = f*v*dx\n",
  154. "\n",
  155. "# Compute solution\n",
  156. "voltage = Function(V)\n",
  157. "solve(a == L, voltage, bcs)\n",
  158. "\n",
  159. "# Plot solution and mesh\n",
  160. "plot(voltage,)\n",
  161. "plot(mesh, color='k', title=\"FEM\")\n"
  162. ]
  163. },
  164. {
  165. "cell_type": "code",
  166. "execution_count": 5,
  167. "metadata": {},
  168. "outputs": [],
  169. "source": [
  170. "#saving the solution to a VTK file\n",
  171. "vtkfile = File('solution/sol.pvd')\n",
  172. "vtkfile << voltage"
  173. ]
  174. },
  175. {
  176. "cell_type": "code",
  177. "execution_count": 6,
  178. "metadata": {},
  179. "outputs": [
  180. {
  181. "data": {
  182. "text/plain": [
  183. "array([ 0.003 , 0.003 , 0.0027, 0.003 , 0.0027, 0.0024, 0.003 ,\n",
  184. " 0.0027, 0.0024, 0.0021, 0.003 , 0.0027, 0.0024, 0.0021,\n",
  185. " 0.0018, 0.003 , 0.0027, 0.0024, 0.0021, 0.0018, 0.0015,\n",
  186. " 0.0027, 0.0024, 0.0021, 0.0018, 0.0015, 0.0012, 0.0024,\n",
  187. " 0.0021, 0.0018, 0.0015, 0.0012, 0.0009, 0.0021, 0.0018,\n",
  188. " 0.0015, 0.0012, 0.0009, 0.0006, 0.0018, 0.0015, 0.0012,\n",
  189. " 0.0009, 0.0006, 0.0003, 0.0015, 0.0012, 0.0009, 0.0006,\n",
  190. " 0.0003, 0. , 0.0012, 0.0009, 0.0006, 0.0003, 0. ,\n",
  191. " 0.0009, 0.0006, 0.0003, 0. , 0.0006, 0.0003, 0. ,\n",
  192. " 0.0003, 0. , 0. ])"
  193. ]
  194. },
  195. "execution_count": 6,
  196. "metadata": {},
  197. "output_type": "execute_result"
  198. }
  199. ],
  200. "source": [
  201. "volt_nodal = voltage.vector()\n",
  202. "volt_array = volt_nodal.get_local()\n",
  203. "volt_array"
  204. ]
  205. },
  206. {
  207. "cell_type": "code",
  208. "execution_count": 7,
  209. "metadata": {},
  210. "outputs": [
  211. {
  212. "name": "stdout",
  213. "output_type": "stream",
  214. "text": [
  215. "volt_array( 0, 0) = 0.003\n",
  216. "volt_array( 0.0013, 0) = 0.003\n",
  217. "volt_array( 0.0026, 0) = 0.0027\n",
  218. "volt_array( 0.0039, 0) = 0.003\n",
  219. "volt_array( 0.0052, 0) = 0.0027\n",
  220. "volt_array( 0.0065, 0) = 0.0024\n",
  221. "volt_array( 0.0078, 0) = 0.003\n",
  222. "volt_array( 0.0091, 0) = 0.0027\n",
  223. "volt_array( 0.0104, 0) = 0.0024\n",
  224. "volt_array( 0.0117, 0) = 0.0021\n",
  225. "volt_array( 0.013, 0) = 0.003\n",
  226. "volt_array( 0, 0.0003) = 0.0027\n",
  227. "volt_array( 0.0013, 0.0003) = 0.0024\n",
  228. "volt_array( 0.0026, 0.0003) = 0.0021\n",
  229. "volt_array( 0.0039, 0.0003) = 0.0018\n",
  230. "volt_array( 0.0052, 0.0003) = 0.003\n",
  231. "volt_array( 0.0065, 0.0003) = 0.0027\n",
  232. "volt_array( 0.0078, 0.0003) = 0.0024\n",
  233. "volt_array( 0.0091, 0.0003) = 0.0021\n",
  234. "volt_array( 0.0104, 0.0003) = 0.0018\n",
  235. "volt_array( 0.0117, 0.0003) = 0.0015\n",
  236. "volt_array( 0.013, 0.0003) = 0.0027\n",
  237. "volt_array( 0, 0.0006) = 0.0024\n",
  238. "volt_array( 0.0013, 0.0006) = 0.0021\n",
  239. "volt_array( 0.0026, 0.0006) = 0.0018\n",
  240. "volt_array( 0.0039, 0.0006) = 0.0015\n",
  241. "volt_array( 0.0052, 0.0006) = 0.0012\n",
  242. "volt_array( 0.0065, 0.0006) = 0.0024\n",
  243. "volt_array( 0.0078, 0.0006) = 0.0021\n",
  244. "volt_array( 0.0091, 0.0006) = 0.0018\n",
  245. "volt_array( 0.0104, 0.0006) = 0.0015\n",
  246. "volt_array( 0.0117, 0.0006) = 0.0012\n",
  247. "volt_array( 0.013, 0.0006) = 0.0009\n",
  248. "volt_array( 0, 0.0009) = 0.0021\n",
  249. "volt_array( 0.0013, 0.0009) = 0.0018\n",
  250. "volt_array( 0.0026, 0.0009) = 0.0015\n",
  251. "volt_array( 0.0039, 0.0009) = 0.0012\n",
  252. "volt_array( 0.0052, 0.0009) = 0.0009\n",
  253. "volt_array( 0.0065, 0.0009) = 0.0006\n",
  254. "volt_array( 0.0078, 0.0009) = 0.0018\n",
  255. "volt_array( 0.0091, 0.0009) = 0.0015\n",
  256. "volt_array( 0.0104, 0.0009) = 0.0012\n",
  257. "volt_array( 0.0117, 0.0009) = 0.0009\n",
  258. "volt_array( 0.013, 0.0009) = 0.0006\n",
  259. "volt_array( 0, 0.0012) = 0.0003\n",
  260. "volt_array( 0.0013, 0.0012) = 0.0015\n",
  261. "volt_array( 0.0026, 0.0012) = 0.0012\n",
  262. "volt_array( 0.0039, 0.0012) = 0.0009\n",
  263. "volt_array( 0.0052, 0.0012) = 0.0006\n",
  264. "volt_array( 0.0065, 0.0012) = 0.0003\n",
  265. "volt_array( 0.0078, 0.0012) = 0\n",
  266. "volt_array( 0.0091, 0.0012) = 0.0012\n",
  267. "volt_array( 0.0104, 0.0012) = 0.0009\n",
  268. "volt_array( 0.0117, 0.0012) = 0.0006\n",
  269. "volt_array( 0.013, 0.0012) = 0.0003\n",
  270. "volt_array( 0, 0.0015) = 0\n",
  271. "volt_array( 0.0013, 0.0015) = 0.0009\n",
  272. "volt_array( 0.0026, 0.0015) = 0.0006\n",
  273. "volt_array( 0.0039, 0.0015) = 0.0003\n",
  274. "volt_array( 0.0052, 0.0015) = 0\n",
  275. "volt_array( 0.0065, 0.0015) = 0.0006\n",
  276. "volt_array( 0.0078, 0.0015) = 0.0003\n",
  277. "volt_array( 0.0091, 0.0015) = 0\n",
  278. "volt_array( 0.0104, 0.0015) = 0.0003\n",
  279. "volt_array( 0.0117, 0.0015) = 0\n",
  280. "volt_array( 0.013, 0.0015) = 0\n"
  281. ]
  282. }
  283. ],
  284. "source": [
  285. "coor = mesh.coordinates()\n",
  286. "if mesh.num_vertices() == len(volt_array):\n",
  287. " for i in range(mesh.num_vertices()):\n",
  288. " print('volt_array(%8g,%8g) = %g' % (coor[i][0], coor[i][1], volt_array[i]))\n",
  289. "\n"
  290. ]
  291. },
  292. {
  293. "cell_type": "markdown",
  294. "metadata": {},
  295. "source": [
  296. "This is the projection of the voltage function; the soltion. This is:\n",
  297. "$$\\nabla u$$"
  298. ]
  299. },
  300. {
  301. "cell_type": "code",
  302. "execution_count": 38,
  303. "metadata": {},
  304. "outputs": [
  305. {
  306. "data": {
  307. "text/plain": [
  308. "<matplotlib.tri.tricontour.TriContourSet at 0x7fc67e808278>"
  309. ]
  310. },
  311. "execution_count": 38,
  312. "metadata": {},
  313. "output_type": "execute_result"
  314. },
  315. {
  316. "data": {
  317. "image/png": "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
  318. "text/plain": [
  319. "<Figure size 432x288 with 1 Axes>"
  320. ]
  321. },
  322. "metadata": {
  323. "needs_background": "light"
  324. },
  325. "output_type": "display_data"
  326. }
  327. ],
  328. "source": [
  329. "V_g = VectorFunctionSpace(mesh, \"Lagrange\", 1)\n",
  330. "w = TrialFunction(V_g)\n",
  331. "v = TestFunction(V_g)\n",
  332. "a = inner(w, v)*dx\n",
  333. "L = inner(grad(voltage), v)*dx\n",
  334. "grad_u = Function(V_g)\n",
  335. "solve(a == L, grad_u)\n",
  336. "plot(grad_u, title=\"grad(u)\")\n",
  337. "grad_u_x, grad_u_y = grad_u.split(deepcopy=True) # extract components\n",
  338. "plot(grad_u_y, title=\"y-component of grad(u)\")\n",
  339. "plot(grad_u_x, title=\"x-component of grad(u)\")\n"
  340. ]
  341. },
  342. {
  343. "cell_type": "markdown",
  344. "metadata": {},
  345. "source": [
  346. "The previous code can also be substituted by the method project, like:"
  347. ]
  348. },
  349. {
  350. "cell_type": "code",
  351. "execution_count": 29,
  352. "metadata": {},
  353. "outputs": [
  354. {
  355. "name": "stdout",
  356. "output_type": "stream",
  357. "text": [
  358. " Calling FFC just-in-time (JIT) compiler, this may take some time.\n"
  359. ]
  360. },
  361. {
  362. "data": {
  363. "text/plain": [
  364. "<matplotlib.quiver.Quiver at 0x7fc67efcbcc0>"
  365. ]
  366. },
  367. "execution_count": 29,
  368. "metadata": {},
  369. "output_type": "execute_result"
  370. },
  371. {
  372. "data": {
  373. "image/png": "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
  374. "text/plain": [
  375. "<Figure size 432x288 with 1 Axes>"
  376. ]
  377. },
  378. "metadata": {
  379. "needs_background": "light"
  380. },
  381. "output_type": "display_data"
  382. }
  383. ],
  384. "source": [
  385. "grad_u = project(grad(voltage), VectorFunctionSpace(mesh, \"Lagrange\", 1))\n",
  386. "plot(grad_u,)"
  387. ]
  388. },
  389. {
  390. "cell_type": "code",
  391. "execution_count": null,
  392. "metadata": {},
  393. "outputs": [],
  394. "source": []
  395. },
  396. {
  397. "cell_type": "markdown",
  398. "metadata": {},
  399. "source": [
  400. "# Heat Transfer Model\n",
  401. "The electrical heat generation is coupled to the stationary heat equation as the source term $Q$ on the right hand side, which is known as the electromagnetic heat source.\n",
  402. "\n",
  403. "$$\\nabla \\cdot(-k\\nabla T)=0$$\n",
  404. "\n",
  405. "Joule's first law states that the heat generated within an object is equivalent to the product of its conductivity $G$ and the square of the potential gradient:\n",
  406. "\n",
  407. "$$Q=G|\\nabla V|^2$$\n",
  408. "\n",
  409. "\n",
  410. "**Cambiar el valor de Q por uno numerico obtenido de las mediciones y también puedo tratar de calcular el valor de Q del Vector**"
  411. ]
  412. },
  413. {
  414. "cell_type": "code",
  415. "execution_count": 45,
  416. "metadata": {},
  417. "outputs": [
  418. {
  419. "data": {
  420. "text/plain": [
  421. "<matplotlib.quiver.Quiver at 0x7fc67e34d1d0>"
  422. ]
  423. },
  424. "execution_count": 45,
  425. "metadata": {},
  426. "output_type": "execute_result"
  427. },
  428. {
  429. "data": {
  430. "image/png": "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
  431. "text/plain": [
  432. "<Figure size 432x288 with 1 Axes>"
  433. ]
  434. },
  435. "metadata": {
  436. "needs_background": "light"
  437. },
  438. "output_type": "display_data"
  439. }
  440. ],
  441. "source": [
  442. "import numpy as np\n",
  443. "Q = 1/rho*grad_u\n",
  444. "plot(Q,)"
  445. ]
  446. },
  447. {
  448. "cell_type": "code",
  449. "execution_count": 47,
  450. "metadata": {},
  451. "outputs": [
  452. {
  453. "ename": "NameError",
  454. "evalue": "name 'assamble' is not defined",
  455. "output_type": "error",
  456. "traceback": [
  457. "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
  458. "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
  459. "\u001b[0;32m<ipython-input-47-080bf2ec9c68>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0menergy\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mQ\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mE\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0massamble\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0menergy\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
  460. "\u001b[0;31mNameError\u001b[0m: name 'assamble' is not defined"
  461. ]
  462. }
  463. ],
  464. "source": [
  465. "energy = (Q)\n",
  466. "E = assamble(energy)\n"
  467. ]
  468. },
  469. {
  470. "cell_type": "code",
  471. "execution_count": null,
  472. "metadata": {},
  473. "outputs": [],
  474. "source": []
  475. },
  476. {
  477. "cell_type": "code",
  478. "execution_count": null,
  479. "metadata": {},
  480. "outputs": [],
  481. "source": []
  482. }
  483. ],
  484. "metadata": {
  485. "kernelspec": {
  486. "display_name": "Python 3",
  487. "language": "python",
  488. "name": "python3"
  489. },
  490. "language_info": {
  491. "codemirror_mode": {
  492. "name": "ipython",
  493. "version": 3
  494. },
  495. "file_extension": ".py",
  496. "mimetype": "text/x-python",
  497. "name": "python",
  498. "nbconvert_exporter": "python",
  499. "pygments_lexer": "ipython3",
  500. "version": "3.6.7"
  501. }
  502. },
  503. "nbformat": 4,
  504. "nbformat_minor": 2
  505. }