Files
@ a1222c33f175
Branch filter:
Location: MD/arcos/fish90/src/fish.F - annotation
a1222c33f175
6.8 KiB
text/plain
Edited file README via RhodeCode
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 | d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf | !
! file fish.f
!
! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
! . .
! . copyright (c) 2004 by UCAR .
! . .
! . UNIVERSITY CORPORATION for ATMOSPHERIC RESEARCH .
! . .
! . all rights reserved .
! . .
! . .
! . FISHPACK version 5.0 .
! . .
! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
!
!
! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
! * *
! * F I S H P A C K *
! * *
! * *
! * A PACKAGE OF FORTRAN SUBPROGRAMS FOR THE SOLUTION OF *
! * *
! * SEPARABLE ELLIPTIC PARTIAL DIFFERENTIAL EQUATIONS *
! * *
! * (Version 5.0 , JUNE 2004) *
! * *
! * BY *
! * *
! * JOHN ADAMS, PAUL SWARZTRAUBER AND ROLAND SWEET *
! * *
! * OF *
! * *
! * THE NATIONAL CENTER FOR ATMOSPHERIC RESEARCH *
! * *
! * BOULDER, COLORADO (80307) U.S.A. *
! * *
! * WHICH IS SPONSORED BY *
! * *
! * THE NATIONAL SCIENCE FOUNDATION *
! * *
! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
!
!
! this module is used by all fishpack solvers to allocate
! real and complex work space
MODULE fish
TYPE fishworkspace
DOUBLE PRECISION,DIMENSION(:),ALLOCATABLE :: rew
COMPLEX,DIMENSION(:),ALLOCATABLE :: cxw
END TYPE fishworkspace
CONTAINS
SUBROUTINE allocatfish(irwk,icwk,wsave,ierror)
IMPLICIT NONE
TYPE (fishworkspace) :: wsave
! irwk is the required real work space length
! icwk is the required integer work space length
INTEGER, INTENT(IN) :: irwk,icwk
! ierror is set to 20 if the dynamic allocation is unsuccessful
! (e.g., this would happen if m,n are too large for the computers memory
INTEGER, INTENT(INOUT) :: ierror
INTEGER :: istatus
! first deallocate to avoid memory leakage
write(*,*) 'fish.F: allocatfish'
if(allocated(wsave%rew)) then
write(*,*) 'allocated wsave%rew, size= ',size(wsave%rew)
DEALLOCATE(wsave%rew,STAT=istatus)
write(*,*) 'deallocate wsave%rew, istatus=',istatus
end if
! allocate irwk words of real work space
if (irwk > 0) then
ALLOCATE(wsave%rew(irwk),STAT = istatus)
write(*,*) 'fish.F: allocatfish, irwk:',irwk
end if
!
if(allocated(wsave%cxw)) then
write(*,*) 'allocated wsave%cxw, size=',size(wsave%cxw)
DEALLOCATE(wsave%cxw,STAT=istatus)
write(*,*) 'deallocate wsave%cxw, istatus=',istatus
end if
! allocate icwk words of complex work space
if (icwk > 0) then
ALLOCATE(wsave%cxw(icwk),STAT = istatus)
write(*,*) 'fish.F: allocatfish, icrk:',icwk
end if
ierror = 0
! flag fatal error if allocation fails
if (istatus .ne. 0 ) then
ierror = 20
END IF
RETURN
END SUBROUTINE allocatfish
SUBROUTINE BLK_space(N,M,irwk,icwk)
! this subroutine computes the real and complex work space
! requirements (generous estimate) of blktri for N,M values
IMPLICIT NONE
INTEGER,INTENT(IN) :: N,M
INTEGER,INTENT(OUT) :: irwk,icwk
INTEGER :: L,log2n
! compute nearest integer greater than or equal to
! log base 2 of n+1, i.e., log2n is smallest integer
! such that 2**log2n >= n+1
log2n = 1
do
log2n = log2n+1
if (n+1 <= 2**log2n) EXIT
end do
L = 2**(log2n+1)
irwk = (log2n-2)*L+5+MAX0(2*N,6*M)+log2n+2*n
icwk = ((log2n-2)*L+5+log2n)/2+3*M+N
RETURN
END SUBROUTINE BLK_space
SUBROUTINE GEN_space(N,M,irwk)
! this subroutine computes the real work space
! requirement (generously) of genbun for the current N,M
IMPLICIT NONE
INTEGER,INTENT(IN) :: N,M
INTEGER,INTENT(OUT) :: irwk
INTEGER :: log2n
! compute nearest integer greater than or equal to
! log base 2 of n+1, i.e., log2n is smallest integer
! such that 2**log2n >= n+1
log2n = 1
do
log2n = log2n+1
if (n+1 <= 2**log2n) EXIT
end do
irwk = 4*N + (10 + log2n)*M
RETURN
END SUBROUTINE GEN_space
SUBROUTINE fishfin(wsave,ierror)
! this subroutine releases allocated work space
! fishfin should be called after a fishpack solver has finished
! TYPE (fishworkspace) variable wsave.
IMPLICIT NONE
TYPE (fishworkspace) :: wsave
INTEGER,intent(out) :: ierror
INTEGER :: istatus
!
write(*,*) 'fish.F: fishfin'
if(allocated(wsave%rew)) then
write(*,*) 'deallocated wsave%rew, size= ',size(wsave%rew)
DEALLOCATE(wsave%rew,STAT=istatus)
end if
if(allocated(wsave%cxw)) then
write(*,*) 'deallocated wsave%cxw, size=',size(wsave%cxw)
DEALLOCATE(wsave%cxw,STAT=istatus)
end if
! #ifndef G95
! if(associated(wsave%rew))DEALLOCATE(wsave%rew)
! if(associated(wsave%cxw))DEALLOCATE(wsave%cxw)
! #endif
if (istatus .ne. 0 ) then
ierror = 20
END IF
END SUBROUTINE fishfin
END MODULE fish
|