What is the effect of passing an allocatable variable into a subroutine with non-allocatable argument?

前端 未结 2 1162
清酒与你
清酒与你 2021-01-21 07:39

Say we have this variable definition

Real*8, Dimension(:), Allocatable :: dblA
Allocate  (dblA(1000))

Now I call this subroutine:



        
2条回答
  •  猫巷女王i
    2021-01-21 08:27

    If the array has been allocated prior to being passed to the subroutine the subroutine is indifferent to the allocatable-ness, the effect is the same as if the array were static. There is nothing to object to, nor practice to avoid, in the snippets you show us. However, those snippets actually do very little and it is easy to think of ways to extend them to invalidate this advice.

    Now do yourself a favour and change

    Real*8,  INTENT(Out), DIMENSION(1000) :: dblA
    

    to

    Real*8,  INTENT(Out), DIMENSION(:) :: dblA
    

    so that the subroutine works correctly whatever the size of the array it gets passed. It's probably also a bad idea to use dblA as the name for both the dummy and actual arguments, you'll just confuse yourself.

    And real*8 is not, and never has been, a standard-compliant way of declaring an 8-byte real. On this point, see numerous questions and answers here on SO.

提交回复
热议问题