Fortran Routines

Here is a list of the available Fortran routines, with a short description of each one. All the code is fairly well documented with internal comments. The source code is freely available at the URL:

http://latt.if.usp.br/scientific-pages/nsmfccsonpm/

ff_0.f:
this routine implements the function $f_{0}(\chi)$; it is implemented as a double-precision function.

fg_1.f:
this routine implements the function $g_{1}(\gamma)$; it is implemented as a double-precision function.

ff_2.f:
this routine implements the function $f_{2}(\chi)$; it is implemented as a double-precision function.

fg_p.f:
this routine implements the function $g_{p}(\gamma)$, for $p\geq 3$; it is implemented as a double-precision function.

df_0.f:
this routine implements the derivative $f'_{0}(\chi)$; it is implemented as a double-precision function.

dg_1.f:
this routine implements the derivative $g'_{1}(\gamma)$; it is implemented as a double-precision function.

df_2.f:
this routine implements the derivative $f'_{2}(\chi)$; it is implemented as a double-precision function.

dg_p.f:
this routine implements the derivative $g'_{p}(\gamma)$, for $p\geq 3$; it is implemented as a double-precision function.

The integrations in the routines aif_*.f and aig_*.f are performed in two passes, the first one uses a guessed integration range, and is used to measure the actual integration range. The integration starts at the maximum of the function and proceeds down to either side until a boundary of the range is found, or until the integral no longer increases. The second pass performs the final integration using this measured range.

The integration routines use be default $10000$ intervals for the final integration. Considering that the cubic splines algorithm is precise to order $(\Delta x)^{2}$, this should give results which are good within single-precision level. This is certainly enough for plotting graphs, but if there is any need one can increase the number of integration intervals in order to get results good to double-precision level.

Note that the integration routines will crash for sufficiently large negative values of $\xi$, because the exponentials within the functions they integrate will eventually underflow and cause a division by zero.

pars.f:
parameters common to all the integration routines, namely the value of a standard number of integration intervals, and the constant $1/12$ for the cubic splines integration formula.

aif_0.f:
this routine implements the integral from $0$ to $\infty$, as a function of $\xi$, of $f_{0}(\chi)$; it is implemented as a double-precision function.

aig_1.f:
this routine implements the integral from $0$ to $\infty$, as a function of $\xi$, of $g_{1}(\gamma)$; it is implemented as a double-precision function.

aif_2.f:
this routine implements the integral from $0$ to $\infty$, as a function of $\xi$, of $f_{2}(\chi)$; it is implemented as a double-precision function.

aig_p.f:
this routine implements the integral from $0$ to $\infty$, as a function of $\xi$, of $g_{p}(\gamma)$, for $p\geq 3$; it is implemented as a double-precision function.

The programs crit_*_curve.f are written to read the input data from the stdin channel, and are to be used as encoded in the makefiles Makefile.O1 through Makefile.SO4. They read in $d$, $\varepsilon$ and $n_{\rm max}$, then they loop over the resulting values of $\xi$ in order to produce the plotting data.

crit_o1_curve.f:
this program produces the data to plot the graphs of the critical curves of the $O(1)$ model in any dimension $d$. It accepts from stdin the values of $d$, $\varepsilon$ and $n_{\rm max}$, these last two for the calculation of $\xi_{n}$.

crit_so2_curve.f:
this program produces the data to plot the graphs of the critical curves of the $SO(2)$ model in any dimension $d$. It accepts from stdin the values of $d$, $\varepsilon$ and $n_{\rm max}$, these last two for the calculation of $\xi_{n}$.

crit_so3_curve.f:
this program produces the data to plot the graphs of the critical curves of the $SO(3)$ model in any dimension $d$. It accepts from stdin the values of $d$, $\varepsilon$ and $n_{\rm max}$, these last two for the calculation of $\xi_{n}$.

crit_so4_curve.f:
this program produces the data to plot the graphs of the critical curves of the $SO(4)$ model in any dimension $d$. It accepts from stdin the values of $d$, $\varepsilon$ and $n_{\rm max}$, these last two for the calculation of $\xi_{n}$.