entero, hacer bucle, fortran, error

Tengo el siguiente código fortran definido en. Estoy tratando de cambiar la longitud del bucle do si cambio el valor de n. Cuando intento compilar me sale el error:
El argumento "a" del "piso" intrínseco en (1) debe ser REAL. Pero cuando cambio q y w para definirlo como real, recibo otro mensaje de error. ¿Cómo puedo arreglar esto? q y w es claramente un número entero cuando uso piso (...)

subroutine boundrycon(n,bc,u,v)


!input
integer :: n,bc

!output
real(8) :: u(n+2,n+2), v(n+2,n+2)

!lokale
integer :: j,i,w,q

n=30

q=floor(n/2)
w=(floor(n/2)+floor(n/6))


do j=q,w  
u(q,j)=0.0;
v(q+1,j)=-v(q,j);

u(w,j)=0.0;
v(w+1,j)=-v(w,j);

end do

do i=q,w 

v(i,q)=0.0;
u(i,q)=-u(i,q+1);


u(i,w+1)=-u(i,w);
v(i,w)=0;

end do

end subroutine boundrycon

Respuestas a la pregunta(1)

Su respuesta a la pregunta