I am trying to manipulate those two parameters: theta_s and theta_b which control surface and bottom sigma-coordinates. I have fixed theta_b=0, so the resolution all goes to the surface as theta_s is increased. While I'm playing with theta_s, I have encountered problems that I can't figure out. For example, I'm running ROMS on Mediterranean Basin with theta_s=5 (I have read somewhere that it is optimum to select reasonable values, ie theta_s <= 5). The model gives good results.
But if I choose to change theta_s and give a lower value such as theta_s=3 (I have read that for steep bathymetry theta_s should be lower than 3), the model blows up rapidly. How come? Has anyone got an idea about that ?
Stretching parameters - vertical coordinates
- arango
- Site Admin
- Posts: 1356
- Joined: Wed Feb 26, 2003 4:41 pm
- Location: DMCS, Rutgers University
- Contact:
Usually, it requires several runs to get the appropriate values of the stretching parameters theta_s and theta_b. One of the most common set-up problems reported is that users try to put all the levels near the surface. This is not recommended
In terrain-following coordinates models, you need to provide enough levels at the bottom of your grid. Specially if your application has as complicated bathymetry as the Mediterranean. If more resolution is needed to resolve surface processes, you need to increase the number of vertical levels. You must not increase the surface resolution at the expense of very coarse bottom level distribution. The ocean is continuous, you cannot separate its vertical processes in such a trivial way.
Another aspect to consider is that the SPLINES option transforms the vertical coordinate in a way similar to finite volume. You can get catastrophic results if your bottom resolution is very coarse. This is fine in estuaries and relatively shallow regions, if you are not interested in bottom layer dynamics. However, I have my reservations there too. In a basin like the Mediterranean the story is quite different. Nowadays, we can afford finer horizontal and vertical resolutions due to advances in computer technology and the relatively inexpensive disk space.
The value of these parameters can change according to the application. You need to avoid using higher values of theta_s. The higher its value the more nonlinear the vertical transformation. This should be avoided because it affects the accuracy of the ROMS algorithms. We usually recommend a value theta_s=5 and theta_b=0.4. Also, values like theta_s=3 and theta_b=0.4 work very well.
Notice that every time that you change theta_s and theta_b, you need to regenerate all the NetCDF files of the model in which the fields depend on the depth of vertical grid points. This includes initial conditions, climatological conditions, lateral boundary conditions, and data assimilation fields.
Remember that the vertical CFL conditions can be violated by changing the vertical distribution of levels, bottom friction, and vertical mixing. Therefore, the model can blow-up if either horizontal and vertical CFL conditions are violated. Very fine vertical resolution requires smaller time-step in most cases.
I usually use the Matlab script scoord.m to determine the appropriate number of levels for an application given the bathymetry and the values for the stretching parameters. This script is distributed in the Matlab tree, see directory matlab/tools.
Good luck,![Smile :)](./images/smilies/icon_smile.gif)
![Exclamation :!:](./images/smilies/icon_exclaim.gif)
Another aspect to consider is that the SPLINES option transforms the vertical coordinate in a way similar to finite volume. You can get catastrophic results if your bottom resolution is very coarse. This is fine in estuaries and relatively shallow regions, if you are not interested in bottom layer dynamics. However, I have my reservations there too. In a basin like the Mediterranean the story is quite different. Nowadays, we can afford finer horizontal and vertical resolutions due to advances in computer technology and the relatively inexpensive disk space.
The value of these parameters can change according to the application. You need to avoid using higher values of theta_s. The higher its value the more nonlinear the vertical transformation. This should be avoided because it affects the accuracy of the ROMS algorithms. We usually recommend a value theta_s=5 and theta_b=0.4. Also, values like theta_s=3 and theta_b=0.4 work very well.
Notice that every time that you change theta_s and theta_b, you need to regenerate all the NetCDF files of the model in which the fields depend on the depth of vertical grid points. This includes initial conditions, climatological conditions, lateral boundary conditions, and data assimilation fields.
Remember that the vertical CFL conditions can be violated by changing the vertical distribution of levels, bottom friction, and vertical mixing. Therefore, the model can blow-up if either horizontal and vertical CFL conditions are violated. Very fine vertical resolution requires smaller time-step in most cases.
I usually use the Matlab script scoord.m to determine the appropriate number of levels for an application given the bathymetry and the values for the stretching parameters. This script is distributed in the Matlab tree, see directory matlab/tools.
Good luck,
![Smile :)](./images/smilies/icon_smile.gif)
-
- Posts: 15
- Joined: Tue Mar 09, 2004 3:21 pm
- Location: University of New South Wales, Australia
Re: Stretching parameters - vertical coordinates
In my current application of the model, I am not applying a surface wind stress and would sometimes like more resolution in the bottom boundary layer, but not at the surface. Using theta_s and theta_b it seems possible to increase the resolution at the surface only or at both surface and bottom. Is it possible to define a vertical coordinate system with increased resolution at the bottom only?
thanks,
Deborah
thanks,
Deborah
- arango
- Site Admin
- Posts: 1356
- Joined: Wed Feb 26, 2003 4:41 pm
- Location: DMCS, Rutgers University
- Contact:
Yes, use theta_b=1. Several matlab scripts (scoord.m, scoord2.m, and scoord3.m) are provided in my matlab tree tar file, so you can plot the vertical level distribution as a function of the bathymetry (h), number of vertical levels (N), and vertical stretching coordinates parameters (theta_s, theta_b, Tcline).
I just realized that Matlab scripts are not clearly located in the ROMS web site. Anyway, here is the link:
http://www.myroms.org/software/Processi ... lab.tar.gz
Good luck
I just realized that Matlab scripts are not clearly located in the ROMS web site. Anyway, here is the link:
http://www.myroms.org/software/Processi ... lab.tar.gz
Good luck
-
- Posts: 15
- Joined: Tue Mar 09, 2004 3:21 pm
- Location: University of New South Wales, Australia
Thanks Hernan, found the matlab scripts.
Maybe I am missing something obvious, but if I set theta_b=1 I can only get increased resolution at both the bottom (where I do need it) and the surface (where I don't).
I could just modify the existing function to get the kind of vertical coordinate distribution I would like - are there any potential problems in doing this?
Maybe I am missing something obvious, but if I set theta_b=1 I can only get increased resolution at both the bottom (where I do need it) and the surface (where I don't).
I could just modify the existing function to get the kind of vertical coordinate distribution I would like - are there any potential problems in doing this?
- arango
- Site Admin
- Posts: 1356
- Joined: Wed Feb 26, 2003 4:41 pm
- Location: DMCS, Rutgers University
- Contact:
Well that depends on the value of theta_s. You can experiment with the Matlab scripts and different values for theta_s and Tcline until you get the desired vertical level distribution.
On principle, it is very trivial to change the vertical strectching coordinates. ROMS has a generic horizontal and vertical coordinate system. The horizontal coordinates are orthogonal and curvilinear so you can have Cartesian, polar, spherical and other special cases. The vertical coordinates are in terms of vertical grid positions (depths: z_r and z_w) and vertical grid-cell thicknesses (Hz). This means that you can have pretty much any vertical level distribution providing that the transition is smooth between grid cells. That is, you need to provide a rational to compute z_r, z_w, and Hz every time-step as a function of bathymetry (h) and free-surface (Zt_avg1).
This is done in the model in two routines set_depth.F and set_scoord.F.
Good luck
On principle, it is very trivial to change the vertical strectching coordinates. ROMS has a generic horizontal and vertical coordinate system. The horizontal coordinates are orthogonal and curvilinear so you can have Cartesian, polar, spherical and other special cases. The vertical coordinates are in terms of vertical grid positions (depths: z_r and z_w) and vertical grid-cell thicknesses (Hz). This means that you can have pretty much any vertical level distribution providing that the transition is smooth between grid cells. That is, you need to provide a rational to compute z_r, z_w, and Hz every time-step as a function of bathymetry (h) and free-surface (Zt_avg1).
This is done in the model in two routines set_depth.F and set_scoord.F.
Good luck
Getting resolution a the bottom
I have the same situation, i.e. no surface forcing but a lot going on at the bottom. I have used a simple parabolic form: Cs = (1-s)^2 -1, without any problems. You can tweak the exponent to change the mix. However, I switched back to the standard formula just to stay in sync with other people working on similar problems. If somthing starts going funny I didn't want to have something so non-standard in my setup.
Wayne
Wayne