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
|
#ifndef _SBCORE_COM_
#define _SBCORE_COM_
c Two different "stacks" of memory will be available in the course of an
c Aces3 calculation. Integer memory will be stored in icore. Real memory
c will be stored in dcore.
c
c Memory allocation is done in one of two ways, dynamic or nondynamic. This
c is controlled by the parameter dynmem. If dynmem is 1, dynamic memory
c is used. Otherwise, nondynamic memory is used.
c
c Two additional parameters nondynimem and nondyndmem control how much
c nondynamic memory is allocated initially in the icore and dcore stacks.
c If dynmem is 1, both of these parameters SHOULD be 1.
c Dynamic memory allocation is done in a fairly straighforward way. The
c program runs through everything twice. The first time is just to determine
c how much dynamic memory is required. The second time is use to actually
c allocate the memory and use it. In some cases, it may be difficult to
c determine how much memory to use in advance in each of the stacks. To
c aid this, there is also the option of only running through a program a
c single time. When this happens, both stacks are allocated initially and
c used throughout the program. If the memory requirement for either stack
c is exceeded, the program crashes.
c
c Two parameters which are used in either case are memknown and maxicore.
c Both MUST be set in the calling program.
c
c memknown : 0 if a dummy run is being done to determine memory usage
c 1 if the memory usage is known from a previous dummy run
c -1 if no dummy run is done (only one run through the program)
c maxicore : the maximum amount of icore to allocate (this MAY be
c adjusted IF a dummy run detects that more is needed, but in
c the case of a single run, this will be rigidly applied)
c
c This include file is required whenever calls to any of the memory functions
c (setptr and relptr) are called or when part of the execution depends on
c whether the first or second run is being performed.
c
c ***NOTE***
c It is important that icore be aligned on a floating point boundary. One
c way which seems to insure this is to have icore the FIRST element in the
c common block. So, make sure that no integer is ever inserted before icore
c in the common block declaration.
integer dynmem,nondynimem,nondyndmem
parameter (dynmem=1)
parameter (nondynimem=1)
parameter (nondyndmem=1)
c parameter (nondynimem=1000000)
c parameter (nondyndmem=4000000)
double precision dcore(nondyndmem)
common /dcore_com/ dcore
save /dcore_com/
integer icore(nondynimem)
common / / icore
integer memknown,maxicore
common /sbcore_com/ memknown,maxicore
save /sbcore_com/
#endif /* _SBCORE_COM_ */
#ifdef _ICORE_COM_
#error "sbcore.com is incompatible with icore.com"
#endif
|