IMPORTANT:
- If you are an undergrad, consider applying for the University's UROP funding, the IEEE Antennas and Propagation Society Pre-Doctoral Research Award, and the National Science Foundation Graduate Research Fellowship. Take a look at the COE Fellowships Office website.
- If you are a graduate student, consider applying for the IEEE Antennas and Propagation Society Doctoral Research Award, and the NSF Graduate Research Fellowship if you are a U.S. citizen. Take a look at the COE Fellowships Office website.
- Whenever you provide results to me, please take some extra time to think about how it is being presented. For example, please label the x- and y-axes in your plots. Also think about whether the information is better presented on a linear or semilog or log-log scale. Maybe provide overall plots and then zoom in on regions of interest. I suggest including a legend that labels what component is being graphed (East-West electric field, for example). If you graph vs. time steps, include what dt is in caption or somewhere so we can quickly calculate how many seconds have evolved over the simulation.
Doing this will help me, and I think it will help all of us so we can take a step back and think about what the results mean and better compare the results to real-world scenario. It will also help us to prepare presenting our results in the best way to paper reviewers, etc.- READ, READ, READ! Attend seminars, listen to talks at conferences, etc. Build a strong foundation of knowledge and be aware of the state-of-the-art. This will help your research productivity immensely and will help you come up with your own ideas! Use this list ("Recommended Reading" section of Prof. Simpson's website) as a starting point.
- Choose VERY secure passwords!
Please see the following for more info: Passwords
Keep in mind that an ideal password is long and has letters, punctuation, symbols, and numbers.
      * Whenever possible, use at least 14 characters or more.
      * The greater the variety of characters in your password, the better.
      * Use the entire keyboard, not just the letters and characters you use or see most often.- Make back-up copies of your important codes and results (periodically and to archive)!! It is very frustrating and a waste of time to try to recreate a code or result. Ask yourself, "If this computer were to dissappear right now, would I be able to continue my work somewhere else without much interuption, or would I have to start over?"
- Put plenty of comments in your codes, both at the beginning of it to describe what the codes does and throughout. If you need to come back to a code in a few months or years for any reason, it's easy to forget what is going on in the code and what you were trying to do. Also, another student may continue your project after you graduate (leading to citations for your papers!), and they will need to understand your code.
- Keep a lab notebook! Include summaries after each of our meetings, progress, action items, sources of information, ideas, and locations and names of codes you're currently using or working on so that you can come back to the same version later if necessary.
- Store different versions of your codes, as you're working on them and as you finish new additions or changes. Sometimes a code can (seemingly) randomly "break," meaning that it won't work anymore and will give erroneous results in places where there are no errors, making it almost impossible to debug. In these cases, you will likely need to revert to a previous (working) version of your code and redo the changes / additions.
- The Center for High Performance Computing on campus periodically has presentations that you may find useful, such as Introductory Linux, Introduction to MPI, Intro to Programming with OpenMP, etc. Check their website for the presentation schedule: http://chpc.utah.edu/docs/presentations/ (If you don't see any listed, contact them, because they always have some scheduled).
- If you are not a native English speaker and need to work on your English speaking, writing, or reading skills it is important that you enroll in the U's English as a Second Language courses until you are proficient. Your tuition for these coursess will be covered by the lab. Here is more info.
- To get help with your computer (get an account on a lab computer, installing software, etc.), contact the engineering IT help desk at: opers at eng dot utah dot edu
- To see an example Ph.D. thesis, you can look at mine, posted on my website: View PDF. Look at others as well, to get a feel for what the general expectations are for a Ph.D. thesis.
- As you progress through your M.S. or Ph.D. studies, you should become more independent, and be able to suggest next steps for your research, and at some point start contributing your own ideas.
- If you need to order anything for the lab, go to the purchasing page of the ECE website and select Prof. Simpson to approve your purchase. We can order from Amazon, Office Depot, etc., as well as the University store.
-> back to content
Should I Pursue a Ph.D.?:
Website to investigate different career options: https://myidp.sciencecareers.org/
Key factors to consider when deciding to go for the Ph.D. vs. the M.S.:
Note that a student's grade-point average in a Ph.D. program is not the figure of merit for employment. It is the quality and promise of the research, along with the letters of recommendation from the advisor, members of the Ph.D. committee, managers, etc. While a Ph.D. could be used simply as a credential to get a "better" job, or to improve one's standing within an existing company, it really should be seen as a mean's of extending the visibility of an individual engineer beyond any particular company to the technical world at large via conference presentations and journal publications. To this end, a Ph.D. can "rust", i.e. decay, if the holder makes no effort to continue publishing.
- Do you have the intellectual aptitude for the advanced concepts and courses involved specifically in the Ph.D. thesis work, and more generally in the broader related research area?
- Do you have the motivation and work ethic to persevere even when your research is not going smoothly?
- Do you want to work in a relatively unstructured manner, where you're are not given much (if any) direction on how to go about defining a problem or developing a solution approach for the problem?
- Do you want the option of teaching at the college level?
What jobs are available for Ph.D's? You can work in academia (as a research professor, if you do not want to teach), government (National Science Foundation, Air Force Research Labs, Office of Naval Research, one of the many National Laboratories, etc.), industry, and even go on to law school and become a patent attorney.
-> back to content
Become a Professor:
-> back to content
- Have you considered becoming a professor? It is a very rewarding career. You can pursue exciting research of your choosing while also preparing the next generation of engineers.
- The back of the IEEE Spectrum Magazine is one of the best places to look for open positions.
- The U's Center for Teaching and Learning Excellence (CTLE) periodically offers a free Teaching Dossier Workshop to help you develop or sharpen your teaching philosophy statement.
Internships:
There are many possibilities for internships.
-> back to content
For U.S. citizens, consider:
- AFRL Space Scholars Program
- Idaho National Labs
- Sandia National Labs
- NASA
- MITRE
For both U.S. and non-U.S. citizens, consider the following (and other related opportunities):
- REMCOM
- COMSOL
- Intel, Corp.
- Apple, Inc.
- Optisys (in Utah)
- Ansys
- Lucid Motors
- Schlumberger Research
- Resonant
- Nanometrics
- Applied Materias, Inc.
Award and Fellowship Opportunities:
Look at the following website for more opportunities! COE Office of Fellowships
Undergraduates Students:
Graduate Students:
- University of Utah Financial Aid and Scholarships Website
- UofU ECE and COE scholarships
- ECE Dept. top EE and top CE students, best paper and best presentation awards, and best clinic for senior design projects
- Apply to become a member of the U's Behive Honor Society
- check the UofU Office of Undergraduate Studies list of scholarships and the U's College of Engineering list of third party scholarships
- check the UofU Alumni Association scholarship list
- (for women, apply sophomore year by Feb.) University of Utah Women's Center, $1500 each
- Check the Utah Engineers Council website (look under forms)
- Conference student paper contests
- (for students with disabilities) Google Lime Scholarship and Lime Connect Fellowship Program
- (for U.S. citizens, apply during senior year to obtain support for graduate studies) National Science Foundation Graduate Research Fellowship
- Barry Goldwater Scholarship
- IEEE Antennas and Propagation Society Undergraduate Research Award (due April 1 and Nov. 1)
- IEEE Antennas and Propagation Society Design Contest
- IEEE Microwave Theory and Techniques Society Undergraduate Scholarships
- (for U.S. citizens) Science, Mathematics and Research for Transformation (SMART) Scholarship (Department of Defense)
- Computing Research Association Outstanding Undergraduate Researchers Award
- (for women) American Association of University Women Fellowships and Grants
- (for women) check fellowship, scholarship, and award opportunities listed with the Society of Women Engineers
- (for minorities) HSF/Marathon OIl Corporation College Scholarship Program
- (U.S. citizens only) Be added to an existing NSF grant awarded to a professor: NSF Research Experience for Undergraduates
- (U.S. citizens and Permanent Residents) Blue Waters student internship program (1-year program)
Post-Docs:
- (U.S. citizens and Permanent Residents) Blue Waters Graduate Fellowship Program
- University of Utah Financial Aid and Scholarships Website
- UofU Graduate Fellowships
- Check the U's College of Engineering list of third party scholarships
- Conference student paper contests
- (for U.S. citizens) NASA Space Technology Research Fellowship
- check the UofU Alumni Association scholarship list
- (for U.S. citizens) National Science Foundation Graduate Research Fellowship
- IEEE Antennas and Propagation Society Pre-Graduate (Pre-Ph.D.) and Graduate Research Award (due April 1 and Nov. 1)s
- IEEE Antennas and Propagation Society Design Contest
- IEEE Microwave Theory and Techniques Society Pre-Graduate (Pre-Ph.D.) Scholarships
- IEEE Microwave Theory and Techniques Society Graduate (Ph.D.) Fellowship Awards
- (for U.S. citizens and permanent residents) Semiconductor Research Corporation
- IBM Ph.D. Fellowship Awards Program
- Microsoft Research Ph.D. Fellowship Program
- (for U.S. citizens) Truman Fellowship (3-year fellowship in national security science and engineering, for recent Ph.D. graduates)
- (for U.S. citizens) Department of Energy Graduate Fellowship Program
- Summa Foundation Graduate Fellowships in Advanced Electromagnetics
- (for U.S. citizens) Hertz Fellowship
- (for U.S. citizens) Science, Mathematics and Research for Transformation (SMART) Scholarship (Department of Defense)
- (for women) American Association of University Women Fellowships and Grants
- (for women) Microsoft's Graduate Women's Scholarship Program
- (for women) check fellowship, scholarship, and award opportunities listed with the Society of Women Engineers
- (for minorities) National GEM Consortium M.S. Engineering Fellowship
- (for minorities) NASA Harriett G. Jenkins Predoctoral Fellowship
- (for minorities and U.S. citizens) Be added to an existing NSF grant awarded to a professor: NSF Graduate Research Supplement (renewable for up to 3 years)
-> back to content
- (for females) L'Oreal USA Fellowships for Women in Science
Recommended Courses (working list):
You should take classes that will best prepare you for your research topic and future career. Make sure you discuss these with Prof. Simpson, and make her aware of what topics or areas you are not yet comfortable with so that we can plan out the best course of study for you as you pursue your degree. Below are some courses to consider (especially those in red font).
Undergraduates:
Graduate Students:
- ECE 4900, Research Credit
- ECE 3300, Fundamentals of Electromagnetics and Transmission Lines
- ECE 5340, Numerical Methods in Electromagnetics
- CS 4230, Parallel Programming
- ECE 5320, Microwave Engineering I
- ECE 5321, Microwave Engineering II
- ECE 5324, Antenna Theory and Design
- ECE 5962, Metamaterials and Advanced Antenna Theory
- ECE 5411, Optical Communication Systems
- ECE 5480, Principles of Ultrasound
- ECE 5962, Optics for Energy
- ECE 5960, Fabrication and Characterization Techniques for Nanostructures
- GEO 5240, Physical Fields II: Electromagnetic Methods
- GEO 5250, Inversion Theory and Applications
-> back to content
- ECE 6970/7970: If you are an RA (doing research on a funded project) you should register for 6970 or 7970 research credits. Max is 9 credits per semester of 6970/7670, but register for less in the beginning of your program and more later on because the tuition benefit will pay for courses for the first 84 credits. Talk to Megan McAllister with questions.
- If English is a Second Language: consider taking EAS-6050, Advanced Spoken English, as needed
- ECE 6340, Numerical Methods in Electromagnetics
- ECE 6322, Microwave Engineering I
- ECE 6323, Microwave Engineering II
- ECE 6324, Antenna Theory and Design
- ECE 6310, Advanced Electromagnetic Fields
- MATH 5620, Numerical Analysis 2
- CS 6230, Parallel Programming HPC
- CS 6963, Parallel Programming for GPUs
- CS 6235, Parallel Programming for Many-Core Architectures
- CS 6160, Computational Geometry
- GEO 6240, Physical Fields II: Electromagnetic Methods
- GEO 6250, Inversion Theory and Applications
- For optics, biophotonics, nano:
- ECE 6461, Nanophotonics
- ECE 6460, Biophotonics
- ECE 6451, Nonlinear Optics
- ECE 6450, Ultrafast Optics
- ECE 6440, Integrated Optics and Optical Sensors
- ECE 6430, Statistical Optics, Interferometry, and Detection
- ECE 6420, Fourier Optics and Holography
- ECE 6961, Optics for Energy
- ECE 6960, Fabrication and Characterization Techniques for Nanostructures
Ph.D. Qualifying Exam Hints:
- Your presentation should take about 35 min. (timed without questions from the committee). Expect many questions from the committee during your presentation.
- Keep in mind that there could be errors in the papers you are reviewing. Don't assume everything in the papers is correct.
- Do not just regurgitate what is in the papers. Instead, understand and explain how, why, the significance of the research, its relation to your research, etc.
- Do not necessarily show in your presentation every equation and figure published in the papers. Determine the main points of the paper that you want to describe, and show only those needed to support your main points.
- Understand where the equations in the papers come from, and why the authors chose to use those equations. Also understand each variable in the equations and the form of the equations.
- Understand the figures you put in your presentation. Does the behavior of the waveforms make sense? Why and how did the authors get those results? How would the results change if different values or parameters were used?
- Read through and study in detail as needed the references of the papers.
- What follow-on / future work could be performed relating to the content of the papers?
-> back to content
Typical Conferences We Attend:
- IEEE Antennas and Propagation International Symposium and USNC/URSI National Radio Science Meeting (rotates locations, see here for list of upcoming conferences (Note the abstract / paper submission deadline is in mid-January!)
- USNC/URSI National Radio Science Meeting held annually in Boulder, CO in January (Here is the conference website. Note the abstract submission deadline is in September, including the student paper competition). Do not forget to apply for student travel support when submitting your abstract.
- Other conferences are attended by our group depending on the topic of your project, such as the AGU Fall Meeting in December annually in San Francisco or the International Conference on Electromagnetics in Advanced Applications (ICEAA).
-> back to content
Summer School Options:
- NASA Heliophysics Summer School
- Incoherent Scatter Radar Summer School
- Los Alamos Space Weather Summer School
-> back to content
Presenting:
- Ask yourself:
- What is my main point? (What do I want the audience members to remember most if they only remember one thing.)
- What is the fundamental purpose of my talk? Why is my work important?
- How much time do I have to present? (typically 17 minutes at conferences, leaving 3 minutes for questions)
- Who is the audience? What is their background? How can I tailor my talk to this specific audience?
- Why was I asked to speak? Or, why did I decide to speak?
- It is often a good idea to include your primary result(s) towards the beginning of your talk before diving into the details of how you obtained them.
- What visual medium is most appropriate for this particular situation and audience? (typically PPT or posters at conferences)
- Know your material inside and out.
- Practice, practice, practice! Practice in front of someone, or at a minimum standing up in front of an empty room as if your audience is there. Also, make sure you can get through your material in the time allotted without rushing.
- Don't overwhelm your audience with equations. It will be difficult for them to absorb too many equations in one presentation.
-> back to content
Publishing:
- If you used CHPC resources to obtain your results, make sure to include an acknowledgement: "The support and resources from the Center for High Performance Computing at the University of Utah is gratefully acknowledged."
- If Prof. Simpson used research funds to support you as you performed the research, then make sure to include an acknowledgement to the funding source.
- If your first language is not English, please meet with the writing center to get the English in your paper corrected unless your English writing skills are very strong: writing center, and / or try to get a native English speaker to review your document before providing it to Prof. Simpson to review. (Ask them to keep the manuscript confidential!)
- If you want to get positive reviews, think about what the reviewers need: easy to read and understand; no typos; they need to believe and get excited about your work. Remember, they are volunteering their time to review your paper! Think about why they review proposals -- get excited about good ideas, care about the field...
- It should go without saying that you should not copy any text / figures / etc. from any sources without citing the source. Also, do not use identical text from a source even if it is cited! You need to write out what you want to say in your own words.
- Before giving Prof. Simpson a draft paper to review, make sure to check the document using a spell checker. As you progress through your studies, Prof. Simpson will likely need to make less corrections and changes to your papers.
- Don't be discouraged if you get negative reviews. Some reviewers are very crictical, even of good work. An identical paper can get both fantastic and horrid reviews, depending on who is chosen to review the article, their background, expertise, and demeanor. View their comments as constructive feedback as much as possible, and revise and resubmit!
-> back to content
Proposal Writing:
- Grantsmanship = Salesmanship; Sell an idea to a funding agency based on a critical need within their mission.
- Personalize / tailor your biosketch for each proposal.
- Meet the reviewer's needs: easy to read, no typos, clearly point out innovation and importance of work, make them believe. Remember, they are volunteering their time to review your proposal! Think about why they review proposals -- get excited about good ideas, care about the field...
- For the budget, propose what would be reasonably needed without going over the maximum amount (if there is one). If there isn't a maximum amount stated, propose what you would reasonably need, and the funding agency will cut it down if needed.
- How will you measure success?
- Include letters of support for collaborations.
- For large projects, you could propose to have an advisory board for the project that meets every year or so.
- For NSF:
- include what science questions you're going to address
- usually, three objectives are clearly written out
- For NIH:
- Comprised of 27 different institutes and centers. Submit to the one that best fits the proposed work.
- Need detailed clinical applicability / feasibility plan.
- Check the proposal assignment 2-3 weeks after submitting to make sure it was assigned to correct institute / center.
- Two strikes and you're out: if a proposal is declined twice, you can't submit another proposal on the same topic. If first one is declined, it's hard to recover because reviewers on second proposal know results of first proposal.
- Only the top 40-50% are even discussed.
- Specific Aims -- make a promise; state problem and significance and innovation, how uniquely qualified; state aims (going to learn ** by doing **); state outcome / impact. Remember, most reviewers will only see your specific aims! Also, your aims should not be dependent on each other.
- Research Strategy -- Deliver on that promise: Significance (1/2 to 1 pg, tailored to mission of each aim); Innovation (1/2 pg; why original and exciting, how will create paradigm shift, creative, uniquely qualified to perform the proposed work); Approach (10 pgs or 5 pgs for shorter proposals, relevant preliminary data, experimental approach, discuss strategy OR approach, aim, hypothesis, exp. design, methods, preliminary data, potential problems, expected results, impact)
-> back to content
FDTD and Debugging Notes:
- Run all codes with the flag "-O3" (or equivalent) so that the code runs faster.
- DEBUGGING:
- Make sure you save different versions of your code, even as you are developing a code. This helps so that you can go back to an earlier version of your code if you suddenly get something like a segmentation fault that you can't fix (i.e. "break" your code, which sometimes happens).
- Always use "implicit none" in your FORTRAN programs. This ensures that your program doesn't create a new varaible every time a variable is misspelled.
- Make small changes to your code at a time and carefully test the code after each small change. If you make too many changes at once and the code does not work right or goes unstable, it can be very hard to find where the problem is and you may waste a lot of time trying to find it (or you could have multiple bugs). You can actually save a lot of time by making small changes and testing after each change than if you try to do everything all at once.
- The best way to debug is to run as few number of time steps as possible (even after just 1 to 3 time steps if you're testing for symmetry). Note: your results may not be perfectly identical / symmetrical for the last 1-2 decimal places even for cases where you would expect them to be because of machine precision. If you aren't just testing for symmetry, you may want to run your code for just 20 or 50 time steps to make sure the source is where it should be and the generated EM wave is propagating correctly.
- Useful flags (Note, these will slow down your code! Only use when debugging):
Use "-check bounds" to see if trying to access an array beyond its size.
Use "-traceback" to get more info on an error
Use "-wall" to get runtime errors and sometimes additional information.- Order your do loops (when using FORTRAN) in the following order for optimal computational performance: k,j,i (or 3rd, 2nd, and 1st dimension, for field_value(i,j,k))
- 64-bit processor = 8 bits / byte, 16 bytes / word (15 significant figures), 1 word = 1 real number
32-bit processor = 8 bytes / word (7 significant figures)- You should only use 75% of the available memory. The remainder should be reserved for running the machine.
(# bytes on computer) X (0.75) / (# bytes / word) --> (# words) / (# stored values per cell) --> find max # grid points you should put on each processor
If you start using virtual memory, your code will slow down substantially or crash.
So far, the largest code our group has run was on encanto using 384 processing cores and a grid size of 2400 x 2400 x 1740.- 1st-order accuracy --> error drops linearly
2nd-order accuracy --> Yee grid
4th-order accurate --> Hexagonal grid- Try to dynamically allocate arrays, so can save on memory when arrays not needed:
real, pointer :: temp(:,:)
allocate(temp(1:100,1:100))
deallocate(temp)- DDT is a symbolic, parallel debugger that allows graphical debugging of MPI and OpneMP applications.
-> back to content
MATLAB Notes:
- "unwrap" command to unwrap phase plot that jumps by 2*pi
-> back to content
Paraview (Plotting) Notes:
-> back to content
Linux Notes:
- >> man (command name)         --> access manual pages, gives description of command
- Some basic commands:
- >> ls         --> list files in directory
- >> cd (directoryname)         --> change to directory 'directoryname'
- type first few letters of a filename and hit the TAB key to autocomplete (as long as there isn't more than one match from the letters you type)
- >> mkdir (newdirectoryname)         --> creates a new directory having the name 'newdirectoryname'
- >> mv (oldfilename) (newfilename)         --> move a file to have a new name (Careful: will overwrite 'newfilename' if exists already!)
- >> mv (filename) (directory)         --> move a file into a directory (Careful: will overwrite file in 'directory' if exists already!)
- >> cp (filename1) (filename2)         --> copies filename1 to filename2 (Careful: will overwrite 'filename2' if exists already!)
- >> top         --> display top CPU processes
k -9 (number)         --> kill process running on the computer corresponding to the id number- >> history         --> lists commands previously made
- >> rm -r (directory name)        --> remove a directory even if files in it
- >> diff (filename1) (filename2)         --> compares two files and writes notes to screen line numbers and text indicating where and how they are different
- >> ps         --> see which shell running (csh, ksh, bash)
- >> setenv (variable) (value)         --> set environment variable
- >> reset         --> if output is garbled, will reset terminal
- >> du -sk /directoryname         --> see how much consuming in kB
- >> du -k /directoryname         --> see how much consuming in kB and lists all files
- >> du -s lsort -n -r | more         --> lists directory sizes starting with largest (in kB)
- Text editors: gvim, vim, emacs, pico, nano
- Copy files using FUGU, SCP (terminal), or winscp (Windows)
[if on computer having the file wanting to copy to other computer, and to keep filename same]:
scp (filename) (username)@(computername):(directory)/.
[if instead on computer where want to copy file to, and to keep filename same]:
scp (username)@(computername):(directory)/(filename) .
Can put a new filename instead of using "."
Note: Pay attention to which direction between computers you copy the file. If you use the same filename on both machines, you could accidentally overwrite the wrong file.
-> back to content
FORTRAN Compiler Notes:
- Always check your code to make sure no matrices are accessed out of bounds and to get information about any errors (BUT MAKE SURE TO REMOVE THESE FLAGS FOR PRODUCTION RUNS BECAUSE THEY SLOW DOWN THE CODE SIGNIFICANTLY!):
Intel: -check bounds -tracebackk
GNU: -fbounds-check -fbacktrace
PGI: -C
- Time your code by running it 100 (or more) time steps and seeing how long just the time-stepping takes. Use this to esimate how long a longer run will take. However, note that the updates take longer when there are non-zero field components, so for larger grids, you should run the test case longer to estimate the time more time steps will take (since far away from the source there will still be non-zero components for a short number of time steps).
- If you want to use a FORTRAN compiler on your laptop before using the supercomputers, some free versions include Silverfrost (personal edition, Plato) for Windows and gfortran for Linux:
If you are familiar with Windows but not Linux, and simulation run-time is not an important concern, then use the Silverfrost compiler since it is simple to install and use (including a integrated development environment - Plato - for both editing and compiling the code). http://www.silverfrost.com/32/ftn95/ftn95_personal_edition.aspx
Otherwise, if you need a fast compiler, then gfortran is a good choice. The run-time is about 10 times faster than Silverfrost compiler for my codes. But you must be familiar with Linux. You can also install Cygwin - a Unix-like environment and command-line interface for Windows to use gfortran in Windows. https://gcc.gnu.org/fortran/- ifort (program name)         --> when using the Intel compiler
- Can use flag -r8 or the like to run a code at double precision without having to go in and change each real number to double precision
Note: For MPI codes, can use -r8, but also need to change all the send/recv commands to have MPI_REAL8 instead of MPI_REAL!- Here is an example online tutorial you can use to learn FORTRAN (or just google FORTRAN tutorial): http://www.fortrantutorial.com/
- Unit numbers 100, 101, and 102 are permanently associated with the standard input, standard output, and standard error files, respectively. Do not use these unit numbers for opening / closing your own output files.
-> back to content
Lab Computer Notes:
- You can access remotely using ssh or similar: In a terminal, type "ssh username@computername"
- ulimit -s unlimited         --> allows you to run a larger code than otherwise, just be careful?
- To log out of the computer and keep your code running:
>> nohup ./a.out > run.dat &
(anything that would be written to the screen will be dumped into the file run.dat)- For Running MPI Codes on Lab Computers:
Do this once only:
>> $HOME
>> touch .mpd.conf
>> chmod 600 .mpd.conf
>> vim .mpd.conf
in this file, type: MPD_SECRETWORD=fdtd
After doing the above, or at any other time you want to run an MPI code, type:
>> mpd &
Then you can compile and run your mpi code.
To see if the mpd daemon is running correctly:
>> ps -aef | grep mpd
To see how many cores are available for processing:
>> cat /proc/cpuinfo | grep processor | wc -l
And finally, to run your code (example with 4 processors):
>> mpirun -np 4 ./a.out
-or- depending on the machine use:
>> mpiexec -np 4 ./a.out
-> back to content
Parallelization Notes:
- If need to use fewer processors than reserving, use "set env NPROCS 128" or something similar (ex. if reserving 130 processors but using 128 in the model)
- DDT is a symbolic, parallel debugger that allows graphical debugging of MPI and OpenMP applications.
- To debug, you can use the Totalview debugger. If using a Mac, log in with "-X" to turn on tunneling.
- MPI:
- The CHPC on campus has slides posted on their website and periodically runs info sessions on using MPI. Take advatage of these resources and get on the CHPC listserv to learn about upcoming events.
- Run using
mpif90 (program name)
mpif90 datadefine.f subroutines.f mpiFDTD3d.f- Time part of a run:
t1 = MPI_WTIME()         --> make sure to declare t1 and t2!
t2 = MPI_WTIME()
write(*,*)"Total time (in seconds)=", t2-t1- Can try to use MPI_BARRIER(MPI_COMM_WORLD,ierr) to synchronize all processes before going on, but it is known to not always work correctly. Also, if not all processes reach this command (for example, if it is in an if statement that isn't true for all processes), the code will hang.
- Make sure to have call MPI_FINALIZE(ierr) at end of code or else you won't leave the supercomputer in a good state and the IT folks will get upset.
- If you want to monitor the memory, try:
qstat -m -u (username)
ssh {top node}
top
ctrl-c         --> to go back to home node
exit- OpenMP (mostly for shared memory computers)
pgf90: -mp
ifort: -openmp
gcc: -fopenmp
For running codes on CPUs. Add simple commands (parallelizing hints) into your code as comments, but in a way that OpenMP will see them and will use them to parallelize your code for you. This is a means to avoid having to do tedious coding using MPI. Also, the same OpenMP code can run on a single processor (since the commands are added in as comments) as well as a computing cluster.
Avoid nested "if" statements.- OpenACC
For running codes on GPUs (known to run FDTD simulations faster than CPUs).
Note that moving data between the CPUs and GPUs is slow (bottleneck) and should be kept to a minimum.
Avoid nested "if" statements.
OpenACC Will be rolled into OpenMP 4.0
-> back to content
University of Utah Campus Supercomputer Notes:
2014: If for some reason we don't have SU's or you don't want to use our units, then you can submit jobs to sunddunearch, which is a cluster that everyone has access to who has an account on ember and it doesn't use allocation units.
- Use as short of a walltime as possible without jeopordizing your job not finishing in time (otherwise the scheduler will kill your job before it completes). The reason to use a small walltime when possible is because the schedule will run jobs out of order to backfill (fill in shorter jobs when longer jobs complete early).
- Always perform initial debugging and testing on your desktop before moving your code over to the supercomputers.
- When logging on, use your UNID with a lower case "u" in front.
- Make sure to store your results in a secure location when your job completes and to remove any files you no longer need. Some disk space is cleaned regularly, and you will lose your data and codes if you don't store your files in the correct directories.
- You will need to request an account through the CHPC website to get access to any of these supercomputers. Prof. Simpson will be asked to approve the request by CHCP.
- In general, you will want to only read from or write data to files at the very beginning or end of your code. Avoid writing data to files every time step or during time stepping (unless it's an isolated event) because this will slow down your code considerably.
- Click here for more info on our campus supercomputers and how to get access.
- Ember: ssh username@ember.chpc.utah.edu
- Note ember has 12 cores per node.
- There are 6 avaialble GPU nodes on ember (em519-em524). Each has 2 GPU cards of the type M2090 (Fermi generation). The PCUs are identical to the rest of the Ember cluster. Four of the 6 GPU nodes (em519-em522) are onlly used for production runs (max walltime:72h). The remaining 2 GPU nodes (em523 and em524) can be used during office hours for compilation and testing (max wellatime: 1h). Outside of office hours, they are also production run nodes.
CUDA version 4.2 is installed on the GPU nodes. Thus, to compile a GPU code, the GPU nodes must be accessed interactively:
qsub -I -l walltime=01:00:00 -A general-gpu
The OpenACC paradigm can currently only be used with the pgi compilers (pgf90).
To use GPU's, add to your batch scripts:
#PBS -A general-gpu- Ember User Guide is here
- To debug, you can use the Totalview debugger. If using a Mac, log in with "-X" to turn on tunneling.
-> back to content
Math and Data Resources:
Signal Processing:
- Discrete-Time Signal Processing by Alan V. Oppenheim and Ronald W. Schafer book, which I borrowed from the library.
- Lecture Series: Link
Measurements and Data Access:
- Worldwide Archive of Low-Frequency Data and Observations: WALDO
- The Madrigal Database: It has all experiments that happen in space physics: Link
- Youtube video about Madrigal: Link
- Incoherent scatter radar experiments using the two devices: Link
- The link to all resources of Incoherent scatter Radar: Link
-> back to content
GNU Plot:
--> good for plotting data on node without having to open MATLAB, etc.
www.gnuplot.info
plot sin(x)
plot [x1:x2] [y1:y2]
set autoscale y
set logscale y
show logscale
set nologscale y
set file "File Graph"
save "mywork.gnu"
load "work.gnu"
plot "fileA.dt" using 1:2 title 'dataA'
set xlabel "label"
set xtics (0.02, 0.04, 0.06)
unset xtics
set xtics auto
To print:
set out "file.ps"
load 'saveplot'
!lpr -Pteerlpl file.ps
-> back to content
Opendx:
For creating plots not easily done in MATLAB (such as graphing the radial E components around the Earth from the latitude-longitude FDTD Earth-ionosphere model)
www.opendx.org
www.tc.cornell.edu/services/edu/topics/OpenDX/
To start program: "dx &"
download sphere.net from www.research.ibm.com/dx/bonuspak/html/bonuspak226.html#HDRAP6
Use with import -->sphere --> autocolor --> image
Will interpolate between grid values only if connection between them.
To make a movie, use "ForEachMembero" to graph each view, and to record each figure to a file use image --> render --> writeimage
Edit > Pages > blank page to help organize long program. Use transmitter, receiver to communicate between.
-> back to content
Cloth Posters:
Below are my detailed steps to success with the cloth posters. The procedure that I went through uses a lot of image processing. It really depends on what program you are creating the posters, but certain programs (MS Office) make it hard to do what we need to get the poster files ready. Note that I used spoonflower.com to make the poster.
1. Create poster in powerpoint, inkscape, or adobe illustrator just as you would if you were making the poster for a paper printer. Take care when choosing the dimensions of the poster, not everything will work! Read the extra notes below to understand why.
2. Export the file into a png file with at least 300 dpi. Note that this is going to be a huge file for an image. For instance, if you have a 42" x 42" poster then you would end up with an image size of 12600 x 12600 pixels. There are many ways that you can do the export. Unfortunately I do not know of a direct way in powerpoint, but the most surefire way to get the job done is:
a) Export the poster file as a pdf from whatever program you are using
b) Import the pdf file into another graphics program such as photoshop or gimp with your desired resolution (I recommend 300 pixels per inch)
c) Save the file as a png (this png file will be large, e.g. 15-35 MB)
3. Now comes the tricky part: you have to resize the image to fit the cloth properly. For my case, I had a WxH = 36-inch x 42-inch, but the cloth is cut by the yard, and the width of the cloth is 56 inches (this will depend on what material you choose). So I had to do a few things:
a) I rotated the image so that the width of my poster was along the length of the cloth. The 36-inch dimension of my poster fit perfectly into the yard of cloth.
b) Next, I added white space to center my poster on the cloth as desired. I made the poster file have dimensions of 56 x 36 inches (note that I am accounting for the rotation which is why the 36 inches appears in the height)
4. Go to spoonflower.com and click Create > Custom Fabric. Upload your file.
5. There are several options. Under the Repeat selection, chose "Center". Click "Design DPI" and type in your Dot per inch (DPI) used in your image.
6. Choose your fabric type, and make sure that the "Size and Amount" reads "Yards (56in width)". Write the number of yards you want printed.
7. Click Add to Cart and finish the checkout
Extra notes:
For spoonflower.com, they only print by whole yards. This means that you are limited in the dimensions that you can actually print. Also, the width of the cloth is dependent on the material you chose. We chose performance knit, which has a width of 56". As an example, my original poster size was 42 x 42 inches, but I realized that I would have to print 2 yards if I chose these dimensions. Thus, I reformatted my poster to fit within W x H = 36 x 42 inches. This ensured that one of the dimensions was less than or equal to a yard.
As discussed in step 3, I had to do some image processing to get the other dimension equal to 56 inches because spoonflower does not do extra cutting or cloth processing afterwards. The reason for this was mainly due to a lack of flexibility in their online software for configuring the image. Also, I knew that the size of cloth I would receive in the mail was going to be 36" x 56", which meant that there was going to be a lot of white space since my poster only covered 36 x 42 inches of the cloth. I did the extra image processing to force the printer to put the white space on the bottom of the poster so that we could simply roll up the extra length and pin to the poster mounting board.
-> back to content