Grid generation
Grid generation
Say, I was recently asked to give a roms class and the students were extremely eager to learn grid generation. I know of two ways to make grids: the nasty old Fortran way and the sexy Matlab way. I managed to download mexnc and seagrid onto one of their LInux boxes and could not get it to work. Since I came home, I also tried on my IBM and Linux boxes and failed there too. The very latest Seagrid download doesn't run the checks in the mex directory while my slightly older version does and fails on the mexrect check.
So, can *anyone* get the latest seagrid to work? How do we as a community want to be doing grid generation? Is a curvilinear option still important to anyone or should we go to a WRF style of rectangular grid only?
So, can *anyone* get the latest seagrid to work? How do we as a community want to be doing grid generation? Is a curvilinear option still important to anyone or should we go to a WRF style of rectangular grid only?
Grid generation is definitely important to many of us working in regional applications, and is often the most time-consuming part of the model setup. I'm sure the ROMS community wants an effective curvilinear grid generator.
We've come across "gridgen": http://www.marine.csiro.au/~sakov/
I haven't used this myself but Dmitri Leonov, post-doc working for us, has generated a high-res grid for Puget Sound using this package for use with MITgcm.
Mitsuhiro.
We've come across "gridgen": http://www.marine.csiro.au/~sakov/
I haven't used this myself but Dmitri Leonov, post-doc working for us, has generated a high-res grid for Puget Sound using this package for use with MITgcm.
Mitsuhiro.
Thanks for the pointer to a new toy! It works with xcoast about as well as my old Fortran codes. Here's an example:
Note that I can't control the grid spacing on any wall, rather it seems to try for uniform aspect ratio of the grid boxes everywhere. It's a reasonable compromise. Where this will really shine is in the multiple grid domains Hernan is hoping to support someday:
Note that I can't control the grid spacing on any wall, rather it seems to try for uniform aspect ratio of the grid boxes everywhere. It's a reasonable compromise. Where this will really shine is in the multiple grid domains Hernan is hoping to support someday:
Hi everyone-
A few weeks ago I had this problem, and I created a matlab code that uses Sakov's grid gen to make a matlab domain, useing Rich P's m_map routines and some code I got from Rich Signell to create ROMS grid files from matlab data.
It is relatively primitive right now, but it is easy to use and easy to understand. I welcome comments on it. Now my code is basic, and does not allow me to telescope the grids, but this should be easy to do with Pavel's code. I have not done it because I have not needed it. The big win of useing code like this is that it is easy to understand.
To run my code, get the tar file roll_own_grid_share.tar.gz at
http://guppy.sr.unh.edu/~pringle/
You will need Rich P's m_map installed, and you will need to configure and compile the grid_gen code if you are not on a linux box already. The README in the gridgen directory is sufficient -- it is the usual "./configure ; make" dance on a linux box. If you look at the examples, and read his web page, you can see that gridgen can do much more than I have it doing here.
After you have m_map and gridgen, just examine and run make_roms_spherical_grid.m. You will need to provide coastline and bathymetry files in the same format as seagrid expects. This format is documented in the matlab code, and is dead easy.
Hope yall find this usefull.
Cheers,
Jamie
A few weeks ago I had this problem, and I created a matlab code that uses Sakov's grid gen to make a matlab domain, useing Rich P's m_map routines and some code I got from Rich Signell to create ROMS grid files from matlab data.
It is relatively primitive right now, but it is easy to use and easy to understand. I welcome comments on it. Now my code is basic, and does not allow me to telescope the grids, but this should be easy to do with Pavel's code. I have not done it because I have not needed it. The big win of useing code like this is that it is easy to understand.
To run my code, get the tar file roll_own_grid_share.tar.gz at
http://guppy.sr.unh.edu/~pringle/
You will need Rich P's m_map installed, and you will need to configure and compile the grid_gen code if you are not on a linux box already. The README in the gridgen directory is sufficient -- it is the usual "./configure ; make" dance on a linux box. If you look at the examples, and read his web page, you can see that gridgen can do much more than I have it doing here.
After you have m_map and gridgen, just examine and run make_roms_spherical_grid.m. You will need to provide coastline and bathymetry files in the same format as seagrid expects. This format is documented in the matlab code, and is dead easy.
Hope yall find this usefull.
Cheers,
Jamie
Re: Grid generation
Seagrid works fine on both my Windows XP box under R14 and R2006a, and on my Linux box under R14 (haven't tried R2006 yet).kate wrote: I know of two ways to make grids: the nasty old Fortran way and the sexy Matlab way. I managed to download mexnc and seagrid onto one of their LInux boxes and could not get it to work. Since I came home, I also tried on my IBM and Linux boxes and failed there too. The very latest Seagrid download doesn't run the checks in the mex directory while my slightly older version does and fails on the mexrect check. So, can *anyone* get the latest seagrid to work?
I think Sakov's grid generation tool is very useful, and the existing seagrid could be adapted without too much trouble to use this tool behind the scenes. The ability to have more than 4 corners is very nice indeed. Of course a python or java GUI would be nice also!kate wrote: How do we as a community want to be doing grid generation? Is a curvilinear option still important to anyone or should we go to a WRF style of rectangular grid only?
-Rich
Last edited by rsignell on Wed Oct 11, 2006 3:51 pm, edited 1 time in total.
Arrrr, matey, I can't get your package to work, Jamie, with the sample files provided:
I plan on going a different route than this, so don't fix it for me. I just needed to check out all the options. A note on bathymetries: I got sick of making subsets of global bathymetries for each domain and currently read in the whole globe instead. This works for ETOPO5, ETOPO2, and now GEBCO, assuming you have 64-bit address space. If you've got something better regionally, that's a different story (you lucky devil, you).
Code: Select all
Now computing land mask from coastline file
??? Error using ==> mexnc
Too many output arguments.
Error in ==> mexcdf53 at 9
[varargout{:}] = feval('mexnc', varargin{:});
Error in ==> ncmex at 139
[varargout{:}] = feval(fcn, varargin{:});
Error in ==> netcdf.create at 13
[theNCid, status] = ncmex('create', name(self), thePermission);
Error in ==> netcdf.netcdf at 419
result = create(result, thePermission);
Error in ==> mat2roms_rps at 91
nc = netcdf(theROMSFile, 'clobber');
Error in ==> make_roms_spherical_grid at 202
mat2roms_rps('jnk.mat',output_grid)
Seagrid and mex mess
I recently went through a matlab/mex upgrade and seagrid installation. From this experience, Kate, it seems like your error may be more related to the matlab/mex communication than Jamie's code? Could this be the case? I came across a similar error, and it was because of path settings. In case it is helpful to you or others, I have copied my installation overview at the end of this message. (I have been too busy to try Jamie's code yet, but I plan to.)
For the matlab/seagrid/mex setup, I'm using an older version of Seagrid with the R2006a matlab and mex versions and it works okay. When I tried installing the newer seagrid version, I had trouble with the mex stuff and recieved the following advice from a kind person who no longer wishes to be bothered by Seagrid questions:
"The "SeaGrid" PCWIN mex-files have rarely worked, or never, and I have recommended that users invoke the "View/Setup" menu to turn them off. Alternatively, turn them off permanently at the end of the
"seagrid/seagrid.m" function."
E.g., uncheck the "UseMexFile" check box in View>Setup or change line 152 of seagrid.m to read: 'itUsesMexFile', ~~1.
Again, I resorted to an older version of Seagrid in the interest of time, so I'm not sure how useful this will be to you, but I thought I'd throw it out there just in case it is.
************Configuring Matlab/Mex************************
NOTE: YOU MAY JUST FIND THE END PART (INSTALLATION CHECK) MOST USEFUL.
*******************************************************
For a windows platform you do not exactly ‘install’ any of this. You just put the downloaded pre-built DLL files in the correct folders, update the windows path, and add some paths to Matlab. This file contains information for how to get mexnc and netcdf working with Matlab 7.2 r2006a build.
A mexnc download (http://mexcdf.sourceforge.net/index.html) with NetCDF_Toolbox is enough to start using NetCDF files in Matlab. The mexnc download includes the most recent netCDF.dll file that that version of mexnc works with. So this is a very good way to go.
(If you only want to use the netCDF “interface”(the tools that let you talk to netCDF formatted data) outside of Matlab or from the windows command line then just download netCDF from Unidata (http://www.unidata.ucar.edu/software/netcdf/) and place the correct files (netcdf.dll, netcdf.lib, ncdump.exe, ncgen.exe) in the C:\Windows\System32 folder.)
MEXNC
http://mexcdf.sourceforge.net/downloads/ (go to this website)
|
-> R2006a Windows XP : (find this link in the follow it)
|
-> mexnc-w32-r2006a-2.0.19.zip (download from Superb internet in Seattle WA)
Extract mexnc folder to ‘MEXNCPATH\ mexnc_R2006a\’, which in my case is 'C:\Program Files\MexCDF\mexnc_R2006a'. The mexnc folder (‘mexnc_R2006a’) contains two subfolders, ‘CVS’ and ‘tests’, as well as many files, including 'mexnc.mexw32' and 'netcdf.dll'. Copy 'mexnc.mexw32' and 'netcdf.dll' to MATLABPATH\bin and MATLABPATH\bin\win32, overwriting existing files (if applicable). In my case, MATLABPATH is ‘C:\Program Files\MATLAB72’.
Remove any folder with reference to mexnc or netcdf folders from Matlab path. (If you use Seagrid, keep the seagrid\mex folder).
Keep or create \bin and\bin\win32 paths.
Add to path "C:\Program Files\MexCDF\mexnc_R2006a\mexnc\".
Delete 'mexnc.mexw32' and 'netcdf.dll' from "C:\Program Files\MexCDF\mexnc_R2006a\mexnc\".
NETCDF
http://mexcdf.sourceforge.net/downloads/ (go to this website)
|
-> NetCDF Toolbox : (follow this link)
|
-> netcdf_toolbox-1.0.11.zip (download from Superb internet in Seattle WA)
Unzip the netcdf_toobox-1.0.11.zip in MATLABPATH\toolbox\. This will create a folder called 'netcdf_toolbox'. Add to the Matlab path this folder ('netcdf_toolbox') and all subfolders.
INSTALLATION CHECK
!!****The correct configuration is:****!!
>> mexnc('STRERROR',0)
ans =
No error
>> which('mexnc','-all')
C:\Program Files\MATLAB72\bin\win32\mexnc.mexw32
C:\Program Files\MATLAB72\bin\mexnc.mexw32 % Shadowed
C:\Program Files\MexCDF\mexnc_R2006a\mexnc\mexnc.m % Shadowed
>> which('netcdf','-all')
C:\Program Files\MATLAB72\toolbox\netcdf_toolbox\netcdf\@netcdf\netcdf.m % netcdf constructor
C:\Program Files\MATLAB72\bin\win32\netcdf.dll % Shadowed
C:\Program Files\MATLAB72\bin\netcdf.dll % Shadowed
>>
If the order of any of the above isn’t the same on your machine then you need to adjust the order of things in your matlab path until it matches the above, exactly.
For the matlab/seagrid/mex setup, I'm using an older version of Seagrid with the R2006a matlab and mex versions and it works okay. When I tried installing the newer seagrid version, I had trouble with the mex stuff and recieved the following advice from a kind person who no longer wishes to be bothered by Seagrid questions:
"The "SeaGrid" PCWIN mex-files have rarely worked, or never, and I have recommended that users invoke the "View/Setup" menu to turn them off. Alternatively, turn them off permanently at the end of the
"seagrid/seagrid.m" function."
E.g., uncheck the "UseMexFile" check box in View>Setup or change line 152 of seagrid.m to read: 'itUsesMexFile', ~~1.
Again, I resorted to an older version of Seagrid in the interest of time, so I'm not sure how useful this will be to you, but I thought I'd throw it out there just in case it is.
************Configuring Matlab/Mex************************
NOTE: YOU MAY JUST FIND THE END PART (INSTALLATION CHECK) MOST USEFUL.
*******************************************************
For a windows platform you do not exactly ‘install’ any of this. You just put the downloaded pre-built DLL files in the correct folders, update the windows path, and add some paths to Matlab. This file contains information for how to get mexnc and netcdf working with Matlab 7.2 r2006a build.
A mexnc download (http://mexcdf.sourceforge.net/index.html) with NetCDF_Toolbox is enough to start using NetCDF files in Matlab. The mexnc download includes the most recent netCDF.dll file that that version of mexnc works with. So this is a very good way to go.
(If you only want to use the netCDF “interface”(the tools that let you talk to netCDF formatted data) outside of Matlab or from the windows command line then just download netCDF from Unidata (http://www.unidata.ucar.edu/software/netcdf/) and place the correct files (netcdf.dll, netcdf.lib, ncdump.exe, ncgen.exe) in the C:\Windows\System32 folder.)
MEXNC
http://mexcdf.sourceforge.net/downloads/ (go to this website)
|
-> R2006a Windows XP : (find this link in the follow it)
|
-> mexnc-w32-r2006a-2.0.19.zip (download from Superb internet in Seattle WA)
Extract mexnc folder to ‘MEXNCPATH\ mexnc_R2006a\’, which in my case is 'C:\Program Files\MexCDF\mexnc_R2006a'. The mexnc folder (‘mexnc_R2006a’) contains two subfolders, ‘CVS’ and ‘tests’, as well as many files, including 'mexnc.mexw32' and 'netcdf.dll'. Copy 'mexnc.mexw32' and 'netcdf.dll' to MATLABPATH\bin and MATLABPATH\bin\win32, overwriting existing files (if applicable). In my case, MATLABPATH is ‘C:\Program Files\MATLAB72’.
Remove any folder with reference to mexnc or netcdf folders from Matlab path. (If you use Seagrid, keep the seagrid\mex folder).
Keep or create \bin and\bin\win32 paths.
Add to path "C:\Program Files\MexCDF\mexnc_R2006a\mexnc\".
Delete 'mexnc.mexw32' and 'netcdf.dll' from "C:\Program Files\MexCDF\mexnc_R2006a\mexnc\".
NETCDF
http://mexcdf.sourceforge.net/downloads/ (go to this website)
|
-> NetCDF Toolbox : (follow this link)
|
-> netcdf_toolbox-1.0.11.zip (download from Superb internet in Seattle WA)
Unzip the netcdf_toobox-1.0.11.zip in MATLABPATH\toolbox\. This will create a folder called 'netcdf_toolbox'. Add to the Matlab path this folder ('netcdf_toolbox') and all subfolders.
INSTALLATION CHECK
!!****The correct configuration is:****!!
>> mexnc('STRERROR',0)
ans =
No error
>> which('mexnc','-all')
C:\Program Files\MATLAB72\bin\win32\mexnc.mexw32
C:\Program Files\MATLAB72\bin\mexnc.mexw32 % Shadowed
C:\Program Files\MexCDF\mexnc_R2006a\mexnc\mexnc.m % Shadowed
>> which('netcdf','-all')
C:\Program Files\MATLAB72\toolbox\netcdf_toolbox\netcdf\@netcdf\netcdf.m % netcdf constructor
C:\Program Files\MATLAB72\bin\win32\netcdf.dll % Shadowed
C:\Program Files\MATLAB72\bin\netcdf.dll % Shadowed
>>
If the order of any of the above isn’t the same on your machine then you need to adjust the order of things in your matlab path until it matches the above, exactly.
Re: Seagrid and mex mess
Be careful if you do this! By turning off the mex-files for Seagrid, you are using a different elliptic solver, and you will get a different orthogonality error for the same grid. My experience has been that the error for the non-mex version can be signficantly larger than for the mex-file version.rmueller wrote: When I tried installing the newer seagrid version, I had trouble with the mex stuff and recieved the following advice from a kind person who no longer wishes to be bothered by Seagrid questions:
"The "SeaGrid" PCWIN mex-files have rarely worked, or never, and I have recommended that users invoke the "View/Setup" menu to turn them off. Alternatively, turn them off permanently at the end of the
"seagrid/seagrid.m" function."
So be sure to check the orthogonality of your grid (always a good idea anyway) by clicking <Compute>=>Orthogonality from the SeaGrid menu.
This is a bit more complicated than it needs to be. On Windows systems, Matlab needs the mex file explicitly called from within Matlab to be in the Matlab path (in this case, mexnc). If this mex file depends on other DLL files (such as netcdf.dll) then these DLL files need to be in a directory that is in the system path. That's all. So netcdf.dll does not need to be in the Matlab Path, and there does not need to be more than one copy on your system. Go to MyComputer=>Advanced=>Environmental Variables=>Path if you are not sure what's in your system path.rmueller wrote: Extract mexnc folder to ‘MEXNCPATH\ mexnc_R2006a\’, which in my case is 'C:\Program Files\MexCDF\mexnc_R2006a'. The mexnc folder (‘mexnc_R2006a’) contains two subfolders, ‘CVS’ and ‘tests’, as well as many files, including 'mexnc.mexw32' and 'netcdf.dll'. Copy 'mexnc.mexw32' and 'netcdf.dll' to MATLABPATH\bin and MATLABPATH\bin\win32, overwriting existing files (if applicable). In my case, MATLABPATH is ‘C:\Program Files\MATLAB72’.
-Rich
Thanks for a heads up on the difference with the orthogonality error. Also, the clarification about the paths is helpful. For some reason, on most websites that discuss installing mex and netcdf, they insist that the .dll and .mexw32 need to be in \bin and bin\win32. It worked, so I never really questioned it.
In any case, the more information that is online about this, the better.
Regards,
Rachael
In any case, the more information that is online about this, the better.
Regards,
Rachael
Hi all-
I think Kate's problems are, indeed, due to her mexcdf install. Several other folks have used my code without an issue. I am not sure, however, what the issue is, which is less helpful than I would like to be.
Also, Kate mentioned
http://www.ngdc.noaa.gov/mgg/coastal/coastal.html
I have had good luck with this very high resolution (up to 3sec) bathymetry. It is not perfect, and will often need to be smoothed because of its high resolution, but it is very good.
Below is a small piece of code to read in the data from this web site, if it is saved in the GEODAS ASCII format.
Cheers,
Jamie
I think Kate's problems are, indeed, due to her mexcdf install. Several other folks have used my code without an issue. I am not sure, however, what the issue is, which is less helpful than I would like to be.
Also, Kate mentioned
I would encourage people modeling the coastal US to check outThis works for ETOPO5, ETOPO2, and now GEBCO, .... If you've got something better regionally, that's a different story (you lucky devil, you).
http://www.ngdc.noaa.gov/mgg/coastal/coastal.html
I have had good luck with this very high resolution (up to 3sec) bathymetry. It is not perfect, and will often need to be smoothed because of its high resolution, but it is very good.
Below is a small piece of code to read in the data from this web site, if it is saved in the GEODAS ASCII format.
Cheers,
Jamie
Code: Select all
%convert GEODAS ascii to a matlab file containing the variable "bathy" with
%the fields
% bathy.lat, latitude
% bathy.lon, longitude
% bathy.depth, depth data in meters
% bathy.filename, the filename of the data
% bathy.dir, the directory this code is run in
%
% Jamie Pringle, 7/24/03
%filename of data, without extention
filename = 'PtReyes_1957';
fid=fopen([filename '.asc']);
%get info
ny=fscanf(fid,'NCOLS %f\n',1)
nx=fscanf(fid,'NROWS %f\n',1)
lon0=fscanf(fid,'XLLCORNER %f\n',1)
lat0=fscanf(fid,'YLLCORNER %f\n',1)
dlat=fscanf(fid,'CELLSIZE %f\n',1)
baddata=fscanf(fid,'NODATA_VALUE %f\n',1)
lat=lat0 + (0:nx-1)*dlat;
lon=lon0 + (0:ny-1)*dlat;
depth=zeros(nx,ny);
for n=1:nx
depth(n,:)=fscanf(fid,'%f',ny)';
n
end
depth=flipud(depth);
indx=find(depth==baddata);
depth(indx)=nan;
bathy.lat=lat;
bathy.lon=lon;
bathy.depth=depth;
bathy.filename=filename;
bathy.dir=pwd;
save(filename,'bathy')
indx=find(depth>0); depth(indx)=nan;
pcolor(lon,lat,depth); shading flat; caxis([-150 0]); colorbar
fclose(fid);
I've got a new version here. The old one is probably still at Rutgers somewhere, but was giving way too many warnings from modern gcc.andres wrote: Hi Kate,
Where can I find xcoast?
Andres
Some of you may know how I feel about Matlab. I have instead written an NCL script to take the gridgen output and create a ROMS NetCDF file. Unfortunately, NCL doesn't have map projection routines except in its private guts, so I'll probably end up trying Python for this. Anyway, my NCL script is assuming you ran gridgen asking for Lm*2+1,Mm*2+1 gridpoints and does the "right" thing for the staggered grids and the image points.
Rich - I finally got matlab on my mac and the seagrid thing is dying in test_mexsepeli with "afun*dfun less than or equal to 0". I can't believe it, but I got test_mexrect to run.
RE: grid generation
Dear Kate, Rich, and all,
I am just wondering: sometime ago, back in February 2004 Hernan asked me to revise mex-function interface and fortran code "mexsepeli" in order to enable it to work on Linux platform and being called from Matlab on Linux. Which I succeeded to do. I knew that it was needed for grid-generation.
Did you find any use for it?
I am just wondering: sometime ago, back in February 2004 Hernan asked me to revise mex-function interface and fortran code "mexsepeli" in order to enable it to work on Linux platform and being called from Matlab on Linux. Which I succeeded to do. I knew that it was needed for grid-generation.
Did you find any use for it?
Hi Kate,kate wrote:I've got a new version here. The old one is probably still at Rutgers somewhere, but was giving way too many warnings from modern gcc.andres wrote: Hi Kate,
Where can I find xcoast?
Andres
Thank your for the program. Seems it needs the world_int.cst file, which I can't access from http://marine.rutgers.edu/po/gridpak.html do you know where I can find it?
Andres
seagrid issues...
I'am using seagrid with Matlab 7 in windows envirnoment. I get it to work, together with mexnc and NetCDF_Toolbox. All the seagrid test's are fine and Its seems to work all cool, but when I try to convert a file to NetCDF using the function seagrid2roms I get this error
My matlab paths seems to be ok, as everyone suggest, can sombody help me to fix this...?
Greetings
GaBy
Code: Select all
>> seagrid2roms('LaMalla.mat', 'roms_grd.nc')
## SeaGrid Source File : LaMalla.mat
## ROMS Destination File: roms_grd.nc
## Defining Global Attributes...
## Defining Dimensions...
## Defining Variables and Attributes...
## Filling Variables...
??? varput1: cannot have empty set in input position 4.
Error in ==> mexcdf53 at 9
[varargout{:}] = feval('mexnc', varargin{:});
Error in ==> ncmex at 139
[varargout{:}] = feval(fcn, varargin{:});
Error in ==> ncvar.subsasgn at 244
status = ncmex('varput1', ncid(self), varid(self), ...
Error in ==> netcdf.subsasgn at 83
result = subsasgn(v, s, other);
Error in ==> seagrid2roms at 442
nc{'spherical'}(:) = 'T'; % T or F -- uppercase okay?
Greetings
GaBy
It is at http://people.arsc.edu/~kate/grids/world_int.cst. However, this is just an example of one possible coastline file. It comes from the GMT coastlines via a matlab script to extract part or all of the coasts at one of five different resolutions and write to ASCII or matlab binary. The extract script is part of Hernan's matlab tarball on the ROMS tools site. So this file is the whole world at the intermediate resolution, which is good enough for basin-scale plots, but not good enough for high-resolution small domains.andres wrote: Hi Kate,
Thank your for the program. Seems it needs the world_int.cst file, which I can't access from http://marine.rutgers.edu/po/gridpak.html do you know where I can find it?
Andres
seagrid issues
seagrid2roms works fine for me, but I seem to remember that at one point the netcdf_toolbox was having problems with this.OcGaBy wrote:I'am using seagrid with Matlab 7 in windows envirnoment. I get it to work, together with mexnc and NetCDF_Toolbox. All the seagrid test's are fine and Its seems to work all cool, but when I try to convert a file to NetCDF using the function seagrid2roms I get this error...
Make sure you have the most recent version of the netcdf_toolkit, and if that doesn't do it, make sure that your mexnc and netcdf.dll are the most recent also.
I'm using versions:
NetCDF Toolbox 1.0.10 from Feb 24, 2006
Mexnc 2.0.19 from May 25, 2006
netcdf.dll, 204,800 byes from July 12, 2005
-Rich
main features of `gridgen'
Hello everyone,
I came across this discussion and was very happy that quite a few people find `gridgen' useful and easy to use.
It occured to me that a list of the main features of `gridgen' could often help to decide whether it is the right tool in a particular context, without actually trying it. Following is such a list, to indicate what `gridgen' can do and what it can not (also added to the README file), and by all means please do not hesitate to ask me a question.
I came across this discussion and was very happy that quite a few people find `gridgen' useful and easy to use.
It occured to me that a list of the main features of `gridgen' could often help to decide whether it is the right tool in a particular context, without actually trying it. Following is such a list, to indicate what `gridgen' can do and what it can not (also added to the README file), and by all means please do not hesitate to ask me a question.
- `gridgen' generates a grid based on the domain boundary and the designated locations of the grid corners.
- `gridgen' can handle simply connected regions only. If you have a region with an island or re-connecting channels, the only way you can generate a grid for it with `gridgen' is through masking.
- Unlike many other generators, `gridgen' allows multiple corners (rather than 4 corners) in the index space. This gives one a great flexibility in regard to the representation of complicated regions.
- Unlike many other generators, `gridgen' does not allow to specify cell size explicitely. One can influence the cell density by:
- Changing positions of the corners.
Compare grids for examples 1 and 2 from the package; they demonstrate how the relative cell density may be changed via the positions of the grid corners. - By specifying node coordinates in the index space.
This is done via the entry `grid' in the parameter file. This entry points at the file that contains node coordinates in index space scaled to 1x1 square. Two examples of using this technique may be seen at
http://www.marine.csiro.au/~sakov/fitzroy.pdf
(note elongated cells in the river); and
http://www.marine.csiro.au/~sakov/torres.pdf
(note the elongated cells in the narrowing).
- Changing positions of the corners.
- Because `gridgen' is based on the (exact) Schwarz-Christoffel formula, it performs fast and is numerically robust.
- Beware that each boundary vertex represents a singularity in the Scwartz-Christoffel transform. To generate a smoother grid, for a section of the boundary without corners, avoid putting large angles close to water; try making sharp turns by using a few smaller turns rather than one big turn; or move the boundary polyline a away from the water. Also, try to make a right turn in the boundary polyline at the location of designated corners.
- To generate a grid with aspect ratio close to 1, look at the value of "conformal modulus" reported in the log generated by `gridgen' with "-v" option, and make the ratio (ny - 1) / (nx - 1) close to this number.
Can't jump from analitical to hand-made grids!!!!!
I'm using seagrid to generate grids. As my model blows up after a while, I start simplifying my bathymetry and mask. Just to be sure that It was the wrong thing I emulated with the seagrid an analytical grid that I used before to try my application, and I discover that just by changing to a crated grid the model become unstable after a while, even if the grid was just a rectangle with plane bottom, example that works fine when the same conditions are set analytically.
Can some body tell me what is wrong here??
Greetings
GaBy
Can some body tell me what is wrong here??
Greetings
GaBy
Re: Can't jump from analitical to hand-made grids!!!!!
Not without seeing your grid file. Did you give it a perfectly rectangular region in seagrid?OcGaBy wrote: Can some body tell me what is wrong here??
Even if things aren't perfectly rectangular and orthogonal, I would have expected ROMS to run, though perhaps with larger errors than with an analytic grid.
Set a minimum depth biger than 0
Thanks for your attention Kate!
The thing was that I was getting depths of cero in the borders of the rectangle. And the same when I used my bathymetry, even where there are no ceros in the original data, the seagrids sometimes compute to cero where there are small depths. The thing is to set something like 1 or 2 as minimum depth in the seagrid… Where is the information about these small details that can drive you crazy in some moments??
There's no body around me working with ROMS and is being quite difficult to me to figure it out all by my self…
I think there is a lot of information missed for new users, maybe thinks that are quite obvious for you that have been workings with ROMS for a while… I think it is an important point to promote the use of ROMS… I can’t wait to see what are they going to publish in “CONFIGUING ROMS”…
The thing was that I was getting depths of cero in the borders of the rectangle. And the same when I used my bathymetry, even where there are no ceros in the original data, the seagrids sometimes compute to cero where there are small depths. The thing is to set something like 1 or 2 as minimum depth in the seagrid… Where is the information about these small details that can drive you crazy in some moments??
There's no body around me working with ROMS and is being quite difficult to me to figure it out all by my self…
I think there is a lot of information missed for new users, maybe thinks that are quite obvious for you that have been workings with ROMS for a while… I think it is an important point to promote the use of ROMS… I can’t wait to see what are they going to publish in “CONFIGUING ROMS”…
Gridgen with python
All
I have made a gridgen wrapper for python. This is not too terribly different from using gridgen from the command line, but it does keep everything in one place.
You can get it with subversion using the command
svn co http://pong.tamu.edu/svn/python/trunk/gridgen gridgen
You can browse the code with a web browser using the same address.
An example of a grid made using this utility can be seen here:
http://pong.tamu.edu/~rob/plume/merrimack/grid.pdf
-Rob
I have made a gridgen wrapper for python. This is not too terribly different from using gridgen from the command line, but it does keep everything in one place.
You can get it with subversion using the command
svn co http://pong.tamu.edu/svn/python/trunk/gridgen gridgen
You can browse the code with a web browser using the same address.
An example of a grid made using this utility can be seen here:
http://pong.tamu.edu/~rob/plume/merrimack/grid.pdf
-Rob
You can't be serious - you need us and we need to know what you are struggling with.RubenDiez-Lazaro wrote:Perhaps a Bulletin Board only for the very beginners?
So is Seagrid making bad grids for people? We need to know that and replace it. Personally, I have never gotten it to really work and always go back to my nasty old fortran code that no one else will touch.
Seagrid doesn't make bad grids. People make bad grids.kate wrote: So is Seagrid making bad grids for people? We need to know that and replace it. Personally, I have never gotten it to really work and always go back to my nasty old fortran code that no one else will touch.
Seriously, I and many others have been using Seagrid for years, and although the installation and quirks can be annoying, once you get the hang of it, it's pretty easy to modify the grid until you get something that has the grid resolution where you want it, and has small orthogonality errors on wet points.
Seagrid works well if your domain can be grid with 4 corners. If not, you need Sakov's grid generation tool.
-Rich Signell
rsignell wrote:
Seriously, I and many others have been using Seagrid for years, and although the installation and quirks can be annoying, once you get the hang of it, it's pretty easy to modify the grid until you get something that has the grid resolution where you want it, and has small orthogonality errors on wet points.
Seagrid works well if your domain can be grid with 4 corners. If not, you need Sakov's grid generation tool.
-Rich Signell
I can add some confusion on all this!
I am trying to setup a grid having a domain of 100x80; if under "view-setup" I tick the mexcdf option, I have some irregular shaping of the cells, lines are not orthogonal and go up and down. Rich said this may happen, since we are using a different elliptic algh., I think I recall.
When I untick it, I have regular orthoghonal cells, perfectly orthogonal to each other, but I cannot decide, apparently, how many along each direction. Seagrid helps itself, keeping the grid sizes square. When we convert the .mat -> .nc with seagrid2roms, I see a much larger than expected number of cells (e.g. 250x80).
Fiddling around with MATLAB path, I found out that all these problems disappear when I moved my /presto directory at the bottom of the path and removed the /seagrid/presto one.
This was a kind of lucky one, since the more things you store into your path, the more you are likely te get these troubles, I believe.
So, since there are possibly some pieces of scripts that sometimes may collide with each other, maybe we need not only a stable version of Seagrid (Rich, I agree the one in the web is stable enough, so to speak) but could also benefit from a list of things-to-be-avoided, like the case that happened to me.
Cheers,
Sandro
Sandro,
Several comments on the above problems:
1) Presto: Seagrid depends on Presto, and we therefore supplied Presto as a subdirectory of the Seagrid distribution. This version should be in the matlab path, not some other version of Presto. It should not matter where it is in the path unless there is a conflict with some other toolbox.
2) Solver and orthogonality: I have never seen a case where unchecking the "UseMexFile" box (on the "View=>Setup" control panel) resulted in a more orthogonal solution.
3) Spacing along boundaries: Initially, Seagrid assumes that the number of grid lines you specify are uniformly spaced along side 1 and side 2. You can change side 1 to side 3, and side 2 to side 4 by using the "View=>Spacing Setup" control panel. You can then of course, adjust the sliders to make varying resolution along the two sides you have selected.
Hope this helps,
Rich
Several comments on the above problems:
1) Presto: Seagrid depends on Presto, and we therefore supplied Presto as a subdirectory of the Seagrid distribution. This version should be in the matlab path, not some other version of Presto. It should not matter where it is in the path unless there is a conflict with some other toolbox.
2) Solver and orthogonality: I have never seen a case where unchecking the "UseMexFile" box (on the "View=>Setup" control panel) resulted in a more orthogonal solution.
3) Spacing along boundaries: Initially, Seagrid assumes that the number of grid lines you specify are uniformly spaced along side 1 and side 2. You can change side 1 to side 3, and side 2 to side 4 by using the "View=>Spacing Setup" control panel. You can then of course, adjust the sliders to make varying resolution along the two sides you have selected.
Hope this helps,
Rich
-
- Posts: 82
- Joined: Mon Aug 16, 2004 8:47 pm
- Location: U.S. Geological Survey, Woods Hole
- Contact:
seagrid funkiness
I was going to stay quiet, since seagrid has always worked ok for me, but i have always had the same quirks mentioned by sandro (except for the presto path issue). I get more orthogonal results with mex off, and the cell density is always changed when i convert to a roms file using seagrid2roms. i usually just deal with it, but today I had major problems with a new bathymetry set.
The data are very detailed, with spacing at every meter (a narrow river). Seagrid seems to not want to interpolate properly to the data points, and where there is large variability in depth, seagrid runs a plane right through them. I have the seagrid dx and dy down to the same meter scale. Any ideas?
The data are very detailed, with spacing at every meter (a narrow river). Seagrid seems to not want to interpolate properly to the data points, and where there is large variability in depth, seagrid runs a plane right through them. I have the seagrid dx and dy down to the same meter scale. Any ideas?
-
- Posts: 82
- Joined: Mon Aug 16, 2004 8:47 pm
- Location: U.S. Geological Survey, Woods Hole
- Contact:
matlab's fault?
Thanks for the offer Rich-
I was getting the files ready for you, and I tried something different: I created the grid, opened it in Matlab, and recomputed the depths using:
zi=griddata(xbathy,ybathy,zbathy,lon_rho,lat_rho);
I got the same strange result as seagrid gave. Then I remembered a problem I had a few years back with 25 m gridded data (over the entire SF Bay) in Matlab: I had to multiply the longs and lats by 1e6, then subtract the leading digits for Matlab to perform a successful triangulation. Otherwise it reported multiple x-y values or unsuccessful triangulation. So I tried that this time, and voila--it worked. Then you put the coordinates back into the correct system.
I think very small differences between coordinates, when the coordinate value is high, e.g. 111 degrees, with the next coordinate only 1e-5 degrees away, creates some sort of problem, but I don't know why.
I was getting the files ready for you, and I tried something different: I created the grid, opened it in Matlab, and recomputed the depths using:
zi=griddata(xbathy,ybathy,zbathy,lon_rho,lat_rho);
I got the same strange result as seagrid gave. Then I remembered a problem I had a few years back with 25 m gridded data (over the entire SF Bay) in Matlab: I had to multiply the longs and lats by 1e6, then subtract the leading digits for Matlab to perform a successful triangulation. Otherwise it reported multiple x-y values or unsuccessful triangulation. So I tried that this time, and voila--it worked. Then you put the coordinates back into the correct system.
I think very small differences between coordinates, when the coordinate value is high, e.g. 111 degrees, with the next coordinate only 1e-5 degrees away, creates some sort of problem, but I don't know why.
Re: RE: grid generation
Sasha,shchepet wrote:Dear Kate, Rich, and all,
I am just wondering: sometime ago, back in February 2004 Hernan asked me to revise mex-function interface and fortran code "mexsepeli" in order to enable it to work on Linux platform and being called from Matlab on Linux. Which I succeeded to do. I knew that it was needed for grid-generation.
Did you find any use for it?
Sorry, I missed this post. Yes, the Linux version of seagrid depends on "mexsepeli", which works fine.
Thanks,
Rich
Dear all-
If you are using Pavel of CSIRO's gridgen, I have a little chunk of matlab code which allows you to specify the resolution of the grid along the edges of the model domain. If you are interested, mail me. I am not yet distributing it publicly because the rest of my evolving non-interactive grid generation package is not well documented, and only works for one corner case -- mine.
Note that this code only exactly works for rectangular domains. Otherwise, it only lets you approximately set the resolution, for gridgen must still satisfy the constraints of orthogonality, etc. This is no different then seagrid, for it must satisfy the same constraints.
Cheers,
Jamie
If you are using Pavel of CSIRO's gridgen, I have a little chunk of matlab code which allows you to specify the resolution of the grid along the edges of the model domain. If you are interested, mail me. I am not yet distributing it publicly because the rest of my evolving non-interactive grid generation package is not well documented, and only works for one corner case -- mine.
Note that this code only exactly works for rectangular domains. Otherwise, it only lets you approximately set the resolution, for gridgen must still satisfy the constraints of orthogonality, etc. This is no different then seagrid, for it must satisfy the same constraints.
Cheers,
Jamie
How to make large grid by seagrid?
Hi all,
i want to make large grid of 400×200 by seagrid, and i increased the NX, NY in mexsepeli.inc, and the size of the Z array in mexrect.F. But it is still not working.
??? warning - tracking error
Error in ==> C:\MATLAB6p1\toolbox\seagrid\mex\mexrect.dll
Error in ==> C:\MATLAB6p1\toolbox\seagrid\mexrect2grid.m
On line 98 ==> zrect = feval('mexrect', zrect, length(zrect), ...
Error in ==> C:\MATLAB6p1\toolbox\seagrid\@seagrid\gridcalc.m
On line 179 ==> [w, err] = feval(theFcn, zti, [], ci, [m n]); % <Error> C:\MATLAB6p1\toolbox\seagrid\@seagrid\dogrid.m
On line 64 ==> gridcalc(self) % <Calculate> C:\MATLAB6p1\toolbox\seagrid\@seagrid\doupdate.m
On line 92 ==> dogrid(self, needsUpdate); % <== Step #2 <Error> C:\MATLAB6p1\toolbox\seagrid\@seagrid\doevent.m
On line 188 ==> doupdate(self)
Error in ==> C:\MATLAB6p1\toolbox\seagrid\presto\psevent.m
On line 25 ==> doevent(ps(gcbf), theEvent, theMessage);
??? Error while evaluating uimenu Callback.
Do I have to make the seagrid mexfiles from source by make_seagrid_mex ? if so, how should I modify the compiler options in *.sh file if i use Compaq visual fortran.
Thanks!
i want to make large grid of 400×200 by seagrid, and i increased the NX, NY in mexsepeli.inc, and the size of the Z array in mexrect.F. But it is still not working.
??? warning - tracking error
Error in ==> C:\MATLAB6p1\toolbox\seagrid\mex\mexrect.dll
Error in ==> C:\MATLAB6p1\toolbox\seagrid\mexrect2grid.m
On line 98 ==> zrect = feval('mexrect', zrect, length(zrect), ...
Error in ==> C:\MATLAB6p1\toolbox\seagrid\@seagrid\gridcalc.m
On line 179 ==> [w, err] = feval(theFcn, zti, [], ci, [m n]); % <Error> C:\MATLAB6p1\toolbox\seagrid\@seagrid\dogrid.m
On line 64 ==> gridcalc(self) % <Calculate> C:\MATLAB6p1\toolbox\seagrid\@seagrid\doupdate.m
On line 92 ==> dogrid(self, needsUpdate); % <== Step #2 <Error> C:\MATLAB6p1\toolbox\seagrid\@seagrid\doevent.m
On line 188 ==> doupdate(self)
Error in ==> C:\MATLAB6p1\toolbox\seagrid\presto\psevent.m
On line 25 ==> doevent(ps(gcbf), theEvent, theMessage);
??? Error while evaluating uimenu Callback.
Do I have to make the seagrid mexfiles from source by make_seagrid_mex ? if so, how should I modify the compiler options in *.sh file if i use Compaq visual fortran.
Thanks!
Barbara,
I increased the size to 1200x1200 and recompiled. If you replace your win32 mex files with these, does it work?
http://stellwagen.er.usgs.gov/rps/share ... d_mex2.zip
-Rich
I increased the size to 1200x1200 and recompiled. If you replace your win32 mex files with these, does it work?
http://stellwagen.er.usgs.gov/rps/share ... d_mex2.zip
-Rich
Hi Rich,
Thanks for your help! I copied these two files into my matlab\toolbox\seagrid\mex, it is still not working. i wonder if i have misunderstood what you mean, cause i don't have mexsepeli.mexw32 or mexrect.mexw32 in the original seagrid\mex folder.
Thanks!
Barbara
Thanks for your help! I copied these two files into my matlab\toolbox\seagrid\mex, it is still not working. i wonder if i have misunderstood what you mean, cause i don't have mexsepeli.mexw32 or mexrect.mexw32 in the original seagrid\mex folder.
If you replace your win32 mex files with these
Thanks!
Barbara
Re: How to make large grid by seagrid?
Barbara ZU wrote:Hi all,
i want to make large grid of 400×200 by seagrid, and i increased the NX, NY in mexsepeli.inc, and the size of the Z array in mexrect.F. But it is still not working.
??? warning - tracking error
...
Thanks!
The "tracking error" is a failure of the conformal mapping algorithm to map the irregular boundary to a rectangle. It is deep inside the Ives and Zacharias algorithm that underpins seagrid and other related grid generating tools.
It is true that this error does tend to occur more frequently if the boundary has a large number of points, but is also more likely to be triggered in grids with high aspect ratios or highly variable distributons of points along a long boundary. Are these features of your grid?
Do you get an acceptable looking grid with smaller numbers of boundary points?
Is the tracking error sensitive to the number of points along one particular boundary, more than the other?
If the boundary you specify is quite irregular, check whether you end up with some very small or very large cells. If you have an unacceptably large range of cell sizes (that will cause strict CFL time step limitations later) then consider smoothing out the input boundary curve a little. This generally reduces the demands on the conformal mapping step.
If you still have problems, include a small gif/jpeg of your boundary shape in your next post.
John.
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
Hi John,
Thanks for your information! I forget to mention that every time I launch seagrid, some warnings appear:
>> seagrid
??? SWITCH expression must be a scalar or string constant.
Error in ==> C:\MATLAB6p1\toolbox\seagrid\@seagrid\doticks.m
On line 78 ==> switch lower(theMapUnits)
Error in ==> C:\MATLAB6p1\toolbox\seagrid\@seagrid\doevent.m
On line 403 ==> doticks(self)
Error in ==> C:\MATLAB6p1\toolbox\seagrid\presto\psevent.m
On line 25 ==> doevent(ps(gcbf), theEvent, theMessage);
??? Error using ==> set
Error while evaluating figure ResizeFcn.
I haven't figured out how to modify this, and I don't know if the problem is also related to this error.
My domain is almost a rectangle, the aspect ratio is about 1:2.3
I could successfully generate grid with the following dimension:
300*150, 300*100
300*160, 400*100
300*200
but the "tracking error" occurs when I try to make grid with:
350*160 , 400*120, 320*200
and " Segmentation violation detected" when I try to make grid:
500*100, 380*150
I wonder if we want to get good grid, we'd better set the number of the grid points on each side of the boundary proportional to aspect ratio of the boundary, i.e. each grid cell is more like a square rather than a rectangle.
Thanks for your help!
Barbara
Thanks for your information! I forget to mention that every time I launch seagrid, some warnings appear:
>> seagrid
??? SWITCH expression must be a scalar or string constant.
Error in ==> C:\MATLAB6p1\toolbox\seagrid\@seagrid\doticks.m
On line 78 ==> switch lower(theMapUnits)
Error in ==> C:\MATLAB6p1\toolbox\seagrid\@seagrid\doevent.m
On line 403 ==> doticks(self)
Error in ==> C:\MATLAB6p1\toolbox\seagrid\presto\psevent.m
On line 25 ==> doevent(ps(gcbf), theEvent, theMessage);
??? Error using ==> set
Error while evaluating figure ResizeFcn.
I haven't figured out how to modify this, and I don't know if the problem is also related to this error.
My domain is almost a rectangle, the aspect ratio is about 1:2.3
I could successfully generate grid with the following dimension:
300*150, 300*100
300*160, 400*100
300*200
but the "tracking error" occurs when I try to make grid with:
350*160 , 400*120, 320*200
and " Segmentation violation detected" when I try to make grid:
500*100, 380*150
I wonder if we want to get good grid, we'd better set the number of the grid points on each side of the boundary proportional to aspect ratio of the boundary, i.e. each grid cell is more like a square rather than a rectangle.
Thanks for your help!
Barbara
-
- Posts: 81
- Joined: Thu Dec 07, 2006 3:14 pm
- Location: USGS
- Contact:
Seagrid vs Gridgen
Dear all,
I am planning to model the entire Georgia and SC coast in detail. I used Seagrid for a few small areas I studied on, but I thought Gridgen might be a better option since it had more flexibility. I have read the bulletin board, but I am still unclear about following things:
1. is it possible to define more than 4 corners with gridgen and use the grid in ROMS?
2. If using only 4 corners, what advantage does Gridgen have over Seagrid? -In that case at least Seagrid seems to be more userfriendly to me.
Thank you very much for your comments in advance.
I am planning to model the entire Georgia and SC coast in detail. I used Seagrid for a few small areas I studied on, but I thought Gridgen might be a better option since it had more flexibility. I have read the bulletin board, but I am still unclear about following things:
1. is it possible to define more than 4 corners with gridgen and use the grid in ROMS?
2. If using only 4 corners, what advantage does Gridgen have over Seagrid? -In that case at least Seagrid seems to be more userfriendly to me.
Thank you very much for your comments in advance.
Last edited by nacholibre on Tue May 19, 2015 7:06 pm, edited 2 times in total.
I have a matlab code that calls gridgen and allows you to specify multiple points along each edge, and to specify (roughly) a spatially variable resolution within the model domain. It works well for me, and is reasonably well documented.
One caution, however -- if you have a very high-resolution coast with many twists and turns, you are more likely to have success by creating a grid that only roughly follows the coast, and then using land masking to get the exact coastline. Sharp changes in the coastline angle, along with the orthogonality constraints on the model grid, tend to cause un-helpful changes in model resolution and numerical errors near points and bays.
I can post the code for using grid friday afternoon on this forum, but am busy before then writing exams and with the end of term. You can try the codes I have already mentioned in this thread, or try Rob Hetland's python versions.
Cheers,
Jamie Pringle
One caution, however -- if you have a very high-resolution coast with many twists and turns, you are more likely to have success by creating a grid that only roughly follows the coast, and then using land masking to get the exact coastline. Sharp changes in the coastline angle, along with the orthogonality constraints on the model grid, tend to cause un-helpful changes in model resolution and numerical errors near points and bays.
I can post the code for using grid friday afternoon on this forum, but am busy before then writing exams and with the end of term. You can try the codes I have already mentioned in this thread, or try Rob Hetland's python versions.
Cheers,
Jamie Pringle
-
- Posts: 81
- Joined: Thu Dec 07, 2006 3:14 pm
- Location: USGS
- Contact:
how to increase the gridsize in seagrid
Hello,rsignell wrote:Barbara,
I increased the size to 1200x1200 and recompiled. If you replace your win32 mex files with these, does it work?
http://stellwagen.er.usgs.gov/rps/share ... d_mex2.zip
-Rich
I am having a similar problem to what Barbara had. I would like to increase the grid size (say 400x400). I increased the number in mexinside.c and compiled it. However, It still does not work. When I use the make_seagrid_mex.m I get error messages for the line
mex -v mexrect.F
It seems like my fortran compiler is not correctly installed or not the correct type? Because I get the following error messages:
Thank you for any help.
Zafer
lcc preprocessor error: mexrect.F:1 Could not find include file <fintrf>
lcc preprocessor error: mexrect.F:4 Unterminated string or char const
lcc preprocessor error: mexrect.F:5 Unterminated string or char const
Error mexrect.F: 2 syntax error; found `c' expecting `;'
Error mexrect.F: 2 syntax error; found `mex' expecting `;'
Error mexrect.F: 2 syntax error; found `routine' expecting `;'
Error mexrect.F: 2 syntax error; found `implementing' expecting `;'
Error mexrect.F: 2 syntax error; found `rect' expecting `;'
Error mexrect.F: 2 syntax error; found `.' expecting `;'
Error mexrect.F: 2 skipping `.'
Error mexrect.F: 2 syntax error; found `as' expecting `;'
Error mexrect.F: 2 syntax error; found `taken' expecting `;'
Error mexrect.F: 2 syntax error; found `from' expecting `;'
Error mexrect.F: 2 syntax error; found `Ives' expecting `;'
Error mexrect.F: 2 syntax error; found `.' expecting `;'
Error mexrect.F: 2 skipping `.'
Error mexrect.F: 2 syntax error; found `.' expecting `;'
Error mexrect.F: 2 skipping `.'
Error mexrect.F: 3 syntax error; found `c' expecting `;'
Error mexrect.F: 3 syntax error; found `R' expecting `;'
Error mexrect.F: 3 too many errors
Nacholibre,
I don't know what you are doing wrong, but I hope this will help. This is the output from a successful compilation of the seagrid mex files I just performed on my RHEL4 Linux system on Intel32 with Matlab 7.2. The compilers are just gcc and g77. I'm including the verbose output only for the compilation of "mexsepeli", as the others are similar.
I don't know what you are doing wrong, but I hope this will help. This is the output from a successful compilation of the seagrid mex files I just performed on my RHEL4 Linux system on Intel32 with Matlab 7.2. The compilers are just gcc and g77. I'm including the verbose output only for the compilation of "mexsepeli", as the others are similar.
Code: Select all
>> mex mexinside.c
>> mex mexrect.F
>> mex -v -I. mexsepeli.F % include the local directory so mexsepeli.inc is found
-> mexopts.sh sourced from directory (DIR = $HOME/.matlab/$REL_VERSION)
FILE = /home/rsignell/.matlab/R2006a/mexopts.sh
----------------------------------------------------------------
-> MATLAB = /usr/local/matlab7.2
-> CC = gcc
-> CC flags:
CFLAGS = -fPIC -ansi -D_GNU_SOURCE -pthread -fexceptions -m32
CDEBUGFLAGS = -g
COPTIMFLAGS = -O -DNDEBUG
CLIBS = -Wl,-rpath-link,/usr/local/matlab7.2/bin/glnx86 -L/usr/local/matlab7.2/bin/glnx86 -lmx -lmex -lmat -lm -lstdc++
arguments =
-> CXX = g++
-> CXX flags:
CXXFLAGS = -fPIC -ansi -D_GNU_SOURCE -pthread
CXXDEBUGFLAGS = -g
CXXOPTIMFLAGS = -O -DNDEBUG
CXXLIBS = -Wl,-rpath-link,/usr/local/matlab7.2/bin/glnx86 -L/usr/local/matlab7.2/bin/glnx86 -lmx -lmex -lmat -lm
arguments =
-> FC = g77
-> FC flags:
FFLAGS = -fPIC -fexceptions
FDEBUGFLAGS = -g
FOPTIMFLAGS = -O
FLIBS = -Wl,-rpath-link,/usr/local/matlab7.2/bin/glnx86 -L/usr/local/matlab7.2/bin/glnx86 -lmx -lmex -lmat -lm -lstdc++
arguments =
-> LD = g77
-> Link flags:
LDFLAGS = -pthread -shared -m32 -Wl,--version-script,/usr/local/matlab7.2/extern/lib/glnx86/fexport.map
LDDEBUGFLAGS = -g
LDOPTIMFLAGS = -O
LDEXTENSION = .mexglx
arguments =
-> LDCXX =
-> Link flags:
LDCXXFLAGS =
LDCXXDEBUGFLAGS =
LDCXXOPTIMFLAGS =
LDCXXEXTENSION =
arguments =
----------------------------------------------------------------
-> g77 -c -I. -I/usr/local/matlab7.2/extern/include -fPIC -fexceptions -O mexsepeli.F
-> g77 -O -pthread -shared -m32 -Wl,--version-script,/usr/local/matlab7.2/extern/lib/glnx86/fexport.map -o mexsepeli.mexglx mexsepeli.o /usr/local/matlab7.2/extern/lib/glnx86/version4.o -Wl,-rpath-link,/usr/local/matlab7.2/bin/glnx86 -L/usr/local/matlab7.2/bin/glnx86 -lmx -lmex -lmat -lm -lstdc++
>>
-
- Posts: 81
- Joined: Thu Dec 07, 2006 3:14 pm
- Location: USGS
- Contact:
segmentation violation problem resolved - seagrid
Thank you very much for the quick reply. I just realized that there are actually two different addresses for Seagrid.
http://woodshole.er.usgs.gov/operations ... index.html
and
http://woodshole.er.usgs.gov/operations ... agrid.html
I downloaded Seagrid again and used the specific folder for the versions that I am using. Thank you for increasing the dimensions to 1200x1200 already. I did not need to compile.
Thank you very much again.
zafer
http://woodshole.er.usgs.gov/operations ... index.html
and
http://woodshole.er.usgs.gov/operations ... agrid.html
I downloaded Seagrid again and used the specific folder for the versions that I am using. Thank you for increasing the dimensions to 1200x1200 already. I did not need to compile.
Thank you very much again.
zafer
I'am using seagrid with Matlab 7 in windows environment with cygwin. I downloaded mexnc.R14sp3-2.0.29-3.tar.gz, netcdf-3.6.2. and netcdf_toolbox-1.0.12.tar.gz. All the seagrid test's are fine and seems to work all cool, but when I try to convert a seagrid file to NetCDF using the function seagrid2roms I get this error
for more information about installation, my configuration as follows
Can anyone help me?
Rouf
>> seagrid2roms
## SeaGrid Source File : C:\matlab[1]\matlab\genga.mat
## ROMS Destination File: C:\Documents and Settings\Muhammad Abdur Rouf\Desktop\roms_grd.nc
??? Undefined function or variable "fcn".
Error in ==> ncmex at 108
[varargout{:}] = feval(fcn, varargin{:});
Error in ==> netcdf.create at 13
[theNCid, status] = ncmex('create', name(self), thePermission);
Error in ==> netcdf.netcdf at 428
result = create(result, thePermission);
Error in ==> seagrid2roms at 142
nc = netcdf(theRomsFile, 'clobber');
for more information about installation, my configuration as follows
I went through this thread and get lost.>> which('mexnc','-all')
C:\Program Files\MATLAB71\bin\win32\mexnc.mexw32
C:\Program Files\MATLAB71\bin\mexnc.mexw32 % Shadowed
C:\Program Files\mexnc\mexnc.mexw32 % Shadowed
>> which('netcdf','-all')
C:\Program Files\MATLAB71\toolbox\netcdf_toolbox\netcdf\@netcdf\netcdf.m % netcdf constructor
C:\matlab[1]\matlab\netcdf\@netcdf\netcdf.m % Shadowed netcdf constructor
C:\Program Files\MATLAB71\bin\win32\netcdf.dll % Shadowed
C:\Program Files\MATLAB71\bin\netcdf.dll % Shadowed
C:\Program Files\mexnc\win32\netcdf.dll % Shadowed
>> mexnc('strerror',0)
ans =
No error
Can anyone help me?
Rouf
Dear Rsignell,
Thanks for informing the way of seagrid2roms calling arguments. Actually, I am confused about the placement of netcdf.dll, mex files and NetCDF toolbox directories that gives the above errors. But now, I follow your following placement order.
Rsignell mentioned on MexNC, NetCDF and Matlab? Under Roms Problem thread
I also avoid downloading NetCDF Toolbox separately from http://mexcdf.sourceforge.net as I found all that toolbox directories are included on matlab directory under ROMS processing package.
Am i right upto that?
Now Matlab can create nc file from seagrid file but still the matlab script showing following errors. Should I be worried about this error. If these are important pls suggest me how to solve the errors.
Rouf
Thanks for informing the way of seagrid2roms calling arguments. Actually, I am confused about the placement of netcdf.dll, mex files and NetCDF toolbox directories that gives the above errors. But now, I follow your following placement order.
Rsignell mentioned on MexNC, NetCDF and Matlab? Under Roms Problem thread
In that case, after installing mexnc, I cut (instead of copy as mentioned in point 6 of the tutorial: Installing MEXNC, SNCTOOLS and ROMS-Matlab-toolkit, Roms tutorials) the netcdf.dll and pest to Windows system path. So that netcdf.dll will not be anyway on matlab path.seagrid2roms uses the NetCDF Toolbox, which in turn uses mexnc. It works fine on win32 with any version of matlab, but you need to get the right mexnc mex file. Then you just need:
The mex file in a directory that is in your Matlab path
The netcdf.dll in a directory that is in your Windows system path
The NetCDF toolbox directories (netcdf, netcdf\nctype, and netcdf\ncutility) in your Matlab path
I also avoid downloading NetCDF Toolbox separately from http://mexcdf.sourceforge.net as I found all that toolbox directories are included on matlab directory under ROMS processing package.
Am i right upto that?
Now Matlab can create nc file from seagrid file but still the matlab script showing following errors. Should I be worried about this error. If these are important pls suggest me how to solve the errors.
## SeaGrid Source File : C:\matlab[1]\matlab\genga.mat
## ROMS Destination File: C:\matlab[1]\matlab\roms_grd.nc
## Defining Global Attributes...
## Defining Dimensions...
## Defining Variables and Attributes...
## Filling Variables...
??? varput1: cannot have empty set in input position 4.
Error in ==> mexcdf53 at 9
[varargout{:}] = feval('mexnc', varargin{:});
Error in ==> ncmex at 139
[varargout{:}] = feval(fcn, varargin{:});
Error in ==> ncvar.subsasgn at 244
status = ncmex('varput1', ncid(self), varid(self), ...
Error in ==> netcdf.subsasgn at 83
result = subsasgn(v, s, other);
Error in ==> seagrid2roms at 442
nc{'spherical'} = 'T'; % T or F -- uppercase okay?
Rouf
I'm not sure if this is the problem, but I recommend going torouf wrote: I also avoid downloading NetCDF Toolbox separately from http://mexcdf.sourceforge.net as I found all that toolbox directories are included on matlab directory under ROMS processing package.
http://mexcdf.sourceforge.net/
and getting the latest mexnc and NetCDF toolbox, and then see if you still have the problem. You can test the NetCDF toolbox by typing "tnetcdf" at the Matlab prompt.
Dear rouf,
I had similar problem using some scripts of the matlab folder. I founded that the scripts are written for the Matlab version number 6,5, and 4, while I'was using the 7 one.
I solved my problems correcting the ncmex.m and mexcdf.m files in the folders:
my_path/matlab/netcdf/ncutility
and
my_path/matlab/mexcdf5
with the actual version of Matlab, which I got typing "version" in the Matlab prompt. In my case the correction results:
I hope it can help you.
Cheers Arianna
I had similar problem using some scripts of the matlab folder. I founded that the scripts are written for the Matlab version number 6,5, and 4, while I'was using the 7 one.
I solved my problems correcting the ncmex.m and mexcdf.m files in the folders:
my_path/matlab/netcdf/ncutility
and
my_path/matlab/mexcdf5
with the actual version of Matlab, which I got typing "version" in the Matlab prompt. In my case the correction results:
I set fnc ='mexnc' istead of 'mexcdf53' because of the version I dowloded from the site http://mexcdf.sourceforge.net/ for Windows and Matlab 7 release 14.% Mex-file gateway.
if version(1) == '7.0.0.19920 (R14)'
fcn = 'mexnc'; % Matlab-7.
elseif version(1) == '4'
fcn = 'mexcdf4'; % Matlab-4 only.
else
error(' ## Unrecognized Matlab version.')
end
I hope it can help you.
Cheers Arianna
Dear Arianna,
I solve the problem in different way. I went to http://mexcdf.sourceforge.net/
and download the latest mexnc and NetCDF toolbox, as Rsignell suggest.
After that, I rearrange my Matlab path. I keep the NetCDF toolbox above the matalb supported netcdf files on Matlab path. Now there is no error when i convert seagrid file to .nc file.
I also test the NetCDF toolbox by typing "tnetcdf" at the Matlab prompt. It seems work and showed netcdf browser.
Thanks rsignell and Arianna.
Rouf
I solve the problem in different way. I went to http://mexcdf.sourceforge.net/
and download the latest mexnc and NetCDF toolbox, as Rsignell suggest.
After that, I rearrange my Matlab path. I keep the NetCDF toolbox above the matalb supported netcdf files on Matlab path. Now there is no error when i convert seagrid file to .nc file.
I also test the NetCDF toolbox by typing "tnetcdf" at the Matlab prompt. It seems work and showed netcdf browser.
Thanks rsignell and Arianna.
Rouf
-
- Posts: 81
- Joined: Thu Dec 07, 2006 3:14 pm
- Location: USGS
- Contact:
Seagrid
Is it possible to have seagrid handle a much larger grid like 2000x2000? The latest version I got from the web page gives the following error whenever I try to create a grid with any dimension larger than 1000. Would it require a recompile again?.rsignell wrote: I increased the size to 1200x1200 and recompiled. If you replace your win32 mex files with these, does it work?
http://stellwagen.er.usgs.gov/rps/share ... d_mex2.zip
-Rich
Thank you,
Zafer
Code: Select all
??? Error using ==> mexsepeli
work space length input in w(1) is not right
Error in ==> mexrect2grid at 206
[u, v] = feval('mexsepeli', u, v, l2, m2, seta, sxi);
Re: Grid generation
Yes, you can recompile it using a larger dimension. Or even better, you could rewrite it to use dynamic memory allocation so people wouldn't have to do this in the future!
-Rich
-Rich
-
- Posts: 81
- Joined: Thu Dec 07, 2006 3:14 pm
- Location: USGS
- Contact:
Re: Grid generation
I have never done it before, so I would be happy if you could please direct me in the correct direction. I am assuming that I will be changing a few parameters in fortran codes and compiling them. Or is it maybe more tedious than that??rsignell wrote:Yes, you can recompile it using a larger dimension. Or even better, you could rewrite it to use dynamic memory allocation so people wouldn't have to do this in the future!
-Rich
Thanks
Last edited by nacholibre on Fri Aug 28, 2009 3:22 pm, edited 1 time in total.
Re: Grid generation
Yes, the easy way is just increase the array sizes in mexsepeli.inc and recreate the mex file. You might also have to increase the array sizes in mexrect.F (e.g. global replacement of 40000 to 80000 or whatever).
The better way would be to make these allocate memory dynamically, but that would require a fair bit more time and energy.
-Rich
The better way would be to make these allocate memory dynamically, but that would require a fair bit more time and energy.
-Rich
-
- Posts: 81
- Joined: Thu Dec 07, 2006 3:14 pm
- Location: USGS
- Contact:
Re: Grid generation
Got it
It took more than I thought (getting the Fortran compiler, version problems, manually editing the batch files... etc.), but finally I got it to work! I will be more than happy to help if anybody else ever has a similar problem in the future.
Thanks a lot,
Zafer
It took more than I thought (getting the Fortran compiler, version problems, manually editing the batch files... etc.), but finally I got it to work! I will be more than happy to help if anybody else ever has a similar problem in the future.
Thanks a lot,
Zafer
Re: Grid generation
Congrats! While it's fresh in your mind, it would be great if you would make a few notes on the problems you encountered and how you solved them. I'd be happy to add them to the WikiROMS section on grid generation.
-Rich
-Rich
- arango
- Site Admin
- Posts: 1367
- Joined: Wed Feb 26, 2003 4:41 pm
- Location: DMCS, Rutgers University
- Contact:
Re: Grid generation
I should look that program so we can use dynamic allocation of all the arrays needed to build the grid. It is really silly that we need to edit these files. We just use a F90 compiler. Dynamic allocation is really trivial:
Code: Select all
real, allocatable :: A2d(:,:)
...
IF (.not.ALLOCATED(A2d)) THEN
allocate ( A2d(Im,Jm) )
END IF
...
Re: Grid generation
That would be great! I'm sure if you took a look you would find a few other things worth fixing up, and it's only two little routines...
-
- Posts: 81
- Joined: Thu Dec 07, 2006 3:14 pm
- Location: USGS
- Contact:
Re: Grid generation
I followed the instructions in the readme.txt file in the downloaded seagrid package. The problem was getting the fortran compiler. I used Intel Fortran 11 instead of 9.1. That required me to change some of the lines in the batch files manually. However, there are still some issues.rsignell wrote:Congrats! While it's fresh in your mind, it would be great if you would make a few notes on the problems you encountered and how you solved them. I'd be happy to add them to the WikiROMS section on grid generation.
-Rich
1. Although it is set to NX=1200, NY=1200 I can still compile grid sizes upto 1000x1000 (whereas it should be limited to 600x600 according to the instructions).
2. If I can't create the grid due to workspace being too small, increasing NX, NY solves the problem. But then I get an out of memory error when I try to compute the masking.
3. Increasing the size of Z, R, and N in mexrect.F doesn't seem to help at all. I get a segmentation error if they are too small, but it seems to be working fine as it is.
4. Well, here is the most interesting part:
Once you exclude the path to mex files it is possible to create very large grids. However, I have found out that the grid is likely to be erroneous in that case. Seagrid does a check in the beginning to include mex files, but there is no warning about the possibility of generated grids being erroneous without them
The error is more apparent for a more curvilinear grid.
Zafer
Last edited by nacholibre on Tue Sep 03, 2013 9:24 pm, edited 2 times in total.
Re: Grid generation
I just did a re-write of seagrid2roms.m using Matlab 7.7+ built-in netcdf library. This version has no dependence on the netcdf_toolbox. If anyone's interested in helping me to test the code for various scenarios to shake out the bugs, please let me know.
Cheers,
Donglai
Cheers,
Donglai
Re:
I want to learn how to use the 'gridgen',so I click the connection "http://www.marine.csiro.au/~sakov/ ",but it didn't go to the right page,maybe the address had changed,so could sb tell me where i can find the page which kawase wanted to show?Thank u very much!kawase wrote:Grid generation is definitely important to many of us working in regional applications, and is often the most time-consuming part of the model setup. I'm sure the ROMS community wants an effective curvilinear grid generator.
We've come across "gridgen": http://www.marine.csiro.au/~sakov/
I haven't used this myself but Dmitri Leonov, post-doc working for us, has generated a high-res grid for Puget Sound using this package for use with MITgcm.
Mitsuhiro.
Re: Grid generation
Pavel moved to Norway, and his web site was taken down by CSIRO. You can find his codes here:
http://code.google.com/p/octant/source/ ... ant/extern
Get it with a command like this:
svn checkout http://octant.googlecode.com/svn/trunk/octant/extern sakov
-Rob
http://code.google.com/p/octant/source/ ... ant/extern
Get it with a command like this:
svn checkout http://octant.googlecode.com/svn/trunk/octant/extern sakov
-Rob
Re: Grid generation
gridgen is now hosted on Google Code: http://code.google.com/p/gridgen-c. To checkout, run:
svn checkout https://gridgen-c.googlecode.com/svn/gridgen
-Pavel
svn checkout https://gridgen-c.googlecode.com/svn/gridgen
-Pavel
Re: Grid generation
A correction: "http" without "s":sak007 wrote:gridgen is now hosted on Google Code: http://code.google.com/p/gridgen-c. To checkout, run:
svn checkout https://gridgen-c.googlecode.com/svn/gridgen
-Pavel
svn checkout http://gridgen-c.googlecode.com/svn/gridgen