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

Tune4

\n", "

\n", "A sample program to demonstrate program tuning of arrays. In memory of Paul Fink who wrote the original Fortran program way back when." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "iter ener err \n", " 1 1.0000000000000 0.3034968741713 \n", " 2 0.9217879630894 0.0572816058937 \n", " 3 0.9171967206785 0.0156206559094 \n", " 4 0.9169061568314 0.0040152363071 \n", " 5 0.9168840734364 0.0011570750201 \n", " 6 0.9168824011436 0.0003081087796 \n", " 7 0.9168822729823 0.0000879027426 \n", " 8 0.9168822631487 0.0000238206732 \n", " 9 0.9168822623927 0.0000067257809 \n", " 10 0.9168822623345 0.0000018408264 \n", " 11 0.9168822623301 0.0000005162121 \n", " time = 0:00:00.322152\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", "# Tune4.ipynb Model tuning program\n", "\t \n", "import datetime\n", "from numpy import zeros\n", "from math import (sqrt,pow)\n", "from math import pi\n", "from sys import version\n", "\n", "if int(version[0])>2: raw_input=input # raw_input deprecated in Python3\n", " \n", "Ldim = 200; iter1 = 0; step = 0.\n", "ham = zeros( (Ldim, Ldim), float); diag = zeros( (Ldim), float)\n", "coef = zeros( (Ldim), float); sigma = zeros( (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", "for i in range(1, Ldim):\n", " ham[i, i] = i\n", " coef[i] = 0.\n", " diag[i] = ham[i, i]\n", "coef[1] = 1.; err = 1.; iter = 0 ;\n", "print(\"iter ener err \")\n", "\n", "while (iter1 < 15 and err > 1.e-6): # Compute current energy & normalize\n", " iter1 = iter1 + 1\n", " ener = 0.\n", " ovlp1 = 0.\n", " ovlp2 = 0. \n", " for i in range(1, Ldim - 1, 2):\n", " ovlp1 = ovlp1 + coef[i] * coef[i] \n", " ovlp2 = ovlp2 + coef[i+1] * coef[i+1] \n", " t1 = 0.\n", " t2 = 0. \n", " for j in range(1, Ldim):\n", " t1 = t1 + coef[j] * ham[j, i] \n", " t2 = t2 + coef[j] * ham[j, i+1] \n", " sigma[i] = t1\n", " sigma[i+1] = t2\n", " ener = ener + coef[i] * t1 + coef[i+1] * t2 \n", " ovlp = ovlp1 + ovlp2 \n", " ener = ener/ovlp \n", " fact = 1./sqrt(ovlp) \n", " coef[1] = fact*coef[1] \n", " err = 0. # Update & error norm\n", " for i in range(2, Ldim):\n", " t = fact*coef[i]\n", " u = fact*sigma[i] - ener*t\n", " step = u/(ener - diag[i])\n", " coef[i] = t + step\n", " err = err + step*step \n", " err = sqrt(err) \n", " print (\" %2d %15.13f %15.13f \"%(iter1, ener, err))\n", "delta_t = datetime.datetime.now() - t0 # Elapsed time\n", "print( \" time = \", delta_t)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "\n" ] } ], "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 }