Aleksandar Donev wrote:
>Richard E Maine wrote:
>
>
>>Fortunately for me, I've never
>>used namelist internal output, and my uses of list-directed internal
>>output are pretty simple.
>>
>>
>I did not use to use much list-direction internal output, but then I
>implemented a comprehensive and OOP event logging system, which is
>supposed to work even on a parallel machine where non-internal IO is
>not possible. The idea is that the client writes whatever it needs to
>write to an internal buffer
>
>WRITE(log%buffer,...) ...
>
>and then calls
>
>CALL log%Write() ! Type-bound procedure
>
>Since we do not have variable-IO lists or anything like the C-printf, it
>is not possible for me to replace the WRITE statement with my own
>provided subroutine. Rather, I let the user use internal IO, and then I
>take care of actually writing that to a file, the screen, sending it
>via MPI, or whatever.
>
>Best,
>Aleks
>
>
A couple of thoughts on how you may overcome this problem. I don't
know how useful any of them may be in your situation.
1. Bounds checking? Have you turned this on? Most compilers have
this option. It's usually spelled something like /CHECK=ALL on CVF and
HP Fortran for OpenVMS, -CHK on Lahey LF95, or something similar. I use
it all of the time, and it usually catches problems like this.
2. User-Defined Derived-Type I/O Procedures (UDDTIOP)? Would you
be able to write a UDDTIOP that would be able to overcome the silent
overflow of your buffer?
3. Large buffer with LEN_TRIM? How about defining a ridiculously
large sized character string and then using LEN_TRIM to find out what
the significant length of the data is?
--
----------
Sincerely,
Craig T. Dedo
17130 W. Burleigh Place Internet: [log in to unmask]
Brookfield, WI 53005-2759 Voice Phone: (262) 783-5869
USA Fax Phone: (262) 783-5928
"They that can give up essential liberty to obtain a little temporary
safety deserve neither liberty nor safety." -- Benjamin Franklin
(1759)
|