To understand why matter is stable, and thereby shed light on the limits of nuclear stability, is one of the overarching aims and intellectual challenges of basic research in nuclear physics. To relate the stability of matter to the underlying fundamental forces and particles of nature as manifested in nuclear matter, is central to present and planned rare isotope facilities. Important properties of nuclear systems which can reveal information about these topics are for example masses, and thereby binding energies, and density distributions of nuclei. These are quantities which convey important information on the shell structure of nuclei, with their pertinent magic numbers and shell closures or the eventual disappearence of the latter away from the valley of stability.
Neutron-rich nuclei are particularly interesting for the above endeavour. As a particular chain of isotopes becomes more and more neutron rich, one reaches finally the limit of stability, the so-called dripline, where one additional neutron makes the next isotopes unstable with respect to the previous ones. The appearence or not of magic numbers and shell structures, the formation of neutron skins and halos can thence be probed via investigations of quantities like the binding energy or the charge radii and neutron rms radii of neutron-rich nuclei. These quantities have in turn important consequences for theoretical models of nuclear structure and their application in astrophysics.
Neutron radius of \( {}^{208}\mbox{Pb} \), recently extracted from the PREX experiment at Jefferson Laboratory can be used to constrain the equation of state of neutron matter. A related quantity to the neutron rms radius \( r_n^{\mathrm{rms}}=\langle r^2\rangle_n^{1/2} \) is the neutron skin \( r_{\mathrm{skin}}=r_n^{\mathrm{rms}}-r_p^{\mathrm{rms}} \), where \( r_p^{\mathrm{rms}} \) is the corresponding proton rms radius. There are several properties which relate the thickness of the neutron skin to quantities in nuclei and nuclear matter, such as the symmetry energy at the saturation point for nuclear matter, the slope of the equation of state for neutron matter or the low-energy electric dipole strength due to the pigmy dipole resonance.
Having access to precise measurements of masses, radii, and electromagnetic moments for a wide range of nuclei allows to study trends with varying neutron excess. A quantitative description of various experimental data with quantified uncertainty still remains a major challenge for nuclear structure theory. Global theoretical studies of isotopic chains, such as the Ca chain shown in the figure below here, make it possible to test systematic properties of effective interactions between nucleons. Such calculations also provide critical tests of limitations of many-body methods. As one approaches the particle emission thresholds, it becomes increasingly important to describe correctly the coupling to the continuum of decays and scattering channels. While the full treatment of antisymmetrization and short-range correlations has become routine in first principle approaches (to be defined later) to nuclear bound states, the many-body problem becomes more difficult when long-range correlations and continuum effects are considered.
The aim of the first part of this course is to present some of the experimental data which can be used to extract information about correlations in nuclear systems. In particular, we will start with a theoretical analysis of a quantity called the separation energy for neutrons or protons. This quantity, to be discussed below, is defined as the difference between two binding energies (masses) of neighboring nuclei. As we will see from various figures below and exercises as well, the separation energies display a varying behavior as function of the number of neutrons or protons. These variations from one nucleus to another one, laid the foundation for the introduction of so-called magic numbers and a mean-field picture in order to describe nuclei theoretically.
With a mean- or average-field picture we mean that a given nucleon (either a proton or a neutron) moves in an average potential field which is set up by all other nucleons in the system. Consider for example a nucleus like \( {}^{17}\mbox{O} \) with nine neutrons and eight protons. Many properties of this nucleus can be interpreted in terms of a picture where we can view it as one neutron on top of \( {}^{16}\mbox{O} \). We infer from data and our theoretical interpretations that this additional neutron behaves almost as an individual neutron which sees an average interaction set up by the remaining 16 nucleons in \( {}^{16}\mbox{O} \). A nucleus like \( {}^{16}\mbox{O} \) is an example of what we in this course will denote as a good closed-shell nucleus. We will come back to what this means later.
A simple potential model which enjoys quite some popularity in nuclear physics, is the three-dimensional harmonic oscillator. This potential model captures some of the physics of deeply bound single-particle states but fails in reproducing the less bound single-particle states.
A parametrized, and more realistic, potential model which is widely used in nuclear physics, is the so-called Woods-Saxon potential. Both the harmonic oscillator and the Woods-Saxon potential models define computational problems that can easily be solved (see below), resulting (with the appropriate parameters) in a rather good reproduction of experiment for nuclei which can be approximated as one nucleon on top (or one nucleon removed) of a so-called closed-shell system.
To be able to interpret a nucleus in such a way requires at least that we are capable of parametrizing the abovementioned interactions in order to reproduce say the excitation spectrum of a nucleus like \( {}^{17}\mbox{O} \).
With such a parametrized interaction we are able to solve Schroedinger's equation for the motion of one nucleon in a given field. A nucleus is however a true and complicated many-nucleon system, with extremely many degrees of freedom and complicated correlations, rendering the ideal solution of the many-nucleon Schroedinger equation an impossible enterprise. It is much easier to solve a single-particle problem with say a Woods-Saxon potential.
An improvement to these simpler single-nucleon potentials is given by the Hartree-Fock method, where the variational principle is used to define a mean-field which the nucleons move in. There are many different classes of mean-field methods. An important difference between these methods and the simpler parametrized mean-field potentials like the harmonic oscillator and the Woods-Saxon potentials, is that the resulting equations contain information about the nuclear forces present in our models for solving Schroedinger's equation. Hartree-Fock and other mean-field methods like density functional theory form core topics in later lectures.
The aim here is to present some of the experimental data we will confront theory with. In particular, we will focus on separation and shell-gap energies and use these to build a picture of nuclei in terms of (from a philosophical stand we would call this a reductionist approach) a single-particle picture. The harmonic oscillator will serve as an excellent starting point in building nuclei from the bottom and up. Here we will neglect nuclear forces, these are introduced in the next section when we discuss the Hartree-Fock method.
The aim of this course is to develop our physics intuition of nuclear systems using a theoretical approach where we describe data in terms of the motion of individual nucleons and their mutual interactions.
How our theoretical pictures and models can be used to interpret data is in essence what this course is about. Our narrative will lead us along a path where we start with single-particle models and end with the theory of the nuclear shell-model. The latter will be used to understand and analyze excitation spectra and decay patterns of nuclei, linking our theoretical understanding with interpretations of experiment. The way we build up our theoretical descriptions and interpretations follows what we may call a standard reductionistic approach, that is we start with what we believe are our effective degrees of freedom (nucleons in our case) and interactions amongst these and solve thereafter the underlying equations of motions. This defines the nuclear many-body problem, and mean-field approaches like Hartree-Fock theory and the nuclear shell-model represent different approaches to our solutions of Schroedinger's equation.
The aims of this course are to develop our physics intuition of nuclear systems using a theoretical approach where we describe data in terms of the motion of individual nucleons and their mutual interactions.
How our theoretical pictures and models can be used to interpret data is in essence what this course is about. Our narrative will lead us along a path where we start with single-particle models and end with the theory of the nuclear shell-model. The latter will be used to understand and analyze excitation spectra and decay patterns of nuclei, linking our theoretical understanding with interpretations of experiment. The way we build up our theoretical descriptions and interpretations follows what we may call a standard reductionistic approach, that is we start with what we believe are our effective degrees of freedom (nucleons in our case) and interactions amongst these and solve thereafter the underlying equations of motions. This defines the nuclear many-body problem, and mean-field approaches like Hartree-Fock theory and the nuclear shell-model represent different approaches to our solutions of Schroedinger's equation.
We start our tour of experimental data and our interpretations by considering the chain of oxygen isotopes. In the exercises below you will be asked to perform similar analyses for other chains of isotopes.
The oxygen isotopes are the heaviest isotopes for which the drip line is well established. The drip line is defined as the point where adding one more nucleon leads to an unbound nucleus. Below we will see that we can define the dripline by studying the separation energy. Where the neutron (proton) separation energy changes sign as a function of the number of neutrons (protons) defines the neutron (proton) drip line.
The oxygen isotopes are simple enough to be described by some few selected single-particle degrees of freedom.
Our first approach in analyzing data theoretically, is to see if we can use experimental information to
A basic quantity which can be measured for the ground states of nuclei is the atomic mass \( M(N, Z) \) of the neutral atom with atomic mass number \( A \) and charge \( Z \). The number of neutrons is \( N \).
Atomic masses are usually tabulated in terms of the mass excess defined by $$ \Delta M(N, Z) = M(N, Z) - uA, $$ where \( u \) is the Atomic Mass Unit $$ u = M(^{12}\mathrm{C})/12 = 931.49386 \hspace{0.1cm} \mathrm{MeV}/c^2. $$ In this course we will mainly use data from the 2003 compilation of Audi, Wapstra and Thibault.
The nucleon masses are $$ m_p = 938.27203(8)\hspace{0.1cm} \mathrm{MeV}/c^2 = 1.00727646688(13)u, $$ and $$ m_n = 939.56536(8)\hspace{0.1cm} \mathrm{MeV}/c^2 = 1.0086649156(6)u. $$
In the 2003 mass evaluation there are 2127 nuclei measured with an accuracy of 0.2 MeV or better, and 101 nuclei measured with an accuracy of greater than 0.2 MeV. For heavy nuclei one observes several chains of nuclei with a constant \( N-Z \) value whose masses are obtained from the energy released in \( \alpha \)-decay.
The nuclear binding energy is defined as the energy required to break up a given nucleus into its constituent parts of \( N \) neutrons and \( Z \) protons. In terms of the atomic masses \( M(N, Z) \) the binding energy is defined by $$ BE(N, Z) = ZM_H c^2 + Nm_n c^2 - M(N, Z)c^2 , $$ where \( M_H \) is the mass of the hydrogen atom and \( m_n \) is the mass of the neutron. In terms of the mass excess the binding energy is given by $$ BE(N, Z) = Z\Delta_H c^2 + N\Delta_n c^2 -\Delta(N, Z)c^2 , $$ where \( \Delta_H c^2 = 7.2890 \) MeV and \( \Delta_n c^2 = 8.0713 \) MeV.
The following python program reads in the experimental data on binding energies and, stored in the file bindingenergies.dat, plots them as function of the mass number \( A \). One notices clearly a saturation of the binding energy per nucleon at \( A\approx 56 \).
A popular and physically intuitive model which can be used to parametrize the experimental binding energies as function of \( A \), is the so-called the liquid drop model. The ansatz is based on the following expression $$ BE(N,Z) = a_1A-a_2A^{2/3}-a_3\frac{Z^2}{A^{1/3}}-a_4\frac{(N-Z)^2}{A}, $$ where \( A \) stands for the number of nucleons and the $a_i$s are parameters which are determined by a fit to the experimental data.
To arrive at the above expression we have assumed that we can make the following assumptions:
The following python program reads now in the experimental data on binding energies as well as the results from the above liquid drop model and plots these energies as function of the mass number \( A \). One sees that for larger values of \( A \), there is a better agreement with data.
The python program on the next slide reads now in the experimental data on binding energies and performs a nonlinear least square fitting of the data. In the example here we use only the parameters \( a_1 \) and \( a_2 \), leaving it as an exercise to the reader to perform the fit for all four paramters. The results are plotted and compared with the experimental values. To read more about non-linear least square methods, see for example the text of M.J. Box, D. Davies and W.H. Swann, Non-Linear optimisation Techniques, Oliver & Boyd, 1969.
We are now interested in interpreting experimental binding energies in terms of a single-particle picture. In order to do so, we consider first energy conservation for nuclear transformations that include, for example, the fusion of two nuclei \( a \) and \( b \) into the combined system \( c \) $$ {^{N_a+Z_a}}a+ {^{N_b+Z_b}}b\rightarrow {^{N_c+Z_c}}c $$ or the decay of nucleus \( c \) into two other nuclei \( a \) and \( b \) $$ ^{N_c+Z_c}c \rightarrow ^{N_a+Z_a}a+ ^{N_b+Z_b}b $$
In general we have the reactions $$ \sum_i {^{N_i+Z_i}}i \rightarrow \sum_f {^{N_f+Z_f}}f $$ We require also that the number of protons and neutrons (the total number of nucleons) is conserved in the initial stage and final stage, unless we have processes which violate baryon conservation, $$ \sum_iN_i = \sum_f N_f \hspace{0.2cm}\mathrm{and} \hspace{0.2cm}\sum_iZ_i = \sum_f Z_f. $$
Artist's rendition of the emission of one proton from various oxygen isotopes. Protons are in red while neutrons are in blue. These processes could be interpreted as the decay nucleus \( c \) into two other nuclei \( a \) and \( b \) $$ ^{N_c+Z_c}c \rightarrow ^{N_a+Z_a}a+ ^{N_b+Z_b}b . $$
The above processes can be characterized by an energy difference called the \( Q \) value, defined as $$ Q=\sum_i M(N_i, Z_i)c^2-\sum_f M(N_f, Z_f)c^2=\sum_i BE(N_f, Z_f)-\sum_i BE(N_i, Z_i) $$ Spontaneous decay involves a single initial nuclear state and is allowed if \( Q > 0 \). In the decay, energy is released in the form of the kinetic energy of the final products. Reactions involving two initial nuclei are called endothermic (a net loss of energy) if \( Q < 0 \). The reactions are exothermic (a net release of energy) if \( Q > 0 \).
Let us study the Q values associated with the removal of one or two nucleons from a nucleus. These are conventionally defined in terms of the one-nucleon and two-nucleon separation energies. The neutron separation energy is defined as $$ S_n= -Q_n= BE(N,Z)-BE(N-1,Z), $$ and the proton separation energy reads $$ S_p= -Q_p= BE(N,Z)-BE(N,Z-1). $$ The two-neutron separation energy is defined as $$ S_{2n}= -Q_{2n}= BE(N,Z)-BE(N-2,Z), $$ and the two-proton separation energy is given by $$ S_{2p}= -Q_{2p}= BE(N,Z)-BE(N,Z-2). $$
Using say the neutron separation energies (alternatively the proton separation energies) $$ S_n= -Q_n= BE(N,Z)-BE(N-1,Z), $$ we can define the so-called energy gap for neutrons (or protons) as $$ \Delta S_n= BE(N,Z)-BE(N-1,Z)-\left(BE(N+1,Z)-BE(N,Z)\right), $$ or $$ \Delta S_n= 2BE(N,Z)-BE(N-1,Z)-BE(N+1,Z). $$ This quantity can in turn be used to determine which nuclei are magic or not. For protons we would have $$ \Delta S_p= 2BE(N,Z)-BE(N,Z-1)-BE(N,Z+1). $$ We leave it as an exercise to the reader to define and interpret the two-neutron or two-proton gaps.
The following python programs can now be used to plot the separation energies and the energy gaps for the oxygen isotopes. The following python code reads the separation energies from file for all oxygen isotopes from \( A=13 \) to \( A=25 \), The data are taken from the file snox.dat. This files contains the separation energies and the shell gap energies.
Here we display the python program for plotting the corresponding results for shell gaps for the oxygen isotopes.
Since we will focus in the beginning on single-particle degrees of freedom and mean-field approaches before we start with nuclear forces and many-body approaches like the nuclear shell-model, there are some features to be noted
The root-mean-square (rms) charge radius has been measured for the ground states of many nuclei. For a spherical charge density, \( \rho(\boldsymbol{r}) \), the mean-square radius is defined by $$ \langle r^2\rangle = \frac{ \int d \boldsymbol{r} \rho(\boldsymbol{r}) r^2}{ \int d \boldsymbol{r} \rho(\boldsymbol{r})}, $$ and the rms radius is the square root of this quantity denoted by $$ R =\sqrt{ \langle r^2\rangle}. $$
Radii for most stable nuclei have been deduced from electron scattering form factors and/or from the x-ray transition energies of muonic atoms. The relative radii for a series of isotopes can be extracted from the isotope shifts of atomic x-ray transitions. The rms radius for the nuclear point-proton density, \( R_p \) is obtained from the rms charge radius by: $$ R_p = \sqrt{R^2_{\mathrm{ch}}- R^2_{\mathrm{corr}}}, $$ where $$ R^2_{\mathrm{corr}}= R^2_{\mathrm{op}}+(N/Z)R^2_{\mathrm{on}}+R^2_{\mathrm{rel}}, $$ where $$ R_{\mathrm{op}}= 0.875(7) \mathrm{fm}. $$ is the rms radius of the proton, \( R^2_{\mathrm{on}} = 0.116(2) \) $\mbox{fm}^{2}$ is the mean-square radius of the neutron and \( R^2_{\mathrm{rel}} = 0.033 \) $\mbox{fm}^{2}$ is the relativistic Darwin-Foldy correction. There are additional smaller nucleus-dependent corrections.
We will now introduce the potential models we have discussex above, namely the harmonic oscillator and the Woods-Saxon potentials. In order to proceed, we need some definitions.
We define an operator as \( \hat{O} \) throughout. Unless otherwise specified the total number of nucleons is always \( A \) and \( d \) is the dimension of the system. In nuclear physics we normally define the total number of particles to be \( A=N+Z \), where \( N \) is total number of neutrons and \( Z \) the total number of protons. In case of other baryons such as isobars \( \Delta \) or various hyperons such as \( \Lambda \) or \( \Sigma \), one needs to add their definitions. When we refer to a single neutron we will use the label \( n \) and when we refer to a single proton we will use the label \( p \). Unless otherwise specified, we will simply call these particles for nucleons.
The quantum numbers of a single-particle state in coordinate space are defined by the variables $$ x=(\boldsymbol{r},\sigma), $$ where $$ \boldsymbol{r}\in {\mathbb{R}}^{d}, $$ with \( d=1,2,3 \) represents the spatial coordinates and \( \sigma \) is the eigenspin of the particle. For fermions with eigenspin \( 1/2 \) this means that $$ x\in {\mathbb{R}}^{d}\oplus (\frac{1}{2}), $$ and the integral $$ \int dx = \sum_{\sigma}\int d^dr = \sum_{\sigma}\int d\boldsymbol{r}. $$ Since we are dealing with protons and neutrons we need to add isospin as a new degree of freedom.
Including isospin \( \tau \) we have $$ x=(\boldsymbol{r},\sigma,\tau), $$ where $$ \boldsymbol{r}\in {\mathbb{R}}^{3}, $$ For nucleons, which are fermions with eigenspin \( 1/2 \) and isospin \( 1/2 \) this means that $$ x\in {\mathbb{R}}^{d}\oplus (\frac{1}{2})\oplus (\frac{1}{2}), $$ and the integral $$ \int dx = \sum_{\sigma\tau}\int d\boldsymbol{r}, $$ and $$ \int d^Ax= \int dx_1\int dx_2\dots\int dx_A. $$ We will use the standard nuclear physics definition of isospin, resulting in \( \tau_z=-1/2 \) for protons and \( \tau_z=1/2 \) for neutrons.
The quantum mechanical wave function of a given state with quantum numbers \( \lambda \) (encompassing all quantum numbers needed to specify the system), ignoring time, is $$ \Psi_{\lambda}=\Psi_{\lambda}(x_1,x_2,\dots,x_A), $$ with \( x_i=(\boldsymbol{r}_i,\sigma_i,\tau_i) \) and the projections of \( \sigma_i \) and \( \tau_i \) take the values \( \{-1/2,+1/2\} \). We will hereafter always refer to \( \Psi_{\lambda} \) as the exact wave function, and if the ground state is not degenerate we label it as $$ \Psi_0=\Psi_0(x_1,x_2,\dots,x_A). $$
Since the solution \( \Psi_{\lambda} \) seldomly can be found in closed form, approximations are sought. In this text we define an approximative wave function or an ansatz to the exact wave function as $$ \Phi_{\lambda}=\Phi_{\lambda}(x_1,x_2,\dots,x_A), $$ with $$ \Phi_{0}=\Phi_{0}(x_{1},x_{2},\dots,x_{A}), $$ being the ansatz for the ground state.
The wave function \( \Psi_{\lambda} \) is sought in the Hilbert space of either symmetric or anti-symmetric \( N \)-body functions, namely $$ \Psi_{\lambda}\in {\cal H}_A:= {\cal H}_1\oplus{\cal H}_1\oplus\dots\oplus{\cal H}_1, $$ where the single-particle Hilbert space \( \hat{H}_1 \) is the space of square integrable functions over \( \in {\mathbb{R}}^{d}\oplus (\sigma)\oplus (\tau) \) resulting in $$ {\cal H}_1:= L^2(\mathbb{R}^{d}\oplus (\sigma)\oplus (\tau)). $$
Our Hamiltonian is invariant under the permutation (interchange) of two particles. Since we deal with fermions however, the total wave function is antisymmetric. Let \( \hat{P} \) be an operator which interchanges two particles. Due to the symmetries we have ascribed to our Hamiltonian, this operator commutes with the total Hamiltonian, $$ [\hat{H},\hat{P}] = 0, $$ meaning that \( \Psi_{\lambda}(x_1, x_2, \dots , x_A) \) is an eigenfunction of \( \hat{P} \) as well, that is $$ \hat{P}_{ij}\Psi_{\lambda}(x_1, x_2, \dots,x_i,\dots,x_j,\dots,x_A)= \beta\Psi_{\lambda}(x_1, x_2, \dots,x_j,\dots,x_i,\dots,x_A), $$ where \( \beta \) is the eigenvalue of \( \hat{P} \). We have introduced the suffix \( ij \) in order to indicate that we permute particles \( i \) and \( j \). The Pauli principle tells us that the total wave function for a system of fermions has to be antisymmetric, resulting in the eigenvalue \( \beta = -1 \).
The Schrodinger equation reads $$ \begin{equation} \hat{H}(x_1, x_2, \dots , x_A) \Psi_{\lambda}(x_1, x_2, \dots , x_A) = E_\lambda \Psi_\lambda(x_1, x_2, \dots , x_A), \label{eq:basicSE1} \end{equation} $$ where the vector \( x_i \) represents the coordinates (spatial, spin and isospin) of particle \( i \), \( \lambda \) stands for all the quantum numbers needed to classify a given \( A \)-particle state and \( \Psi_{\lambda} \) is the pertaining eigenfunction. Throughout this course, \( \Psi \) refers to the exact eigenfunction, unless otherwise stated.
We write the Hamilton operator, or Hamiltonian, in a generic way $$ \hat{H} = \hat{T} + \hat{V} $$ where \( \hat{T} \) represents the kinetic energy of the system $$ \hat{T} = \sum_{i=1}^A \frac{\mathbf{p}_i^2}{2m_i} = \sum_{i=1}^A \left( -\frac{\hbar^2}{2m_i} \mathbf{\nabla_i}^2 \right) = \sum_{i=1}^A t(x_i) $$ while the operator \( \hat{V} \) for the potential energy is given by $$ \begin{equation} \hat{V} = \sum_{i=1}^A \hat{u}_{\mathrm{ext}}(x_i) + \sum_{ji=1}^A v(x_i,x_j)+\sum_{ijk=1}^Av(x_i,x_j,x_k)+\dots \label{eq:firstv} \end{equation} $$ Hereafter we use natural units, viz. \( \hbar=c=e=1 \), with \( e \) the elementary charge and \( c \) the speed of light. This means that momenta and masses have dimension energy.
The potential energy part includes also an external potential \( \hat{u}_{\mathrm{ext}}(x_i) \).
In a non-relativistic approach to atomic physics, this external potential is given by the attraction an electron feels from the atomic nucleus. The latter being much heavier than the involved electrons, is often used to define a natural center of mass. In nuclear physics there is no such external potential. It is the nuclear force which results in binding in nuclear systems. In a non-relativistic framework, the nuclear force contains two-body, three-body and more complicated degrees of freedom. The potential energy reads then $$ \hat{V} = \sum_{ij}^A v(x_i,x_j)+\sum_{ijk}^Av(x_i,x_j,x_k)+\dots $$
Three-body and more complicated forces arise since we are dealing with protons and neutrons as effective degrees of freedom. We will come back to this topic later. Furthermore, in large parts of these lectures we will assume that the potential energy can be approximated by a two-body interaction only. Our Hamiltonian reads then $$ \begin{equation} \hat{H} = \sum_{i=1}^A \frac{\mathbf{p}_i^2}{2m_i}+\sum_{ij}^A v(x_i,x_j). \label{eq:firstH} \end{equation} $$
It is however, from a computational point of view, convenient to introduce an external potential \( \hat{u}_{\mathrm{ext}}(x_i) \) by adding and substracting it to the original Hamiltonian. This means that our Hamiltonian can be rewritten as $$ \hat{H} = \hat{H}_0 + \hat{H}_I = \sum_{i=1}^A \hat{h}_0(x_i) + \sum_{i < j=1}^A \hat{v}(x_{ij})-\sum_{i=1}^A\hat{u}_{\mathrm{ext}}(x_i), $$ with $$ \hat{H}_0=\sum_{i=1}^A \hat{h}_0(x_i) = \sum_{i=1}^A\left(\hat{t}(x_i) + \hat{u}_{\mathrm{ext}}(x_i)\right). $$
The interaction (or potential energy term) reads now $$ \hat{H}_I= \sum_{i < j=1}^A \hat{v}(x_{ij})-\sum_{i=1}^A\hat{u}_{\mathrm{ext}}(x_i). $$
In nuclear physics the one-body part \( u_{\mathrm{ext}}(x_i) \) is often approximated by a harmonic oscillator potential or a Woods-Saxon potential. However, this is not fully correct, because as we have discussed, nuclei are self-bound systems and there is no external confining potential. As we will see later, the \( \hat{H}_0 \) part of the hamiltonian cannot be used to compute the binding energy of a nucleus since it is not based on a model for the nuclear forces. That is, the binding energy is not the sum of the individual single-particle energies.
Why do we introduce the Hamiltonian in the form $$ \hat{H} = \hat{H}_0 + \hat{H}_I? $$ There are many reasons for this. Let us look at some of them, using the harmonic oscillator in three dimensions as our starting point. For the harmonic oscillator we know that $$ \hat{h}_0(x_i)\psi_{\alpha}(x_i)=\varepsilon_{\alpha}\psi_{\alpha}(x_i), $$
where the eigenvalues are \( \varepsilon_{\alpha} \) and the eigenfunctions are \( \psi_{\alpha}(x_i) \). The subscript \( \alpha \) represents quantum numbers like the orbital angular momentum \( l_{\alpha} \), its projection \( m_{l_{\alpha}} \) and the principal quantum number \( n_{\alpha}=0,1,2,\dots \).
The eigenvalues are $$ \varepsilon_{\alpha} = \hbar\omega \left(2n_{\alpha}+l_{\alpha}+\frac{3}{2}\right). $$
The following mathematical properties of the harmonic oscillator are handy.
The harmonic oscillator (a shifted one by a negative constant) provides also a very good approximation to most bound single-particle states. Furthermore, it serves as a starting point in building up our picture of nuclei, in particular how we define magic numbers and systems with one nucleon added to (or removed from) a closed-shell core nucleus. The figure here shows the various harmonic oscillator states, with those obtained with a Woods-Saxon potential as well, including a spin-orbit splitting (to be discussed below).
In nuclear physics the one-body part \( u_{\mathrm{ext}}(x_i) \) is often approximated by a harmonic oscillator potential. However, as we also noted with the Woods-Saxon potential there is no external confining potential in nuclei.
What many people do then, is to add and subtract a harmonic oscillator potential, with $$ \hat{u}_{\mathrm{ext}}(x_i)=\hat{u}_{\mathrm{ho}}(x_i)= \frac{1}{2}m\omega^2 r_i^2, $$ where \( \omega \) is the oscillator frequency. This leads to $$ \hat{H} = \hat{H_0} + \hat{H_I} = \sum_{i=1}^A \hat{h}_0(x_i) + \sum_{i < j=1}^A \hat{v}(x_{ij})-\sum_{i=1}^A\hat{u}_{\mathrm{ho}}(x_i), $$ with $$ H_0=\sum_{i=1}^A \hat{h}_0(x_i) = \sum_{i=1}^A\left(\hat{t}(x_i) + \hat{u}_{\mathrm{ho}}(x_i)\right). $$ Many practitioners use this as the standard Hamiltonian when doing nuclear structure calculations. This is ok if the number of nucleons is large, but still with this Hamiltonian, we do not obey translational invariance. How can we cure this?
In setting up a translationally invariant Hamiltonian the following expressions are helpful. The center-of-mass (CoM) momentum is $$ P=\sum_{i=1}^A\boldsymbol{p}_i, $$ and we have that $$ \sum_{i=1}^A\boldsymbol{p}_i^2 = \frac{1}{A}\left[\boldsymbol{P}^2+\sum_{i < j}(\boldsymbol{p}_i-\boldsymbol{p}_j)^2\right] $$ meaning that $$ \left[\sum_{i=1}^A\frac{\boldsymbol{p}_i^2}{2m} -\frac{\boldsymbol{P}^2}{2mA}\right] =\frac{1}{2mA}\sum_{i < j}(\boldsymbol{p}_i-\boldsymbol{p}_j)^2. $$
In a similar fashion we can define the CoM coordinate $$ \boldsymbol{R}=\frac{1}{A}\sum_{i=1}^{A}\boldsymbol{r}_i, $$ which yields $$ \sum_{i=1}^A\boldsymbol{r}_i^2 = \frac{1}{A}\left[A^2\boldsymbol{R}^2+\sum_{i < j}(\boldsymbol{r}_i-\boldsymbol{r}_j)^2\right]. $$
If we then introduce the harmonic oscillator one-body Hamiltonian $$ H_0= \sum_{i=1}^A\left(\frac{\boldsymbol{p}_i^2}{2m}+ \frac{1}{2}m\omega^2\boldsymbol{r}_i^2\right), $$ with \( \omega \) the oscillator frequency, we can rewrite the latter as $$ H_{\mathrm{HO}}= \frac{\boldsymbol{P}^2}{2mA}+\frac{mA\omega^2\boldsymbol{R}^2}{2} +\frac{1}{2mA}\sum_{i < j}(\boldsymbol{p}_i-\boldsymbol{p}_j)^2 +\frac{m\omega^2}{2A}\sum_{i < j}(\boldsymbol{r}_i-\boldsymbol{r}_j)^2. \label{eq:obho} $$
Alternatively, we could write it as $$ H_{\mathrm{HO}}= H_{\mathrm{CoM}}+\frac{1}{2mA}\sum_{i < j}(\boldsymbol{p}_i-\boldsymbol{p}_j)^2 +\frac{m\omega^2}{2A}\sum_{i < j}(\boldsymbol{r}_i-\boldsymbol{r}_j)^2, $$
The center-of-mass term is defined as $$ H_{\mathrm{CoM}}= \frac{\boldsymbol{P}^2}{2mA}+\frac{mA\omega^2\boldsymbol{R}^2}{2}. $$
The translationally invariant one- and two-body Hamiltonian reads for an A-nucleon system, $$ \label{eq:ham} \hat{H}=\left[\sum_{i=1}^A\frac{\boldsymbol{p}_i^2}{2m} -\frac{\boldsymbol{P}^2}{2mA}\right] +\sum_{i < j}^A V_{ij} \; , $$ where \( V_{ij} \) is the nucleon-nucleon interaction. Adding zero as here $$ \sum_{i=1}^A\frac{1}{2}m\omega^2\boldsymbol{r}_i^2- \frac{m\omega^2}{2A}\left[\boldsymbol{R}^2+\sum_{i < j}(\boldsymbol{r}_i-\boldsymbol{r}_j)^2\right]=0. $$ we can then rewrite the Hamiltonian as $$ \hat{H}=\sum_{i=1}^A \left[ \frac{\boldsymbol{p}_i^2}{2m} +\frac{1}{2}m\omega^2 \boldsymbol{r}^2_i \right] + \sum_{i < j}^A \left[ V_{ij}-\frac{m\omega^2}{2A} (\boldsymbol{r}_i-\boldsymbol{r}_j)^2 \right]-H_{\mathrm{CoM}}. $$
The Woods-Saxon potential is a mean field potential for the nucleons (protons and neutrons) inside an atomic nucleus. It represent an average potential that a given nucleon feels from the forces applied on each nucleon. The parametrization is $$ \hat{u}_{\mathrm{ext}}(r)=-\frac{V_0}{1+\exp{(r-R)/a}}, $$ with \( V_0\approx 50 \) MeV representing the potential well depth, \( a\approx 0.5 \) fm length representing the "surface thickness" of the nucleus and \( R=r_0A^{1/3} \), with \( r_0=1.25 \) fm and \( A \) the number of nucleons. The value for \( r_0 \) can be extracted from a fit to data, see for example M. Kirson's article.
The following python code produces a plot of the Woods-Saxon potential with the above parameters.
From the plot we notice that the potential
We have introduced a single-particle Hamiltonian $$ H_0=\sum_{i=1}^A \hat{h}_0(x_i) = \sum_{i=1}^A\left(\hat{t}(x_i) + \hat{u}_{\mathrm{ext}}(x_i)\right), $$ with an external and central symmetric potential \( u_{\mathrm{ext}}(x_i) \), which is often approximated by a harmonic oscillator potential or a Woods-Saxon potential. Being central symmetric leads to a degeneracy in energy which is not observed experimentally. We see this from for example our discussion of separation energies and magic numbers. There are, in addition to the assumed magic numbers from a harmonic oscillator basis of \( 2,8,20,40,70\dots \) magic numbers like \( 28 \), \( 50 \), \( 82 \) and \( 126 \).
To produce these additional numbers, we need to add a phenomenological spin-orbit force which lifts the degeneracy, that is $$ \hat{h}(x_i) = \hat{t}(x_i) + \hat{u}_{\mathrm{ext}}(x_i) +\xi(\boldsymbol{r})\boldsymbol{ls}=\hat{h}_0(x_i)+\xi(\boldsymbol{r})\boldsymbol{ls}. $$
We have introduced a modified single-particle Hamiltonian $$ \hat{h}(x_i) = \hat{t}(x_i) + \hat{u}_{\mathrm{ext}}(x_i) +\xi(\boldsymbol{r})\boldsymbol{ls}=\hat{h}_0(x_i)+\xi(\boldsymbol{r})\boldsymbol{ls}. $$ We can calculate the expectation value of the latter using the fact that $$ \xi(\boldsymbol{r})\boldsymbol{ls}=\frac{1}{2}\xi(\boldsymbol{r})\left(\boldsymbol{j}^2-\boldsymbol{l}^2-\boldsymbol{s}^2\right). $$ For a single-particle state with quantum numbers \( nlj \) (we suppress \( s \) and \( m_j \)), with \( s=1/2 \), we obtain the single-particle energies $$ \varepsilon_{nlj} = \varepsilon_{nlj}^{(0)}+\Delta\varepsilon_{nlj}, $$ with \( \varepsilon_{nlj}^{(0)} \) being the single-particle energy obtained with \( \hat{h}_0(x) \) and $$ \Delta\varepsilon_{nlj}=\frac{C}{2}\left(j(j+1)-l(l+1)-\frac{3}{4}\right). $$
The spin-orbit force gives thus an additional contribution to the energy $$ \Delta\varepsilon_{nlj}=\frac{C}{2}\left(j(j+1)-l(l+1)-\frac{3}{4}\right), $$ which lifts the degeneracy we have seen before in the harmonic oscillator or Woods-Saxon potentials. The value \( C \) is the radial integral involving \( \xi(\boldsymbol{r}) \). Depending on the value of \( j=l\pm 1/2 \), we obtain $$ \Delta\varepsilon_{nlj=l-1/2}=\frac{C}{2}l, $$ or $$ \Delta\varepsilon_{nlj=l+1/2}=-\frac{C}{2}(l+1), $$ clearly lifting the degeneracy. Note well that till now we have simply postulated the spin-orbit force in ad hoc way. Later, we will see how this term arises from the two-nucleon force in a natural way.
With the spin-orbit force, we can modify our Woods-Saxon potential to $$ \hat{u}_{\mathrm{ext}}(r)=-\frac{V_0}{1+\exp{(r-R)/a}}+V_{so}(r)\boldsymbol{ls}, $$ with $$ V_{so}(r) = V_{so}\frac{1}{r}\frac{d f_{so}(r)}{dr}, $$ where we have $$ f_{so}(r) = \frac{1}{1+\exp{(r-R_{so})/a_{so}}}. $$
We can also add, in case of proton, a Coulomb potential. The Woods-Saxon potential has been widely used in parametrizations of effective single-particle potentials.
However, as was the case with the harmonic oscillator, none of these potentials are linked directly to the nuclear forces.
Our next step is to build a mean field based on the nucleon-nucleon interaction. This will lead us to our first and simplest many-body theory, Hartree-Fock theory.
The Woods-Saxon potential does not give us closed-form or analytical solutions of the eigenvalue problem $$ \hat{h}_0(x_i)\psi_{\alpha}(x_i)=\varepsilon_{\alpha}\psi_{\alpha}(x_i). $$ For the harmonic oscillator in three dimensions we have closed-form expressions for the energies and analytical solutions for the eigenstates, with the latter given by either Hermite polynomials (cartesian coordinates) or Laguerre polynomials (spherical coordinates).
To solve the above equation is however rather straightforward numerically.
We will illustrate the numerical solution of Schroedinger's equation by solving it for the harmonic oscillator in three dimensions. It is straightforward to change the harmonic oscillator potential with a Woods-Saxon potential, or any other type of potentials.
We are interested in the solution of the radial part of Schroedinger's equation for one nucleon. The angular momentum part is given by the so-called Spherical harmonics.
The radial equation reads $$ -\frac{\hbar^2}{2 m} \left ( \frac{1}{r^2} \frac{d}{dr} r^2 \frac{d}{dr} - \frac{l (l + 1)}{r^2} \right )R(r) + V(r) R(r) = E R(r). $$
In our case \( V(r) \) is the harmonic oscillator potential \( (1/2)kr^2 \) with \( k=m\omega^2 \) and \( E \) is the energy of the harmonic oscillator in three dimensions. The oscillator frequency is \( \omega \) and the energies are $$ E_{nl}= \hbar \omega \left(2n+l+\frac{3}{2}\right), $$ with \( n=0,1,2,\dots \) and \( l=0,1,2,\dots \).
Since we have made a transformation to spherical coordinates it means that \( r\in [0,\infty) \). The quantum number \( l \) is the orbital momentum of the nucleon. Then we substitute \( R(r) = (1/r) u(r) \) and obtain $$ -\frac{\hbar^2}{2 m} \frac{d^2}{dr^2} u(r) + \left ( V(r) + \frac{l (l + 1)}{r^2}\frac{\hbar^2}{2 m} \right ) u(r) = E u(r) . $$ The boundary conditions are \( u(0)=0 \) and \( u(\infty)=0 \).
We introduce a dimensionless variable \( \rho = (1/\alpha) r \) where \( \alpha \) is a constant with dimension length and get $$ -\frac{\hbar^2}{2 m \alpha^2} \frac{d^2}{d\rho^2} u(\rho) + \left ( V(\rho) + \frac{l (l + 1)}{\rho^2} \frac{\hbar^2}{2 m\alpha^2} \right ) u(\rho) = E u(\rho) . $$ Let us specialize to \( l=0 \). Inserting \( V(\rho) = (1/2) k \alpha^2\rho^2 \) we end up with $$ -\frac{\hbar^2}{2 m \alpha^2} \frac{d^2}{d\rho^2} u(\rho) + \frac{k}{2} \alpha^2\rho^2u(\rho) = E u(\rho) . $$ We multiply thereafter with \( 2m\alpha^2/\hbar^2 \) on both sides and obtain $$ -\frac{d^2}{d\rho^2} u(\rho) + \frac{mk}{\hbar^2} \alpha^4\rho^2u(\rho) = \frac{2m\alpha^2}{\hbar^2}E u(\rho) . $$
We have thus $$ -\frac{d^2}{d\rho^2} u(\rho) + \frac{mk}{\hbar^2} \alpha^4\rho^2u(\rho) = \frac{2m\alpha^2}{\hbar^2}E u(\rho) . $$ The constant \( \alpha \) can now be fixed so that $$ \frac{mk}{\hbar^2} \alpha^4 = 1, $$ or $$ \alpha = \left(\frac{\hbar^2}{mk}\right)^{1/4}. $$
Defining $$ \lambda = \frac{2m\alpha^2}{\hbar^2}E, $$ we can rewrite Schroedinger's equation as $$ -\frac{d^2}{d\rho^2} u(\rho) + \rho^2u(\rho) = \lambda u(\rho) . $$ This is the first equation to solve numerically. In three dimensions the eigenvalues for \( l=0 \) are \( \lambda_0=3,\lambda_1=7,\lambda_2=11,\dots . \)
We use the standard expression for the second derivative of a function \( u \) $$ \begin{equation} u''=\frac{u(\rho+h) -2u(\rho) +u(\rho-h)}{h^2} +O(h^2), \label{eq:diffoperation} \end{equation} $$ where \( h \) is our step. Next we define minimum and maximum values for the variable \( \rho \), \( \rho_{\mathrm{min}}=0 \) and \( \rho_{\mathrm{max}} \), respectively. You need to check your results for the energies against different values \( \rho_{\mathrm{max}} \), since we cannot set \( \rho_{\mathrm{max}}=\infty \).
With a given number of steps, \( n_{\mathrm{step}} \), we then define the step \( h \) as $$ h=\frac{\rho_{\mathrm{max}}-\rho_{\mathrm{min}} }{n_{\mathrm{step}}}. $$ Define an arbitrary value of \( \rho \) as $$ \rho_i= \rho_{\mathrm{min}} + ih \hspace{1cm} i=0,1,2,\dots , n_{\mathrm{step}} $$ we can rewrite the Schroedinger equation for \( \rho_i \) as $$ -\frac{u(\rho_i+h) -2u(\rho_i) +u(\rho_i-h)}{h^2}+\rho_i^2u(\rho_i) = \lambda u(\rho_i), $$ or in a more compact way $$ -\frac{u_{i+1} -2u_i +u_{i-1}}{h^2}+\rho_i^2u_i=-\frac{u_{i+1} -2u_i +u_{i-1} }{h^2}+V_iu_i = \lambda u_i. $$
Define first the diagonal matrix element $$ d_i=\frac{2}{h^2}+V_i, $$ and the non-diagonal matrix element $$ e_i=-\frac{1}{h^2}. $$ In this case the non-diagonal matrix elements are given by a mere constant. All non-diagonal matrix elements are equal.
With these definitions the Schroedinger equation takes the following form $$ d_iu_i+e_{i-1}u_{i-1}+e_{i+1}u_{i+1} = \lambda u_i, $$ where \( u_i \) is unknown. We can write the latter equation as a matrix eigenvalue problem $$ \begin{equation} \left( \begin{array}{ccccccc} d_1 & e_1 & 0 & 0 & \dots &0 & 0 \\ e_1 & d_2 & e_2 & 0 & \dots &0 &0 \\ 0 & e_2 & d_3 & e_3 &0 &\dots & 0\\ \dots & \dots & \dots & \dots &\dots &\dots & \dots\\ 0 & \dots & \dots & \dots &\dots &d_{n_{\mathrm{step}}-2} & e_{n_{\mathrm{step}}-1}\\ 0 & \dots & \dots & \dots &\dots &e_{n_{\mathrm{step}}-1} & d_{n_{\mathrm{step}}-1} \end{array} \right) \left( \begin{array}{c} u_{1} \\ u_{2} \\ \dots\\ \dots\\ \dots\\ u_{n_{\mathrm{step}}-1} \end{array} \right)=\lambda \left( \begin{array}{c} u_{1} \\ u_{2} \\ \dots\\ \dots\\ \dots\\ u_{n_{\mathrm{step}}-1} \end{array} \right) \label{eq:sematrix} \end{equation} $$
To be more detailed we have $$ \begin{equation} \left( \begin{array}{ccccccc} \frac{2}{h^2}+V_1 & -\frac{1}{h^2} & 0 & 0 & \dots &0 & 0 \\ -\frac{1}{h^2} & \frac{2}{h^2}+V_2 & -\frac{1}{h^2} & 0 & \dots &0 &0 \\ 0 & -\frac{1}{h^2} & \frac{2}{h^2}+V_3 & -\frac{1}{h^2} &0 &\dots & 0\\ \dots & \dots & \dots & \dots &\dots &\dots & \dots\\ 0 & \dots & \dots & \dots &\dots &\frac{2}{h^2}+V_{n_{\mathrm{step}}-2} & -\frac{1}{h^2}\\ 0 & \dots & \dots & \dots &\dots &-\frac{1}{h^2} & \frac{2}{h^2}+V_{n_{\mathrm{step}}-1} \end{array} \right) \label{eq:matrixse} \end{equation} $$ Recall that the solutions are known via the boundary conditions at \( i=n_{\mathrm{step}} \) and at the other end point, that is for \( \rho_0 \). The solution is zero in both cases.
The following python program is an example of how one can obtain the eigenvalues for a single-nucleon moving in a harmonic oscillator potential. It is rather easy to change the onebody-potential with ones like a Woods-Saxon potential.
The code sets up the Hamiltonian matrix by defining the the minimun and maximum values of \( r \) with a maximum value of integration points. These are set in the initialization function. It plots the eigenfunctions of the three lowest eigenstates.
The data on binding energies can be found in the file bedata.dat at the github address of the course
a) Write a small program which reads in the proton and neutron numbers and the binding energies and make a plot of all neutron separation energies for the chain of oxygen (O), calcium (Ca), nickel (Ni), tin (Sn) and lead (Pb) isotopes, that is you need to plot $$ S_n= BE(N,Z)-BE(N-1,Z). $$ Comment your results.
b) Include in the same figure(s) the liquid drop model results of Eq. (2.17) of Alex Brown's text, namely $$ BE(N,Z)= \alpha_1A-\alpha_2A^{2/3}-\alpha_3\frac{Z^2}{A^{1/3}}-\alpha_4\frac{(N-Z)^2}{A}, $$ with \( \alpha_1=15.49 \) MeV, \( \alpha_2=17.23 \) MeV, \( \alpha_3=0.697 \) MeV and \( \alpha_4=22.6 \) MeV. Comment your results
c) Make a plot of the binding energies as function of the number of nucleons \( A \) using the data in the file on bindingenergies and the above liquid drop model. Make a figure similar to figure 2.5 of Alex Brown where you set the various parameters \( \alpha_i=0 \). Comment your results.
d) Use the liquid drop model to find the neutron drip lines for Z values up to 120. Analyze then the fluorine isotopes and find, where available the corresponding experimental data, and compare the liquid drop model predicition with experiment. Comment your results. A program example in C++ and the input data file bedata.dat can be found found at the github repository for the course
The program for finding the eigenvalues of the harmonic oscillator are in the github folder https://github.com/NuclearStructure/PHY981/tree/master/doc/pub/spdata/programs.
You can use this program to solve the exercise below, or write your own using your preferred programming language, be it python, fortran or c++ or other languages. Here I will mainly provide fortran, python and c++.
a) Compute the eigenvalues of the three lowest states with a given orbital momentum and oscillator frequency \( \omega \). Study these results as functions of the the maximum value of \( r \) and the number of integration points \( n \), starting with \( r_{\mathrm{max}}=10 \). Compare the computed ones with the exact values and comment your results.
b) Plot thereafter the eigenfunctions as functions of \( r \) for the lowest-lying state with a given orbital momentum \( l \).
c) Replace thereafter the harmonic oscillator potential with a Woods-Saxon potential using the parameters discussed above. Compute the lowest five eigenvalues and plot the eigenfunction of the lowest-lying state. How does this compare with the harmonic oscillator? Comment your results and possible implications for nuclear physics studies.
Consider the Slater determinant $$ \Phi_{\lambda}^{AS}(x_{1}x_{2}\dots x_{N};\alpha_{1}\alpha_{2}\dots\alpha_{N}) =\frac{1}{\sqrt{N!}}\sum_{p}(-)^{p}P\prod_{i=1}^{N}\psi_{\alpha_{i}}(x_{i}). $$ where \( P \) is an operator which permutes the coordinates of two particles. We have assumed here that the number of particles is the same as the number of available single-particle states, represented by the greek letters \( \alpha_{1}\alpha_{2}\dots\alpha_{N} \).
a) Write out \( \Phi^{AS} \) for \( N=3 \).
b) Show that $$ \int dx_{1}dx_{2}\dots dx_{N}\left\vert \Phi_{\lambda}^{AS}(x_{1}x_{2}\dots x_{N};\alpha_{1}\alpha_{2}\dots\alpha_{N}) \right\vert^{2} = 1. $$
c) Define a general onebody operator \( \hat{F} = \sum_{i}^N\hat{f}(x_{i}) \) and a general twobody operator \( \hat{G}=\sum_{i>j}^N\hat{g}(x_{i},x_{j}) \) with \( g \) being invariant under the interchange of the coordinates of particles \( i \) and \( j \). Calculate the matrix elements for a two-particle Slater determinant $$ \langle\Phi_{\alpha_{1}\alpha_{2}}^{AS}|\hat{F}|\Phi_{\alpha_{1}\alpha_{2}}^{AS}\rangle, $$ and $$ \langle\Phi_{\alpha_{1}\alpha_{2}}^{AS}|\hat{G}|\Phi_{\alpha_{1}\alpha_{2}}^{AS}\rangle. $$ Explain the short-hand notation for the Slater determinant. Which properties do you expect these operators to have in addition to an eventual permutation symmetry?
We will now consider a simple three-level problem, depicted in the figure below. This is our first and very simple model of a possible many-nucleon (or just fermion) problem and the shell-model. The single-particle states are labelled by the quantum number \( p \) and can accomodate up to two single particles, viz., every single-particle state is doubly degenerate (you could think of this as one state having spin up and the other spin down). We let the spacing between the doubly degenerate single-particle states be constant, with value \( d \). The first state has energy \( d \). There are only three available single-particle states, \( p=1 \), \( p=2 \) and \( p=3 \), as illustrated in the figure.
a) How many two-particle Slater determinants can we construct in this space? We limit ourselves to a system with only the two lowest single-particle orbits and two particles, \( p=1 \) and \( p=2 \). We assume that we can write the Hamiltonian as $$ \hat{H}=\hat{H}_0+\hat{H}_I, $$ and that the onebody part of the Hamiltonian with single-particle operator \( \hat{h}_0 \) has the property $$ \hat{h}_0\psi_{p\sigma} = p\times d \psi_{p\sigma}, $$ where we have added a spin quantum number \( \sigma \). We assume also that the only two-particle states that can exist are those where two particles are in the same state \( p \), as shown by the two possibilities to the left in the figure. The two-particle matrix elements of \( \hat{H}_I \) have all a constant value, \( -g \).
b) Show then that the Hamiltonian matrix can be written as $$ \left(\begin{array}{cc}2d-g &-g \\ -g &4d-g \end{array}\right), $$
c) Find the eigenvalues and eigenvectors. What is mixing of the state with two particles in \( p=2 \) to the wave function with two-particles in \( p=1 \)? Discuss your results in terms of a linear combination of Slater determinants.
d) Add the possibility that the two particles can be in the state with \( p=3 \) as well and find the Hamiltonian matrix, the eigenvalues and the eigenvectors. We still insist that we only have two-particle states composed of two particles being in the same level \( p \). You can diagonalize numerically your \( 3\times 3 \) matrix.
This simple model catches several birds with a stone. It demonstrates how we can build linear combinations of Slater determinants and interpret these as different admixtures to a given state. It represents also the way we are going to interpret these contributions. The two-particle states above \( p=1 \) will be interpreted as excitations from the ground state configuration, \( p=1 \) here. The reliability of this ansatz for the ground state, with two particles in \( p=1 \), depends on the strength of the interaction \( g \) and the single-particle spacing \( d \). Finally, this model is a simple schematic ansatz for studies of pairing correlations and thereby superfluidity/superconductivity in fermionic systems.


public interface SecureDirectoryStream<T> extends DirectoryStream<T>
DirectoryStream
that defines operations on files that are located
relative to an open directory. A SecureDirectoryStream
is intended
for use by sophisticated or security sensitive applications requiring to
traverse file trees or otherwise operate on directories in a race-free manner.
Race conditions can arise when a sequence of file operations cannot be
carried out in isolation. Each of the file operations defined by this
interface specify a relative path. All access to the file is relative
to the open directory irrespective of if the directory is moved or replaced
by an attacker while the directory is open. A SecureDirectoryStream
may also be used as a virtual working directory.
A SecureDirectoryStream
requires corresponding support from the
underlying operating system. Where an implementation supports this features
then the DirectoryStream
returned by the newDirectoryStream
method will be a SecureDirectoryStream
and must
be cast to that type in order to invoke the methods defined by this interface.
In the case of the default provider
, and a security manager is set, then the permission checks are
performed using the path obtained by resolving the given relative path
against the original path of the directory (irrespective of if the
directory is moved since it was opened).
DirectoryStream.Filter<T>
| Modifier and Type | Method and Description |
|---|---|
void |
deleteDirectory(T path)
Deletes a directory.
|
void |
deleteFile(T path)
Deletes a file.
|
<V extends FileAttributeView> |
getFileAttributeView(Class<V> type)
Returns a new file attribute view to access the file attributes of this
directory.
|
<V extends FileAttributeView> |
getFileAttributeView(T path,
Class<V> type,
LinkOption... options)
Returns a new file attribute view to access the file attributes of a file
in this directory.
|
void |
move(T srcpath,
SecureDirectoryStream<T> targetdir,
T targetpath)
Move a file from this directory to another directory.
|
SeekableByteChannel |
newByteChannel(T path,
Set<? extends OpenOption> options,
FileAttribute<?>... attrs)
Opens or creates a file in this directory, returning a seekable byte
channel to access the file.
|
SecureDirectoryStream<T> |
newDirectoryStream(T path,
LinkOption... options)
Opens the directory identified by the given path, returning a
SecureDirectoryStream to iterate over the entries in the directory. |
iterator
forEach, spliterator
SecureDirectoryStream<T> newDirectoryStream(T path, LinkOption... options) throws IOException
SecureDirectoryStream
to iterate over the entries in the directory.
This method works in exactly the manner specified by the newDirectoryStream
method for the case that
the path
parameter is an absolute
path.
When the parameter is a relative path then the directory to open is
relative to this open directory. The NOFOLLOW_LINKS
option may be used to
ensure that this method fails if the file is a symbolic link.
The new directory stream, once created, is not dependent upon the directory stream used to create it. Closing this directory stream has no effect upon newly created directory stream.
path
- the path to the directory to openoptions
- options indicating how symbolic links are handledSecureDirectoryStream
objectClosedDirectoryStreamException
- if the directory stream is closedNotDirectoryException
- if the file could not otherwise be opened because it is not
a directory (optional specific exception)IOException
- if an I/O error occursSecurityException
- In the case of the default provider, and a security manager is
installed, the checkRead
method is invoked to check read access to the directory.SeekableByteChannel newByteChannel(T path, Set<? extends OpenOption> options, FileAttribute<?>... attrs) throws IOException
This method works in exactly the manner specified by the Files.newByteChannel
method for the
case that the path
parameter is an absolute
path. When the parameter is a relative path then the file to open or
create is relative to this open directory. In addition to the options
defined by the Files.newByteChannel
method, the NOFOLLOW_LINKS
option may be used to
ensure that this method fails if the file is a symbolic link.
The channel, once created, is not dependent upon the directory stream used to create it. Closing this directory stream has no effect upon the channel.
path
- the path of the file to open open or createoptions
- options specifying how the file is openedattrs
- an optional list of attributes to set atomically when creating
the fileClosedDirectoryStreamException
- if the directory stream is closedIllegalArgumentException
- if the set contains an invalid combination of optionsUnsupportedOperationException
- if an unsupported open option is specified or the array contains
attributes that cannot be set atomically when creating the fileFileAlreadyExistsException
- if a file of that name already exists and the CREATE_NEW
option is specified
(optional specific exception)IOException
- if an I/O error occursSecurityException
- In the case of the default provider, and a security manager is
installed, the checkRead
method is invoked to check read access to the path if the file
is opened for reading. The checkWrite
method is invoked to check write access to the path
if the file is opened for writing.void deleteFile(T path) throws IOException
Unlike the delete()
method, this method does
not first examine the file to determine if the file is a directory.
Whether a directory is deleted by this method is system dependent and
therefore not specified. If the file is a symbolic link, then the link
itself, not the final target of the link, is deleted. When the
parameter is a relative path then the file to delete is relative to
this open directory.
path
- the path of the file to deleteClosedDirectoryStreamException
- if the directory stream is closedNoSuchFileException
- if the file does not exist (optional specific exception)IOException
- if an I/O error occursSecurityException
- In the case of the default provider, and a security manager is
installed, the checkDelete
method is invoked to check delete access to the filevoid deleteDirectory(T path) throws IOException
Unlike the delete()
method, this method
does not first examine the file to determine if the file is a directory.
Whether non-directories are deleted by this method is system dependent and
therefore not specified. When the parameter is a relative path then the
directory to delete is relative to this open directory.
path
- the path of the directory to deleteClosedDirectoryStreamException
- if the directory stream is closedNoSuchFileException
- if the directory does not exist (optional specific exception)DirectoryNotEmptyException
- if the directory could not otherwise be deleted because it is
not empty (optional specific exception)IOException
- if an I/O error occursSecurityException
- In the case of the default provider, and a security manager is
installed, the checkDelete
method is invoked to check delete access to the directoryvoid move(T srcpath, SecureDirectoryStream<T> targetdir, T targetpath) throws IOException
This method works in a similar manner to move
method when the ATOMIC_MOVE
option
is specified. That is, this method moves a file as an atomic file system
operation. If the srcpath
parameter is an absolute
path then it locates the source file. If the parameter is a
relative path then it is located relative to this open directory. If
the targetpath
parameter is absolute then it locates the target
file (the targetdir
parameter is ignored). If the parameter is
a relative path it is located relative to the open directory identified
by the targetdir
parameter. In all cases, if the target file
exists then it is implementation specific if it is replaced or this
method fails.
srcpath
- the name of the file to movetargetdir
- the destination directorytargetpath
- the name to give the file in the destination directoryClosedDirectoryStreamException
- if this or the target directory stream is closedFileAlreadyExistsException
- if the file already exists in the target directory and cannot
be replaced (optional specific exception)AtomicMoveNotSupportedException
- if the file cannot be moved as an atomic file system operationIOException
- if an I/O error occursSecurityException
- In the case of the default provider, and a security manager is
installed, the checkWrite
method is invoked to check write access to both the source and
target file.<V extends FileAttributeView> V getFileAttributeView(Class<V> type)
The resulting file attribute view can be used to read or update the
attributes of this (open) directory. The type
parameter specifies
the type of the attribute view and the method returns an instance of that
type if supported. Invoking this method to obtain a BasicFileAttributeView
always returns an instance of that class that is
bound to this open directory.
The state of resulting file attribute view is intimately connected
to this directory stream. Once the directory stream is closed
,
then all methods to read or update attributes will throw ClosedDirectoryStreamException
.
V
- The FileAttributeView
typetype
- the Class
object corresponding to the file attribute viewnull
if the attribute view
type is not available<V extends FileAttributeView> V getFileAttributeView(T path, Class<V> type, LinkOption... options)
The resulting file attribute view can be used to read or update the
attributes of file in this directory. The type
parameter specifies
the type of the attribute view and the method returns an instance of that
type if supported. Invoking this method to obtain a BasicFileAttributeView
always returns an instance of that class that is
bound to the file in the directory.
The state of resulting file attribute view is intimately connected
to this directory stream. Once the directory stream closed
,
then all methods to read or update attributes will throw ClosedDirectoryStreamException
. The
file is not required to exist at the time that the file attribute view
is created but methods to read or update attributes of the file will
fail when invoked and the file does not exist.
V
- The FileAttributeView
typepath
- the path of the filetype
- the Class
object corresponding to the file attribute viewoptions
- options indicating how symbolic links are handlednull
if the attribute view
type is not availableDracula Javadoc Sample, Made with Allan Im.


Created by Jeremy Thacker /<EMAIL_ADDRESS>A chance to clean up our Product Backlog Items (PBIs)
Stories at the top of the backlog, themes and epics lower.
A story should be no larger than one quarter of the team's time during the sprint.
As a [role]
I want [feature]
So that [benefit]
As a student
I want to be notified that I have a new message when I sign in
So that I know about it promptly
Given [context] (and [more context] ...)
When [event]
Then [outcome] (and [another outcome] ...)
Given that there is a new message that I have not seen
When I sign in to EEE
Then I will see a notice that there is a message for me
Given that I have a new message notice
When I click on it
Then I am taken to the message
And the notice goes away
An auditable list of criteria that each PBI must meet be be considered completed
"98% done rounds to zero."


18 ODs in one morning
by Jon ManchesterWorkers at a Downtown Eastside Vancouver overdose prevention site say a bad batch of drugs resulted in no less than 18 ODs in just one morning.
Trey Helten, a manager with the Overdose Prevention Society says there were 18 overdoses by noon on Friday.
"That's how our day started – it was like a war zone – and it didn't let up until three o'clock in the afternoon," he told CTV News.
The bad drugs are a mix of low-grade benzodiazepine and fentanyl, leaving people in a coma-like state before they can be revived.
Helten said even the overdose-reversal drug naloxone often fails to revive users.
Last year, 1,541 people died of illicit drug toxicity in B.C.
– with files from CTV Vancouver


pip_services3_rpc.services.StatusRestService module
pip_services3_rpc.services.StatusRestService
Status rest service implementation
- copyright
Conceptual Vision Consulting LLC 2018-2019, see AUTHORS for more details.
- license
MIT, see LICENSE for more details.
- class pip_services3_rpc.services.StatusRestService.StatusRestService
Bases:
pip_services3_rpc.services.RestService.RestService
Service that returns microservice status information via HTTP/REST protocol. The service responds on /status route (can be changed) with a JSON object:
{ - "id": unique container id (usually hostname) - "name": container name (from ContextInfo) - "description": container description (from ContextInfo) - "start_time": time when container was started - "current_time": current time in UTC - "uptime": duration since container start time in milliseconds - "properties": additional container properties (from ContextInfo) - "components": descriptors of components registered in the container }
- ### Configuration parameters ###
base_route: base route for remote URI
- dependencies:
endpoint: override for HTTP Endpoint dependency
controller: override for Controller dependency
- connection(s):
discovery_key: (optional) a key to retrieve the connection from IDiscovery
protocol: connection protocol: http or https
host: host name or IP address
port: port number
uri: resource URI or connection string with all parameters in it
- ### References ###
*:logger:*:*:1.0 (optional)
ILogger
components to pass log messages*:counters:*:*:1.0 (optional)
ICounters
components to pass collected measurements*:discovery:*:*:1.0 (optional)
IDiscovery
services to resolve connection*:endpoint:http:*:1.0 (optional)
HttpEndpoint
reference
Example:
service = StatusService() service.configure(ConfigParams.from_tuples("connection.protocol", "http", "connection.host", "localhost", "connection.port", 8080)) service.open("123") # ...
- configure(config: pip_services3_commons.config.ConfigParams.ConfigParams)
Configures component by passing configuration parameters.
- Parameters
config – configuration parameters to be set.
- register()
Registers all service routes in HTTP endpoint.
- set_references(references: pip_services3_commons.refer.IReferences.IReferences)
Sets references to dependent components.
- Parameters
references – references to locate the component dependencies.
- status() str


--- layout: portfolio title: Health Pro Press excerpt: A redesigned responsive Wordpress theme for Health Pro Press. ---
Health Pro Press desperately needed a site design update and a mobile version of healthpropress.com.
While working at Black Label I completed the development of this site.


Authoritarian governments blocking internet is new Berlin Wall, says US ambassador to Germany
by Julia MustoThe Western world has to "remind ourselves" that government censorship still exists in many countries even today, U.S. Ambassador to Germany Ric Grenell said Saturday.
Saturday marks the 30th anniversary of the fall of the Berlin Wall.
GERMANY, ALLIES CELEBRATE 30TH ANNIVERSARY OF THE BERLIN WALL FALL
The Brandenburg Gate, on the East Berlin side of the Wall, was the backdrop for President Ronald Reagan's famous 1987 speech when he challenged Soviet leader Mikhail Gorbachev to go further with the reforms he was instituting.
"If you seek liberalization, come here to this gate," Reagan said. "Mr. Gorbachev, open this gate. Mr. Gorbachev, tear down this wall."
Appearing on "Cavuto LIVE" with host Neil Cavuto, Grenell said, "We have to today remember that we still have governments around the world that try to limit information, try to stop the internet in their countries...they're trying to limit the free-flow and free information of their people."
"So, we have a different way that the state is moving to control the behavior of individuals, and we have to constantly remember that we fight back against that and that we can be successful," he told Cavuto.
Grenell said a potential solution would be to "look for ways, as the U.S. government, to push forward this technology that allows government censors to fall."
CLICK HERE FOR THE FOX NEWS APP
"All of the trappings that authoritarian governments put up to limit that information via the internet -- I think that's the wall today," he stated. "And, we have the ability, the West has the ability, to go around government censors whether it's in Iran or Cuba or China. And, I think that we have to be able to do that and be on the side of giving people more information."
"That's what the West stands for and we have to remind ourselves that we still have those challenges today," he told Cavuto.
The Associated Press contributed to this report.


#include "detail/setup.hpp"
#include "detail/type_vec3.hpp"
Go to the source code of this file.
Core features
Definition in file vec3.hpp.


Register
First name:
Last name:
Gender:
Male
Female
Other
Email:
Password:
Birthday:
I agree to terms and conditions


@form(action=routes.HomeController.addProjectSubmit(), 'class -> "form-horizontal", 'role -> "form") {
@* CSRF attack prevention *@
@* This token, sent by the controller, will be used to authenticate the form submission *@
@CSRF.formField
@inputText(addProject("ProjectName"), '_label -> "Project Name", 'class -> "form-control")
@inputText(addProject("projectId"), '_label -> "", 'hidden -> "hidden")
} @* end of form *@


How Do I Get Letters of Recommendation?
Welcome to the new Letters of Recommendation service: Interfolio
Interfolio works with your school to help you showcase and share your work online and simplify the application process.
With our suite of tools, you can build and enhance your career, knowing your documents are secure and can be easily shared or delivered.
Build your portfolio. Advance your career
Create a professional portfolio, showcase your work, and manage important documents.
Manage credentials with ease
Request letters of recommendation and other documents online and deliver to any institution as electronic or hard copy.
Simplify graduate school applications
We work with ETS to deliver a secure, convenient and easy way to handle letters of recommendation.
It takes just 2 minutes to create an account and begin building your credentials file immediately. Account set-up and maintenance fees are as low as $19 per year plus a modest fee for each mailing.
Interfolio contact information:
www.interfolio.com
Phone: 877-77-FOLIO or<PHONE_NUMBER>)
<EMAIL_ADDRESS>Benefits of using Interfolio:
24/7 access: Our system is available 24 hours a day, 7 days a week, from anywhere in the world so you can manage your job search when and where you want. We also have a team of dedicated Customer Experience Professionals, who pride themselves on making your application process as efficient and successful as possible.
University branding: Select your University when you sign up with Interfolio and the cover page of your package will be personalized with the University name or logo.
Easy storage for a variety of documents: Your portfolio can be used not only for letters of recommendation, but also for C.V.'s, writing samples, research, dissertation abstracts, teacher evaluations, student and peer evaluations, transcripts and other documents.
Single package delivery: Interfolio allows you to send all your chosen documents in one very professional-looking package.
Targeted, customized deliveries: You can specify a unique set of documents for each delivery. You can also specify the order in which your materials are packaged so your presentation is powerful, persuasive, and professional.
Self-managed files: With Interfolio you finally have control of all your credentials, including letters of recommendation that remain confidential. You can easily request new reference letters to add to your file, and you can choose exactly which ones you would like sent to each address.
Super-fast delivery: We send every delivery within one business day of your request. If you need to meet a deadline, we can send express deliveries the same day (as long as you make the request by 2 p.m. EST). We also provide electronic deliveries!
For University graduates with existing dossier files: If you currently have a dossier file at the University office, first please contact Interfolio and set up an account. The office will need your username and a copy of the Credential File Transfer Form in order to transfer your current file contents.


With Surging Membership, DSA Braces for President Trump
This piece originally appeared on dsausa.org.
By Ben Dalton
After immigrating from China, Lynn Wang’s parents lived in the United States for three decades without encountering discrimination or racial abuse, until the final months of the 2016 presidential campaign.
“My mom was leaving yoga, and a woman from our hometown just pulled up next to her, leaned out of her car and started calling her racial slurs,” said Wang, a student at the University of Southern California. “We’ve been in Manhattan Beach for decades and never had that kind of thing happen before.”
A desire to fight what she describes as the “toxic atmosphere” surrounding Donald Trump’s presidential campaign and victory is partly what drove Wang to join the Democratic Socialists of America (DSA), the country’s largest democratic-socialist organization. A veteran of the Bernie Sanders campaign, Wang learned of DSA from a fellow volunteer. As a member, she plans to organize on behalf of those “who feel particularly threatened by Trump’s rhetoric.”
“I’m afraid that bigotry won at the polls, and people think that bigotry has a place in the streets,” Wang said. “I hope that we will be able to take a part in the resistance against the Trump administration.”
Wang is among thousands of new recruits to have joined DSA in recent months, a “Trump bump” that has boosted progressive organizations across the United States. In the first six days after Trump’s victory, DSA signed up over 1,600 dues-paying, online members, an 18 percent increase in membership, according to David Duhalde, the organization’s deputy director. Even before Trump’s election, Duhalde says that DSA had grown in prominence thanks to Bernie Sanders, a self-described democratic socialist whose presidential campaign DSA supported. Facing a Trump administration, DSA and other socialist groups offer members a channel for organized resistance that goes beyond electoral politics.
“As a national organization with chapters in red states and blue states, in rural, suburban and urban communities we feel that we’re uniquely positioned to really build a national network and community of people that can confront this kind of rhetoric,” said Maria Svart, DSA national director. “We’re going to resist every bad thing they try to do.”
On election night, Chris Maisano caught a cab to Brooklyn with several other DSA members as the first results began to trickle in. Their plan for the night was to watch what they assumed would be a Hillary Clinton victory at a live broadcast of the leftist Chapo Trap House podcast. By the time he reached the event, Maisano realized that Trump had a real shot at winning.
“The mood quickly switched from slightly optimistic nervousness to just increasing demoralization and dread,” Maisano said.
U.S. socialists dislike Clinton, whom they consider to represent the neoliberal, anti-labor wing of the Democratic Party, but most nonetheless strongly preferred her to Trump. Now that Trump will be president, their list of worries is long. Foremost for many is the possibility that the Trump administration will follow through on the president-elect’s campaign rhetoric and target vulnerable communities such as immigrants, Muslims and LGBT Americans.
“The first immediate threat is that he has the Obama deportation machine,” Duhalde said. “I understand when radicals are like, ‘well, Obama’s already deporting people,’ but I think Trump will use it much more cruelly.” Duhalde pointed out that Trump will inherit lists of undocumented immigrants who are temporarily protected from deportation by Obama’s Deferred Action for Childhood Arrivals (DACA) policy. The Trump administration could target those on the DACA registry, Duhalde said.
Another concern is that the Trump administration, together with the Republican-controlled Congress, will continue long-standing GOP efforts to undermine organized labor.
“The Republican Party has an opportunity to really go after the labor movement, what remains of it,” said Maisano. “They’re going to go after the [National Labor Relations Board]. They’re going to try to repeal many of the regulations about overtime and wages that the Obama administration put in place. It seems pretty clear that at some point they’re going to push to pass a national right to work law.”
Svart said that defending unions will be a priority for DSA under a Trump administration.
“For all of the flaws of the leaders of most of the labor movement, we have to protect unions,” she said. “They are uniquely positioned, and over history have done more than anyone else, to build a multiracial movement of working class people.”
The official topic at the first Brooklyn Jacobin reading group held after the election was socialist politics in Brazil, but the conversation kept returning to Trump.
“I think you should be in the first line against Trump,” said Pedro Fuentes, a visiting speaker and official in Brazil’s Socialism and Liberty Party (PSOL). Around the room heads nodded. “Anti-Trump. This is the first task you have.”
Since Trump’s election, left-wing groups have strategized how best to respond to his coming administration and Republican control of both the executive and legislative branches of government. One immediate reaction has been to organize and join protests against Trump’s victory, as well as offer solidarity and support to groups that have been targeted since the election.
Svart said that DSA held an emergency conference call urging local chapters to join hands with community organizations – religious institutions, other activists, clinics – that support vulnerable populations. Together with these groups, DSA seeks to create sanctuaries from the rash of hate crimes and harassment that has followed Trump’s win, Svart said. She believes that coordination with other groups will be necessary under a Trump administration.
“We’re also working with our DSA groups to have emergency meetings to talk about the new political terrain and publicly protest in several ways, one of which is actually in the streets, registering discontent with the election results,” said Svart. “We’re also having folks write letters to the editor, write opinion editorials, call into radio shows, and things like that, so we’re providing talking points.”
One question is whether socialists should attempt to pull the Democratic Party to the left by supporting its progressive wing, represented by figures such as Keith Ellison, the Minnesota representative seeking to become chair of the Democratic National Committee. Svart said she is open to serving as a kind of “Tea Party of the left” that backs progressive Democrats against centrists in primaries, as well as running independent candidates where they stand a chance of winning.
“We believe in both working with what we have and at the same time being independent and building an alternative,” Svart said.
Yet, many activists are skeptical that the Democrats can be transformed into a genuine, national party of the left, in large part because the party’s centrist wing remains so influential. Socialist critics contend that the party’s national leadership is isolated from its base and slow to respond to grassroots concerns. Longtime party leaders are not likely to cede control to reenergized progressives without a fight, activists said.
“These faction fights are fascinating because I don’t feel that one side can truly dominate the other,” Duhalde said. “The important thing is for the progressives just to keep challenging and not give up.”
Since the election, DSA members have organized and joined protests against Trump, a form of direct action that Duhalde said will be important given how little leverage the left will wield in a Republican-dominated government. The organization plans to protest Trump’s inauguration this January in Washington, DC.
Despite opposing Trump’s rhetoric and policies, DSA members cautioned against demonizing his voters.
 “I think that the greatest failure of the liberal left so far has been that they’ve failed to come up with a counter-narrative to Trump’s rhetoric.”
For Maisano, only the left can provide an effective alternative to Trumpism, one that speaks to the millions who sat out the election or even voted for Trump because they felt that conventional politicians had forgotten them. Activists will need to find the right balance between defending against a hostile Trump administration and building a viable alternative, Maisano said.
“Liberalism is not going to protect us against this,” he said. “They’re not going to offer an alternative.”
And even with the damage he believes the Trump administration will do, Maisano said that the future of U.S. politics belongs to the social democratic constituency that emerged during the 2015-16 campaign.
“It is still far too early to tell how all of this will play out, but despite my fears about what a Trump administration will bring in the short term, I am optimistic that the most dynamic and emergent forces in U.S. politics today are on our side,” he said.


hotelApp
Login
Register
Hotels
MyPage
Logout
Category
Show
5
10
25
entries
Show
5
10
25
entries
AddReview
Show
5
10
20
entries
×
Who liked this
×
View in Google Map
×
Loading...


--------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------------
11
Human Resources Policies
to harassment in any form. They have a duty to report any harassment that they
may have observed or that they are aware is taking place.
All staff should provide support to any colleague who believes that he/she is being
harassed and cooperate fully as required with any internal investigation that takes
place.
We are all expected to:
Ensure we do not discriminate on the basis of:
- Gender
- Disability
- Family situation
- Sexual orientation
- Age
- Political and philosophical opinions
- Religious beliefs
- Union activity
- Racial, social, cultural or national origins
This applies not only to recruitment, but also to all decisions relating to
training, promotion, continued employment and working conditions in
general.
Abstain from any harassment or bullying
Be courteous: treat our fellow workers the way we would like them to treat
us
Abstain from any sexual harassment
Immediately stop any behaviour which we have been told is unwanted
RAISING CONCERNS
XI. Raising Concerns and Reporting Misconduct
If you have genuine concerns regarding conduct- whether by another employee, a
supervisor, customer, consultant, agent, supplier, other third party or yourself -
that may violate the law, regulations or company policy, you will report the activity,
at the earliest practicable stage, by contacting any of the following:
Your immediate supervisor
Your local human resources representative
By reporting your suspicions, in good faith, you are ensuring that the DIPI is not
exposed to any unnecessary risks and that the DIPI's image is not tarnished.
It may sometimes be easier to ignore potential misconduct. However, your
commitment to the integrity of the DIPI means that any legal or ethical issues must
never be ignored. Malpractice within the DIPI is taken very seriously and you will
not be victimized or subjected to any detriment if you raise concerns in good faith.
General
1.
The Company recognizes the Employees and workers as its most important asset


TIME
Section: Linux Programmer's Manual (7)
Updated: 2012-10-28
Index
Return to Main Contents
NAME
time - overview of time and timers
DESCRIPTION
Real time and process time
Real time
is defined as time measured from some fixed point,
either from a standard point in the past
(see the description of the Epoch and calendar time below),
or from some point (e.g., the start) in the life of a process
(elapsed time).
Process time
is defined as the amount of CPU time used by a process.
This is sometimes divided into
user
and
system
components.
User CPU time is the time spent executing code in user mode.
System CPU time is the time spent by the kernel executing
in system mode on behalf of the process (e.g., executing system calls).
The
time(1)
command can be used to determine the amount of CPU time consumed
during the execution of a program.
A program can determine the amount of CPU time it has consumed using
times(2),
getrusage(2),
or
clock(3).
The hardware clock
Most computers have a (battery-powered) hardware clock which the kernel
reads at boot time in order to initialize the software clock.
For further details, see
rtc(4)
and
hwclock(8).
The software clock, HZ, and jiffies
The accuracy of various system calls that set timeouts,
(e.g.,
select(2),
sigtimedwait(2))
and measure CPU time (e.g.,
getrusage(2))
is limited by the resolution of the
software clock,
a clock maintained by the kernel which measures time in
jiffies.
The size of a jiffy is determined by the value of the kernel constant
HZ.
The value of
HZ
varies across kernel versions and hardware platforms.
On i386 the situation is as follows:
on kernels up to and including 2.4.x, HZ was 100,
giving a jiffy value of 0.01 seconds;
starting with 2.6.0, HZ was raised to 1000, giving a jiffy of
0.001 seconds.
Since kernel 2.6.13, the HZ value is a kernel
configuration parameter and can be 100, 250 (the default) or 1000,
yielding a jiffies value of, respectively, 0.01, 0.004, or 0.001 seconds.
Since kernel 2.6.20, a further frequency is available:
300, a number that divides evenly for the common video
frame rates (PAL, 25 HZ; NTSC, 30 HZ).
The
times(2)
system call is a special case.
It reports times with a granularity defined by the kernel constant
USER_HZ.
User-space applications can determine the value of this constant using
sysconf(_SC_CLK_TCK).
High-resolution timers
Before Linux 2.6.21, the accuracy of timer and sleep system calls
(see below) was also limited by the size of the jiffy.
Since Linux 2.6.21, Linux supports high-resolution timers (HRTs),
optionally configurable via
CONFIG_HIGH_RES_TIMERS.
On a system that supports HRTs, the accuracy of sleep and timer
system calls is no longer constrained by the jiffy,
but instead can be as accurate as the hardware allows
(microsecond accuracy is typical of modern hardware).
You can determine whether high-resolution timers are supported by
checking the resolution returned by a call to
clock_getres(2)
or looking at the "resolution" entries in
/proc/timer_list.
HRTs are not supported on all hardware architectures.
(Support is provided on x86, arm, and powerpc, among others.)
The Epoch
UNIX systems represent time in seconds since the
Epoch,
1970-01-01 00:00:00 +0000 (UTC).
A program can determine the
calendar time
using
gettimeofday(2),
which returns time (in seconds and microseconds) that have
elapsed since the Epoch;
time(2)
provides similar information, but only with accuracy to the
nearest second.
The system time can be changed using
settimeofday(2).
Broken-down time
Certain library functions use a structure of
type
tm
to represent
broken-down time,
which stores time value separated out into distinct components
(year, month, day, hour, minute, second, etc.).
This structure is described in
ctime(3),
which also describes functions that convert between calendar time and
broken-down time.
Functions for converting between broken-down time and printable
string representations of the time are described in
ctime(3),
strftime(3),
and
strptime(3).
Sleeping and setting timers
Various system calls and functions allow a program to sleep
(suspend execution) for a specified period of time; see
nanosleep(2),
clock_nanosleep(2),
and
sleep(3).
Various system calls allow a process to set a timer that expires
at some point in the future, and optionally at repeated intervals;
see
alarm(2),
getitimer(2),
timerfd_create(2),
and
timer_create(2).
Timer slack
Since Linux 2.6.28, it is possible to control the "timer slack"
value for a thread.
The timer slack is the length of time by
which the kernel may delay the wake-up of certain
system calls that block with a timeout.
Permitting this delay allows the kernel to coalesce wake-up events,
thus possibly reducing the number of system wake-ups and saving power.
For more details, see the description of
PR_SET_TIMERSLACK
in
prctl(2).
SEE ALSO
date(1),
time(1),
adjtimex(2),
alarm(2),
clock_gettime(2),
clock_nanosleep(2),
getitimer(2),
getrlimit(2),
getrusage(2),
gettimeofday(2),
nanosleep(2),
stat(2),
time(2),
timer_create(2),
timerfd_create(2),
times(2),
utime(2),
adjtime(3),
clock(3),
clock_getcpuclockid(3),
ctime(3),
pthread_getcpuclockid(3),
sleep(3),
strftime(3),
strptime(3),
timeradd(3),
usleep(3),
rtc(4),
hwclock(8)
Index
- NAME
-
- DESCRIPTION
-
- Real time and process time
-
- The hardware clock
-
- The software clock, HZ, and jiffies
-
- High-resolution timers
-
- The Epoch
-
- Broken-down time
-
- Sleeping and setting timers
-
- Timer slack
-
- SEE ALSO
-
This document was created by
man2html,
using the manual pages.
Time: 02:55:20 GMT, September 18, 2014


Introducing Web Development
27 Aug 2016Writing is hard.
Especially when you’re not sure what to write about.
But if you keep putting it off because you’re waiting for the right moment when the spark finally hits you and you’re overloaded with ideas on web development topics galore — well, that’ll never happen.
At least not to me.
So I’m just going to start off by writing from the very beginning on what I know about web development.
This will probably be a long series but it will be unassuming (hopefully) to the reader, pretending you don’t know anything about web development.
When you talk about web development, the problem arises, well, where do you begin?
Do you start from the very beginning and cover HTML and CSS or do you skip all the design part and dive in straight to coding?
Well I haven’t figured out that out just yet. I think I’ll do it as we go along but we will dive head first and deep into programming through projects.
The Plan
I’m going to make a bold statement here and say I will plan a project (a mini one) and develop it here, helping you get familiar with the language and on developing web apps.
But before we do that, let’s start by picking a language. Or two.
I’m picking Javascript and Ruby because I love Javascript and coding in Ruby on Rails is easy and helps develop best practices. After that I plan to dive into Node and cover full stack javascript development in the future.
Introducing Web Development 101
Hello web.
Let’s begin with our first mini project.
A Landing Page
No Ruby here. Just plain HTML, CSS and JavaScript.
Our task will be to build a landing page that fulfils the following requirements I got from a senior developer.
Goals For The Landing Page:
- Inform visitors about the app and how it can help them.
- Convert visitors to signup for a newsletter/notification about the upcoming closed beta of the app.
- Lastly convert visitors to social media followers for updates and engagement.
Possible Steps Needed To Achieve Goals:
- Content Development
- Sketch a Wireframe (Using Paper or Whiteboard or Software)
- Design & Develop
- Extensive Testing
Constraints:
- Time-limit: 7 Days
- Must use Git
- Must use Responsive Design
Let’s break this down into actionable steps or blocks that need to be build.
(At least that’s how I process information.)
Requirements
- A signup bar that takes in email addresses and redirects them to a thank you page.
- Slide in animated information about the features of the app
- Social media buttons
Additional Rules
- Must use testing
- Must be responsive
- Must have wireframes.
Further Steps
I know some people write everything all in one post. I just can’t do that.
So I’m going to make each block that needs to be build a blog post and cover how I build it starting with the design phase.
You can view them all here:


lingvo.core.cluster module¶
Specification of a training cluster.
-
class
lingvo.core.cluster.
_Cluster
(params)[source]¶ Bases:
object
The whole training cluster from a single task’s point of view.
-
classmethod
_JobSpec
(replicas)[source]¶ Construct a job spec param with the given number of replicas.
-
classmethod
ListDevices
(job_spec)[source]¶ Lists devices in the job.
Parameters: job_spec – A param object specifying a job in a training cluster. Returns: Returns a 2D np string array. ret[i, j] is the i-th replica’s j-th devices.
-
params
¶
-
mode
¶
-
job
¶
-
task
¶
-
job_spec
¶
-
async
¶ Returns True if configured for asynchronous training.
-
sync
¶ Returns True if configured for synchronous training.
-
num_replicas
¶
-
tpus_per_replica
¶
-
num_tpu_hosts
¶
-
num_devices_per_replica
¶
-
num_devices_per_split
¶ Return number of accelerators to use per split.
-
num_splits_per_replica
¶
-
num_splits_per_client
¶ The number of splits visible by one trainer client.
-
available_devices
¶ Returns all compute devices available in a 2D array.
Returns: A 2D array (python list of python lists) of strings. ret[i, j] is the j-th visible device on i-th visible replica.
-
input_device
¶ Returns the tensorflow device name to place input op on.
-
WorkerDeviceInModelSplit
(device_index)[source]¶ Returns the device to use for ‘device_index’ for the current model split.
Parameters: device_index – An int, the device index within ‘model_split’. Returns: A string. The device to place ops onto.
-
GetPlacer
(strategy=None)[source]¶ Returns a device function for placing ops within the cluster.
Parameters: strategy – A string. Identifier for a placement strategy. By default, we use a least loaded policy to place variables. Returns: Returns a device function can be used in tf.device(). Raises: ValueError
– when strategy is not supported.
-
classmethod
-
class
lingvo.core.cluster.
VarPlacer
(cluster)[source]¶ Bases:
object
Placer which places variables across a set of devices.
VarPlacer places non-variable ops on the worker device.
-
class
lingvo.core.cluster.
_LeastLoadedPlacer
(cluster)[source]¶ Bases:
lingvo.core.cluster.VarPlacer
Placer which places a variable on the least loaded var device.
We use total byte sizes of variables placed on a device to indicate the device’s load.


For the latest COVID-19 news and information, visit Penn State's Coronavirus Information website. Continue to follow CDC-recommended health/safety precautions, contact your healthcare provider if you have questions or feel ill, and review information from state and national health authorities.
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo
Basic top-alert demo


MPI includes a variant of the reduce operations where the result is returned to all processes in a group. MPI requires that all processes from the same group participating in these operations receive identical results.
| MPI_ALLREDUCE(sendbuf, recvbuf, count, datatype, op, comm) | |
| IN sendbuf | starting address of send buffer (choice) |
| OUT recvbuf | starting address of receive buffer (choice) |
| IN count | number of elements in send buffer (non-negative integer) |
| IN datatype | data type of elements of send buffer (handle) |
| IN op | operation (handle) |
| IN comm | communicator (handle) |
int MPI_Allreduce(const void* sendbuf, void* recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)
MPI_Allreduce(sendbuf, recvbuf, count, datatype, op, comm, ierror)
TYPE(*), DIMENSION(..), INTENT(IN) :: sendbuf
TYPE(*), DIMENSION(..) :: recvbuf
INTEGER, INTENT(IN) :: count
TYPE(MPI_Datatype), INTENT(IN) :: datatype
TYPE(MPI_Op), INTENT(IN) :: op
TYPE(MPI_Comm), INTENT(IN) :: comm
INTEGER, OPTIONAL, INTENT(OUT) :: ierror
MPI_ALLREDUCE(SENDBUF, RECVBUF, COUNT, DATATYPE, OP, COMM, IERROR)
<type> SENDBUF(*), RECVBUF(*)
INTEGER COUNT, DATATYPE, OP, COMM, IERROR
If comm is an intracommunicator, MPI_ALLREDUCE behaves the same as MPI_REDUCE except that the result appears in the receive buffer of all the group members.
Advice
to implementors.
The all-reduce operations can be implemented as a reduce, followed by a
broadcast. However, a direct implementation can lead to better performance.
( End of advice to implementors.)
The ``in place'' option for intracommunicators is specified by passing the
value MPI_IN_PLACE to the argument sendbuf
at all processes.
In this case,
the input data is taken at each process from the receive buffer,
where it will be replaced by the output data.
If comm is an intercommunicator, then the result of the reduction of the data provided by processes in group A is stored at each process in group B, and vice versa. Both groups should provide count and datatype arguments that specify the same type signature.
The following example uses an intracommunicator.
Example
A routine that computes
the product of a vector and an array that are distributed across a
group of processes and returns the answer at all nodes (see also
Example Predefined Reduction Operations
).
SUBROUTINE PAR_BLAS2(m, n, a, b, c, comm) REAL a(m), b(m,n) ! local slice of array REAL c(n) ! result REAL sum(n) INTEGER n, comm, i, j, ierr ! local sum DO j= 1, n sum(j) = 0.0 DO i = 1, m sum(j) = sum(j) + a(i)*b(i,j) END DO END DO ! global sum CALL MPI_ALLREDUCE(sum, c, n, MPI_REAL, MPI_SUM, comm, ierr) ! return result at all nodes RETURN END


|
FC4SC
1.0
|
Defines a class for crosses. More...
#include <cross.hpp>
Public Member Functions | |
| cross (cvg_base *n, coverpoint< Args > *...args) | |
| Main constructor. More... | |
| cross () | |
| Default constructor. | |
| void | sample (const Args &...args) |
| Sampling function at cross level. More... | |
| double | get_inst_coverage () |
| Computes coverage for this instance. More... | |
| double | get_inst_coverage (int &covered, int &total) |
| Computes coverage for this instance. More... | |
| void | set_inst_name (const string &new_name) |
| Changes the instances name. More... | |
| void | start () |
| Enables sampling. | |
| void | stop () |
| Disables sampling. | |
| void | to_xml (ostream &stream) const |
| print instance in UCIS XML format More... | |
| Public Member Functions inherited from fc4sc::cvp_base | |
| virtual | ~cvp_base () |
| virtual void | set_strings (const string &name, const string &p_name, const string &expr) |
Public Attributes | |
| map< vector< uint >, uint64_t > | bins |
| vector< cvp_base * > | cvps_vec |
| Public Attributes inherited from fc4sc::cvp_base | |
| string | name |
| string | expr_str |
| string | p_name |
| bool | init = false |
| cvp_option | option |
| cvp_type_option | type_option |
Defines a class for crosses.
| Args | Type of coverpoints being crossed |
|
inline |
Main constructor.
| n | Parent covergroup |
| args | Coverpoints to be crossed |
|
inlinevirtual |
Computes coverage for this instance.
Implements fc4sc::cvp_base.
|
inlinevirtual |
Computes coverage for this instance.
| covered | Number of covered bins |
| total | Total number of bins in this cross |
Implements fc4sc::cvp_base.
|
inline |
Sampling function at cross level.
| args | Values to be sampled for this cross |
Takes a number of sampling values, and sees if each value can be found in its corresponding coverpoint
|
inlinevirtual |
Changes the instances name.
| new_name | New associated name |
Reimplemented from fc4sc::cvp_base.
|
inlinevirtual |
| map<vector<uint> , uint64_t> fc4sc::cross< Args >::bins |
Hit cross bins storage
| vector<cvp_base*> fc4sc::cross< Args >::cvps_vec |
Crossed coverpoints storage


Next: function (Special Operator), Previous: flet, Up: Data and Control Flow Dictionary
funcall
function &rest args ⇒ {result}*
function—a function designator.
args—arguments to the function.
results—the values returned by the function.
funcall applies function to args.
If function is a symbol, it is coerced to a function as if by finding its functional value in the global environment.
(funcall #'+ 1 2 3) ⇒ 6 (funcall 'car '(1 2 3)) ⇒ 1 (funcall 'position 1 '(1 2 3 2 1) :start 1) ⇒ 4 (cons 1 2) ⇒ (1 . 2) (flet ((cons (x y) `(kons ,x ,y))) (let ((cons (symbol-function '+))) (funcall #'cons (funcall 'cons 1 2) (funcall cons 1 2)))) ⇒ (KONS (1 . 2) 3)
An error of type undefined-function should be signaled if function is a symbol that does not have a global definition as a function or that has a global definition as a macro or a special operator.
apply, function, Evaluation
(funcall function arg1 arg2 ...) ≡ (apply function arg1 arg2 ... nil) ≡ (apply function (list arg1 arg2 ...))
The difference between funcall and an ordinary function call is that in the former case the function is obtained by ordinary evaluation of a form, and in the latter case it is obtained by the special interpretation of the function position that normally occurs.


User Research, Usability Testing, Wireframing, Prototyping, Quantitative UX Analysis
React, Javascript, HTML/CSS, Node, Ruby on Rails, C, C++, Java, SQL, MongoDB
Figma, Sketch, Invision, Webflow, Adobe Suite, R Studio