diff --git a/Source/init.f90 b/Source/init.f90 index 24f7bd88a1..9d000f8118 100644 --- a/Source/init.f90 +++ b/Source/init.f90 @@ -1437,7 +1437,7 @@ SUBROUTINE DEFINE_EDGE(II,JJ,KK,IOR,IEC,NM,OBST_INDEX) ED%JJO_1 = JJO MM => MESHES(NOM) ZK = MIN( REAL(MM%KBAR,EB)+ONE_M_EPS , MM%CELLSK(NINT((M%Z(KK)-MM%ZS)*MM%RDZINT))+1._EB ) - KKO = MAX(1,FLOOR(ZK)) + KKO = MIN(MM%KBAR,MAX(1,FLOOR(ZK))) ED%EDGE_INTERPOLATION_FACTOR(1) = ZK-KKO ED%KKO_1 = KKO CASE(3) @@ -1446,7 +1446,7 @@ SUBROUTINE DEFINE_EDGE(II,JJ,KK,IOR,IEC,NM,OBST_INDEX) ED%IIO_2 = IIO MM => MESHES(NOM) YJ = MIN( REAL(MM%JBAR,EB)+ONE_M_EPS , MM%CELLSJ(NINT((M%Y(JJ)-MM%YS)*MM%RDYINT))+1._EB ) - JJO = MAX(1,FLOOR(YJ)) + JJO = MIN(MM%JBAR,MAX(1,FLOOR(YJ))) ED%EDGE_INTERPOLATION_FACTOR(2) = YJ-JJO ED%JJO_2 = JJO ED%KKO_2 = KKO @@ -1475,7 +1475,7 @@ SUBROUTINE DEFINE_EDGE(II,JJ,KK,IOR,IEC,NM,OBST_INDEX) ED%JJO_2 = JJO MM => MESHES(NOM) ZK = MIN( REAL(MM%KBAR,EB)+ONE_M_EPS , MM%CELLSK(NINT((M%Z(KK)-MM%ZS)*MM%RDZINT))+1._EB ) - KKO = MAX(1,FLOOR(ZK)) + KKO = MIN(MM%KBAR,MAX(1,FLOOR(ZK))) ED%EDGE_INTERPOLATION_FACTOR(2) = ZK-KKO ED%KKO_2 = KKO CASE( 3) @@ -1483,7 +1483,7 @@ SUBROUTINE DEFINE_EDGE(II,JJ,KK,IOR,IEC,NM,OBST_INDEX) IF (IOR<0) ED%NOM_1 = NOM MM => MESHES(NOM) XI = MIN( REAL(MM%IBAR,EB)+ONE_M_EPS , MM%CELLSI(NINT((M%X(II)-MM%XS)*MM%RDXINT))+1._EB ) - IIO = MAX(1,FLOOR(XI)) + IIO = MIN(MM%IBAR,MAX(1,FLOOR(XI))) ED%EDGE_INTERPOLATION_FACTOR(1) = XI-IIO ED%IIO_1 = IIO ED%JJO_1 = JJO @@ -1512,7 +1512,7 @@ SUBROUTINE DEFINE_EDGE(II,JJ,KK,IOR,IEC,NM,OBST_INDEX) ED%IIO_1 = IIO MM => MESHES(NOM) YJ = MIN( REAL(MM%JBAR,EB)+ONE_M_EPS , MM%CELLSJ(NINT((M%Y(JJ)-MM%YS)*MM%RDYINT))+1._EB ) - JJO = MAX(1,FLOOR(YJ)) + JJO = MIN(MM%JBAR,MAX(1,FLOOR(YJ))) ED%EDGE_INTERPOLATION_FACTOR(1) = YJ-JJO ED%JJO_1 = JJO ED%KKO_1 = KKO @@ -1521,7 +1521,7 @@ SUBROUTINE DEFINE_EDGE(II,JJ,KK,IOR,IEC,NM,OBST_INDEX) IF (IOR<0) ED%NOM_2 = NOM MM => MESHES(NOM) XI = MIN( REAL(MM%IBAR,EB)+ONE_M_EPS , MM%CELLSI(NINT((M%X(II)-MM%XS)*MM%RDXINT))+1._EB ) - IIO = MAX(1,FLOOR(XI)) + IIO = MIN(MM%IBAR,MAX(1,FLOOR(XI))) ED%EDGE_INTERPOLATION_FACTOR(2) = XI-IIO ED%IIO_2 = IIO ED%JJO_2 = JJO diff --git a/Source/velo.f90 b/Source/velo.f90 index 76e8ba654f..78eaf408df 100644 --- a/Source/velo.f90 +++ b/Source/velo.f90 @@ -2431,6 +2431,43 @@ SUBROUTINE VELOCITY_BC(T,NM,APPLY_TO_ESTIMATED_VARIABLES) ENDIF END SELECT + ! At the exterior edge of Mesh NM, which abuts Mesh NOM, assign the appropriate velocity component to the + ! ghost cell. For example, MESHES(NM)%VV(IBP1,JJ,KBP1) is stored in MESHES(NM)%OMESH(NOM)%V(IIO+1,JJO,KKO) if Mesh + ! NOM is above Mesh NM (IOR=-3), or it is stored in MESHES(NM)%OMESH(NOM)%V(IIO,JJO,KKO+1) if Mesh NOM is to + ! the right of NM (IOR=-1). The value of each is the same and it is transfered to Mesh NM with a one-step time lag. + + IF (CORRECTOR) THEN + SELECT CASE(IEC) + CASE(1) + IF (JJ==0 .AND. KK==0 .AND. ABS(IOR)==2) UU(II,JJ ,KK ) = OM%U(IIO(ICD),JJO(ICD) ,KKO(ICD)-1) + IF (JJ==0 .AND. KK==0 .AND. ABS(IOR)==3) UU(II,JJ ,KK ) = OM%U(IIO(ICD),JJO(ICD)-1,KKO(ICD) ) + IF (JJ==0 .AND. KK==KBAR .AND. ABS(IOR)==2) UU(II,JJ ,KK+1) = OM%U(IIO(ICD),JJO(ICD) ,KKO(ICD)+1) + IF (JJ==0 .AND. KK==KBAR .AND. ABS(IOR)==3) UU(II,JJ ,KK+1) = OM%U(IIO(ICD),JJO(ICD)-1,KKO(ICD) ) + IF (JJ==JBAR .AND. KK==0 .AND. ABS(IOR)==2) UU(II,JJ+1,KK ) = OM%U(IIO(ICD),JJO(ICD) ,KKO(ICD)-1) + IF (JJ==JBAR .AND. KK==0 .AND. ABS(IOR)==3) UU(II,JJ+1,KK ) = OM%U(IIO(ICD),JJO(ICD)+1,KKO(ICD) ) + IF (JJ==JBAR .AND. KK==KBAR .AND. ABS(IOR)==2) UU(II,JJ+1,KK+1) = OM%U(IIO(ICD),JJO(ICD) ,KKO(ICD)+1) + IF (JJ==JBAR .AND. KK==KBAR .AND. ABS(IOR)==3) UU(II,JJ+1,KK+1) = OM%U(IIO(ICD),JJO(ICD)+1,KKO(ICD) ) + CASE(2) + IF (II==0 .AND. KK==0 .AND. ABS(IOR)==1) VV(II ,JJ,KK ) = OM%V(IIO(ICD) ,JJO(ICD),KKO(ICD)-1) + IF (II==0 .AND. KK==0 .AND. ABS(IOR)==3) VV(II ,JJ,KK ) = OM%V(IIO(ICD)-1,JJO(ICD),KKO(ICD) ) + IF (II==0 .AND. KK==KBAR .AND. ABS(IOR)==1) VV(II ,JJ,KK+1) = OM%V(IIO(ICD) ,JJO(ICD),KKO(ICD)+1) + IF (II==0 .AND. KK==KBAR .AND. ABS(IOR)==3) VV(II ,JJ,KK+1) = OM%V(IIO(ICD)-1,JJO(ICD),KKO(ICD) ) + IF (II==IBAR .AND. KK==0 .AND. ABS(IOR)==1) VV(II+1,JJ,KK ) = OM%V(IIO(ICD) ,JJO(ICD),KKO(ICD)-1) + IF (II==IBAR .AND. KK==0 .AND. ABS(IOR)==3) VV(II+1,JJ,KK ) = OM%V(IIO(ICD)+1,JJO(ICD),KKO(ICD) ) + IF (II==IBAR .AND. KK==KBAR .AND. ABS(IOR)==1) VV(II+1,JJ,KK+1) = OM%V(IIO(ICD) ,JJO(ICD),KKO(ICD)+1) + IF (II==IBAR .AND. KK==KBAR .AND. ABS(IOR)==3) VV(II+1,JJ,KK+1) = OM%V(IIO(ICD)+1,JJO(ICD),KKO(ICD) ) + CASE(3) + IF (II==0 .AND. JJ==0 .AND. ABS(IOR)==1) WW(II ,JJ ,KK) = OM%W(IIO(ICD) ,JJO(ICD)-1,KKO(ICD)) + IF (II==0 .AND. JJ==0 .AND. ABS(IOR)==2) WW(II ,JJ ,KK) = OM%W(IIO(ICD)-1,JJO(ICD) ,KKO(ICD)) + IF (II==0 .AND. JJ==JBAR .AND. ABS(IOR)==1) WW(II ,JJ+1,KK) = OM%W(IIO(ICD) ,JJO(ICD)+1,KKO(ICD)) + IF (II==0 .AND. JJ==JBAR .AND. ABS(IOR)==2) WW(II ,JJ+1,KK) = OM%W(IIO(ICD)-1,JJO(ICD) ,KKO(ICD)) + IF (II==IBAR .AND. JJ==0 .AND. ABS(IOR)==1) WW(II+1,JJ ,KK) = OM%W(IIO(ICD) ,JJO(ICD)-1,KKO(ICD)) + IF (II==IBAR .AND. JJ==0 .AND. ABS(IOR)==2) WW(II+1,JJ ,KK) = OM%W(IIO(ICD)+1,JJO(ICD) ,KKO(ICD)) + IF (II==IBAR .AND. JJ==JBAR .AND. ABS(IOR)==1) WW(II+1,JJ+1,KK) = OM%W(IIO(ICD) ,JJO(ICD)+1,KKO(ICD)) + IF (II==IBAR .AND. JJ==JBAR .AND. ABS(IOR)==2) WW(II+1,JJ+1,KK) = OM%W(IIO(ICD)+1,JJO(ICD) ,KKO(ICD)) + END SELECT + ENDIF + ENDIF INTERPOLATION_IF ! Set ghost cell values at edge of computational domain @@ -2441,7 +2478,7 @@ SUBROUTINE VELOCITY_BC(T,NM,APPLY_TO_ESTIMATED_VARIABLES) IF (JJ==JBAR .AND. IOR==-2) WW(II,JJ+1,KK) = VEL_GHOST IF (KK==0 .AND. IOR== 3) VV(II,JJ,KK) = VEL_GHOST IF (KK==KBAR .AND. IOR==-3) VV(II,JJ,KK+1) = VEL_GHOST - IF (CORRECTOR) THEN + IF (CORRECTOR .AND. .NOT.INTERPOLATED_EDGE) THEN IF (ICD==1) THEN ED%W_AVG = 0.5_EB*(VEL_GHOST+VEL_GAS) ELSE ! ICD=2 @@ -2453,7 +2490,7 @@ SUBROUTINE VELOCITY_BC(T,NM,APPLY_TO_ESTIMATED_VARIABLES) IF (II==IBAR .AND. IOR==-1) WW(II+1,JJ,KK) = VEL_GHOST IF (KK==0 .AND. IOR== 3) UU(II,JJ,KK) = VEL_GHOST IF (KK==KBAR .AND. IOR==-3) UU(II,JJ,KK+1) = VEL_GHOST - IF (CORRECTOR) THEN + IF (CORRECTOR .AND. .NOT.INTERPOLATED_EDGE) THEN IF (ICD==1) THEN ED%U_AVG = 0.5_EB*(VEL_GHOST+VEL_GAS) ELSE ! ICD=2 @@ -2465,7 +2502,7 @@ SUBROUTINE VELOCITY_BC(T,NM,APPLY_TO_ESTIMATED_VARIABLES) IF (II==IBAR .AND. IOR==-1) VV(II+1,JJ,KK) = VEL_GHOST IF (JJ==0 .AND. IOR== 2) UU(II,JJ,KK) = VEL_GHOST IF (JJ==JBAR .AND. IOR==-2) UU(II,JJ+1,KK) = VEL_GHOST - IF (CORRECTOR) THEN + IF (CORRECTOR .AND. .NOT.INTERPOLATED_EDGE) THEN IF (ICD==1) THEN ED%V_AVG = 0.5_EB*(VEL_GHOST+VEL_GAS) ELSE ! ICD=2