module OpenAD_tape implicit none private public :: double_tape, double_tmp_tape, & & double_tape_pointer, double_tape_size, & & integer_tape, integer_tmp_tape, & & integer_tape_pointer, integer_tape_size, & & logical_tape, logical_tmp_tape, & & logical_tape_pointer, logical_tape_size, & & string_tape, string_tmp_tape, & & string_tape_pointer, string_tape_size, & & tape_init, tape_increment double precision, dimension(:), allocatable :: double_tape, double_tmp_tape integer, dimension(:), allocatable :: integer_tape, integer_tmp_tape logical, dimension(:), allocatable :: logical_tape, logical_tmp_tape character(80), dimension(:), allocatable :: string_tape, string_tmp_tape integer :: double_tape_pointer=0, integer_tape_pointer=0 integer :: double_tape_size=0, integer_tape_size=0 integer :: logical_tape_pointer=0, string_tape_pointer=0 integer :: logical_tape_size=0, string_tape_size=0 integer :: tape_increment interface tape_init module procedure init end interface tape_init contains subroutine init double_tape_pointer=1 if (allocated(double_tape)) then deallocate(double_tape) end if double_tape_size=1048576 allocate(double_tape(double_tape_size)) integer_tape_pointer=1 if (allocated(integer_tape)) then deallocate(integer_tape) end if integer_tape_size=1048576 allocate(integer_tape(integer_tape_size)) logical_tape_pointer=1 if (allocated(logical_tape)) then deallocate(logical_tape) end if logical_tape_size=1048576 allocate(logical_tape(logical_tape_size)) string_tape_size=1048576 allocate(string_tape(string_tape_size)) string_tape_pointer=1 if (allocated(string_tape)) then deallocate(string_tape) end if string_tape_size=1048576 allocate(string_tape(string_tape_size)) tape_increment=16777216 end subroutine init end module OpenAD_tape