00001 c ihifwtws_.F
00002 c*********************************************************************
00003 c* (c) Copyright 1994-2002 Brown Deer Technology, LLC.
00004 c* All rights reserved.
00005 c*********************************************************************
00006
00007 subroutine ihifwtws(Sizef,ns,size,wdata,sdata,ws,iflag)
00008
00009 implicit none
00010
00011 c ****************************************
00012 c ***** COMMON BLOCKS AND PARAMETERS *****
00013 c ****************************************
00014
00015 c *******************************
00016 c ***** VARIABLES EXCHANGED *****
00017 c *******************************
00018
00019 integer Sizef
00020 integer ns
00021 integer size
00022 integer wdata(Sizef)
00023 integer sdata(Sizef)
00024 integer ws(Sizef)
00025 integer iflag
00026
00027 c ***************************
00028 c ***** LOCAL VARIABLES *****
00029 c ***************************
00030
00031 integer i,size1,size2
00032
00033 c ******************************
00034 c ***** EXTERNAL FUNCTIONS *****
00035 c ******************************
00036
00037 #ifdef STORM_FWT_FCHECKUSAGE
00038 if (size.lt.ns) then
00039 iflag=1
00040 return
00041 endif
00042 #endif
00043
00044 if (size.eq.ns) then
00045 do i=1,size
00046 sdata(i)=wdata(i)
00047 enddo
00048 iflag=0
00049 return
00050 endif
00051
00052 do i=1,size
00053 ws(i)=wdata(i)
00054 enddo
00055
00056 if (size.eq.ns) then
00057 iflag=0
00058 return
00059 endif
00060
00061 size1=ns
00062
00063 10 continue
00064 size2=size1
00065 size1=2*size1
00066 do i = 1,size2
00067 sdata(2*i-1) = ws(i) + (ws(size2+i)+1)/2
00068 sdata(2*i) = ws(i) - ws(size2+i)/2
00069 enddo
00070
00071 if (size1.lt.size) then
00072 do i=1,size1
00073 ws(i)=sdata(i)
00074 enddo
00075 goto 10
00076 endif
00077
00078 #ifdef STORM_FWT_FCHECKUSAGE
00079 if (size1.ne.size) then
00080 iflag=2
00081 return
00082 endif
00083 #endif
00084
00085 iflag=0
00086
00087 return
00088 end
00089