FJORD TIDAL CASE
![]() April 14, 2008 |
This tutorial will go over some of the basic steps to set up a ROMS realistic application (yet, this is a very simple one). This tutorial is also a demonstration of how to use EASYGRID, a "quick-and-dirty" matlab script to make ROMS grids and initialization files.
PREREQUISITES: This tutorial assumes that you have (1) downloaded ROMS, (2) installed it in your computer (or cluster), (3) tested it by compiling and running one of the included test cases, and (4) installed MEXNC, SNCTOOLS and the ROMS Matlab tool-kit. If you haven't done all the above, check the "Getting Started" and "Tutorials" WikiROMS sections.
Geographical Setting: This application is for Ship Harbour, an estuarine fjord in Nova Scotia, Canada. Click here to see the location in Google. Tides are semidiurnal and tidal range is 1.4 m on average and 2 m on spring tides. For now I will only include tidal forcing, however, there is a river at the uppermost end of the estuary, which discharges freshwater at an annual average rate of 18 m3 s-1. I plan to write another tutorial on how to add a river, but for now is only tides.
Ship Harbour has a shallow sill of approximately 7 m depth. Average depth of the inner basin is 15 m with a maximum of 25 m.
Grid Generation
The first step to set up a realistic application is to set up a realistic grid. There are several software packages to generate ROMS grids. Here I will use EASYGRID.
Get bathymetry and coastline
Dummy text... No real information here yet
Download EASYGRID
Dummy text... No real information here yet
Initialization
Dummy text... No real information here yet
Compiling ROMS
Before we compile ROMS, we need to create a header (.h) file and to modify some analytical Fortran files.
Create header (.h) file
Create a copy of the basin.h test-case header file, and rename the copy fjord.h
fjord.h file: Use basin.h as a template. Erase red and Add green (black remains the same).
/* ** svn $Id: basin.h 139 2008-01-10 00:17:29Z arango $ ******************************************************************************* ** Copyright (c) 2002-2008 The ROMS/TOMS Group ** ** Licensed under a MIT/X style license ** ** See License_ROMS.txt ** ******************************************************************************* ** ** Options for Big Bad Basin. ** Options for Tidal Fjord. ** ** Application flag: BASIN ** Application flag: FJORD ** Input script: ocean_basin.in ** Input script: ocean_fjord.in */ #define UV_ADV #define UV_COR #define UV_QDRAG #define UV_VIS4 #define MIX_S_UV #define DJ_GRADPS #define TS_U3HADVECTION #define TS_C4VADVECTION #define SOLVE3D #define SPLINES #define EASTERN_WALL #define WESTERN_WALL #define SOUTHERN_WALL #define NORTHERN_WALL #define BODYFORCE #define ANA_GRID #define ANA_INITIAL #define ANA_SMFLUX #define ANA_STFLUX #define MASKING #define EAST_FSCHAPMAN #define EAST_M2FLATHER #define EAST_M3RADIATION #define EAST_TRADIATION #define ANA_FSOBC #define ANA_M2OBC
Modify ana_fsobc.h
fjord.h file: Use basin.h as a template. Erase red and Add green (black remains the same).
#elif defined TEST_CHAN IF (WESTERN_EDGE) THEN cff=0.0_r8 DO j=JstrR,JendR BOUNDARY(ng)%zeta_west(j)=cff END DO END IF IF (EASTERN_EDGE) THEN cff=-0.4040_r8*MIN(time(ng)/150000.0_r8,1.0_r8) DO j=JstrR,JendR BOUNDARY(ng)%zeta_east(j)=cff END DO END IF #elif defined WEDDELL IF (WESTERN_EDGE) THEN fac=TANH((tdays(ng)-dstart)/1.0_r8) omega=2.0_r8*pi*time(ng)/(12.42_r8*3600.0_r8) ! M2 Tide period val=0.53_r8+(0.53_r8-0.48_r8)/REAL(Iend+1,r8) phase=(277.0_r8+(277.0_r8-240.0_r8)/REAL(Iend+1,r8))*deg2rad DO j=JstrR,JendR BOUNDARY(ng)%zeta_west(j)=fac*val*COS(omega-phase) END DO END IF IF (EASTERN_EDGE) THEN fac=TANH((tdays(ng)-dstart)/1.0_r8) omega=2.0_r8*pi*time(ng)/(12.42_r8*3600.0_r8) ! M2 Tide period val=0.53_r8+(0.53_r8-0.48_r8) phase=(277.0_r8+(277.0_r8-240.0_r8))*deg2rad DO j=JstrR,JendR BOUNDARY(ng)%zeta_east(j)=fac*val*COS(omega-phase) END DO END IF #elif defined FJORD IF (WESTERN_EDGE) THEN fac=TANH((tdays(ng)-dstart)/1.0_r8) omega=2.0_r8*pi*time(ng)/(12.42_r8*3600.0_r8) ! M2 Tide period val=0.53_r8+(0.53_r8-0.48_r8)/REAL(Iend+1,r8) phase=(277.0_r8+(277.0_r8-240.0_r8)/REAL(Iend+1,r8))*deg2rad DO j=JstrR,JendR BOUNDARY(ng)%zeta_west(j)=fac*val*COS(omega-phase) END DO END IF IF (EASTERN_EDGE) THEN fac=TANH((tdays(ng)-dstart)/1.0_r8) omega=2.0_r8*pi*time(ng)/(12.42_r8*3600.0_r8) ! M2 Tide period val=0.53_r8+(0.53_r8-0.48_r8) phase=(277.0_r8+(277.0_r8-240.0_r8))*deg2rad DO j=JstrR,JendR BOUNDARY(ng)%zeta_east(j)=fac*val*COS(omega-phase) END DO END IF #else IF (EASTERN_EDGE) THEN DO j=JstrR,JendR BOUNDARY(ng)%zeta_east(j)=0.0_r8 END DO END IF IF (WESTERN_EDGE) THEN DO j=JstrR,JendR BOUNDARY(ng)%zeta_west(j)=0.0_r8 END DO END IF IF (SOUTHERN_EDGE) THEN DO i=IstrR,IendR BOUNDARY(ng)%zeta_south(i)=0.0_r8 END DO END IF IF (NORTHERN_EDGE) THEN DO i=IstrR,IendR BOUNDARY(ng)%zeta_north(i)=0.0_r8 END DO END IF #endif RETURN END SUBROUTINE ana_fsobc_tile
Modify ana_m2obc.h
Text
#elif defined WEDDELL IF (WESTERN_EDGE) THEN fac=TANH((tdays(ng)-dstart)/1.0_r8) omega=2.0_r8*pi*time(ng)/(12.42_r8*3600.0_r8) ! M2 Tide period minor=0.0143_r8+(0.0143_r8+0.010_r8)/REAL(Iend+1,r8) major=0.1144_r8+(0.1144_r8-0.013_r8)/REAL(Iend+1,r8) phase=(318.0_r8+(318.0_r8-355.0_r8)/REAL(Iend+1,r8))*deg2rad angle=(125.0_r8+(125.0_r8- 25.0_r8)/REAL(Iend+1,r8))*deg2rad DO j=JstrR,JendR val=0.5_r8*(angler(Istr-1,j)+angler(Istr,j)) BOUNDARY(ng)%ubar_west(j)=fac*(major*COS(angle-val)* & & COS(omega-phase)- & & minor*SIN(angle-val)* & & SIN(omega-phase)) END DO DO j=Jstr,JendR val=0.5_r8*(angler(Istr-1,j-1)+angler(Istr-1,j)) BOUNDARY(ng)%vbar_west(j)=fac*(major*SIN(angle-val)* & & COS(omega-phase)- & & minor*SIN(angle-val)* & & COS(omega-phase)) END DO END IF IF (EASTERN_EDGE) THEN fac=TANH((tdays(ng)-dstart)/1.0_r8) omega=2.0_r8*pi*time(ng)/(12.42_r8*3600.0_r8) ! M2 Tide period minor=0.0143_r8+(0.0143_r8+0.010_r8) major=0.1144_r8+(0.1144_r8-0.013_r8) phase=(318.0_r8+(318.0_r8-355.0_r8))*deg2rad angle=(125.0_r8+(125.0_r8- 25.0_r8))*deg2rad DO j=JstrR,JendR val=0.5_r8*(angler(Iend,j)+angler(Iend+1,j)) BOUNDARY(ng)%ubar_east(j)=fac*(major*COS(angle-val)* & & COS(omega-phase)- & & minor*SIN(angle-val)* & & SIN(omega-phase)) END DO DO j=Jstr,JendR val=0.5_r8*(angler(Iend+1,j-1)+angler(Iend+1,j)) BOUNDARY(ng)%vbar_east(j)=fac*(major*SIN(angle-val)* & & COS(omega-phase)- & & minor*SIN(angle-val)* & & COS(omega-phase)) END DO END IF #elif defined FJORD IF (WESTERN_EDGE) THEN fac=TANH((tdays(ng)-dstart)/1.0_r8) omega=2.0_r8*pi*time(ng)/(12.42_r8*3600.0_r8) ! M2 Tide period minor=0.0143_r8+(0.0143_r8+0.010_r8)/REAL(Iend+1,r8) major=0.1144_r8+(0.1144_r8-0.013_r8)/REAL(Iend+1,r8) phase=(318.0_r8+(318.0_r8-355.0_r8)/REAL(Iend+1,r8))*deg2rad angle=(125.0_r8+(125.0_r8- 25.0_r8)/REAL(Iend+1,r8))*deg2rad DO j=JstrR,JendR val=0.5_r8*(angler(Istr-1,j)+angler(Istr,j)) BOUNDARY(ng)%ubar_west(j)=fac*(major*COS(angle-val)* & & COS(omega-phase)- & & minor*SIN(angle-val)* & & SIN(omega-phase)) END DO DO j=Jstr,JendR val=0.5_r8*(angler(Istr-1,j-1)+angler(Istr-1,j)) BOUNDARY(ng)%vbar_west(j)=fac*(major*SIN(angle-val)* & & COS(omega-phase)- & & minor*SIN(angle-val)* & & COS(omega-phase)) END DO END IF IF (EASTERN_EDGE) THEN fac=TANH((tdays(ng)-dstart)/1.0_r8) omega=2.0_r8*pi*time(ng)/(12.42_r8*3600.0_r8) ! M2 Tide period minor=0.0143_r8+(0.0143_r8+0.010_r8) major=0.1144_r8+(0.1144_r8-0.013_r8) phase=(318.0_r8+(318.0_r8-355.0_r8))*deg2rad angle=(125.0_r8+(125.0_r8- 25.0_r8))*deg2rad DO j=JstrR,JendR val=0.5_r8*(angler(Iend,j)+angler(Iend+1,j)) BOUNDARY(ng)%ubar_east(j)=fac*(major*COS(angle-val)* & & COS(omega-phase)- & & minor*SIN(angle-val)* & & SIN(omega-phase)) END DO DO j=Jstr,JendR val=0.5_r8*(angler(Iend+1,j-1)+angler(Iend+1,j)) BOUNDARY(ng)%vbar_east(j)=fac*(major*SIN(angle-val)* & & COS(omega-phase)- & & minor*SIN(angle-val)* & & COS(omega-phase)) END DO END IF #else IF (EASTERN_EDGE) THEN DO j=JstrR,JendR BOUNDARY(ng)%ubar_east(j)=0.0_r8 END DO DO j=Jstr,JendR BOUNDARY(ng)%vbar_east(j)=0.0_r8 END DO END IF IF (WESTERN_EDGE) THEN DO j=JstrR,JendR BOUNDARY(ng)%ubar_west(j)=0.0_r8 END DO DO j=Jstr,JendR BOUNDARY(ng)%vbar_west(j)=0.0_r8 END DO END IF IF (SOUTHERN_EDGE) THEN DO i=Istr,IendR BOUNDARY(ng)%ubar_south(i)=0.0_r8 END DO DO i=IstrR,IendR BOUNDARY(ng)%vbar_south(i)=0.0_r8 END DO END IF IF (NORTHERN_EDGE) THEN DO i=Istr,IendR BOUNDARY(ng)%ubar_north(i)=0.0_r8 END DO DO i=IstrR,IendR BOUNDARY(ng)%vbar_north(i)=0.0_r8 END DO END IF #endif RETURN END SUBROUTINE ana_m2obc_tile
Tidal Forcing
Dummy text... No real information here yet