Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to wrap the fortran write-statement

I want to wrap the fortran write-statement in a custom subroutine or function which includes some additional debug-logic.

But I'm currently stuck with defining the prototype of the function/subroutine. Is this possible? If yes, how?

like image 665
Joachim Rosskopf Avatar asked Oct 16 '25 15:10

Joachim Rosskopf


1 Answers

The title of your question exhibits a misunderstanding, though the text suggests you know better. Nevertheless, for the record, write is a Fortran statement, it is neither a subroutine nor a function.

I think you have a number of options. One, which I have used occasionally, would be to write a function which returns a string. Perhaps

function error_message(error)
    character(len=*), intent(in) :: error
    character(len=:), allocatable :: error_message
    error_message = 'ERROR: '//trim(error)
end function error_message

which you can then use like this

write(*,*) error_message('Oh s**t')

You could certainly write a subroutine or a function with side effects which include writing to an ouput channel, but if you adopt this approach you have to be careful to observe the rules for recursive i/o.

EDIT

after OP's comment.

If you want to switch off debug messages another option you have is to direct them to a null device or file, eg /dev/null on Linux or NUL on Windows. Something like

integer, parameter :: debug_channel = 99
logical, parameter :: debugging = .false.
...
if (debugging) then
   open(debug_channel, file='NUL')
else
   open(debug_channel, file='debuglog'
end if

and then

write(debug_channel,*) 'message'
like image 99
High Performance Mark Avatar answered Oct 18 '25 12:10

High Performance Mark



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!