# GWaves Manual 0.1

2024 2025 2026 Gerardo Ballabio

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in .

Gerardo Ballabio
Version 0.1
June 2026
This manual describes version 0.1 of GWaves.

## Introduction

GWaves is a program that displays atomic orbitals. You can view them from any direction, zoom in and out, and choose among several display modes, including a unique "electron animation" mode. Quantum numbers up to n = 9 and l = 6 are covered.

GWaves is free software, released under the terms of the GNU General Public License, version 3 or later. This essentially means that you can use, modify and redistribute it without restrictions, except that you are required to pass along the same freedom to everybody to whom you redistribute it.

GWaves is hosted at Savannah, the software forge for people committed to free software.

### Legal Notice

Copyright 2024, 2025, 2026 Gerardo Ballabio

GWaves is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

GWaves is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

A copy of the license is included in .

## How to Install

The most recent version of GWaves can be downloaded from the GWaves web site: https://www.nongnu.org/gwaves/

The easiest way is to install a precompiled binary, if that is available for your platform (see ). Otherwise, you'll have to download the source code and compile it (see ).

### Supported Platforms

GWaves is supposed to run on every system where the software libraries it depends on are available (see ). This includes (but is not limited to) GNU/Linux, BSD, Microsoft Windows, and Mac OS X.

It has actually been tested on the following systems:

- Debian GNU/Linux stable, amd64 architecture (i.e., 64-bit PC). That is my own computer, thus it is and will remain the best supported platform in the foreseeable future.

- Microsoft Windows 11.

If you try it on another system, whether you succeed of fail, please let me know.

### Hardware requirements

I don't know exactly what the absolute minimum requirements are. Performance depends on the resolution at which the images are computed, so if you set it low enough, I expect GWaves to run decently even on low-end computers. The most computationally expensive part is the volume rendering: if you disable that, it should run much faster.

For reference, my current computer has a quad-core Intel i5-7400 CPU at 3.00 GHz, 8 GB of memory, and an Intel HD Graphics 630 graphics card, my screen has 1280×1024 resolution and a refresh rate of 60 frames per second, and GWaves keeps up with that when a 100×100×100 grid is used (note that interpolation is used between grid points, so the actual resolution of the image is much higher than 100×100 pixels).

### Binary Packages

At this moment, precompiled GWaves binaries are available for the following platforms:

- Debian GNU/Linux, amd64 architecture.

  If you run another Debian architecture, you may download the source package and rebuild it. If you send to me the compiled package (and swear that it does work correctly!), I may upload it to the GWaves web site.

  The Debian package may work also on Debian-based distributions, like Ubuntu and others. If you try, please let me know.

- Microsoft Windows: there is a GWaves binary that you can download and run, but there isn't a full installation package which will also install documentation files and make GWaves appear on the programs menu. The documentation is available on the GWaves web site anyway.

  The binary was built on Debian GNU/Linux using the MXE cross-compiling environment.

For other platforms, GWaves must be compiled from source (see ). I am willing to provide binary packages if someone volunteers to build and maintain them.

### Source Installation

To install GWaves from source, first you need to check that all its dependencies are installed on your system, and install any missing ones (see ). When you've done that, unpack the compressed archive file `gwaves-0.1.tar.gz` in a directory of your choice. Then open a command-line shell (console or terminal), change to the base directory of the unpacked source tree, `gwaves-0.1`, and type the following commands:

      ./configure
      make
      make install

`configure` has many command-line options by which you can specify where to install, where to find dependencies (you'll need this if they are installed in nonstandard places), which compiler flags to use, and so on. Run `./configure --help` for a complete list.

For the `make install` step, you need write permission on the installation directory. On GNU/Linux and other Unix-compatible systems, if you are installing in the standard place (i.e., under `/usr/local`), this means you must run that command as root (use `su` or `sudo`).

### Dependencies

In order to compile GWaves, the following packages must be installed on your system:

- A basic Unix environment, including the `make` utility

- g++ or another C++ compiler supporting at least the C++11 standard

- gtkmm 3

For all major versions of GNU/Linux, precompiled versions of these packages are available. Precompiled libraries are usually split into a "base" and a "development" package (the latter has a name ending with `-dev` or `-devel`). In order to compile GWaves, you must install both; while in order to run the compiled program, only the base packages are required. If you also want to be able to rebuild the HTML and PDF versions of the documentation, you'll need these too:

- xmlto

- dblatex (for the PDF version)

Package names for Debian 13 (Trixie):

- base package: `libgtkmm-3.0-1t64`,

- compiler and development packages: `make`, `g++`, `libgtkmm-3.0-dev`,

- documentation building tools: `xmlto`, `dblatex`.

Packages for other GNU/Linux distributions should have similar names, particularly for Debian-based distributions.

If you are installing a precompiled binary package (see ), you normally need not worry about having the necessary dependencies installed because the package management system takes care automatically.

I have never attempted a native Windows build. The Windows binary was built on Debian GNU/Linux using the MXE cross-compiling environment: that includes all the necessary dependencies.

## How to Use

I hope that the user interface is intuitive enough that most people can use GWaves without instructions. In case that isn't true, or in case you want to know more, instructions follow.

### Running GWaves

If you are running a graphical environment that supports the XDG menu specification (e.g., GNOME or KDE), you'll see an entry for GWaves in the system menus or in the equivalent function provided by your environment (Applications overview in Gnome 3 or later), and can start it by clicking on that. Otherwise, you may create a shortcut to the `gwaves` executable file on your desktop (if your environment allows desktop shortcuts), or open a file manager and browse to the directory where it was installed (typically `/usr/bin` or `/usr/local/bin` on GNU/Linux systems), or run it from the command line.

To get help on GWaves, click the Help button at the bottom of the side bar, or press F1. The GWaves Manual (i.e., this document) will be displayed. If you aren't running GNOME, this might not work; in any case an HTML version of the manual is shipped with the source tarball, and HTML and PDF versions are available on the GWaves web site.

To get basic information on GWaves, click the About button at the bottom of the side bar.

To quit GWaves, click the Close button at the bottom of the side bar, or press Q.

### Controls

In the Controls page of the side bar, you can select the atomic orbital on display and set various display modes.

To rotate the image, click and drag on the display window or use the arrow keys (←, →, ↑, ↓) and the Page Up, Page Down keys.

To zoom in or out, click and drag with the middle mouse button (drag away from the center to zoom in, towards the center to zoom out), or use the Home and End keys.

To restore the default point of view and scale, press 0 (that's zero, not letter O).

To select the atomic orbital on display, use the controls in the Orbital section to change the quantum numbers, or use the N, L, M keys to increase the respective numbers and Shift N, Shift L, Shift M to decrease them. The corresponding orbital label (e.g., 1s, 2pz, 3dx2-y2, etc.) is displayed in the box under the quantum numbers. The atomic number Z is always set to 1: I could allow for changing it, but only the scale would change and the orbital would look exactly the same, so I don't think that would add much.

When you select a new orbital or change any settings that trigger a recompute (see ), the orbital is computed in background and displayed when it is ready. The computation can take from a small fraction of a second to several seconds depending on the power of your computer and the current settings (in particular, the larger the grid size, the longer it takes). If it takes more than 0.5 seconds, a moving progress bar is shown under the display window until it is finished.

The atomic orbital can be displayed as a set of isosurfaces, or with volume rendering, or as electron animation, or any combination of them. Additionally, the Cartesian axes, the coordinate frame, and the scale bar can be displayed (spatial dimensions are in Angstroms; the scale is in Å-3/2). To turn each of them on or off, toggle the respective flag in the Visual elements section, or use the I key for isosurfaces, V for volume rendering, E for electron animation, A for the Cartesian axes, F for the coordinate frame, and B for the scale bar.

Keyboard controls work only if the display window has focus. That is necessary to prevent them from interfering with the sidebar controls. To make sure the display window has focus, simply click on it.

### Settings

In the Settings page of the side bar, you can change several parameters that determine how the orbitals are computed and displayed.

To change the number of points on which the orbitals are evaluated, use the controls in the Grid dimensions section, or use the G, S and T keys to increase size, step1 and step2 respectively, and Shift G, Shift S and Shift T to decrease them. Increasing size and decreasing step1 and step2 improves the definition of the displayed image, but makes the computation and display heavier: if your computer isn't powerful enough to keep up, the frame rate will decrease and the program (or even the entire system) might become less responsive.

To change the number of isosurfaces that are displayed, use the controls in the Isosurfaces section, or use the U key to increase the number and Shift U to decrease it.

To change the number of points that are displayed in the electron animation, use the controls in the Electron animation section, or use the P key to increase the number and Shift P to decrease it.

To change the number of threads that are run in parallel to compute the orbitals, use the controls in the Multithreading section, or use the H key to increase the number and Shift H to decrease it. Supposedly the optimal number is equal to the number of cores in your computer's processor. That impacts the computation of orbitals, that is, you'll have to wait more or less when you select a new orbital or change the grid parameters, but should have no effect on the display frame rate.

The current frame rate (updated every 2 seconds) is displayed in a box at the bottom of the page so that you can measure the impact of changing each parameter.

Also in this page, keyboard controls work only if the display window has focus. To make sure, simply click on it.

### GPlot

GPlot is a program for displaying a generic three-dimensional function. I wrote it as a "byproduct" of GWaves, reusing its display engine.

The values of the function are read from a file; the file name is specified as the first argument on the command line. Optionally, the grid dimensions can be specified as further command line arguments. If they aren't specified, they are deduced from the file format: the number of values on each row define the first dimension, while the second dimension is set by separating planes with an empty line. At this moment there is no way to set the coordinate ranges: they are all set to [-1:1]. I'll add that in a future version.

It would be great to also be able to input a formula and have GPlot compute the values, but that would be another nontrivial project. I might consider doing that in a future version.

The user interface is similar to that of GWaves. The main differences are:

- There aren't controls for the quantum numbers, because you aren't viewing atomic orbitals, so there are no quantum numbers here.

- You can't change the grid dimensions, because the grid is hardcoded into the file from which the function values are loaded.

- The grid can have different dimensions on the three axes, and the step1 and step2 parameters can also be set to different values on each axis. I didn't do that in GWaves because all atomic orbitals have roughly equal extents in all directions, so there isn't much point in using different scales.

- You can turn on or off clipping the plot to the viewing cube: to do that, toggle the flag in the Visual elements section, or use the C key. I didn't add this to GWaves because I don't think it is very useful there.

### Known issues

When running in a GNU/Linux system, there seems to be no way to reliably increase the grid size to the maximum that can fit into the available memory while at the same time making sure that GWaves doesn't crash. It seems that, when a program tries to allocate too much memory, under some limit the allocation still succeeds, so no exception is thrown, but when it actually tries filling the allocated segment with data, it is terminated. I presume that is the "Linux Out of Memory (OOM) Killer" taking action, combined with the fact that memory allocation in Linux is "virtual" until you actually write into it. To prevent that, I set the maximum grid size to 300: my current computer has 8 GB of RAM and I found that this makes sure not to exceed that limit. If you have more memory (and a powerful graphics card) and want to use it up, you can increase that number in the source code (look for it in `main.cc`) and recompile.

The Windows executable has a visualization bug: where semi-transparent items are drawn, the transparency is applied also to the window background, so any windows that are under the GWaves window show up behind the atomic orbitals. That is likely an issue with the MXE build of either Gtk+ or some OpenGL library, and fixing it is beyond my ability -- help would be much appreciated. To work around it, lay the GWaves window over a black window, or over no windows.

In Windows, the Help button doesn't work, because the Gnome help viewer isn't available and I couldn't figure out the right incantation to launch a browser programmatically (the standard Gtk+ interface for that doesn't work, I don't know whether that's an issue with Gtk+ itself or with the MXE build). To work around this, simply use a browser to view the manual from the GWaves web site, or the local copy shipped in the source tarball.

In Windows, GPlot reads the input file a lot slower than in GNU/Linux.

## How to Contribute

> "Freely you have received, freely give." (Matthew 10:8)

If you would like to help making GWaves better, you're welcome to contact me (see ). You must agree to license your contributions as free software under the license GWaves is released with (the GNU General Public License, version 3 or later).

## Contact Information

The GWaves web site is at https://www.nongnu.org/gwaves/

The project's page on Savannah is at https://savannah.nongnu.org/projects/gwaves

For any requests about GWaves, send email to gwaves-list@nongnu.org

To subscribe to the mailing list, or browse its archives, go to https://lists.nongnu.org/mailman/listinfo/gwaves-list

## Physics Reference

The real solutions of the Schrödinger equation for the hydrogen-like atom are of the form:

> ψn,l,m(r,θ,φ) = Rn,l(r) Yl,m(θ,φ)

where the Rn,l(r) are called the radial wave functions, and the Yl,m(θ,φ) are real spherical harmonics. The latter are also called s, p, d, f, g... for l = 0, 1, 2, 3, 4... respectively.

Radial wave functions (Z is the atomic number, a0 is the Bohr radius):

> R1,0(r) = 2 (Z/a0)3/2 exp(-Zr/a0)

> R2,0(r) = (1 / sqrt(2)) (Z/a0)3/2 ( 1 - (1/2) (Zr/a0) ) exp(-Zr/2a0)

> R2,1(r) = (1 / (2 sqrt(6))) (Z/a0)3/2 (Zr/a0) exp(-Zr/2a0)

> R3,0(r) = (2 / (3 sqrt(3))) (Z/a0)3/2 ( 1 - (2/3) (Zr/a0) + (2/27) (Zr/a0)2 ) exp(-Zr/3a0)

> R3,1(r) = (8 / (27 sqrt(6))) (Z/a0)3/2 (Zr/a0) ( 1 - (1/6) (Zr/a0) ) exp(-Zr/3a0)

> R3,2(r) = (4 / (81 sqrt(30))) (Z/a0)3/2 (Zr/a0)2 exp(-Zr/3a0)

> R4,0(r) = (1 / 4) (Z/a0)3/2 ( 1 - (3/4) (Zr/a0) + (1/8) (Zr/a0)2 - (1/192) (Zr/a0)3 ) exp(-Zr/4a0)

> R4,1(r) = (5 / (16 sqrt(15))) (Z/a0)3/2 (Zr/a0) ( 1 - (1/4) (Zr/a0) + (1/80) (Zr/a0)2 ) exp(-Zr/4a0)

> R4,2(r) = (1 / (64 sqrt(5))) (Z/a0)3/2 (Zr/a0)2 ( 1 - (1/12) (Zr/a0) ) exp(-Zr/4a0)

> R4,3(r) = (1 / (768 sqrt(35))) (Z/a0)3/2 (Zr/a0)3 exp(-Zr/4a0)

> R5,0(r) = (2 / (5 sqrt(5))) (Z/a0)3/2 ( 1 - (4/5) (Zr/a0) + (4/25) (Zr/a0)2 - (4/375) (Zr/a0)3 + (2/9375) (Zr/a0)4 ) exp(-Zr/5a0)

> R5,1(r) = (8 / (25 sqrt(30))) (Z/a0)3/2 (Zr/a0) ( 1 - (3/10) (Zr/a0) + (3/125) (Zr/a0)2 - (1/1875) (Zr/a0)3 ) exp(-Zr/5a0)

> R5,2(r) = (28 / (625 sqrt(70))) (Z/a0)3/2 (Zr/a0)2 ( 1 - (2/15) (Zr/a0) + (2/525) (Zr/a0)2 ) exp(-Zr/5a0)

> R5,3(r) = (16 / (9375 sqrt(70))) (Z/a0)3/2 (Zr/a0)3 ( 1 - (1/20) (Zr/a0) ) exp(-Zr/5a0)

> R5,4(r) = (4 / (140625 sqrt(70))) (Z/a0)3/2 (Zr/a0)4 exp(-Zr/5a0)

> R6,0(r) = (1 / (3 sqrt(6))) (Z/a0)3/2 ( 1 - (5/6) (Zr/a0) + (5/27) (Zr/a0)2 - (5/324) (Zr/a0)3 + (1/1944) (Zr/a0)4 - (1/174960) (Zr/a0)5 ) exp(-Zr/6a0)

> R6,1(r) = (35 / (54 sqrt(210))) (Z/a0)3/2 (Zr/a0) ( 1 - (1/3) (Zr/a0) + (1/30) (Zr/a0)2 - (1/810) (Zr/a0)3 + (1/68040) (Zr/a0)4 ) exp(-Zr/6a0)

> R6,2(r) = (7 / (162 sqrt(105))) (Z/a0)3/2 (Zr/a0)2 ( 1 - (1/6) (Zr/a0) + (1/126) (Zr/a0)2 - (1/9072) (Zr/a0)3 ) exp(-Zr/6a0)

> R6,3(r) = (1 / (972 sqrt(35))) (Z/a0)3/2 (Zr/a0)3 ( 1 - (1/12) (Zr/a0) + (1/648) (Zr/a0)2 ) exp(-Zr/6a0)

> R6,4(r) = (1 / (104976 sqrt(7))) (Z/a0)3/2 (Zr/a0)4 ( 1 - (1/30) (Zr/a0) ) exp(-Zr/6a0)

> R6,5(r) = (1 / (3149280 sqrt(77))) (Z/a0)3/2 (Zr/a0)5 exp(-Zr/6a0)

> R7,0(r) = (2 / (7 sqrt(7))) (Z/a0)3/2 ( 1 - (6/7) (Zr/a0) + (10/49) (Zr/a0)2 - (20/1029) (Zr/a0)3 + (2/2401) (Zr/a0)4 - (4/252105) (Zr/a0)5 + (4/37059435) (Zr/a0)6 ) exp(-Zr/7a0)

> R7,1(r) = (8 / (49 sqrt(21))) (Z/a0)3/2 (Zr/a0) ( 1 - (5/14) (Zr/a0) + (2/49) (Zr/a0)2 - (2/1029) (Zr/a0)3 + (2/50421) (Zr/a0)4 - (1/3529470) (Zr/a0)5 ) exp(-Zr/7a0)

> R7,2(r) = (12 / (343 sqrt(105))) (Z/a0)3/2 (Zr/a0)2 ( 1 - (4/21) (Zr/a0) + (4/343) (Zr/a0)2 - (2/7203) (Zr/a0)3 + (1/453789) (Zr/a0)4 ) exp(-Zr/7a0)

> R7,3(r) = (16 / (16807 sqrt(42))) (Z/a0)3/2 (Zr/a0)3 ( 1 - (3/28) (Zr/a0) + (1/294) (Zr/a0)2 - (1/30870) (Zr/a0)3 ) exp(-Zr/7a0)

> R7,4(r) = (44 / (1058841 sqrt(154))) (Z/a0)3/2 (Zr/a0)4 ( 1 - (2/35) (Zr/a0) + (2/2695) (Zr/a0)2 ) exp(-Zr/7a0)

> R7,5(r) = (8 / (12353145 sqrt(231))) (Z/a0)3/2 (Zr/a0)5 ( 1 - (1/42) (Zr/a0) ) exp(-Zr/7a0)

> R7,6(r) = (4 / (259416045 sqrt(3003))) (Z/a0)3/2 (Zr/a0)6 exp(-Zr/7a0)

> R8,0(r) = (1 / (8 sqrt(2))) (Z/a0)3/2 ( 1 - (7/8) (Zr/a0) + (7/32) (Zr/a0)2 - (35/1536) (Zr/a0)3 + (7/6144) (Zr/a0)4 - (7/245760) (Zr/a0)5 + (1/2949120) (Zr/a0)6 - (1/660602880) (Zr/a0)7 ) exp(-Zr/8a0)

> R8,1(r) = (7 / (64 sqrt(14))) (Z/a0)3/2 (Zr/a0) ( 1 - (3/8) (Zr/a0) + (3/64) (Zr/a0)2 - (1/384) (Zr/a0)3 + (1/14336) (Zr/a0)4 - (1/1146880) (Zr/a0)5 + (1/247726080) (Zr/a0)6 ) exp(-Zr/8a0)

> R8,2(r) = (21 / (512 sqrt(210))) (Z/a0)3/2 (Zr/a0)2 ( 1 - (5/24) (Zr/a0) + (5/336) (Zr/a0)2 - (5/10752) (Zr/a0)3 + (5/774144) (Zr/a0)4 - (1/30965760) (Zr/a0)5 ) exp(-Zr/8a0)

> R8,3(r) = (11 / (4096 sqrt(462))) (Z/a0)3/2 (Zr/a0)3 ( 1 - (1/8) (Zr/a0) + (1/192) (Zr/a0)2 - (1/11520) (Zr/a0)3 + (1/2027520) (Zr/a0)4 ) exp(-Zr/8a0)

> R8,4(r) = (11 / (294912 sqrt(154))) (Z/a0)3/2 (Zr/a0)4 ( 1 - (3/40) (Zr/a0) + (3/1760) (Zr/a0)2 - (1/84480) (Zr/a0)3 ) exp(-Zr/8a0)

> R8,5(r) = (13 / (3932160 sqrt(6006))) (Z/a0)3/2 (Zr/a0)5 ( 1 - (1/24) (Zr/a0) + (1/2496) (Zr/a0)2 ) exp(-Zr/8a0)

> R8,6(r) = (1 / (94371840 sqrt(858))) (Z/a0)3/2 (Zr/a0)6 ( 1 - (1/56) (Zr/a0) ) exp(-Zr/8a0)

> R9,0(r) = (2 / 27) (Z/a0)3/2 ( 1 - (8/9) (Zr/a0) + (56/243) (Zr/a0)2 - (56/2187) (Zr/a0)3 + (28/19683) (Zr/a0)4 - (112/2657205) (Zr/a0)5 + (16/23914845) (Zr/a0)6 - (8/1506635235) (Zr/a0)7 + (2/122037454035) (Zr/a0)8 ) exp(-Zr/9a0)

> R9,1(r) = (40 / (729 sqrt(5))) (Z/a0)3/2 (Zr/a0) ( 1 - (7/18) (Zr/a0) + (7/135) (Zr/a0)2 - (7/2187) (Zr/a0)3 + (2/19683) (Zr/a0)4 - (1/590490) (Zr/a0)5 + (1/71744535) (Zr/a0)6 - (1/22599528525) (Zr/a0)7 ) exp(-Zr/9a0)

> R9,2(r) = (308 / (6561 sqrt(385))) (Z/a0)3/2 (Zr/a0)2 ( 1 - (2/9) (Zr/a0) + (10/567) (Zr/a0)2 - (10/15309) (Zr/a0)3 + (5/413343) (Zr/a0)4 - (2/18600435) (Zr/a0)5 + (2/5524329195) (Zr/a0)6 ) exp(-Zr/9a0)

> R9,3(r) = (176 / (59049 sqrt(770))) (Z/a0)3/2 (Zr/a0)3 ( 1 - (5/36) (Zr/a0) + (5/729) (Zr/a0)2 - (1/6561) (Zr/a0)3 + (1/649539) (Zr/a0)4 - (1/175375530) (Zr/a0)5 ) exp(-Zr/9a0)

> R9,4(r) = (572 / (4782969 sqrt(2002))) (Z/a0)3/2 (Zr/a0)4 ( 1 - (4/45) (Zr/a0) + (4/1485) (Zr/a0)2 - (4/120285) (Zr/a0)3 + (2/14073345) (Zr/a0)4 ) exp(-Zr/9a0)

> R9,5(r) = (104 / (215233605 sqrt(143))) (Z/a0)3/2 (Zr/a0)5 ( 1 - (1/18) (Zr/a0) + (1/1053) (Zr/a0)2 - (1/199017) (Zr/a0)3 ) exp(-Zr/9a0)

> R9,6(r) = (4 / (387420489 sqrt(715))) (Z/a0)3/2 (Zr/a0)6 ( 1 - (2/63) (Zr/a0) + (2/8505) (Zr/a0)2 ) exp(-Zr/9a0)

Real spherical harmonics (spherical coordinates θ, φ are converted to normalized Cartesian coordinates x/r, y/r, z/r):

> Y0,0(θ,φ) = s(θ,φ) = sqrt(1 / 4π)

> Y1,-1(θ,φ) = py(θ,φ) = sqrt(3 / 4π) y / r

> Y1,0(θ,φ) = pz(θ,φ) = sqrt(3 / 4π) z / r

> Y1,1(θ,φ) = px(θ,φ) = sqrt(3 / 4π) x / r

> Y2,-2(θ,φ) = dxy(θ,φ) = (1 / 2) sqrt(15 / π) xy / r2

> Y2,-1(θ,φ) = dyz(θ,φ) = (1 / 2) sqrt(15 / π) yz / r2

> Y2,0(θ,φ) = dz2(θ,φ) = (1 / 4) sqrt(5 / π) (3z2 - r2) / r2

> Y2,1(θ,φ) = dxz(θ,φ) = (1 / 2) sqrt(15 / π) xz / r2

> Y2,2(θ,φ) = dx2-y2(θ,φ) = (1 / 4) sqrt(15 / π) (x2 - y2) / r2

> Y3,-3(θ,φ) = fy(3x2-y2)(θ,φ) = (1 / 4) sqrt(35 / 2π) y (3x2 - y2) / r3

> Y3,-2(θ,φ) = fxyz(θ,φ) = (1 / 2) sqrt(105 / π) xyz / r3

> Y3,-1(θ,φ) = fyz2(θ,φ) = (1 / 4) sqrt(21 / 2π) y (5z2 - r2) / r3

> Y3,0(θ,φ) = fz3(θ,φ) = (1 / 4) sqrt(7 / π) z (5z2 - 3r2) / r3

> Y3,1(θ,φ) = fxz2(θ,φ) = (1 / 4) sqrt(21 / 2π) x (5z2 - r2) / r3

> Y3,2(θ,φ) = fz(x2-y2)(θ,φ) = (1 / 4) sqrt(105 / π) z (x2 - y2) / r3

> Y3,3(θ,φ) = fx(x2-3y2)(θ,φ) = (1 / 4) sqrt(35 / 2π) x (x2 - 3y2) / r3

> Y4,-4(θ,φ) = gxy(x2-y2)(θ,φ) = (3 / 4) sqrt(35 / π) xy (x2 - y2) / r4

> Y4,-3(θ,φ) = gzy3(θ,φ) = (3 / 4) sqrt(35 / 2π) yz (3x2 - y2) / r4

> Y4,-2(θ,φ) = gz2xy(θ,φ) = (3 / 4) sqrt(5 / π) xy (7z2 - r2) / r4

> Y4,-1(θ,φ) = gz3y(θ,φ) = (3 / 4) sqrt(5 / 2π) yz (7z2 - 3r2) / r4

> Y4,0(θ,φ) = gz4(θ,φ) = (3 / 16) sqrt(1 / π) (35z4 - 30z2r2 + 3r4) / r4

> Y4,1(θ,φ) = gz3x(θ,φ) = (3 / 4) sqrt(5 / 2π) xz (7z2 - 3r2) / r4

> Y4,2(θ,φ) = gz2(x2-y2)(θ,φ) = (3 / 8) sqrt(5 / π) (x2 - y2) (7z2 - r2) / r4

> Y4,3(θ,φ) = gzx3(θ,φ) = (3 / 4) sqrt(35 / 2π) xz (x2 - 3y2) / r4

> Y4,4(θ,φ) = gx4+y4(θ,φ) = (3 / 16) sqrt(35 / π) (x4 - 6x2 y2 + y4) / r4

> Y5,-5(θ,φ) = hyx4(θ,φ) = (3 / 16) sqrt(77 / 2π) y (5x4 - 10x2 y2 + y4) / r5

> Y5,-4(θ,φ) = hz(4x3y-4xy3)(θ,φ) = (3 / 4) sqrt(385 / π) xyz (x2 - y2) / r5

> Y5,-3(θ,φ) = hz2y3(θ,φ) = (1 / 16) sqrt(385 / 2π) y (3x2 - y2) (9z2 - r2) / r5

> Y5,-2(θ,φ) = hz3xy(θ,φ) = (1 / 4) sqrt(1155 / π) xyz (3z2 - r2) / r5

> Y5,-1(θ,φ) = hyz4(θ,φ) = (1 / 16) sqrt(165 / π) y (21z4 - 14z2r2 + r4) / r5

> Y5,0(θ,φ) = hz5(θ,φ) = (1 / 16) sqrt(11 / π) z (63z4 - 70z2r2 + 15r4) / r5

> Y5,1(θ,φ) = hxz4(θ,φ) = (1 / 16) sqrt(165 / π) x (21z4 - 14z2r2 + r4) / r5

> Y5,2(θ,φ) = hz3(x2-y2)(θ,φ) = (1 / 8) sqrt(1155 / π) z (x2 - y2) (3z2 - r2) / r5

> Y5,3(θ,φ) = hz2x3(θ,φ) = (1 / 16) sqrt(385 / 2π) x (x2 - 3y2) (9z2 - r2) / r5

> Y5,4(θ,φ) = hz(x4-6x2y2+y4)(θ,φ) = (3 / 16) sqrt(385 / π) z (x4 - 6x2 y2 + y4) / r5

> Y5,5(θ,φ) = hxy4(θ,φ) = (3 / 16) sqrt(77 / 2π) x (x4 - 10x2 y2 + 5y4) / r5

> Y6,-6(θ,φ) = i6x5y-20x3y3+6xy5(θ,φ) = (1 / 16) sqrt(3003 / 2π) xy (3x4 - 10x2 y2 + 3y4) / r6

> Y6,-5(θ,φ) = iyz(5x4-10x2y2+y4)(θ,φ) = (3 / 16) sqrt(1001 / 2π) yz (5x4 - 10x2 y2 + y4) / r6

> Y6,-4(θ,φ) = i(4xy)(x2-y2)(11z2-r2)(θ,φ) = (3 / 8) sqrt(91 / π) xy (x2 - y2) (11z2 - r2) / r6

> Y6,-3(θ,φ) = iy(3x2-y2)(11z3-3zr2)(θ,φ) = (1 / 16) sqrt(1365 / 2π) yz (3x2 - y2) (11z2 - 3r2) / r6

> Y6,-2(θ,φ) = ixyz4(θ,φ) = (1 / 16) sqrt(1365 / 2π) xy (33z4 - 18z2r2 + r4) / r6

> Y6,-1(θ,φ) = iyz5(θ,φ) = (1 / 16) sqrt(273 / π) yz (33z4 - 30z2r2 + 5r4) / r6

> Y6,0(θ,φ) = iz6(θ,φ) = (1 / 32) sqrt(13 / π) (231z6 - 315z4r2 + 105z2r4 - 5r6) / r6

> Y6,1(θ,φ) = ixz5(θ,φ) = (1 / 16) sqrt(273 / π) xz (33z4 - 30z2r2 + 5r4) / r6

> Y6,2(θ,φ) = i(x2-y2)z4(θ,φ) = (1 / 32) sqrt(1365 / 2π) (x2 - y2) (33z4 - 18z2r2 + r4) / r6

> Y6,3(θ,φ) = ix(x2-3y2)(11z3-3zr2)(θ,φ) = (1 / 16) sqrt(1365 / 2π) xz (x2 - 3y2) (11z2 - 3r2) / r6

> Y6,4(θ,φ) = i(x4-6x2y2+y4)(11z2-r2)(θ,φ) = (3 / 32) sqrt(91 / π) (x4 - 6x2 y2 + y4) (11z2 - r2) / r6

> Y6,5(θ,φ) = ixz(x4-10x2y2+5y4)(θ,φ) = (3 / 16) sqrt(1001 / 2π) xz (x4 - 10x2 y2 + 5y4) / r6

> Y6,6(θ,φ) = ix6-15x4y2+15x2y4-y6(θ,φ) = (1 / 32) sqrt(3003 / 2π) (x6 - 15x4 y2 + 15x2 y4 - y6) / r6

Atomic orbitals are filled (roughly) in order of increasing n + l and then decreasing l, that is:

> 1s, 2s, 2p, 3s, 3p, 4s, 3d, 4p, 5s, 4d, 5p, 6s, 4f, 5d, 6p, 7s, 5f, 6d, 7p, 8s, 5g, 6f, 7d, 8p, 9s, 6g, 7f, 8d, 9p...

Elements in the first 7 rows of the periodic table (that is, with atomic number up to 118) in their fundamental state have electrons in orbitals up to 7p at most. GWaves covers that and goes well beyond.

GWAVES
gwaves