Mac binaries
[jabaws.git] / website / archive / binaries / mac / src / disembl / Tisean_3.0.1 / source_f / totospec.f
1 c===========================================================================
2 c
3 c   This file is part of TISEAN
4
5 c   Copyright (c) 1998-2007 Rainer Hegger, Holger Kantz, Thomas Schreiber
6
7 c   TISEAN is free software; you can redistribute it and/or modify
8 c   it under the terms of the GNU General Public License as published by
9 c   the Free Software Foundation; either version 2 of the License, or
10 c   (at your option) any later version.
11 c
12 c   TISEAN is distributed in the hope that it will be useful,
13 c   but WITHOUT ANY WARRANTY; without even the implied warranty of
14 c   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 c   GNU General Public License for more details.
16 c
17 c   You should have received a copy of the GNU General Public License
18 c   along with TISEAN; if not, write to the Free Software
19 c   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
20 c
21 c===========================================================================
22 c   Force x to have spectrum a (routine needed by surrogates.f)
23 C   author Thomas Schreiber (1999)
24 c===========================================================================
25       function totospec(nmax,a,x)
26       parameter(nx=1000000)
27       dimension x(nmax), a(nmax), w(nx), w1(nx), w2(nx), iw(15)
28       save w2, iw
29
30       if(nmax.gt.nx) stop "totospec: make nx larger."
31       do 10 n=1,nmax
32  10      w(n)=x(n)
33       call rffti1(nmax,w2,iw)  
34       call rfftf1(nmax,x,w1,w2,iw)
35       do 20 n=1,nmax
36  20      x(n)=x(n)/real(nmax)
37       x(1)=sqrt(a(1))
38       do 30 n=2,(nmax+1)/2
39          ab=a(2*n-2)/(x(2*n-2)**2+x(2*n-1)**2)
40          x(2*n-2)=x(2*n-2)*sqrt(ab)
41  30      x(2*n-1)=x(2*n-1)*sqrt(ab)
42       if(mod(nmax,2).eq.0) x(nmax)=sqrt(a(nmax))
43       call rfftb1(nmax,x,w1,w2,iw)
44       totospec=0
45       do 40 n=1,nmax
46  40      totospec=totospec+(x(n)-w(n))**2
47       totospec=sqrt(totospec/nmax)
48       end