Dear ROMS community,
I am trying to add M2 tidal forcing with an amplitude of 3 meters in an idealized ROMS setup, but the simulated surface elevation only shows a much smaller amplitude, around 0.3 m.
Here is a summary of my setup:
- Model type: Idealized 3D (with slope bottom and uniform stratification)
- Grid: Simple rectangular grid (resolution 0.5-2km)
- Vertical layers: 60 (s-coordinate)
- Forcing: Only M2 tidal elevation at the eastern open boundary
- Tidal data: I set a 3 m amplitude sinusoidal signal in `zeta` at the boundary
- Boundary conditions:
! W S E N
! e o a o
! s u s r
! t t t t
! h h
!
! 1 2 3 4
LBC(isFsur) == Clo Cha Cha Cha ! free-surface
LBC(isUbar) == Clo Fla Fla Fla ! 2D U-momentum
LBC(isVbar) == Clo Fla Fla Fla ! 2D V-momentum
LBC(isUvel) == Clo RadNud Rad RadNud ! 3D U-momentum
LBC(isVvel) == Clo RadNud Rad RadNud ! 3D V-momentum
LBC(isMtke) == Clo Gra Gra Gra ! mixing TKE
LBC(isTvar) == Clo RadNud Rad RadNud \ ! temperature
Clo RadNud Rad RadNud ! salinity
-The .h file adds ana_fsobc and ana_m2obc
-ana_fsobc is set as follows:
omega = 2.0_r8 * 3.141592653589793_r8 / (12.42_r8 * 3600.0_r8) ! rad/s
amp = 3.0_r8
phase = 0.0_r8
! Optional: ramp up over 1 day to avoid shocks
t_ramp = 1.0_r8 ! days
ramp_factor = MIN( time(ng)/(t_ramp*86400.0_r8), 1.0_r8 )
IF (LBC(ieast,isFsur,ng)%acquire.and. &
& DOMAIN(ng)%Eastern_Edge(tile)) THEN
DO j=JstrT,JendT
BOUNDARY(ng)%zeta_east(j)=amp*sin(omega*time(ng)+phase)* ramp_factor
END DO
END IF
-ana_m2obc is set as follows:
omega = 2.0_r8 * 3.141592653589793_r8 / (12.42_r8 * 3600.0_r8)
uamp = 1.0_r8
phase = 0.0_r8
! ramp up ubar to avoid instability
t_ramp = 1.0_r8
ramp_factor = MIN( time(ng)/(t_ramp*86400.0_r8), 1.0_r8 )
IF (LBC(ieast,isUbar,ng)%acquire.and. &
& LBC(ieast,isVbar,ng)%acquire.and. &
& DOMAIN(ng)%Eastern_Edge(tile)) THEN
DO j=JstrT,JendT
BOUNDARY(ng)%ubar_east(j)=uamp* sin(omega*time(ng) + phase)* ramp_factor
END DO
DO j=JstrP,JendT
BOUNDARY(ng)%vbar_east(j)=0.0_r8
END DO
END IF
- The model runs without blowing up, but the tidal signal in the interior is much smaller than expected
I have checked that:
- The boundary tidal signal is correctly imposed in the forcing file
- The time step is small enough
- The elevation signal is not dissipated immediately
**Questions:**
1. Is there a common reason why the tidal signal would weaken so much before propagating into the domain?
2. Could there be incorrect open boundary conditions or sponge layer issues?
3. Any example `.h` or `.in` file settings for a clean M2 tide simulation?
Any help would be appreciated!
Best regards
Problem adding 3m M2 tidal forcing in idealized ROMS case – only ~0.3m appears
Re: Problem adding 3m M2 tidal forcing in idealized ROMS case – only ~0.3m appears
you can try to set zeta_east as clamped, or the reduced physcis option (Red).
if those dont work as well as you want, then go back to zeta_east as chapman and increase ubar amplitude.
if those dont work as well as you want, then go back to zeta_east as chapman and increase ubar amplitude.
Re: Problem adding 3m M2 tidal forcing in idealized ROMS case – only ~0.3m appears
Thank you very much for your suggestions.
I have tried setting zeta_east as clamped, but unfortunately the model blows up within the first day. It seems that extremely high velocity or density gradients develop near the northwestern and southwestern corners, possibly due to reflection or inconsistency at the western boundary.
I will now try your other suggestions:
Using the reduced physics (RED) option
Switching back to increasing the ubar amplitude
I really appreciate your help and will report back after testing these options.
Thanks again!
Best regards,
I have tried setting zeta_east as clamped, but unfortunately the model blows up within the first day. It seems that extremely high velocity or density gradients develop near the northwestern and southwestern corners, possibly due to reflection or inconsistency at the western boundary.
I will now try your other suggestions:
Using the reduced physics (RED) option
Switching back to increasing the ubar amplitude
I really appreciate your help and will report back after testing these options.
Thanks again!
Best regards,
Re: Problem adding 3m M2 tidal forcing in idealized ROMS case – only ~0.3m appears
You appear to be imposing boundary zeta and ubar independently as in-phase functions of sin(omega*t) with arbitrary amplitude.
These variables are dynamically linked in amplitude (through sqrt(gh) factor), and with their relative phase depending on whether the external tide is a progressive wave or a standing wave (or a mix). You may have one fighting against the other.
In my experience, ROMS sea level is largely responsive to the imposed inflow tidal ubar, with zeta mostly a consequence of the barotropic divergence.
My recommendation is to impose ubar (as sin(omega*t)) and just let zeta sort itself out. To this end, the Shchetpetkin option (She) performs well.
These variables are dynamically linked in amplitude (through sqrt(gh) factor), and with their relative phase depending on whether the external tide is a progressive wave or a standing wave (or a mix). You may have one fighting against the other.
In my experience, ROMS sea level is largely responsive to the imposed inflow tidal ubar, with zeta mostly a consequence of the barotropic divergence.
My recommendation is to impose ubar (as sin(omega*t)) and just let zeta sort itself out. To this end, the Shchetpetkin option (She) performs well.
John Wilkin: DMCS Rutgers University
71 Dudley Rd, New Brunswick, NJ 08901-8521, USA. ph: 609-630-0559 jwilkin@rutgers.edu
71 Dudley Rd, New Brunswick, NJ 08901-8521, USA. ph: 609-630-0559 jwilkin@rutgers.edu
Re: Problem adding 3m M2 tidal forcing in idealized ROMS case – only ~0.3m appears
Thank you very much for your insightful suggestion.
You're absolutely right—imposing both zeta and ubar independently without accounting for their dynamical linkage can indeed lead to unphysical results, especially when their phase relationship isn't consistent with the nature of the incoming tide. I hadn't fully considered the potential for them to counteract each other, especially in mixed or standing wave scenarios.
I’ll follow your advice and try imposing only ubar as a sinusoidal function and allow zeta to adjust dynamically. I’ll also enable the Shchepetkin option (She) as you suggested. Hopefully this will lead to a more stable and realistic barotropic adjustment.
Thanks again for the valuable guidance—much appreciated!
You're absolutely right—imposing both zeta and ubar independently without accounting for their dynamical linkage can indeed lead to unphysical results, especially when their phase relationship isn't consistent with the nature of the incoming tide. I hadn't fully considered the potential for them to counteract each other, especially in mixed or standing wave scenarios.
I’ll follow your advice and try imposing only ubar as a sinusoidal function and allow zeta to adjust dynamically. I’ll also enable the Shchepetkin option (She) as you suggested. Hopefully this will lead to a more stable and realistic barotropic adjustment.
Thanks again for the valuable guidance—much appreciated!