#include <misc.h> subroutine freemem(address) 1,1 C----------------------------------------------------------------------- C C Interface routine to free dynamically allocated memory. C Replaces automatic arrays on Cray. Isolates machine-specific code C for portable model. C C---------------------------Code history-------------------------------- C C Original version: J. Rosinski April, 1993 C T. Acker, March 1996 C C----------------------------------------------------------------------- c c $Id: freemem.F,v 1.4 1998/03/04 23:56:06 jet Exp $ c $Author: jet $ c C----------------------------------------------------------------------- implicit none C-----------------------------Arguments--------------------------------- C C Input C pointer (address,space) ! Pointer to dynamically allocated space real space C C--------------------------Local Variables------------------------------ C #if ( defined CRAY ) || ( defined T3D ) || ( defined T3E ) integer ier ! Error return code #endif C #if ( defined SUN ) || ( defined RS6K ) integer free external free #endif C----------------------------------------------------------------------- #if ( defined CRAY ) || ( defined T3D ) || ( defined T3E ) CMIC$ GUARD call hpdeallc(address,ier,0) CMIC$ END GUARD C C write error message to std. output C if (ier.ne.0) then write(6,*)'FREEMEM: Bad return code = ',ier, $ ' from hpdeallc: Abort' if (ier.eq.-3) then write(6,*) address,' is outside heap bounds' else if (ier.eq.-4) then write(6,*)'Block is already free' else if (ier.eq.-5) then write(6,*) address,' is not at the beginning of a block' else if (ier.eq.-7) then write(6,*)'Control word for the next block overwritten' end if call endrun end if #endif #if ( defined RS6K ) address = free(%val(address)) #endif #if ( defined SUN ) address = free(address) #endif #if ( defined SGI ) || ( defined HP ) call free(address) #endif C return C end