ESCOMP / mizuRoute

Reach-based river routing model
http://escomp.github.io/mizuRoute/
GNU General Public License v3.0
42 stars 52 forks source link

Error in make when I use #327

Closed shuihou closed 2 months ago

shuihou commented 1 year ago

Hello, I am a student at the University of the Sea and I am currently using the VIC model and have used the confluence model you posted. I'm having trouble installing mizoRoute, I use the make command in the build folder: e.f90 /mnt/d/AAA_WORK/mizoRoute/mizuRoute-main/mizuRoute-main/routebuild/src/nr_utility.f90 /mnt/d/AAA_WORK/mizoRoute/mizuRoute-main/mizuRoute-main/routebuild/src/ascii_util.f90 /mnt/d/AAA_WORK/mizoRoute/mizuRoute-main/mizuRoute-main/routebuild/src/ncio_utils.f90 /mnt/d/AAA_WORK/mizoRoute/mizuRoute-main/mizuRoute-main/routebuild/src/gamma_func.f90 /mnt/d/AAA_WORK/mizoRoute/mizuRoute-main/mizuRoute-main/routebuild/src/public_var.f90 /mnt/d/AAA_WORK/mizoRoute/mizuRoute-main/mizuRoute-main/routebuild/src/dataTypes.f90 /mnt/d/AAA_WORK/mizoRoute/mizuRoute-main/mizuRoute-main/routebuild/src/var_lookup.f90 /mnt/d/AAA_WORK/mizoRoute/mizuRoute-main/mizuRoute-main/routebuild/src/time_utils.f90 /mnt/d/AAA_WORK/mizoRoute/mizuRoute-main/mizuRoute-main/routebuild/src/datetime_data.f90 /mnt/d/AAA_WORK/mizoRoute/mizuRoute-main/mizuRoute-main/routebuild/src/globalData.f90 /mnt/d/AAA_WORK/mizoRoute/mizuRoute-main/mizuRoute-main/routebuild/src/popMetadat.f90 /mnt/d/AAA_WORK/mizoRoute/mizuRoute-main/mizuRoute-main/routebuild/src/allocation.f90 /mnt/d/AAA_WORK/mizoRoute/mizuRoute-main/mizuRoute-main/routebuild/src/network_topo.f90 /mnt/d/AAA_WORK/mizoRoute/mizuRoute-main/mizuRoute-main/routebuild/src/process_param.f90 /mnt/d/AAA_WORK/mizoRoute/mizuRoute-main/mizuRoute-main/routebuild/src/process_ntopo.f90 /mnt/d/AAA_WORK/mizoRoute/mizuRoute-main/mizuRoute-main/routebuild/src/pfafstetter.f90 /mnt/d/AAA_WORK/mizoRoute/mizuRoute-main/mizuRoute-main/routebuild/src/domain_decomposition.f90 /mnt/d/AAA_WORK/mizoRoute/mizuRoute-main/mizuRoute-main/routebuild/src/remap.f90 /mnt/d/AAA_WORK/mizoRoute/mizuRoute-main/mizuRoute-main/routebuild/src/read_control.f90 /mnt/d/AAA_WORK/mizoRoute/mizuRoute-main/mizuRoute-main/routebuild/src/read_param.f90 /mnt/d/AAA_WORK/mizoRoute/mizuRoute-main/mizuRoute-main/routebuild/src/read_streamSeg.f90 /mnt/d/AAA_WORK/mizoRoute/mizuRoute-main/mizuRoute-main/routebuild/src/write_streamSeg.f90 /mnt/d/AAA_WORK/mizoRoute/mizuRoute-main/mizuRoute-main/routebuild/src/read_runoff.f90 /mnt/d/AAA_WORK/mizoRoute/mizuRoute-main/mizuRoute-main/routebuild/src/get_basin_runoff.f90 /mnt/d/AAA_WORK/mizoRoute/mizuRoute-main/mizuRoute-main/routebuild/src/read_remap.f90 /mnt/d/AAA_WORK/mizoRoute/mizuRoute-main/mizuRoute-main/routebuild/src/read_restart.f90 /mnt/d/AAA_WORK/mizoRoute/mizuRoute-main/mizuRoute-main/routebuild/src/write_restart.f90 /mnt/d/AAA_WORK/mizoRoute/mizuRoute-main/mizuRoute-main/routebuild/src/write_simoutput.f90 /mnt/d/AAA_WORK/mizoRoute/mizuRoute-main/mizuRoute-main/routebuild/src/model_finalize.f90 /mnt/d/AAA_WORK/mizoRoute/mizuRoute-main/mizuRoute-main/routebuild/src/accum_runoff.f90 /mnt/d/AAA_WORK/mizoRoute/mizuRoute-main/mizuRoute-main/routebuild/src/basinUH.f90 /mnt/d/AAA_WORK/mizoRoute/mizuRoute-main/mizuRoute-main/routebuild/src/irf_route.f90 /mnt/d/AAA_WORK/mizoRoute/mizuRoute-main/mizuRoute-main/routebuild/src/kwt_route.f90 /mnt/d/AAA_WORK/mizoRoute/mizuRoute-main/mizuRoute-main/routebuild/src/dfw_route.f90 /mnt/d/AAA_WORK/mizoRoute/mizuRoute-main/mizuRoute-main/routebuild/src/kw_route.f90 /mnt/d/AAA_WORK/mizoRoute/mizuRoute-main/mizuRoute-main/routebuild/src/mc_route.f90 /mnt/d/AAA_WORK/mizoRoute/mizuRoute-main/mizuRoute-main/routebuild/src/main_route.f90 /mnt/d/AAA_WORK/mizoRoute/mizuRoute-main/mizuRoute-main/routebuild/src/model_setup.f90 /mnt/d/AAA_WORK/mizoRoute/mizuRoute-main/mizuRoute-main/routebuild/src/route_runoff.f90 \ -Wl,-rpath,/usr/bin/gfortran/lib -L/usr/bin/gfortran/lib -lnetcdff -lnetcdf -I/usr/bin/gfortran/include -o ./mizoRoute.exe /bin/sh: line 1: -g: command not found make: *** [Makefile:187: compile] Error 127

This is the version of gfortran I have installed. GNU Fortran (Ubuntu 9.5.0-1ubuntu1~22.04) 9.5.0 Copyright (C) 2019 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. I hope you can help me with this problem.

nmizukami commented 1 year ago

Hi, can you copy and paste the exact command you used? Also make sure you have netcdf library installed and know path to the library.

shuihou commented 1 year ago

I think it's already installed netcdf library. yongliang@LAPTOP-MG3S5MBM:/mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/mizuRoute-main/route/build$ which ncdump /usr/local/netcdf4-needed/bin/ncdump yongliang@LAPTOP-MG3S5MBM:/mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/mizuRoute-main/route/build$ ncdump ncdump [-c|-h] [-v ...] [[-b|-f] [c|f]] [-l len] [-n name] [-p n[,n]] [-k] [-x] [-s] [-t|-i] [-g ...] [-w] file [-c] Coordinate variable data and header information [-h] Header information only, no data [-v var1[,...]] Data for variable(s) ,... only [-b [c|f]] Brief annotations for C or Fortran indices in data [-f [c|f]] Full annotations for C or Fortran indices in data [-l len] Line length maximum in data section (default 80) [-n name] Name for netCDF (default derived from file name) [-p n[,n]] Display floating-point values with less precision [-k] Output kind of netCDF file [-s] Output special (virtual) attributes [-t] Output time data as date-time strings [-i] Output time data as date-time strings with ISO-8601 'T' separator [-g grp1[,...]] Data and metadata for group(s) ,... only [-w] With client-side caching of variables for DAP URLs [-x] Output XML (NcML) instead of CDL file Name of netCDF file (or URL if DAP access enabled) netcdf library version 4.3.2 of Nov 9 2022 19:31:47 $

I tried to configure the environment to solve “command not found". I have changed the following two files. I have added the following environments. bashrc and /etc/profile export NETCDF=/usr/local/netcdf4-needed export PATH=$NETCDF/bin:$PATH export LD_LIBRARY_PATH=$NETCDF/lib:$LD_LIBRARY_PATH export CPPFLAGS='-I/usr/local/netcdf4-needed/include' export LDFLAGS='-L/usr/local/netcdf4-needed/lib' source ~/.bashrc

But it is still the same problem as yesterday yongliang@LAPTOP-MG3S5MBM:/mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/mizuRoute-main/route/build$ make gnu=>gfortran -g -Wall -fmax-errors=0 -fbacktrace -fcheck=all -ffpe-trap=zero -ffree-line-length-none /mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/mizuRoute-main/route/build/src/nrtype.f90 /mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/mizuRoute-main/route/build/src/nr_utility.f90 /mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/mizuRoute-main/route/build/src/ascii_util.f90 /mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/mizuRoute-main/route/build/src/ncio_utils.f90 /mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/mizuRoute-main/route/build/src/gamma_func.f90 /mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/mizuRoute-main/route/build/src/public_var.f90 /mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/mizuRoute-main/route/build/src/dataTypes.f90 /mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/mizuRoute-main/route/build/src/var_lookup.f90 /mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/mizuRoute-main/route/build/src/time_utils.f90 /mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/mizuRoute-main/route/build/src/datetime_data.f90 /mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/mizuRoute-main/route/build/src/globalData.f90 /mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/mizuRoute-main/route/build/src/popMetadat.f90 /mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/mizuRoute-main/route/build/src/allocation.f90 /mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/mizuRoute-main/route/build/src/network_topo.f90 /mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/mizuRoute-main/route/build/src/process_param.f90 /mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/mizuRoute-main/route/build/src/process_ntopo.f90 /mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/mizuRoute-main/route/build/src/pfafstetter.f90 /mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/mizuRoute-main/route/build/src/domain_decomposition.f90 /mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/mizuRoute-main/route/build/src/remap.f90 /mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/mizuRoute-main/route/build/src/read_control.f90 /mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/mizuRoute-main/route/build/src/read_param.f90 /mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/mizuRoute-main/route/build/src/read_streamSeg.f90 /mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/mizuRoute-main/route/build/src/write_streamSeg.f90 /mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/mizuRoute-main/route/build/src/read_runoff.f90 /mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/mizuRoute-main/route/build/src/get_basin_runoff.f90 /mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/mizuRoute-main/route/build/src/read_remap.f90 /mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/mizuRoute-main/route/build/src/read_restart.f90 /mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/mizuRoute-main/route/build/src/write_restart.f90 /mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/mizuRoute-main/route/build/src/write_simoutput.f90 /mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/mizuRoute-main/route/build/src/model_finalize.f90 /mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/mizuRoute-main/route/build/src/accum_runoff.f90 /mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/mizuRoute-main/route/build/src/basinUH.f90 /mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/mizuRoute-main/route/build/src/irf_route.f90 /mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/mizuRoute-main/route/build/src/kwt_route.f90 /mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/mizuRoute-main/route/build/src/dfw_route.f90 /mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/mizuRoute-main/route/build/src/kw_route.f90 /mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/mizuRoute-main/route/build/src/mc_route.f90 /mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/mizuRoute-main/route/build/src/main_route.f90 /mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/mizuRoute-main/route/build/src/model_setup.f90 /mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/mizuRoute-main/route/build/src/route_runoff.f90 \ -Wl,-rpath,/usr/bin/gfortran/lib -L/usr/bin/gfortran/lib -lnetcdff -lnetcdf -I/usr/bin/gfortran/include -o /mizuRoute.exe /bin/sh: line 1: -g: command not found make: *** [Makefile:187: compile] Error 127

nmizukami commented 1 year ago

Hi, I am now sure that you are providing FC_EXE = gnu=>gfortran in Line 16. This should be FC_EXE = gfortran. Make sure not to include no tail white space (i.e., no space nor tab after gfortran.

I am sorry for another confusion. you might have installed already, but I meant that you will need to have netcdf fortran library- https://www.unidata.ucar.edu/software/netcdf/

shuihou commented 1 year ago

Thank you, I think I should have compiled it successfully. Thank you for your help, your enthusiasm in answering my questions promptly and efficiently. Thank you very much. Succesfully compiled Successfully installed rm -f .o rm -f .lst rm -f .mod rm -f __genmod.f90 Successfully cleaned object files yongliang@LAPTOP-MG3S5MBM:/mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/route/bin$ ls README.md mizuRoute.exe I changedFC_EXE = gnu=>gfortran to FC_EXE = gfortran and it worked

shuihou commented 1 year ago

I think,I still need your help. I tried using python's necdf4 package as well as the xrarray package to generate a simple .nc file, but it all ends up back with this error. yongliang@LAPTOP-MG3S5MBM:/mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/route/bin$ ./mizuRoute.exe /mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/route/settings/SAMPLE.control ---- read control file ---

--> /mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/route/ancillary_data/ --> /mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/route/input/ --> /mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/route/results/ --> test --> 2003-03-22 00:00:00 --> 2003-04-01 00:00:00 --> 2 --> River_network.nc --> seg --> hru --> 3 --> Runoff.nc --> runoff --> Time --> time --> RN_HRU --> mm/s --> 86400 --> F --> param.nml.default ---- calendar --- calendar will be read from Runoff.nc time_unit will be read from Runoff.nc ---- runoff unit --- runoff unit is provided as: mm/s FATAL ERROR: init_data/init_ntopo/getData/NetCDF: Unknown file format; file=/mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/route/ancillary_data/River_network.nc My .nc file ``` runoff_data = xr.Dataset( { 'Time': ('time', pd.date_range('2003-03-22', periods=10)), 'RN_hruID': ('RN_HRU', [1, 2, 3]), 'runoff': (('time', 'RN_HRU'), np.full((10, 3), 100)) }, coords= { 'time': np.arange(37702, 37712), 'RN_HRU': [1, 2, 3] }) # print(runoff_data) runoff_data.to_netcdf('Runoff.nc') river_network_data = xr.Dataset( { 'segld': ('seg', [1, 2, 3]), 'HRUid': ('hru', [1, 2, 3]), 'downSegld': ('seg', [3, 3, 0]), 'hruSegld': ('hru', [1, 2, 3]), 'area': ('hru', [100.0, 100.0, 100.0]), 'slope': ('seg', [0.5, 0.5, 0.5]), 'length': ('hru', [100, 100, 100]), }, coords= { 'seg': [1, 2, 3], 'hru': [1, 2, 3], }) # print(river_network_data['slope'].data) river_network_data.to_netcdf('River_network.nc') ``` **I don't know why I can't open them.Would you like to show me your example file? I mean these files, `runoff.RN_HRU.nc` , `ntopo_entire.nc` and `cameo_v1.2.mizuRoute.r.1950-1-1-00000.nc`, you have mentioned them at Option 1 - runoff input is given at RN_HRU. This might make my learning process easier. In any case, thank you very much for the help you have provided.**
nmizukami commented 1 year ago

Hi, Sorry for example dataset, which has been taken off from link. I will post it somewhere and let you know.

Your small dataset you created with xarray seems to be fine, but not sure why. As error message said, is it really netcdf?

You can try netcdf test first (https://github.com/ESCOMP/mizuRoute/tree/main/netcdf_test) to see if you can write and read netcdf. if not, there is something wrong with netcdf setup.

shuihou commented 1 year ago
(base) yongliang@LAPTOP-MG3S5MBM:/mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/netcdf_test$ make
gfortran -Wall -g -ffree-line-length-none -c test_netcdf.f90 -I/usr/local/netcdf4-needed/include
gfortran *.o -Wl,-rpath,/usr/local/netcdf4-needed/lib -L/usr/local/netcdf4-needed/lib -lnetcdff -lnetcdf -o test_netcdf.exe
rm -f *.o
rm -f *.mod
(base) yongliang@LAPTOP-MG3S5MBM:/mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/netcdf_test$ ./test_netcdf.exe
 FATAL ERROR: NetCDF: Unknown file format

It compiled successfully, but not run. I have tried the ncdump command and it recognises part of my nc file. There are also some that it does not recognise. The situation is as follows.

(base) yongliang@LAPTOP-MG3S5MBM:/mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/route/input$ ncdump -h CN05.1_Pre_1961_daily_025x025.nc
ncdump: CN05.1_Pre_1961_daily_025x025.nc: NetCDF: Unknown file format

(base) yongliang@LAPTOP-MG3S5MBM:/mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/route/input$ ncdump -h 13.nc
netcdf \13 {
dimensions:
        RecordID = 67 ;
        Name_len = 17 ;
variables:
        char Name(RecordID, Name_len) ;
                Name:long_name = "Name" ;
                Name:standard_name = "Name" ;

// global attributes:
                :Conventions = "CF-1.0" ;
                :Source_Software = "Esri ArcGIS" ;
}

(base) yongliang@LAPTOP-MG3S5MBM:/mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/route/input$ ncdump -h pres_CMFD_V0106_B-01_01dy_010deg_200201-200212.nc
netcdf pres_CMFD_V0106_B-01_01dy_010deg_200201-200212 {
dimensions:
        lat = 400 ;
        lon = 700 ;
        time = UNLIMITED ; // (365 currently)
variables:
        float lat(lat) ;
                lat:standard_name = "latitude" ;
                lat:long_name = "Latitude" ;
                lat:units = "degrees_north" ;
                lat:axis = "Y" ;
        float lon(lon) ;
                lon:standard_name = "longitude" ;
                lon:long_name = "Longitude" ;
                lon:units = "degrees_east" ;
                lon:axis = "X" ;
        short pres(time, lat, lon) ;
                pres:long_name = "Near surface air pressure" ;
                pres:units = "Pa" ;
                pres:add_offset = 63500.f ;
                pres:scale_factor = 2.f ;
                pres:_FillValue = -32767s ;
                pres:missing_value = -32767s ;
        double time(time) ;
                time:standard_name = "time" ;
                time:long_name = "Time" ;
                time:units = "hours since 1900-1-1 00:00:00" ;
                time:calendar = "standard" ;
                time:axis = "T" ;

// global attributes:
                :Conventions = "CF-1.0" ;
                :history = "Created at 2016-04-02 06:58:20 UTC by the ITPCAS Data Fusion System" ;
                :source = "ITPCAS Data Fusion System (Version: 01.02.0240)" ;
                :institution = "Institute of Tibetan Plateau Research, Chinese Academy of Sciences, Beijing, China" ;
                :title = "Daily mean near surface air pressure from the ITPCAS China Meteorological Forcing Dataset" ;
                :description = "Data from ITPCAS China Meteorological Forcing Dataset (Version: 01.06.0014; Category: B-01: 03hr, 0.10deg)" ;
                :references = "He, J., and K. Yang, 2011: China Meteorological Forcing Dataset. Cold and Arid Regions Science Data Center, Lanzhou, Gansu, China, digital media, doi:10.3972/westdc.002.2014.db. [Available online at http://westdc.westgis.ac.cn/data/7a35329c-c53f-4267-aa07-e0037d913a21.]" ;
}

Those two successful nc's are gis generated, fortran generated, I don't know what makes them special, but they can be identified. I have tried using random nc's generated by gis as input files for mizuroute and they turned out to be recognisable.

(base) yongliang@LAPTOP-MG3S5MBM:/mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/route/bin$ ./mizuRoute.exe ../settings/SAMPLE.control
---- read control file ---
 <ancil_dir> --> /mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/route/ancillary_data/
 <input_dir> --> /mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/route/input/
 <output_dir> --> /mnt/d/AAA_WORK/mizuRoute/mizuRoute-main/route/results/
 <case_name> --> test
 <sim_start> --> 2003-03-22 00:00:00
 <sim_end> --> 2003-04-01 00:00:00
 <route_opt> --> 2
 <fname_ntopOld> --> 15.nc
 <dname_sseg> --> seg
 <dname_nhru> --> hru
 <seg_outlet> --> 3
 <fname_qsim> --> 15.nc
 <vname_qsim> --> runoff
 <vname_time> --> Time
 <dname_time> --> time
 <dname_hruid> --> RN_HRU
 <units_qsim> --> mm/s
 <dt_qsim> --> 86400
 <is_remap> --> F
 <param_nml> --> param.nml.default

---- calendar ---
  calendar will be read from 15.nc
  time_unit will be read from 15.nc

---- runoff unit ---
  runoff unit is provided as: mm/s
 FATAL ERROR: init_data/init_ntopo/getData/NetCDF: Invalid dimension ID or name; name=hru
shuihou commented 1 year ago

If ok, could you describe how you handle nc data? My current idea is to learn to use Arcgis to generate multidimensional nc data. Your replies are always meaningful guidance, but I am just starting to learn and have many questions and low efficiency, so please forgive me!

nmizukami commented 1 year ago

You will have to specify variable names in network netcdf in control file. https://mizuroute.readthedocs.io/en/latest/seg_hru_param.html

nmizukami commented 2 months ago

There is no further response since 11/2022, so I will close this question. Let me know if you have any further questions here.