When using a variable-resolution grid, ROMS offers the advantage of making the viscosity (and diffusivity) coefficients proportional to the grid size (user specifies coefficient for the coarsest grid point, then by %define VISC_GRID in cppdefs.h, ROMS computes the visc coeff for the rest of the grid).
As it is now (version 2.1), this normalization is done (if I read the code correctly) by
Ah(i,j)=Ah* area(i,j)/areaMax (1)
where area(i,j) is the area occupied by every grid point while areaMax is the largest area in the model grid, i.e., where the resolution is coarsest. Ah is the value supplied in your input file (i.e., roms.in).
Thus, this is proportional to the square of the grid resolution (i.e., to dx**2 and dy**2).
However, I think that this might lead to too large coefficients. Too large in the sense that the finest grid points will contribute, relatively to the coarsest points, too much vorticity to the formation and maintainance of western boundary layers (e.g., Gulf Stream).
In the paper of Bryan et al. (1975) they recommend a minimum size for the horizontal viscosity coefficient, which is a function of latitude and resolution**3 (not **2). I guess that if (1) above could be written to vary proportionally to resolution**3, we will have a more dynamically consistent vorticity contribution from all grid points.
Any comments on this? Perhaps I am missing something here.
thank you.
Guillermo Auad
Reference:
Bryan, K., S. Manabe, and R. C. Pacanowski, 1975: A global ocean-atmosphere climate model, Part II. The oceanic circulation. Journal of Physical Oceanography, 5(1), 30-46.
Variable Viscosity (wrt VISC_GRID)
- arango
- Site Admin
- Posts: 1356
- Joined: Wed Feb 26, 2003 4:41 pm
- Location: DMCS, Rutgers University
- Contact:
Yes, this is correct. The horizontal mixing is scaled by the grid cell area (squared meters). The values provided for visc2, visc4, tnu2, and tnu4 in the model input script ocean.in is assigned to the largest cell in the application grid. Then, in curvilinear coordinates with grids of variable size, these coefficients are linearly scaled with the respect to the largest grid. This yields a smaller mixing coefficient for the smaller grid cells so CFL is not violated. Recall that in harmonic mixing, the time-stepping is limited by (dx/pi)^2/visc2 and in biharmonic mixing is limited by (dx/pi)^4/visc4.
In ROMS, the grid cell area (grdscl) and its maximum (grdmax) are computed in metrics.F. These values are used in horz_mix.F to compute either harmonic or biharmonic grid-scaled mixing coefficients when the CPP option VISC_GRID and DIFF_GRID are activated. In harmonic mixing the coefficients are scaled by the area and in biharmonic mixing the coefficients are scaled by the cubic area. Notice that horz_mix is a user routine in ROMS. The examples provided work well in the applications that I tried. This routine also show examples of how to set the sponge areas next to open boundaries when the CPP option SPONGE is activated.
I have never run ROMS in a global configuration and spherical coordinates. You may play with this routine and experiment with different scaled horizontal mixing strategies.
In ROMS, the grid cell area (grdscl) and its maximum (grdmax) are computed in metrics.F. These values are used in horz_mix.F to compute either harmonic or biharmonic grid-scaled mixing coefficients when the CPP option VISC_GRID and DIFF_GRID are activated. In harmonic mixing the coefficients are scaled by the area and in biharmonic mixing the coefficients are scaled by the cubic area. Notice that horz_mix is a user routine in ROMS. The examples provided work well in the applications that I tried. This routine also show examples of how to set the sponge areas next to open boundaries when the CPP option SPONGE is activated.
I have never run ROMS in a global configuration and spherical coordinates. You may play with this routine and experiment with different scaled horizontal mixing strategies.
Re:
Errata: where I said "area" above, it should read "diagonal" i.e., sqrt(om**2+on**2). So, it's proportional to sqrt(dx**2+dy**2) as the code is now.
So, to make each grid cell contribute the same amount of vorticity to the formation and maintainance of western boundary layers, i.e., as a uniform grid would, Ah needs to vary proportionally to dx**3 and not to dx (and to cos(latitutde)).
I have modified my horz_mix.F and had no problems (keeping the same DT), although I still need to test it for runs longer than 1 year.
Guiyo.
So, to make each grid cell contribute the same amount of vorticity to the formation and maintainance of western boundary layers, i.e., as a uniform grid would, Ah needs to vary proportionally to dx**3 and not to dx (and to cos(latitutde)).
I have modified my horz_mix.F and had no problems (keeping the same DT), although I still need to test it for runs longer than 1 year.
Guiyo.