problem with pyroms.grid.Gridgen
-
- Posts: 43
- Joined: Wed Nov 30, 2016 11:18 pm
- Location: University of Massachusetts Dartmouth
problem with pyroms.grid.Gridgen
Hi all,
I recently joined the ROMS community and started working with the ROMS model as part of my postdoctoral work. Currently I am trying to setup the grid for my simulations using pyroms, bathy_smoother and pyroms_toolbox. I'm running python2.7 with anaconda2 on Ubuntu 16.04.
I have installed the three pyroms packages using the setup.py files following the instructions on github, into this path: /home/sonaljit/anaconda2/lib/python2.7/site-packages/
Now, when I run a simple test-code that generates a grid using the routine pyroms.grid.Gridgen, it gives me an error message that says:
File "/home/sonaljit/anaconda2/lib/python2.7/site-packages/numpy/ctypeslib.py", line 155, in load_library
raise OSError("no file with expected extension")
OSError: no file with expected extension
Exception AttributeError: "'Gridgen' object has no attribute '_libgridgen'" in <bound method Gridgen.__del__ of <pyroms.hgrid.Gridgen object at 0x7f950b149790>> ignored
I think the code is looking for the file libgridgen.so in the path "~/anaconda2/lib/python2.7/site-packages/pyroms/". I checked in the path and there is no such .so file available there. There are some .so files in other folders like site-packages/bathy_smoother/ and site-packages/pyroms_toolsbox/, but none within pyroms/
Can anyone suggest how to fix this problem? Probably libgridgen.so was not created during the installation. Is there a way libgridgen.so could be generated?
Thanks,
Sonaljit.
I recently joined the ROMS community and started working with the ROMS model as part of my postdoctoral work. Currently I am trying to setup the grid for my simulations using pyroms, bathy_smoother and pyroms_toolbox. I'm running python2.7 with anaconda2 on Ubuntu 16.04.
I have installed the three pyroms packages using the setup.py files following the instructions on github, into this path: /home/sonaljit/anaconda2/lib/python2.7/site-packages/
Now, when I run a simple test-code that generates a grid using the routine pyroms.grid.Gridgen, it gives me an error message that says:
File "/home/sonaljit/anaconda2/lib/python2.7/site-packages/numpy/ctypeslib.py", line 155, in load_library
raise OSError("no file with expected extension")
OSError: no file with expected extension
Exception AttributeError: "'Gridgen' object has no attribute '_libgridgen'" in <bound method Gridgen.__del__ of <pyroms.hgrid.Gridgen object at 0x7f950b149790>> ignored
I think the code is looking for the file libgridgen.so in the path "~/anaconda2/lib/python2.7/site-packages/pyroms/". I checked in the path and there is no such .so file available there. There are some .so files in other folders like site-packages/bathy_smoother/ and site-packages/pyroms_toolsbox/, but none within pyroms/
Can anyone suggest how to fix this problem? Probably libgridgen.so was not created during the installation. Is there a way libgridgen.so could be generated?
Thanks,
Sonaljit.
Re: problem with pyroms.grid.Gridgen
You can go into the pyroms/pyroms directory and look at the install_pyroms.sh script there. What you can do is cut and paste from this script into a terminal running a bash shell. The gridgen part is this:
Be sure to set DESTDIR and CURDIR first. One benefit to doing it this way is to watch for errors as you go. If the PYROMS_PATH thing doesn't work, you will know.
Code: Select all
echo "installing gridgen..."
cd $CURDIR/external/nn
./configure --prefix=$DESTDIR
make install
cd $CURDIR/external/csa
./configure --prefix=$DESTDIR
make install
cd $CURDIR/external/gridutils
./configure --prefix=$DESTDIR
make install
cd $CURDIR/external/gridgen
./configure --prefix=$DESTDIR
make
make lib
make shlib
make install
PYROMS_PATH=`python -c 'import pyroms ; print pyroms.__path__[0]'`
cp libgridgen.so $PYROMS_PATH
#cp $LOCALDIR/lib/libgridgen.so $PYROMS_PATH
-
- Posts: 43
- Joined: Wed Nov 30, 2016 11:18 pm
- Location: University of Massachusetts Dartmouth
Re: problem with pyroms.grid.Gridgen
Thanks Kate. The error seems to have gone; the Gridgen code is compiling.
I'm facing another problem. Even though this is not interfering with Gridgen, but it says 'scrip.so missing. Remapping function will not be available'
Looks like I could not get the scrip.so file installed. I tried running the instructions given in install_pyroms.sh for scrip. The error I'm getting is related to netcdf: undefined reference to `nf_open_'. The source files remap_write.f and grids.f (in the scrips folder) are giving me this error during compilation.
I think it is unable to locate the netcdf routines in my system. I provided the paths to the netcdf lib. and inc. files in the makefile (and makefile2) in the following manner:
LIBDIR=/home/sonaljit/.local/lib
INCDIR=/home/sonaljit/.local/include
F2PY_LIB = -L${LIBDIR} -lnetcdff -lhdf5 -lhdf5_hl
However, it is still giving the above error. Probably I'm doing something wrong here. Any suggestions?
Sonaljit.
I'm facing another problem. Even though this is not interfering with Gridgen, but it says 'scrip.so missing. Remapping function will not be available'
Looks like I could not get the scrip.so file installed. I tried running the instructions given in install_pyroms.sh for scrip. The error I'm getting is related to netcdf: undefined reference to `nf_open_'. The source files remap_write.f and grids.f (in the scrips folder) are giving me this error during compilation.
I think it is unable to locate the netcdf routines in my system. I provided the paths to the netcdf lib. and inc. files in the makefile (and makefile2) in the following manner:
LIBDIR=/home/sonaljit/.local/lib
INCDIR=/home/sonaljit/.local/include
F2PY_LIB = -L${LIBDIR} -lnetcdff -lhdf5 -lhdf5_hl
However, it is still giving the above error. Probably I'm doing something wrong here. Any suggestions?
Sonaljit.
Re: problem with pyroms.grid.Gridgen
You should have -lnetcdf in there as well. In fact, "nc-config --flibs" or "nf-config --flibs" tells you what all is needed on your system.
-
- Posts: 43
- Joined: Wed Nov 30, 2016 11:18 pm
- Location: University of Massachusetts Dartmouth
Re: problem with pyroms.grid.Gridgen
Hello,
The netcdf issue got solved; I re-installed netcdf and provided the correct path to -lnetcdf in the makefile. The command make -f makefile2 (in the makefile) is working. Thank you Kate.
Following that - I'm facing another error while compiling pyscrip.f90 (the command make -f makefile2 f2py ). The code in the makefile linked with this command is:
$(F2PY) --fcompiler=gnu95 --f90flags=$(F2PY_F90_FLAG) \
$(F2PY_LIB) $(F2PY_INCLUDE) -m scrip \
-c $(OBJF2PY) pyscrip.f90
I changed gnu95 to gfortran and provided the appropriate library paths to it. The error I am getting is:
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status
Any suggestions?
The netcdf issue got solved; I re-installed netcdf and provided the correct path to -lnetcdf in the makefile. The command make -f makefile2 (in the makefile) is working. Thank you Kate.
Following that - I'm facing another error while compiling pyscrip.f90 (the command make -f makefile2 f2py ). The code in the makefile linked with this command is:
$(F2PY) --fcompiler=gnu95 --f90flags=$(F2PY_F90_FLAG) \
$(F2PY_LIB) $(F2PY_INCLUDE) -m scrip \
-c $(OBJF2PY) pyscrip.f90
I changed gnu95 to gfortran and provided the appropriate library paths to it. The error I am getting is:
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status
Any suggestions?
Re: problem with pyroms.grid.Gridgen
Did you try it with gnu95 instead of gfortran? That's what I use for gfortran.
-
- Posts: 43
- Joined: Wed Nov 30, 2016 11:18 pm
- Location: University of Massachusetts Dartmouth
Re: problem with pyroms.grid.Gridgen
Hello,
After a few modifications, the pyroms code got installed in my system. I was having problems with the module scrip, and with the compilers gfortran and f2py for linking with netcdf. I will explain the solutions below (in case anyone faces these problems during installation).
netcdf: For installing the scrip module using gfortran, the source files grids.f, netcdf.f, remap_write.f and remap_read.f require linking with the netcdf libraries since they contain netcdf routines. The command for compilation of remap_write, as given in the makefile, is:
remap_write.o: $(SRCDIR)/remap_write.f kinds_mod.o constants.o \
netcdf.o remap_vars.o grids.o
$(COMPILE) $(FLAGS) $(INCLUDE) -c $(SRCDIR)/remap_write.f
This instruction isn't having the netcdf library linked to it, so I provided the netcdf link as below:
NETCDFLIB = -L/home/sonaljit/anaconda2/lib -lnetcdf
$(COMPILE) $(FLAGS) $(INCLUDE) -c $(SRCDIR)/remap_write.f $(NETCDFLIB)
and it worked. Likewise, I did it for the instructions for compiling grids.f, remap_read.f and netcdf.f in the makefile.
$(COMPILE) $(FLAGS) $(INCLUDE) -c $(SRCDIR)/netcdf.f $(NETCDFLIB)
$(COMPILE) $(FLAGS) $(INCLUDE) -c $(SRCDIR)/remap_write.f $(NETCDFLIB)
$(COMPILE) $(FLAGS) $(INCLUDE) -c $(SRCDIR)/remap_read.f $(NETCDFLIB)
$(COMPILE) $(FLAGS) $(INCLUDE) -c $(SRCDIR)/grids.f $(NETCDFLIB)
The other source files do not require this modification for compiling since they aren't accessing any netcdf routines. I'm not sure if these modifications are specific to only my system, but they seem to solve the errors I was facing earlier. So, I'd recommend doing this in case anyone would face this error.
f2py: Regarding the error with the f2py instruction:
$(F2PY) --fcompiler=gfortran --f90flags=$(F2PY_F90_FLAG) \
$(F2PY_LIB) $(F2PY_INCLUDE) -m scrip \
-c $(OBJF2PY) pyscrip.f90
The problem here was, $(F2PY_LIB) was linked to the static (.a) netcdf library. However, since the above instruction creates a shared dynamic (.so) library, it will require a shared dynamic netcdf library to compile properly. In my system, the netcdf shared dynamic library is located at ~/anaconda2/lib/libnetcdff.so. The same directory also has the static library libnetcdf.a. Since -lnetcdff link wasn't provided before, f2py was having trouble accessing the static .a version. So, I was getting the error: /lib/libnetcdf.a: error adding symbols: Bad value
Again, I don't know if this is specific to only my system. But, they seem to work.
Thanks Kate.
Sonaljit.
After a few modifications, the pyroms code got installed in my system. I was having problems with the module scrip, and with the compilers gfortran and f2py for linking with netcdf. I will explain the solutions below (in case anyone faces these problems during installation).
netcdf: For installing the scrip module using gfortran, the source files grids.f, netcdf.f, remap_write.f and remap_read.f require linking with the netcdf libraries since they contain netcdf routines. The command for compilation of remap_write, as given in the makefile, is:
remap_write.o: $(SRCDIR)/remap_write.f kinds_mod.o constants.o \
netcdf.o remap_vars.o grids.o
$(COMPILE) $(FLAGS) $(INCLUDE) -c $(SRCDIR)/remap_write.f
This instruction isn't having the netcdf library linked to it, so I provided the netcdf link as below:
NETCDFLIB = -L/home/sonaljit/anaconda2/lib -lnetcdf
$(COMPILE) $(FLAGS) $(INCLUDE) -c $(SRCDIR)/remap_write.f $(NETCDFLIB)
and it worked. Likewise, I did it for the instructions for compiling grids.f, remap_read.f and netcdf.f in the makefile.
$(COMPILE) $(FLAGS) $(INCLUDE) -c $(SRCDIR)/netcdf.f $(NETCDFLIB)
$(COMPILE) $(FLAGS) $(INCLUDE) -c $(SRCDIR)/remap_write.f $(NETCDFLIB)
$(COMPILE) $(FLAGS) $(INCLUDE) -c $(SRCDIR)/remap_read.f $(NETCDFLIB)
$(COMPILE) $(FLAGS) $(INCLUDE) -c $(SRCDIR)/grids.f $(NETCDFLIB)
The other source files do not require this modification for compiling since they aren't accessing any netcdf routines. I'm not sure if these modifications are specific to only my system, but they seem to solve the errors I was facing earlier. So, I'd recommend doing this in case anyone would face this error.
f2py: Regarding the error with the f2py instruction:
$(F2PY) --fcompiler=gfortran --f90flags=$(F2PY_F90_FLAG) \
$(F2PY_LIB) $(F2PY_INCLUDE) -m scrip \
-c $(OBJF2PY) pyscrip.f90
The problem here was, $(F2PY_LIB) was linked to the static (.a) netcdf library. However, since the above instruction creates a shared dynamic (.so) library, it will require a shared dynamic netcdf library to compile properly. In my system, the netcdf shared dynamic library is located at ~/anaconda2/lib/libnetcdff.so. The same directory also has the static library libnetcdf.a. Since -lnetcdff link wasn't provided before, f2py was having trouble accessing the static .a version. So, I was getting the error: /lib/libnetcdf.a: error adding symbols: Bad value
Again, I don't know if this is specific to only my system. But, they seem to work.
Thanks Kate.
Sonaljit.
Re: problem with pyroms.grid.Gridgen
Hello dearkate wrote:You can go into the pyroms/pyroms directory and look at the install_pyroms.sh script there. What you can do is cut and paste from this script into a terminal running a bash shell. The gridgen part is this:Be sure to set DESTDIR and CURDIR first. One benefit to doing it this way is to watch for errors as you go. If the PYROMS_PATH thing doesn't work, you will know.Code: Select all
echo "installing gridgen..." cd $CURDIR/external/nn ./configure --prefix=$DESTDIR make install cd $CURDIR/external/csa ./configure --prefix=$DESTDIR make install cd $CURDIR/external/gridutils ./configure --prefix=$DESTDIR make install cd $CURDIR/external/gridgen ./configure --prefix=$DESTDIR make make lib make shlib make install PYROMS_PATH=`python -c 'import pyroms ; print pyroms.__path__[0]'` cp libgridgen.so $PYROMS_PATH #cp $LOCALDIR/lib/libgridgen.so $PYROMS_PATH
I have had a problem with the 'make lib' and 'make shlib' command. When I try, it alerts...
Code: Select all
make: Nothing to be done for 'lib'.
make: Nothing to be done for 'shlib'.
Code: Select all
configure: WARNING: unable to find gridnodes.h. You will not be able to compile the library function gridgen_generategrid2 (). Please modify your LD_LIBRARY_PATH and re-run this script if necessary.
configure: WARNING: unable to find library libgu; you will not be able to build the shared library
Did you or anyone know how to fix the problem?
Thanks you very much!
Re: problem with pyroms.grid.Gridgen
For generating grids, you might look into pygridtools. They seem more advanced in their Python support.