{ "cells": [ { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "

Performance Tuning Example

\n", "

\n", "A Basic tuning program showing memory allocation. (In memory of Paul Fink, the original author.)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "iter ener err \n", " 1 1.0000000 0.3034969 \n", " 2 0.9217880 0.0572816 \n", " 3 0.9171967 0.0156207 \n", " 4 0.9169062 0.0040152 \n", " 5 0.9168841 0.0011571 \n", " 6 0.9168824 0.0003081 \n", " 7 0.9168823 0.0000879 \n", " 8 0.9168823 0.0000238 \n", " 9 0.9168823 0.0000067 \n", " 10 0.9168823 0.0000018 \n", " 11 0.9168823 0.0000005 \n", " time = 0:00:00.777358\n" ] } ], "source": [ "\"\"\" From \"COMPUTATIONAL PHYSICS\" & \"COMPUTER PROBLEMS in PHYSICS\"\n", " by RH Landau, MJ Paez, and CC Bordeianu (deceased).\n", " Copyright R Landau, Oregon State Unv, MJ Paez, Univ Antioquia, \n", " C Bordeianu, Univ Bucharest, 2021. \n", " Please respect copyright & acknowledge our work.\"\"\"\n", "\n", "# Tune.pynb: Basic tuning program showing memory allocation\n", " \n", "import datetime; from numpy import zeros; from math import (sqrt, pow)\n", "\n", "Ldim = 251; iter = 0; step = 0. \n", "diag = zeros((Ldim, Ldim), float); coef = zeros( (Ldim), float)\n", "sigma = zeros((Ldim), float); ham = zeros( (Ldim, Ldim), float)\n", "t0 = datetime.datetime.now() # Initialize time\n", "\n", "for i in range(1, Ldim): # Set up Hamiltonian\n", " for j in range(1, Ldim):\n", " if (abs(j - i) >10): ham[j, i] = 0. \n", " else : ham[j, i] = pow(0.3, abs(j - i) ) \n", " ham[i,i] = i ; coef[i] = 0.; \n", " \n", "coef[1] = 1.; err = 1.; iter = 0 ;\n", "print(\"iter ener err \")\n", "while (iter < 15 and err > 1.e-6): # Compute current E & normalize\n", " iter = iter + 1; ener = 0. ; ovlp = 0.;\n", " for i in range(1, Ldim):\n", " ovlp = ovlp + coef[i]*coef[i] \n", " sigma[i] = 0.\n", " for j in range(1, Ldim): sigma[i] = sigma[i] + coef[j]*ham[j][i]\n", " ener = ener + coef[i]*sigma[i] \n", " ener = ener/ovlp\n", " for i in range(1, Ldim):\n", " coef[i] = coef[i]/sqrt(ovlp) \n", " sigma[i] = sigma[i]/sqrt(ovlp)\n", " err = 0.; \n", " for i in range(2, Ldim): # Update\n", " step = (sigma[i] - ener*coef[i])/(ener - ham[i, i])\n", " coef[i] = coef[i] + step\n", " err = err + step*step \n", " err = sqrt(err) \n", " print(\" %2d %9.7f %9.7f \"%(iter, ener, err))\n", " \n", "delta_t = datetime.datetime.now() - t0 # Elapsed time\n", "print(\" time = \", delta_t)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.13" } }, "nbformat": 4, "nbformat_minor": 2 }