diff src/fftw-3.3.3/doc/f77_wisdom.f @ 10:37bf6b4a2645

Add FFTW3
author Chris Cannam
date Wed, 20 Mar 2013 15:35:50 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/fftw-3.3.3/doc/f77_wisdom.f	Wed Mar 20 15:35:50 2013 +0000
@@ -0,0 +1,79 @@
+c     Copyright (c) 2003, 2007-11 Matteo Frigo
+c     Copyright (c) 2003, 2007-11 Massachusetts Institute of Technology
+c     
+c     This program is free software; you can redistribute it and/or modify
+c     it under the terms of the GNU General Public License as published by
+c     the Free Software Foundation; either version 2 of the License, or
+c     (at your option) any later version.
+c     
+c     This program is distributed in the hope that it will be useful,
+c     but WITHOUT ANY WARRANTY; without even the implied warranty of
+c     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+c     GNU General Public License for more details.
+c     
+c     You should have received a copy of the GNU General Public License
+c     along with this program; if not, write to the Free Software
+c     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+c
+cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+c     
+c     This is an example implementation of Fortran wisdom export/import
+c     to/from a Fortran unit (file), exploiting the generic
+c     dfftw_export_wisdom/dfftw_import_wisdom functions.
+c     
+c     We cannot compile this file into the FFTW library itself, lest all
+c     FFTW-calling programs be required to link to the Fortran I/O
+c     libraries.
+c     
+cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+
+c     Strictly speaking, the '$' format specifier, which allows us to
+c     write a character without a trailing newline, is not standard F77.
+c     However, it seems to be a nearly universal extension.
+      subroutine write_char(c, iunit)
+      character c
+      integer iunit
+      write(iunit,321) c
+ 321  format(a,$)
+      end      
+
+      subroutine export_wisdom_to_file(iunit)
+      integer iunit
+      external write_char
+      call dfftw_export_wisdom(write_char, iunit)
+      end
+
+c     Fortran 77 does not have any portable way to read an arbitrary
+c     file one character at a time.  The best alternative seems to be to
+c     read a whole line into a buffer, since for fftw-exported wisdom we
+c     can bound the line length.  (If the file contains longer lines,
+c     then the lines will be truncated and the wisdom import should
+c     simply fail.)  Ugh.
+      subroutine read_char(ic, iunit)
+      integer ic
+      integer iunit
+      character*256 buf
+      save buf
+      integer ibuf
+      data ibuf/257/
+      save ibuf
+      if (ibuf .lt. 257) then
+         ic = ichar(buf(ibuf:ibuf))
+         ibuf = ibuf + 1
+         return
+      endif
+      read(iunit,123,end=666) buf
+      ic = ichar(buf(1:1))
+      ibuf = 2
+      return
+ 666  ic = -1
+      ibuf = 257
+ 123  format(a256)
+      end
+      
+      subroutine import_wisdom_from_file(isuccess, iunit)
+      integer isuccess
+      integer iunit
+      external read_char
+      call dfftw_import_wisdom(isuccess, read_char, iunit)
+      end