fortran90 - Optional subroutines in Fortran 90 -


how can achieve objective in fortran 90 ? have routine accepting function

subroutine foo(bar, mysub)    integer, intent(in) :: bar    interface       subroutine mysub(x)          integer :: x       end subroutine    end interface     call mysub(bar)  end subroutine 

now want routine optional

subroutine foo(bar, mysub)    integer, intent(in) :: bar    interface       subroutine mysub(x)          integer :: x       end subroutine    end interface    optional :: mysub     call mysub(bar)  end subroutine 

now, if mysub standard variable var like

 if (present(var))      l_var = var  else      l_var = <default value>  endif 

but far know, cannot perform same optional subroutine. in practice not possible

subroutine foo(bar, mysub)    integer, intent(in) :: bar    interface       subroutine mysub(x)          integer :: x       end subroutine    end interface    optional :: mysub     if (present(mysub))        l_mysub = mysub    else        l_mysub = default    endif     call mysub(bar)  end subroutine 

because cannot declare l_mysub. possible through trick not aware of ? yes, of course can

   if (present(mysub))        call mysub(bar)    else        call default(bar)    endif 

but case more complex , have put check everywhere. consider have 3 optional subroutines may pass.

my first thought use procedure pointer, noticed specified fortran 90, that's not option.
how making wrapper subroutine original foo, calls given subroutine if specified, or else default? (untested):

subroutine foo_wrap(bar, mysub)   integer, intent(in) :: bar   interface     subroutine mysub(x)       integer :: x     end subroutine mysub   end interface   optional :: mysub    if (present(mysub))     call foo(bar, mysub)   else     call foo(bar, default)   endif end subroutine foo_wrap   

with multiple optional subroutines might become little complex, not impossible, think.


Comments

Popular posts from this blog

apache - Add omitted ? to URLs -

redirect - bbPress Forum - rewrite to wwww.mysite prohibits login -

php - How can I stop spam on my custom forum/blog? -