Skip to content

Commit

Permalink
boundary: deprecate non-managable code
Browse files Browse the repository at this point in the history
Some code causes build fail on a recent compiler. However, I am not
confident enough to understand the code. Some of them are so rare that
I've ever run it. So deprecate them and show an error if we really run
into it.

Signed-off-by: Andy Chiu <[email protected]>
  • Loading branch information
AndybnACT committed Nov 30, 2023
1 parent a465d84 commit d8e6d67
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 286 deletions.
284 changes: 0 additions & 284 deletions boundaries.f90
Original file line number Diff line number Diff line change
Expand Up @@ -532,290 +532,6 @@ SUBROUTINE READ_FACTS (BCI_INFO,LO,SWITCH)
END


!----------------------------------------------------------------------
SUBROUTINE GET_BC_DATA (BI,LO)
!......................................................................
!DESCRIPTION:
! #. MAP THE BOUNDARY CONDITION FROM FACTS TO COMPUTATIONAL GRIDS;
!NOTES:
! #. CREATED ON NOV 11 2008 (XIAOMING WANG, GNS)
! #. LAST REVISE: NOV.20, 2008 (XIAOMING WANG, GNS)
! #. UPDATED ON MAR 10 2009 (XIAOMING WANG, GNS)
! 1. ADD SUPPORT ON UTM COORDINATES
!----------------------------------------------------------------------
USE LAYER_PARAMS
USE BCI_PARAMS
TYPE (LAYER) :: LO
TYPE (BCI) :: BI
INTEGER BC_TYPE,POS
REAL TEMPX(LO%NX,2),TEMPY(2,LO%NY)
REAL SH
!* CHARACTER(LEN=120) :: LINE,LINE1,LINE2
!* CHARACTER(LEN=120) :: TMP,FNAMEH,FNAMEU,FNAMEV
!* CHARACTER(LEN=18) TEXT
COMMON /CONS/ ELMAX,GRAV,PI,R_EARTH,GX,EPS,ZERO,ONE,NUM_GRID, &
NUM_FLT,V_LIMIT,RAD_DEG,RAD_MIN

WRITE(*,*) 'READING PARAMETERS FOR FACTS INPUT BOUNDARIES...'
CALL READ_FACTS (BI,LO,0)
CALL READ_FACTS (BI,LO,1)
CALL READ_FACTS (BI,LO,2)
WRITE(*,*) 'PROCESSING DATA FOR FACTS INPUT BOUNDARIES...'
IF (LO%LAYGOV.EQ.0) THEN
SH = LO%DX/60.0*0.5
ELSE
SH = 0.5*LO%DX/(RAD_MIN*R_EARTH*COS(LO%YO*RAD_DEG))/60.0
ENDIF

!.....OBTAIN VALUES OF Z,HU,HV ALONG THE BOUNDARIES OF NUMERICAL DOMAIN
DO K = 1,BI%NT
WRITE (*,*) ' PROCESSING FACTS SNAPSHOT: ',K,' OUT OF ',BI%NT
!IF LAYER LO USES SPHERICAL COORDINATES //
IF (LO%LAYCORD.EQ.0) THEN
!...........OBTAIN VALUES OF Z AT BOUNDARIES
TEMPX = 0.0
TEMPY = 0.0
!BOTTOM BOUNDARY
CALL GRID_INTERP (TEMPX,LO%X,LO%Y(1:2),LO%NX,2, &
BI%SNAPSHOT(:,:,K),BI%X,BI%Y,BI%NX,BI%NY)
DO I = 1,LO%NX
BI%Z_HORI(I,K,1) = TEMPX(I,1)
! WRITE (*,*) BI%Z_HORI(I,K,1)
ENDDO
!TOP BOUNDARY
CALL GRID_INTERP (TEMPX,LO%X,LO%Y(LO%NY-1:LO%NY),LO%NX,2, &
BI%SNAPSHOT(:,:,K),BI%X,BI%Y,BI%NX,BI%NY)
DO I = 1,LO%NX
BI%Z_HORI(I,K,2) = TEMPX(I,2)
ENDDO
!LEFT BOUNDARY
CALL GRID_INTERP (TEMPY,LO%X(1:2),LO%Y,2,LO%NY, &
BI%SNAPSHOT(:,:,K),BI%X,BI%Y,BI%NX,BI%NY)
DO J = 1,LO%NY
BI%Z_VERT(J,K,1) = TEMPY(1,J)
ENDDO
!RIGHT BOUNDARY
CALL GRID_INTERP (TEMPY,LO%X(LO%NX-1:LO%NX),LO%Y,2,LO%NY, &
BI%SNAPSHOT(:,:,K),BI%X,BI%Y,BI%NX,BI%NY)
DO J = 1,LO%NY
BI%Z_VERT(J,K,2) = TEMPY(2,J)
ENDDO

!...........OBTAIN VALUES OF U AT BOUNDARIES
TEMPX = 0.0
TEMPY = 0.0
!BOTTOM BOUNDARY
CALL GRID_INTERP (TEMPX,LO%X+SH,LO%Y(1:2),LO%NX,2, &
BI%SNAPSHOTU(:,:,K),BI%X,BI%Y,BI%NX,BI%NY)
DO I = 1,LO%NX
BI%U_HORI(I,K,1) = TEMPX(I,1)
ENDDO
!TOP BOUNDARY
CALL GRID_INTERP (TEMPX,LO%X+SH,LO%Y(LO%NY-1:LO%NY),LO%NX, &
2,BI%SNAPSHOTU(:,:,K),BI%X,BI%Y,BI%NX,BI%NY)
DO I = 1,LO%NX
BI%U_HORI(I,K,2) = TEMPX(I,2)
ENDDO
!LEFT BOUNDARY
CALL GRID_INTERP (TEMPY,LO%X(1:2)+SH,LO%Y,2,LO%NY, &
BI%SNAPSHOTU(:,:,K),BI%X,BI%Y,BI%NX,BI%NY)
DO J = 1,LO%NY
BI%U_VERT(J,K,1) = TEMPY(1,J)
ENDDO
!RIGHT BOUNDARY
CALL GRID_INTERP (TEMPY,LO%X(LO%NX-1:LO%NX)+SH, &
LO%Y,2,LO%NY,BI%SNAPSHOTU(:,:,K), &
BI%X,BI%Y,BI%NX,BI%NY)
DO J = 1,LO%NY
BI%U_VERT(J,K,2) = TEMPY(1,J)
ENDDO

!...........OBTAIN VALUES OF V AT BOUNDARIES
TEMPX = 0.0
TEMPY = 0.0
!BOTTOM BOUNDARY
CALL GRID_INTERP (TEMPX,LO%X,LO%Y(1:2)+SH,LO%NX,2, &
BI%SNAPSHOTV(:,:,K),BI%X,BI%Y,BI%NX,BI%NY)
DO I = 1,LO%NX
BI%V_HORI(I,K,1) = TEMPX(I,1)
ENDDO
!TOP BOUNDARY
CALL GRID_INTERP (TEMPX,LO%X,LO%Y(LO%NY-1:LO%NY)+SH,LO%NX, &
2,BI%SNAPSHOTV(:,:,K),BI%X,BI%Y,BI%NX,BI%NY)
DO I = 1,LO%NX
BI%V_HORI(I,K,2) = TEMPX(I,1)
ENDDO
!LEFT BOUNDARY
CALL GRID_INTERP (TEMPY,LO%X(1:2),LO%Y+SH,2,LO%NY, &
BI%SNAPSHOTV(:,:,K),BI%X,BI%Y,BI%NX,BI%NY)
DO J = 1,LO%NY
BI%V_VERT(J,K,1) = TEMPY(1,J)
ENDDO
!RIGHT BOUNDARY
CALL GRID_INTERP (TEMPY,LO%X(LO%NX-1:LO%NX),LO%Y+SH, &
2,LO%NY,BI%SNAPSHOTV(:,:,K), &
BI%X,BI%Y,BI%NX,BI%NY)
DO J = 1,LO%NY
BI%V_VERT(J,K,2) = TEMPY(2,J)
ENDDO
ENDIF
!IF LAYER LO USES UTM COORDINATES ///
IF (LO%LAYCORD.EQ.1) THEN
!...........OBTAIN VALUES OF Z AT BOUNDARIES
TEMPX = 0.0
TEMPY = 0.0
!BOTTOM BOUNDARY
DO I = 1,LO%NX
CALL GRID_INTERP (TEMPX(I,1),LO%CXY(I,1,1), &
LO%CXY(I,1,2),1,1, &
BI%SNAPSHOT(:,:,K),BI%X,BI%Y,BI%NX,BI%NY)
BI%Z_HORI(I,K,1) = TEMPX(I,1)
ENDDO
!TOP BOUNDARY
DO I = 1,LO%NX
CALL GRID_INTERP (TEMPX(I,2),LO%CXY(I,LO%NY,1), &
LO%CXY(I,LO%NY,2),1,1, &
BI%SNAPSHOT(:,:,K),BI%X,BI%Y,BI%NX,BI%NY)
BI%Z_HORI(I,K,2) = TEMPX(I,2)
ENDDO
!LEFT BOUNDARY
DO J = 1,LO%NY
CALL GRID_INTERP (TEMPY(1,J),LO%CXY(1,J,1), &
LO%CXY(1,J,2),1,1, &
BI%SNAPSHOT(:,:,K),BI%X,BI%Y,BI%NX,BI%NY)
BI%Z_VERT(J,K,1) = TEMPY(1,J)
ENDDO
!RIGHT BOUNDARY
DO J = 1,LO%NY
CALL GRID_INTERP (TEMPY(2,J),LO%CXY(LO%NX,J,1), &
LO%CXY(LO%NX,J,2),1,1, &
BI%SNAPSHOT(:,:,K),BI%X,BI%Y,BI%NX,BI%NY)
BI%Z_VERT(J,K,2) = TEMPY(2,J)
ENDDO

!...........OBTAIN VALUES OF U AT BOUNDARIES
TEMPX = 0.0
TEMPY = 0.0
!BOTTOM BOUNDARY
DO I = 1,LO%NX
CALL GRID_INTERP (TEMPX(I,1),LO%CXY(I,1,1)+SH, &
LO%CXY(I,1,2),1,1, &
BI%SNAPSHOTU(:,:,K),BI%X,BI%Y,BI%NX,BI%NY)
BI%U_HORI(I,K,1) = TEMPX(I,1)
ENDDO
!TOP BOUNDARY
DO I = 1,LO%NX
CALL GRID_INTERP (TEMPX(I,2),LO%CXY(I,LO%NY,1)+SH, &
LO%CXY(I,LO%NY,2),1,1, &
BI%SNAPSHOTU(:,:,K),BI%X,BI%Y,BI%NX,BI%NY)
BI%U_HORI(I,K,2) = TEMPX(I,2)
ENDDO
!LEFT BOUNDARY
DO J = 1,LO%NY
CALL GRID_INTERP (TEMPY(1,J),LO%CXY(1,J,1)+SH, &
LO%CXY(1,J,2),1,1, &
BI%SNAPSHOTU(:,:,K),BI%X,BI%Y,BI%NX,BI%NY)
BI%U_VERT(J,K,1) = TEMPY(1,J)
ENDDO
!RIGHT BOUNDARY
DO J = 1,LO%NY
CALL GRID_INTERP (TEMPY(2,J),LO%CXY(LO%NX-1,J,1)+SH, &
LO%CXY(LO%NX-1,J,2),1,1, &
BI%SNAPSHOTU(:,:,K),BI%X,BI%Y,BI%NX,BI%NY)
BI%U_VERT(J,K,2) = TEMPY(2,J)
ENDDO

!...........OBTAIN VALUES OF V AT BOUNDARIES
TEMPX = 0.0
TEMPY = 0.0
!BOTTOM BOUNDARY
DO I = 1,LO%NX
CALL GRID_INTERP (TEMPX(I,1),LO%CXY(I,1,1), &
LO%CXY(I,1,2)+SH,1,1, &
BI%SNAPSHOTV(:,:,K),BI%X,BI%Y,BI%NX,BI%NY)
BI%V_HORI(I,K,1) = TEMPX(I,1)
ENDDO
!TOP BOUNDARY
DO I = 1,LO%NX
CALL GRID_INTERP (TEMPX(I,2),LO%CXY(I,LO%NY-1,1), &
LO%CXY(I,LO%NY-1,2)+SH,1,1, &
BI%SNAPSHOTV(:,:,K),BI%X,BI%Y,BI%NX,BI%NY)
BI%V_HORI(I,K,2) = TEMPX(I,2)
ENDDO
!LEFT BOUNDARY
DO J = 1,LO%NY
CALL GRID_INTERP (TEMPY(1,J),LO%CXY(1,J,1), &
LO%CXY(1,J,2)+SH,1,1, &
BI%SNAPSHOTV(:,:,K),BI%X,BI%Y,BI%NX,BI%NY)
BI%V_VERT(J,K,1) = TEMPY(1,J)
ENDDO
!RIGHT BOUNDARY
DO J = 1,LO%NY
CALL GRID_INTERP (TEMPY(2,J),LO%CXY(LO%NX,J,1), &
LO%CXY(LO%NX,J,2)+SH,1,1, &
BI%SNAPSHOTV(:,:,K),BI%X,BI%Y,BI%NX,BI%NY)
BI%V_VERT(J,K,2) = TEMPY(2,J)
ENDDO
ENDIF

! WRITE (*,*) (BI%Z_VERT(I,K,1),I = 1,LO%NY)
!OBTAIN FLUXES AND ADJUST VALUES ON LAND
J = 1 !BOTTOM BOUNDARY
DO I = 1,LO%NX
IF (LO%H(I,J).LE.GX) THEN
BI%Z_HORI(I,K,1) = ZERO
BI%U_HORI(I,K,1) = ZERO
BI%V_HORI(I,K,1) = ZERO
ELSE
BI%U_HORI(I,K,1) = BI%U_HORI(I,K,1)*LO%HP(I,J)
BI%V_HORI(I,K,1) = BI%V_HORI(I,K,1)*LO%HQ(I,J)
ENDIF
ENDDO
J = LO%NY !TOP BOUNDARY
DO I = 1,LO%NX
IF (LO%H(I,J).LE.GX) THEN
BI%Z_HORI(I,K,2) = ZERO
BI%U_HORI(I,K,2) = ZERO
BI%V_HORI(I,K,2) = ZERO
ELSE
BI%U_HORI(I,K,2) = BI%U_HORI(I,K,2)*LO%HP(I,J)
BI%V_HORI(I,K,2) = BI%V_HORI(I,K,2)*LO%HQ(I,J)
ENDIF
ENDDO

I = 1 !LEFT BOUNDARY
DO J = 1,LO%NY
IF (LO%H(I,J).LE.GX) THEN
BI%Z_VERT(J,K,1) = ZERO
BI%U_VERT(J,K,1) = ZERO
BI%V_VERT(J,K,1) = ZERO
ELSE
BI%U_VERT(J,K,1) = BI%U_VERT(J,K,1)*LO%HP(I,J)
BI%V_VERT(J,K,1) = BI%V_VERT(J,K,1)*LO%HQ(I,J)
ENDIF
ENDDO
I = LO%NX !RIGHT BOUNDARY
DO J = 1,LO%NY
IF (LO%H(I,J).LE.GX) THEN
BI%Z_VERT(J,K,2) = ZERO
BI%U_VERT(J,K,2) = ZERO
BI%V_VERT(J,K,2) = ZERO
ELSE
BI%U_VERT(J,K,2) = BI%U_VERT(J,K,2)*LO%HP(I,J)
BI%V_VERT(J,K,2) = BI%V_VERT(J,K,2)*LO%HQ(I,J)
ENDIF
ENDDO

ENDDO

! WRITE (*,*) LO%CXY(1,1,1),LO%CXY(1,1,2)
! WRITE (*,*) LO%CXY(LO%NX,LO%NY,1),LO%CXY(LO%NX,LO%NY,2)
!.....DEALLOCATE VARIABLE NO LONGER BEING USED.
DEALLOCATE(BI%SNAPSHOT,BI%SNAPSHOTU,BI%SNAPSHOTV,STAT=ISTAT)

RETURN
END

!----------------------------------------------------------------------
SUBROUTINE BC_INPUT (BI,LO,TIME)
!......................................................................
Expand Down
6 changes: 4 additions & 2 deletions comcot.f90
Original file line number Diff line number Diff line change
Expand Up @@ -219,8 +219,10 @@ PROGRAM COMCOT
!///// SET UP BOUNDARY CONDITIONS /////////////////////////////////////
IF (BC_TYPE.EQ.1) CALL SPONGE_COEF (LO)
IF (BC_TYPE.EQ.2) CALL BC_WALL (LO,WAVE_INFO)
IF (BC_TYPE.EQ.3) CALL GET_BC_DATA (BCI_INFO,LO)

IF (BC_TYPE.EQ.3) THEN
WRITE(*,*) "ERROR, boundary type 3 is no longer supported"
STOP
END IF
!/////DETERMINE STARTING TIME STEP # //////////////////////////////////
! WRITE(*,*) START_STEP
START_STEP = NINT(START_TIME/LO%DT)
Expand Down

0 comments on commit d8e6d67

Please sign in to comment.