For the sake of the argument, suppose that all boundaries of the rectangle (1:eta_rho,1:xi_rho) are closed, that is one has SOUTHERN_WALL, etc. Then the difference between two states is introduced in the t3dbc_tile function called from ini_fields.F.
There one has following code:
Code: Select all
IF (Jstr.eq.1) THEN
!
! Southern edge, closed boundary condition.
!
DO k=1,N(ng)
DO i=Istr,Iend
t(i,Jstr-1,k,nout,itrc)=t(i,Jstr,k,nout,itrc)
t(i,Jstr-1,k,nout,itrc)=t(i,Jstr1,k,nout,itrc)* &
& GRID(ng)%rmask(i,Jstr-1)
END DO
END DO
END IF
But there are more problems that this code introduces: some masked values can be copied onto the first layer since as far as I know there is no reason that mask_rho(2,iXi)=0 implies mask_rho(1,iXi)=0. In particular, this implies zero temperature and salinity.
Another problem is the dependence on the grid. Suppose that you have a grid with a full line of zeros, that is mask_rho(1,:)=0, mask_rho(:,1)=0, mask_rho(eta_rho,:)=0 or mask_rho(:,xi_rho)=0. Removing such lines from the grid file is not innocent and will led to different results even if all the forcing files have been correctly reduced as well.
I don't know if it is a bug or a feature. If it is a feature I would have appreciated that ROMS stops if it encounters a situation like mask_rho(2,iXi)=0 and mask_rho(1,iXi)=1.