Computers are a valuable tool for research in the physical sciences. Whether one is working on a small amount of data analysis on your personal computer, or harnessing the distributed power of a global network of computers to tackle an otherwise intractable task, skill in using a computer's power in problem solving can be immensely beneficial in a scientist's career.
Good programming skills are as essential as a strong foundation in mathematics and other laboratory techniques to explore the many questions in modern scientific research. Beyond good programming, one must be able to understand what computers are capable of when solving problems – and what their limitations are. Think of a computer as a valuable tool for conducting scientific research; in order to derive the most benefit from this tool, one needs to understand not only how to use it but also when it is appropriate and how to understand and utilize the result.
Physics 2660 covers the application of computers to solving basic problems in physical science, including an introduction to the Linux operating system, programming in C, use of external libraries, and implementation of basic algorithms with a focus on numerical methods, error analysis and data fitting, and simulating physical processes. We will also touch on extending our skills to C++, however the emphasis will be on learning and using C.
Prerequisites include one semester of physics and one semester of calculus. No previous computer experience is required. Note however for those who do not have prior programming experience, this class teaches basics of C programming – do not underestimate the time commitment to learn it. Students with more than one semester of programming classes or with equivalent experience in C or C++ should enroll in Phys 5630 rather than Phys 2660 to explore topics in computational physics.
In PHYS 2660 you will learn to work with GNU/Linux-based computer systems and to write useful computer programs. Why Linux? Linux-based computer systems are a mainstay in the world of scientific computing. In any laboratory setting where the research requires large amounts of data processing or computationally intensive calculations, you will routinely find a Linux-based cluster of computers handling the workload. Nearly 90% of the world's top performing computer systems operate on Linux. And Linux is the overwhelming choice for building world-wide high performance Computing Grids.
This class provides a first introduction to programming in a scientific problem-solving setting. We concentrate on features of the C programming language to teach the basic programming skills you need to put your computer to work. We may introduce certain features of C++ as the semester progresses, but this course will concentrate on developing programs using procedural methods common in C programming.
PHYS 2660 is a very hands-on course. You will learn the basics of programming and scientific computing methods by completing numerous exercises throughout the semester. Most topics will be introduced in the Tuesday lecture. Preparatory readings will help you understand and derive the most benefit from lecture. In a Thursday lab section you will write programs based on the lecture material. Weekly homework assignments will build on the lecture, lab, and previous homework projects. There will be a mid-term exam as well as a final.
All homework assignments, quizzes, and exams are pledged. You are encouraged to discuss problems and strategies, but copies of your program assignments or parts thereof may not be exchanged with other students. Unless stated otherwise, written programs are to be the sole work of each individual student.
It is very easy to cheat in this course. Don't do it. Cheating – copying solutions, seeking direct input from outside resources, copying other student's responses, doing less-than thoughtful work – all these constitute cheating and will dealt with harshly if discovered.
This is a great class with many things to learn – do it properly and you will be rewarded in the end with lots of new skills and knowledge!
Each student must register for a laboratory section. You must be on time and attend your registered section. Time is limited in the lab sections, and since you will generally work in teams, we must respect the schedule for the benefit of all students. Attendance will be taken at the beginning of each lab section. Students arriving after attendance will be counted as late, arriving more than 15 minutes late will be counted as a miss.
Late Arrival Policy: Two late arrivals will count as one missed lab.
Missed Lab Policy: There will be no makeup lab sessions. We allow two missed labs for any reason (illness, emergency, schedule conflicts, etc.) Each additional missed session will result in a 20% penalty on the lab portion of the grade.
We will provide a few hours a week of TA supervised lab access for working on your assignments. Times will be posted on the main website.
The homework will mainly consist of writing computer programs and submitting your final work for grading. Homework will generally be assigned on Thursdays and will be due the following Thursday. In general, the homework will be submitted electronically and occasionally a printed copy of your source code will be due at the beginning of your lab section. Assignments are to be pledged. Late and/or un-pledged homework will not be accepted. A common electronic submission deadline will precede the start of the lab sections. Except for extreme events, lack of computer availability or network disruption will not be accepted as valid excuses for late assignments. Start your work early for each assignment! The homework deadlines will be strictly enforced. If you are unable to complete a particular assignment on time, you should submit any partial solutions for credit, then study the posted solutions for that assignment and move on to the following week's work.
Lab attendance and participation is an important part of this class. A short exercise or quiz may precede some labs or classes. There will be two exams. The first will cover elements of Linux and most of the C programming language, the second will focus on applications of programming techniques to study physical systems.
The breakdown of grading categories will be as follows:
Midterm: Given in the evening, 7pm on Tuesday 14 March. CLEAR YOUR SCHEDULE FOR THIS EVENING EXAM! Except for extreme circumstances, no makeup exams will be offered.
Final: Provided in class at last Tuesday lecture (Tuesday 2 May, 2017). Due back