вторник, 3 апреля 2012 г.

Install WRF on Linux OS. Part 1 - Установка модели WRF на Linux. Часть 1

Цель: Поставить модель WRF на Linux-дистрибутив
Средства: Ubuntu 10.04 LTS, WRF ARW model, Internet

Это первая часть "step-by-step" инструкции по установке и запуску негидростатической мезомасштабной атмосферной модели WRF версии 3.1 на ОС Linux. В ней описываются особенности сборки и компиляции двух главных компонент модели WRF: собственно WRF и WPS.  
В качестве среды Linux был использована довольно старая версия Ubuntu 10.04 LTS (Lucid Lynx). Все описанные ниже действия являются русифицированным аналогом онлайн учебника, который Вы можете найти здесь Wrf OnLineTutorial . Итак, приступим.

N.B. Библиотека Netcdf версии 4.1 была собрана без возможности использовать hdf5 (т.е. новый) формат. С установкой HDF5 возникли сложности, как и с WRF версии 3.3.
Netcdf 4.1 + WRF3.1 оказалось хорошим к установке сочетанием для этой версии Ububntu.


I.  NetCDF installing. Сборка библиотеки netcdf.


Для сборки и работы модели нужна библиотека netcdf. Скачиваем netcdf 4.1.1 , распаковываем архив в любую папку ("Загрузки", например):

gunzip  netcdf-4.1.1.tar.gz
tar -xf   netcdf-4.1.1.tar


Открываем в аналоге блокнота файл INSTALL и ... читаем =). Здесь будет использована сборка netcdf без поддержки нового формата hdf5. Для этого прописываем следующее в терминале, в директории с распакованным netcdf:

./configure --prefix=/usr/local/netcdf --disable-netcdf-4
sudo make check install 

Второе без sudo может завершиться ошибкой. Собственно конструкция --prefix= указывает путь, где будет располагаться Ваш netcdf. Обычно его ставят в  /usr/local/netcdf, но можно указать и другой путь. После правильной установки в окне терминала появится следующее:

+----------------------------------------------------------+
| Congratulations! You have successfully installed netCDF! |
|                                        ***                                          |
+----------------------------------------------------------+

Установим путь для окружения netcdf через команду export:

export NETCDF=/usr/local/netcdf

В учебнике приводится конструкция setenv. Разница между ними по синтаксису в нашем случае такая:

setenv VAR /path1/path2
export VAR=/path1/path2

Всё, с netcdf худо-бедно разобрались.

II. WRF configure & compile. Сборка WRF.

Быстро зарегистрировавшись, загружаем модель (WRF 3.1) и соответствующую ей по версии систему предварительной обработки (WPS 3.1)  с Get_wrf3.1_sources . 
Создаем папку  в домашней папке и копируем туда архивы: 


pwd  
   /home/user/
mkdir WRF 

Разархивируем оба архива в новую папку WRF:

gunzip  WRFV3.1.TAR.gz
tar -xf  WRFV3.1.TAR
gunzip  WPSV3.1.TAR.gz
tar -xf   WPSV3.1.TAR


После разархивации появятся две папки: WRFV3 и WPS. Сначала соберём сам WRF. Для этого заходим в папку WRFV3:

cd WRFV3

Определяем параметры сборки. Пишем в терминале:

./configure

В открывшемся меню выбираем 1 (gfortran serial) и 1 (basic). Далее стоит (но необязательно вроде как) указать путь для поддержки крупных по размерам файлов (система сама подскажет насчёт этого). Сделаем это:

export WRFIO_NCD_LARGE_FILE_SUPPORT=1

Всё, мы готовы компилировать:

./compile

Если всё хорошо, то далее

./compile em_real >& compile.log

Если в итоге в папке main появились exe-шники real.exe wrf.exe, значит всё получилось!


III. WPS configure & compile. Сборка системы подготовки WPS.


Собственно здесь всё аналогично. Переходим в папку WPS (cd WPS).
Важно снова указать путь для netcdf:

export NETCDF=/usr/local/netcdf

Определяем конфигурацию сборки:

./configure

Здесь использовался номер 13 (gfortran with NO GRIB2, т.к. GRIB2 требует JAVA-библиотеки JASPER, с которой были проблемы)

Собираем:

./compile em_real >& compile.log


Если всё ОК, то в папке WPS появятся ссылки на exe-шники (metgrid.exe, ungrib.exe, geogrid.exe и сами exe-файлы в соответствующих папках в /src)


Итого: мы установили библиотеку netcdf, собрали саму модель WRF и систему подготовки данных. Следующим шагом будет настройка основных параметров и запуск модели.











6 комментариев:

  1. Добрый день!

    Спасибо за простые и точные инструкции. В общем все собралось нормально. Как то очень быстро прошла инструкция сборки системы подготовки WPS ./compile em_real >& compile.log ...
    Прошу сообщить где можно взять данные для проверки работы системы.

    С уважением, Александр.
    ont_07@mail/ru

    ОтветитьУдалить
  2. Добрый день, Александр!
    Тестовые данные можно взять тут:

    http://www.mmm.ucar.edu/wrf/OnLineTutorial/DATA/index.html

    ОтветитьУдалить
    Ответы
    1. Установил netcdf 4.2 ,wrf 3.4
      компиляция не получается,нет файла
      /usr/local/netcdf/include/netcdf.inc
      После
      ./compile em_real >& compile.log
      В compile.log получаем
      wrf_io.o: In function `__ext_ncd_support_routines_MOD_netcdf_err.part.0':
      wrf_io.f:(.text+0x1f): undefined reference to `nf_strerror_'
      wrf_io.o: In function `__ext_ncd_support_routines_MOD_gettimeindex':
      wrf_io.f:(.text+0x81da): undefined reference to `nf_put_vara_text_'
      wrf_io.o: In function `ext_ncd_get_var_td_char_':
      wrf_io.f:(.text+0x12c9f): undefined reference to `nf_inq_varid_'
      wrf_io.f:(.text+0x12ced): undefined reference to `nf_inq_var_'
      Что делать ?

      Удалить
    2. К сожалению, не могу Вам помочь с данной проблемой. Моей компетенции явно не хватает, чтобы решить возникшую проблему. Могу порекомендовать установить более ранние версии библиотеки netcdf. Скорее всего это может помочь.

      Удалить
  3. подскажите пожалуйста как исправить ошибку

    cdf.lo netcdf.cpp
    libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -I../fortran -I../libsrc -c netcdf.cpp
    ../libtool: line 981: g++: command not found
    make[1]: *** [netcdf.lo] Error 1
    make[1]: Leaving directory `/home/ivan/w/netcdf-4.1.1/cxx'
    make: *** [check-recursive] Error 1

    ОтветитьУдалить
    Ответы
    1. Анонимный, к сожалению не могу Вам помочь с данной ошибкой. Я давно не работаю с WRF. Написал вот только первую часть установки модели. Надеюсь, что даже это немногое кому-то поможет.
      Может быть позже, когда будут подходящие условия, я продолжу и доведу инструкцию до ума.

      Удалить

Как перевести UV в направление и скорость ветра? How to convert wind UV-components to direction and velocity?

 Всё просто.  def uv2dir(u, v):     '''     Источник:     https://github.com/blaylockbk/Ute_WRF/blob/master/functions/wind_calc...