I am getting this compilation error with gfortran 5.4 and a .f90 code
call abc_output(struc,nx,ny,nz,'AB' ,get_ab_dat(p_f),&
1
Error: Non-variable expression in variable definition context (actual argument to INTENT = OUT/INOUT) at (1)
The method call that is generating the compilation error is shown below and the error is on get_ab_dat
type(b_f) :: p_f
call abc_output(struc,nx,ny,nz,'AB' ,get_ab_dat(p_f),&
'BD' ,get_bc_dat(p_f),&
'EF' , aaa )
The function get_ab_dat is shown below
function get_ab_dat(bf) result(qx_arr)
type(b_f),intent(in) :: bf
real,dimension(:,:,:),allocatable :: qx_arr
qx_arr = bf%qx
end function get_ab_dat
subroutine abc_output (struc,nx,ny,nz,dname1,data1,&
dname2,data2,dname3,data3,dname4,data4)
type(c_s),intent(in) :: struc
integer,intent(in) :: nx,ny,nz
character(len=*),intent(in) :: dname1
real,dimension(:,:,:),allocatable,intent(inout) :: data1
character(len=*),intent(in),optional :: dname2,dname3,dname4
real,dimension(:,:,:),allocatable,intent(inout),optional :: data2,data3,data4
Can somebody explain what that error means and how I can fix it ?
You cannot post an expression or a constant to an
intent(OUT)
orintent(INOUT)
argument. You must always pass a variable, because it can be changed in the procedure you are calling.So because the sixth argument of
abc_output
isintent(OUT)
or (more likely)intent(INOUT)
you first have to assign the value ofget_ab_dat(p_f)
to a variable and you have to pass the variable toabc_output
. Be careful about argument aliasing.In this particular case the argument is also
allocatable
, so the variable must beallocatable
as well.