Stefan Gerlach Computerphysik Einführung, Beispiele und Anwendungen Computerphysik Stefan Gerlach Computerphysik Einführung, Beispiele und Anwendungen StefanGerlach UniversitätKonstanz Konstanz,Deutschland ISBN978-3-662-49428-8 ISBN978-3-662-49429-5(eBook) DOI10.1007/978-3-662-49429-5 DieDeutscheNationalbibliothekverzeichnetdiesePublikationinderDeutschenNationalbibliografie; detailliertebibliografischeDatensindimInternetüberhttp://dnb.d-nb.deabrufbar. SpringerSpektrum ©Springer-VerlagBerlinHeidelberg2016 Das Werk einschließlichallerseinerTeileist urheberrechtlichgeschützt.Jede Verwertung, die nicht ausdrücklichvomUrheberrechtsgesetzzugelassenist,bedarfdervorherigenZustimmungdesVerlags. DasgiltinsbesonderefürVervielfältigungen,Bearbeitungen,Übersetzungen,Mikroverfilmungenund dieEinspeicherungundVerarbeitunginelektronischenSystemen. DieWiedergabevonGebrauchsnamen,Handelsnamen,Warenbezeichnungenusw.indiesemWerkbe- rechtigtauchohnebesondereKennzeichnungnichtzuderAnnahme,dasssolcheNamenimSinneder Warenzeichen-undMarkenschutz-Gesetzgebungalsfreizubetrachtenwärenunddahervonjedermann benutztwerdendürften. DerVerlag,dieAutorenunddieHerausgebergehendavonaus,dassdieAngabenundInformationenin diesemWerkzumZeitpunktderVeröffentlichungvollständigundkorrektsind.WederderVerlagnoch dieAutorenoderdieHerausgeberübernehmen,ausdrücklichoderimplizit,GewährfürdenInhaltdes Werkes,etwaigeFehleroderÄußerungen. Planung:MargitMaly GedrucktaufsäurefreiemundchlorfreigebleichtemPapier. SpringerSpektrumistTeilvonSpringerNature DieeingetrageneGesellschaftistSpringer-VerlagGmbHBerlinHeidelberg Vorwort DiesesLehrbuchmöchtedemLesereineEinführungindasnochjungeGebietder Computerphysik geben. Es soll Studierenden der Physik und physiknaher Fächer als Begleiter,Nachschlagewerk und zur Vertiefung im Studium dienen, aber auch Dozenten bei der Vorbereitung von Vorlesungen zur Computerphysik eine Hilfe sein.ZieldesBuchesistes,dieMethodenderComputerphysikundderenAnwen- dungen zu vermitteln und zu lernen, physikalische Probleme in ein Modell und anschließendineinComputerprogrammumzusetzen,umsophysikalischenFrage- stellungen mithilfe des Computersnachzugehen.Ein wichtiger Schwerpunktliegt dabei auf den Techniken (Programmierung, numerische Methoden etc.), ohne die die Computerphysik nicht möglich wäre. Da es im deutschsprachigen Raum bis- herkeinvergleichbaresaktuellesLehrbuchgibt,fülltdiesesWerkdamiteinegroße Lücke. Entstanden ist dieses Buch aus der Überarbeitung eines Vorlesungsskriptes für dieVorlesungen„EinführungindieComputerphysik“und„ComputerphysikIund II“,welcheseitmehrerenJahrenfürStudierendederPhysikimviertenSemesteran derUniversitätKonstanzvonmirgehaltenwerden.Daessichumeineinführendes Lehrbuchhandelt,sindkeinerleiVorkenntnissenotwendig.EinzigindenProjekten werdenGrundlagenausdenEinführungsvorlesungenderPhysikverwendet. Die Kap. 2 bis 7 befassen sich mit den Grundlagen des wissenschaftlichen RechnensundgebeneineEinführunginLinuxunddieProgrammierung.AlsPro- grammiersprachenwerdenCundPythonverwendet,dabeidesowohlinnerhalbals auch außerhalb der Wissenschaft weitverbreitet sind. Spezielle wissenschaftliche Programmiersprachen wie z.B. Fortran bieten im Vergleich dazu kaum Vorteile undwerdendaherhierausgeklammert.AufBlack-Box-Programmeund-Methoden wird, soweit dies möglich ist, verzichtet. Stattdessen werden die grundlegenden Funktionenz.B.vonLinuxunddieeinfachstennumerischenMethodenbesprochen undverwendet.IndenKap.8bis12folgteineEinführungindiewichtigstennume- rischen Methoden, wobei zunehmend speziell auf die physikrelevanten Verfahren eingegangenwird. DieThemen derPhysik werden erstin den Projekten (Kap.13 bis18)aufgegriffenundanhandvonBeispielendiskutiert. ImVordergrundstehen dabeidieInhaltederComputerphysik. V VI Vorwort Auf umfangreiche physikalische Diskussionen wird weitgehend verzichtet, da dieEinführungsvorlesungenderPhysikhierfürbessergeeignetsind.Verzichtetwird auch auf komplizierte Herleitungen, was meiner Erfahrung nach den Studenten (meistens)entgegenkommt.DiesschafftRaum,umvermehrtaufpraktischeFragen undAnwendungeneinzugehen,woraufesdiesemLehrbuch,nebenderVermittlung derTechniken,schwerpunktmäßigankommt. Auf einen Punktmöchteich ausdrücklichhinweisen: Das Wichtigstebeim Ar- beitenmitdemComputeriststetsdasselbstständigeAusprobierenundÜben.Nur sokannsich eindauerhafterLernerfolgeinstellen.ZuallenKapitelngibtesdaher AufgabenmitsteigendemSchwierigkeitsgradzurÜbungundzurVertiefung.Die- sesBuchmussimÜbrigennichtlinear„durchgearbeitet“werden.Eskannz.B.mit den Projekten begonnen und auf die grundlegenden Kapitel zur Programmierung undzudennumerischenMethodenbeiBedarfzurückgegriffenwerden. Obwohl dieses Buch mit höchster Sorgfalt geschrieben und korrigiert wurde, wird es möglicherweise trotzdem Fehler enthalten. Verbesserungsvorschläge, Be- merkungenundsonstigeHinweisesinddaherjederzeitwillkommen. Mein besondererDank gilt den Studierenden und Tutoren, die durch ihreTeil- nahmeundMitarbeitandenComputerphysik-VorlesungenanderUniversitätKon- stanzsehr viel zudiesem Lehrbuchbeigetragenhaben.Auch diezahlreichenDis- kussionenmitKollegenundMitarbeiternwarenfürdieEntstehungdesBuchessehr hilfreich. Dem Springer-Verlag möchteich für die Anregungzu diesem Lehrbuch unddieprofessionelleundreibungsloseUnterstützungherzlichdanken. Ichwürdemichfreuen,wenndiesesLehrbuchfürmöglichstvieleLeserzueinem hilfreichenBegleiterwird. Konstanz,Frühjahr2016 StefanGerlach Abkürzungsliste ASCII AmericanStandardCodeforInformationInterchange BASH BourneAgainShell BIOS BasicInputOutputSystem BLAS BasicLinearAlgebraSubprograms BTCS BackwardTime,CenteredSpace CAS Computer-Algebra-System CFL Courant-Friedrichs-Lewy(-Zahl) CPU CentralProcessingUnit DFT DiskreteFourier-Transformation DGL Differenzialgleichung FDTD FiniteDifference,TimeDomain FEM Finite-Elemente-Methode FFT FastFourierTransform FIFO FirstIn/FirstOut FTCS ForwardTime,CenteredSpace GDGL GewöhnlicheDGL GCC GNUCompilerCollection GDB GNUDebugger GMP GNUMultiplePrecision GNU GNU’sNotUnix GPL GNUGeneralPublicLicense GPU GraphicsProcessingUnit GSL GNUScientificLibrary GUI GraphicalUserInterface HPC HighPerformanceComputing HTML HypertextMarkupLanguage HTTP HypertextTransferProtocol LGS LinearesGleichungssystem IEEE InstituteofElectricalandElectronicsEngineers IPC InterProcessCommunication VII VIII Abkürzungsliste LAPACK LinearAlgebraPackage LIFO LastIn/FirstOut LU Lower/Upper(-Zerlegung) MC Monte-Carlo(-Simulation) MD Molekulardynamik MKL (Intel)MathKernelLibrary MPI MessagePassingInterface MT19937 Mersenne-Twister19937 NFS NetworkFileSystem NUMA Non-uniformMemoryAccess OpenMP OpenMulti-Processing OSI OpenSystemsInterconnection PDGL PartielleDGL POSIX PortableOperatingSystemInterface RAM RandomAccessMemory RNG RandomNumberGenerator SMP SharedMemoryProcessing SOR SuccessiveOverRelaxation SSD SolidStateDrive SSH SecureShell TCP/IP TransmissionControlProtocol/InternetProtocol USB UniversalSerialBus Inhaltsverzeichnis 1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.1 WasistComputerphysik? . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2 EntwicklungderComputerphysik . . . . . . . . . . . . . . . . . . . . 3 1.3 InhaltderComputerphysik. . . . . . . . . . . . . . . . . . . . . . . . . 3 1.4 ComputersimulationenundwissenschaftlichesRechnen . . . . . . 4 TeilI Computergrundlagen 2 Hard-undSoftware. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.1 Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.2 Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.2.1 Betriebssysteme . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.3 DasBetriebssystemLinux . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.3.1 ZurHistorievonLinux . . . . . . . . . . . . . . . . . . . . . . 13 2.3.2 DiePhilosophievonUNIX/Linux . . . . . . . . . . . . . . . . 14 2.3.3 GNU-Projekt. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.3.4 Linux-Distribution . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.3.5 GrafischeOberfläche . . . . . . . . . . . . . . . . . . . . . . . . 15 2.3.6 Terminal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3 ArbeitenmitLinux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 3.1 DieShell. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 3.1.1 Shell-Kommandos . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.1.2 Shell-Variablenund-Aliasse . . . . . . . . . . . . . . . . . . . 19 3.1.3 Jobverwaltung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.1.4 Shell-ExpansionundTastaturkürzel. . . . . . . . . . . . . . . 21 3.2 DasDateisystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.2.1 WichtigeVerzeichnisse . . . . . . . . . . . . . . . . . . . . . . 22 3.2.2 Dateisystem–konkret . . . . . . . . . . . . . . . . . . . . . . . 23 IX X Inhaltsverzeichnis 3.2.3 Zugriffsrechte . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.2.4 Ein-undAusgabeumlenkung. . . . . . . . . . . . . . . . . . . 25 3.3 BenutzerundProzesse . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.3.1 Benutzerverwaltung . . . . . . . . . . . . . . . . . . . . . . . . 26 3.3.2 Prozesse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 TeilII ProgrammierenundDatenverarbeitung 4 ProgrammiereninC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 4.1 GrundlagenderProgrammierung. . . . . . . . . . . . . . . . . . . . . 32 4.1.1 SoftwareEngineering . . . . . . . . . . . . . . . . . . . . . . . 33 4.2 EinführunginC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 4.2.1 EigenschaftenvonC . . . . . . . . . . . . . . . . . . . . . . . . 34 4.2.2 „HalloWelt!“ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 4.2.3 „HalloWelt!“-Programmerklärt. . . . . . . . . . . . . . . . . 36 4.2.4 C-Variablenund-Operatoren . . . . . . . . . . . . . . . . . . . 37 4.2.5 DatentypenvonC. . . . . . . . . . . . . . . . . . . . . . . . . . 38 4.2.6 Bedingungen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 4.2.7 Schleifen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 4.2.8 Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 4.3 CfürFortgeschrittene. . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 4.3.1 Zeichen(ketten)undFelder . . . . . . . . . . . . . . . . . . . . 44 4.3.2 ZusammengesetzteDatentypen . . . . . . . . . . . . . . . . . 44 4.3.3 Zeiger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 4.3.4 DynamischeSpeicherverwaltung . . . . . . . . . . . . . . . . 47 4.4 HilfsmittelfürdieProgrammierung . . . . . . . . . . . . . . . . . . . 49 4.4.1 Kompilieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 4.4.2 Fehlersuche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 4.4.3 Versionsverwaltung. . . . . . . . . . . . . . . . . . . . . . . . . 52 5 ProgrammiereninPython . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 5.1 AllgemeineInformationenzuPython . . . . . . . . . . . . . . . . . . 55 5.2 DieProgrammiersprachePython . . . . . . . . . . . . . . . . . . . . . 56 5.2.1 VariablenundDatentypen. . . . . . . . . . . . . . . . . . . . . 56 5.2.2 Kontrollstrukturen . . . . . . . . . . . . . . . . . . . . . . . . . 59 5.2.3 Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 5.3 Python-Bibliotheken . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 6 WissenschaftlichesRechnen . . . . . . . . . . . . . . . . . . . . . . . . . . 63 6.1 WissenschaftlicheProgrammierung . . . . . . . . . . . . . . . . . . . 63 6.1.1 Datenstrukturen . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 6.1.2 WichtigeAlgorithmen . . . . . . . . . . . . . . . . . . . . . . . 67 6.1.3 Softwarebibliotheken. . . . . . . . . . . . . . . . . . . . . . . . 68
Description: