| 1 | SUBROUTINE ana_fsobc (ng, tile, model)
|
|---|
| 2 | !
|
|---|
| 3 | !! svn $Id: ana_fsobc.h 34 2007-04-27 04:40:21Z arango $
|
|---|
| 4 | !!======================================================================
|
|---|
| 5 | !! Copyright (c) 2002-2007 The ROMS/TOMS Group !
|
|---|
| 6 | !! Licensed under a MIT/X style license !
|
|---|
| 7 | !! See License_ROMS.txt !
|
|---|
| 8 | !! !
|
|---|
| 9 | !=======================================================================
|
|---|
| 10 | ! !
|
|---|
| 11 | ! This routine sets free-surface open boundary conditions using !
|
|---|
| 12 | ! analytical expressions. !
|
|---|
| 13 | ! !
|
|---|
| 14 | !=======================================================================
|
|---|
| 15 | !
|
|---|
| 16 | USE mod_param
|
|---|
| 17 | USE mod_ncparam
|
|---|
| 18 | !
|
|---|
| 19 | ! Imported variable declarations.
|
|---|
| 20 | !
|
|---|
| 21 | integer, intent(in) :: ng, tile, model
|
|---|
| 22 |
|
|---|
| 23 | #include "tile.h"
|
|---|
| 24 | !
|
|---|
| 25 | CALL ana_fsobc_tile (ng, model, Istr, Iend, Jstr, Jend, &
|
|---|
| 26 | & LBi, UBi, LBj, UBj)
|
|---|
| 27 | !
|
|---|
| 28 | ! Set analytical header file name used.
|
|---|
| 29 | !
|
|---|
| 30 | IF (Lanafile) THEN
|
|---|
| 31 | ANANAME( 6)='ROMS/Functionals/ana_fsobc.h'
|
|---|
| 32 | END IF
|
|---|
| 33 |
|
|---|
| 34 | RETURN
|
|---|
| 35 | END SUBROUTINE ana_fsobc
|
|---|
| 36 | !
|
|---|
| 37 | !***********************************************************************
|
|---|
| 38 | SUBROUTINE ana_fsobc_tile (ng, model, Istr, Iend, Jstr, Jend, &
|
|---|
| 39 | & LBi, UBi, LBj, UBj)
|
|---|
| 40 | !***********************************************************************
|
|---|
| 41 | !
|
|---|
| 42 | USE mod_param
|
|---|
| 43 | USE mod_boundary
|
|---|
| 44 | USE mod_grid
|
|---|
| 45 | USE mod_scalars
|
|---|
| 46 | !
|
|---|
| 47 | ! Imported variable declarations.
|
|---|
| 48 | !
|
|---|
| 49 | integer, intent(in) :: ng, model, Iend, Istr, Jend, Jstr
|
|---|
| 50 | integer, intent(in) :: LBi, UBi, LBj, UBj
|
|---|
| 51 | !
|
|---|
| 52 | ! Local variable declarations.
|
|---|
| 53 | !
|
|---|
| 54 | integer :: IstrR, IendR, JstrR, JendR, IstrU, JstrV
|
|---|
| 55 | integer :: i, j
|
|---|
| 56 | real(r8) :: cff, fac, omega, phase, val
|
|---|
| 57 |
|
|---|
| 58 | #include "set_bounds.h"
|
|---|
| 59 | !
|
|---|
| 60 | !-----------------------------------------------------------------------
|
|---|
| 61 | ! Free-surface open boundary conditions.
|
|---|
| 62 | !-----------------------------------------------------------------------
|
|---|
| 63 | !
|
|---|
| 64 | #if defined INLET_TEST
|
|---|
| 65 | IF (NORTHERN_EDGE) THEN
|
|---|
| 66 | cff=-1.0_r8*sin(2.0_r8*pi*time(ng)/(12.0_r8*3600.0_r8))
|
|---|
| 67 | DO i=IstrR,IendR
|
|---|
| 68 | BOUNDARY(ng)%zeta_north(i)=cff
|
|---|
| 69 | END DO
|
|---|
| 70 | END IF
|
|---|
| 71 | #elif defined KELVIN
|
|---|
| 72 | fac=1.0_r8 ! zeta0
|
|---|
| 73 | omega=2.0_r8*pi/(12.42_r8*3600.0_r8) ! M2 Tide period
|
|---|
| 74 | IF (WESTERN_EDGE) THEN
|
|---|
| 75 | DO j=JstrR,JendR
|
|---|
| 76 | val=fac*EXP(-GRID(ng)%f(Istr-1,j)*GRID(ng)%yp(Istr-1,j)/ &
|
|---|
| 77 | & SQRT(g*GRID(ng)%h(Istr-1,j)))
|
|---|
| 78 | BOUNDARY(ng)%zeta_west(j)=val*COS(omega*time(ng))
|
|---|
| 79 | END DO
|
|---|
| 80 | END IF
|
|---|
| 81 | IF (EASTERN_EDGE) THEN
|
|---|
| 82 | DO j=JstrR,JendR
|
|---|
| 83 | cff=1.0_r8/SQRT(g*GRID(ng)%h(Istr-1,j))
|
|---|
| 84 | val=fac*EXP(-GRID(ng)%f(Istr-1,j)*GRID(ng)%yp(Iend,j)*cff)
|
|---|
| 85 | BOUNDARY(ng)%zeta_east(j)=val*COS(omega*GRID(ng)%xp(Iend,j)* &
|
|---|
| 86 | & cff-omega*time(ng))
|
|---|
| 87 | END DO
|
|---|
| 88 | END IF
|
|---|
| 89 | #elif defined ESTUARY_TEST
|
|---|
| 90 | IF (WESTERN_EDGE) THEN
|
|---|
| 91 | cff=1.0_r8*SIN(2.0_r8*pi*time(ng)/(12.0_r8*3600.0_r8))
|
|---|
| 92 | DO j=JstrR,JendR
|
|---|
| 93 | BOUNDARY(ng)%zeta_west(j)=cff
|
|---|
| 94 | END DO
|
|---|
| 95 | END IF
|
|---|
| 96 | #elif defined SED_TEST1
|
|---|
| 97 | IF (WESTERN_EDGE) THEN
|
|---|
| 98 | fac=100.0_r8
|
|---|
| 99 | DO j=JstrR,JendR
|
|---|
| 100 | BOUNDARY(ng)%zeta_west(j)=9.0E-06_r8*fac
|
|---|
| 101 | END DO
|
|---|
| 102 | END IF
|
|---|
| 103 | IF (EASTERN_EDGE) THEN
|
|---|
| 104 | fac=100.0_r8
|
|---|
| 105 | DO j=JstrR,JendR
|
|---|
| 106 | BOUNDARY(ng)%zeta_east(j)=9.0E-06_r8*REAL(Iend+1,r8)*fac
|
|---|
| 107 | END DO
|
|---|
| 108 | END IF
|
|---|
| 109 | #elif defined SHOREFACE
|
|---|
| 110 | IF (WESTERN_EDGE) THEN
|
|---|
| 111 | !! cff=-1.0_r8*SIN(2.0_r8*pi*time(ng)/(12.0_r8*3600.0_r8))
|
|---|
| 112 | cff=0.0_r8
|
|---|
| 113 | DO j=JstrR,JendR
|
|---|
| 114 | BOUNDARY(ng)%zeta_west(j)=cff
|
|---|
| 115 | END DO
|
|---|
| 116 | END IF
|
|---|
| 117 | #elif defined TEST_CHAN
|
|---|
| 118 | IF (WESTERN_EDGE) THEN
|
|---|
| 119 | cff=0.0_r8
|
|---|
| 120 | DO j=JstrR,JendR
|
|---|
| 121 | BOUNDARY(ng)%zeta_west(j)=cff
|
|---|
| 122 | END DO
|
|---|
| 123 | END IF
|
|---|
| 124 | IF (EASTERN_EDGE) THEN
|
|---|
| 125 | cff=-0.4040_r8*MIN(time(ng)/150000.0_r8,1.0_r8)
|
|---|
| 126 | DO j=JstrR,JendR
|
|---|
| 127 | BOUNDARY(ng)%zeta_east(j)=cff
|
|---|
| 128 | END DO
|
|---|
| 129 | END IF
|
|---|
| 130 | #elif defined WEDDELL
|
|---|
| 131 | IF (WESTERN_EDGE) THEN
|
|---|
| 132 | fac=TANH((tdays(ng)-dstart)/1.0_r8)
|
|---|
| 133 | omega=2.0_r8*pi*time(ng)/(12.42_r8*3600.0_r8) ! M2 Tide period
|
|---|
| 134 | val=0.53_r8+(0.53_r8-0.48_r8)/REAL(Iend+1,r8)
|
|---|
| 135 | phase=(277.0_r8+(277.0_r8-240.0_r8)/REAL(Iend+1,r8))*deg2rad
|
|---|
| 136 | DO j=JstrR,JendR
|
|---|
| 137 | BOUNDARY(ng)%zeta_west(j)=fac*val*COS(omega-phase)
|
|---|
| 138 | END DO
|
|---|
| 139 | END IF
|
|---|
| 140 | IF (EASTERN_EDGE) THEN
|
|---|
| 141 | fac=TANH((tdays(ng)-dstart)/1.0_r8)
|
|---|
| 142 | omega=2.0_r8*pi*time(ng)/(12.42_r8*3600.0_r8) ! M2 Tide period
|
|---|
| 143 | val=0.53_r8+(0.53_r8-0.48_r8)
|
|---|
| 144 | phase=(277.0_r8+(277.0_r8-240.0_r8))*deg2rad
|
|---|
| 145 | DO j=JstrR,JendR
|
|---|
| 146 | BOUNDARY(ng)%zeta_east(j)=fac*val*COS(omega-phase)
|
|---|
| 147 | END DO
|
|---|
| 148 | END IF
|
|---|
| 149 | #else
|
|---|
| 150 | IF (EASTERN_EDGE) THEN
|
|---|
| 151 | DO j=JstrR,JendR
|
|---|
| 152 | BOUNDARY(ng)%zeta_east(j)=0.0_r8
|
|---|
| 153 | END DO
|
|---|
| 154 | END IF
|
|---|
| 155 | IF (WESTERN_EDGE) THEN
|
|---|
| 156 | DO j=JstrR,JendR
|
|---|
| 157 | BOUNDARY(ng)%zeta_west(j)=0.0_r8
|
|---|
| 158 | END DO
|
|---|
| 159 | END IF
|
|---|
| 160 | IF (SOUTHERN_EDGE) THEN
|
|---|
| 161 | DO i=IstrR,IendR
|
|---|
| 162 | BOUNDARY(ng)%zeta_south(i)=0.0_r8
|
|---|
| 163 | END DO
|
|---|
| 164 | END IF
|
|---|
| 165 | IF (NORTHERN_EDGE) THEN
|
|---|
| 166 | DO i=IstrR,IendR
|
|---|
| 167 | BOUNDARY(ng)%zeta_north(i)=0.0_r8
|
|---|
| 168 | END DO
|
|---|
| 169 | END IF
|
|---|
| 170 | #endif
|
|---|
| 171 | RETURN
|
|---|
| 172 | END SUBROUTINE ana_fsobc_tile
|
|---|