Installation

Airflow

安装redis

apt-get install redis
vi /etc/redis/redis.conf
#bind 127.0.0.1
# requirepass foobared
requirepass redis #指定密码redis
#启动redis
systemctl restart redis.service

安装postgre

apt-get install postgresql-10 -y
apt-get install postgis postgresql -y
#修改密码
sudo -u postgres psql
CREATE USER airflow WITH PASSWORD '123456';
CREATE DATABASE airflow OWNER airflow;

#bind 127.0.0.1
# requirepass foobared
requirepass redis #指定密码redis
#启动redis
systemctl restart redis.service

安装airflow

登陆服务器切换到root用户,然后新建目录用于存放Python项目代码:

mkdir /home/data/projects/code
#新建airflow的用户并修改文件权限
groupadd devs
useradd -g devs -m  airflow -s bash
# 修改该用户对logs文件、代码文件目录的权限:
chown aiflow:aiflow /data/projects
新建目录:
mkdir -p /data/projects/airflow_config
mkdir -p /data/projects/code
下载并安装anaconda:miniconda
下载
root用户下,下载anaconda安装包:
a.打开 anaconda清华镜像源
b.选择linux-x86的一个版本,右键拷贝链接地址。
c.下载:例如,
cd /data
# wget url
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh
如果连接超时,看是否是因为禁止访问外网。
如果下载特别慢,那就本地下载后上传包至服务器。
安装anaconda
#sh [安装包名]
sh Miniconda3-latest-Linux-x86_64.sh
注意:安装过程中,会提示安装目录,修改一下,选择 /home/data/install/anaconda3 作为安装目录(必须是一个不存在的目录)。
b.确保添加了环境变量:vim /etc/profile,如果没有,则末尾一行添加:export PATH="/home/data/install/anaconda3/bin:$PATH"
2.3 新建airflow的python环境
创建环境,root用户下:
conda create -n airflow-py38  python=3.8
切换到新建的af_user用户:
su -l aiflow
初始化anaconda:conda init,如果前面没有在/etc/profile添加anaconda的PATH,那就得这样:/home/data/install/anaconda3/bin/conda init
激活刚刚创建的py环境并安装包:
# 激活环境
conda activate airflow-py38
# 看下当前的pip是否正确:应该输出的是 airflow-py38下的bin/pip
which pip
安装所需的包:
pip install apache-airflow
pip install 'apache-airflow[async]'
pip install 'apache-airflow[celery]'
pip install 'apache-airflow[redis]'
pip install pymysql # 报错的话 需apt-get install libmysqlclient-dev
pip install mysqlclient
pip install flask_bcrypt # 安这个是因为后面initdb时报缺少包的错误
pip install psycopg2
airflow被安装到了/home/af_user/.local/下。
添加环境变量
由root用户切换到aiflow 并编辑.bashrc文件
su -l aiflow
vim ~/.bashrc
export AIRFLOW_HOME="/home/data/projects/airflow_config"
export PYTHONPATH="/home/data/projects/code/airflow:$PYTHONPATH"
export PATH="/home/data/install/anaconda3/envs/air-py36/bin:$PATH"
a. export第一行,若不指定AIRFLOW_HOME,则默认是~/airflow,
b. export 第二行,Python搜索路径,默认我们import的模块都会从PYTHONPATH里面寻找,这里可以把项目路径添加进来。
c.export第三行,添加airflow的python路径。
重新加载环境变量
source ~/.bashrc
airflow db init
airflow users create --lastname admin --firstname admin --username admin --email yanshuaiqwe321@126.com --role Admin --password admin
airflow webserver -p 8080

Software Stack

We are using Spack to install and manage the required software stack.

After install Spack, please make sure you already have GNU compilers (at least C and C++ compilers) on your system.

  1. Install softwares

    nwp@VM-0-8-ubuntu:~$ spack install gcc
    nwp@VM-0-8-ubuntu:~$ spack gc
    nwp@VM-0-8-ubuntu:~$ spack install py-sphinx-rtd-theme
    nwp@VM-0-8-ubuntu:~$ spack install ncl
    nwp@VM-0-8-ubuntu:~$ spack install py-pip
    nwp@VM-0-8-ubuntu:~$ spack install jasper@1.900.1
    nwp@VM-0-8-ubuntu:~$ spack install boost+python+pic
    

    Note

    jasper version 2.0.0 above is not working, please install version 1.900.1

    check what we have installed:

    nwp@VM-0-8-ubuntu:~$ spack find
    ==> 128 installed packages
    -- linux-ubuntu18.04-cascadelake / gcc@10.2.0 -------------------
    autoconf@2.69        gperf@3.1             libuuid@1.0.3      netcdf-fortran@4.5.3    py-markupsafe@1.1.1                     python@3.8.6
    bdftopcf@1.0.5       hdf5@1.10.7           libx11@1.7.0       ninja@1.10.2            py-packaging@19.2                       readline@8.0
    berkeley-db@18.1.40  help2man@1.47.16      libxau@1.0.8       node-js@14.15.1         py-pip@20.2                             renderproto@0.11.1
    bison@3.7.4          hwloc@1.11.11         libxaw@1.0.13      npm@6.14.9              py-pygments@2.6.1                       sqlite@3.33.0
    bzip2@1.0.8          inputproto@2.3.2      libxcb@1.14        numactl@2.0.14          py-pyparsing@2.4.2                      tar@1.32
    cairo@1.16.0         kbproto@1.0.7         libxdmcp@1.1.2     openblas@0.3.12         py-pytest-runner@5.1                    tcsh@6.22.02
    cmake@3.19.1         libbsd@0.10.0         libxext@1.3.3      openmpi@3.1.6           py-pytz@2020.1                          texinfo@6.5
    curl@7.74.0          libffi@3.3            libxfont@1.5.2     openssl@1.1.1i          py-requests@2.24.0                      udunits@2.2.24
    diffutils@3.7        libfontenc@1.1.3      libxml2@2.9.10     parallel-netcdf@1.12.1  py-setuptools@50.3.2                    util-macros@1.19.1
    esmf@7.1.0r          libice@1.0.9          libxmu@1.1.2       pcre@8.44               py-setuptools-scm@4.1.2                 xcb-proto@1.14.1
    expat@2.2.10         libiconv@1.16         libxpm@3.5.12      perl@5.32.0             py-six@1.14.0                           xerces-c@3.2.3
    findutils@4.6.0      libidn2@2.3.0         libxrender@0.9.10  pixman@0.40.0           py-snowballstemmer@2.0.0                xextproto@7.3.0
    flex@2.6.4           libjpeg-turbo@2.0.4   libxt@1.1.5        pkgconf@1.7.3           py-sphinx@3.2.0                         xproto@7.0.31
    font-util@1.3.2      libpciaccess@0.16     m4@1.4.18          py-alabaster@0.7.12     py-sphinx-rtd-theme@0.5.0               xtrans@1.3.5
    fontconfig@2.13.1    libpng@1.6.37         meson@0.56.0       py-babel@2.7.0          py-sphinxcontrib-applehelp@1.0.1        xz@5.2.5
    fontsproto@2.1.3     libpthread-stubs@0.4  mkfontdir@1.0.7    py-certifi@2020.6.20    py-sphinxcontrib-devhelp@1.0.1          zlib@1.2.11
    freetype@2.10.1      libsigsegv@2.12       mkfontscale@1.1.2  py-chardet@3.0.4        py-sphinxcontrib-htmlhelp@1.0.2
    gdbm@1.18.1          libsm@1.2.3           nasm@2.15.05       py-docutils@0.15.2      py-sphinxcontrib-jsmath@1.0.1
    gettext@0.21         libszip@2.1.1         ncl@6.6.2          py-idna@2.8             py-sphinxcontrib-qthelp@1.0.2
    glib@2.66.2          libtool@2.4.6         ncurses@6.2        py-imagesize@1.1.0      py-sphinxcontrib-serializinghtml@1.1.3
    gmake@4.2.1          libunistring@0.9.10   netcdf-c@4.7.4     py-jinja2@2.10.3        py-urllib3@1.25.6
    
    -- linux-ubuntu18.04-skylake_avx512 / gcc@7.5.0 -----------------
    gcc@10.2.0  gmp@6.1.2  isl@0.21  mpc@1.1.0  mpfr@4.0.2  zlib@1.2.11  zstd@1.4.5
    
  2. Adds to system-wide settings

    after installing required softwares, please add following lines in ~/.bashrc:

    . /home/data/install/spack/share/spack/setup-env.sh
    
    spack unload --all
    
    spack load -r gcc@10.2.0
    
    spack load -r py-sphinx-rtd-theme@0.5.0
    spack load -r py-pip@20.2
    
    spack load -r ncl
    spack load -r cmake@3.19.1
    spack load -r openmpi@3.1.6
    spack load -r netcdf-fortran@4.5.3
    spack load -r openblas@0.3.12
    spack load -r jasper@1.900.1
    spack load -r libpng@1.6.37
    spack load -r zlib@1.2.11%gcc@10.2.0
    spack load -r gmake@4.2.1
    spack load -r boost@1.75.0
    
    spack unload tcsh
    

环境变量设置

  1. 环境变量设置

    $HOME/.bashrc 中加入以下设置:

    # Define the archor/top directory
    # --------------------------------
    
    $ export ROOT_DIR=/home/nwp/src/repository
    
    # Define common libs
    # ------------------------
    
    $ export NETCDF=$(spack location -i netcdf-fortran)
    $ export PNETCDF=$(spack location -i parallel-netcdf)
    
    
    # Define the nwp libs
    # ------------------------
    
    export BACIO_VER=v2.0.1
    export SIGIO_VER=v2.0.1
    export W3EMC_VER=v2.2.0
    export SFCIO_VER=v1.0.0
    
    # Defin the include paths
    # -------------------------
    
    export JASPER_INC=$(spack location -i jasper@1.900.1)/include
    export PNG_INC=$(spack location -i libpng@1.6.37)/include
    export Z_INC=$(spack location -i zlib@1.2.11%gcc@10.2.0)/include
    
    export XMLPARSE_INC=${ROOT_DIR}/nwprod/lib/xmlparse/v2.0.0/gnu/xmlparse-2.0.0/include
    export G2TMPL_INC=${ROOT_DIR}/nwprod/lib/g2tmpl/v1.4.0/gnu/include
    export G2_INC4=${ROOT_DIR}/nwprod/lib/g2/v2.5.2/gnu/include/g2_4
    export G2_INCd=${ROOT_DIR}/nwprod/lib/g2/v2.5.2/gnu/include/g2_d
    export NEMSIO_INC=${ROOT_DIR}/nwprod/lib/nemsio/incmod/nemsio
    export GFSIO_INC4=${ROOT_DIR}/nwprod/lib/gfsio/v1.1.0/gnu/include/gfsio_4
    export SIGIO_INC4=${ROOT_DIR}/nwprod/lib/sigio/v2.0.1/src/sigio_v2.0.1/include
    export SFCIO_INC4=${ROOT_DIR}/nwprod/lib/sfcio/v1.0.0/gnu/include/sfcio_v1.0.0_4
    export W3EMC_INC4=${ROOT_DIR}/nwprod/lib/w3emc/v2.2.0/src/gnu/w3emc_v2.2.0_4
    export W3EMC_INCd=${ROOT_DIR}/nwprod/lib/w3emc/v2.2.0/src/gnu/w3emc_v2.2.0_d
    export CRTM_INC=${ROOT_DIR}/nwprod/lib/crtm/v2.2.3/gnu/include/crtm_v2.2.3/
    
    # Defin the library paths
    # -------------------------
    
    export JASPER_LIB="-L$(spack location -i jasper@1.900.1)/lib -ljasper"
    export PNG_LIB="-L$(spack location -i libpng@1.6.37)/lib -lpng"
    export Z_LIB="-L$(spack location -i zlib@1.2.11%gcc@10.2.0)/lib -lz"
    
    export XMLPARSE_LIB=${ROOT_DIR}/nwprod/lib/xmlparse/v2.0.0/gnu/xmlparse-2.0.0/lib/libxmlparse.a
    export G2TMPL_LIB=${ROOT_DIR}/nwprod/lib/g2tmpl/v1.4.0/gnu/libg2tmpl.a
    export G2_LIB4=${ROOT_DIR}/nwprod/lib/g2/v2.5.2/gnu/libg2_4.a
    export G2_LIBd=${ROOT_DIR}/nwprod/lib/g2/v2.5.2/gnu/libg2_d.a
    export NEMSIO_LIB=${ROOT_DIR}/nwprod/lib/nemsio/libnemsio.a
    export GFSIO_LIB4=${ROOT_DIR}/nwprod/lib/gfsio/v1.1.0/gnu/libgfsio_4.a
    export SIGIO_LIB4=${ROOT_DIR}/nwprod/lib/sigio/v2.0.1/src/sigio_v2.0.1/lib/libsigio_v2.0.1_4.a
    export SFCIO_LIB4=${ROOT_DIR}/nwprod/lib/sfcio/v1.0.0/gnu/libsfcio_v1.0.0_4.a
    export IP_LIB=${ROOT_DIR}/nwprod/lib/ip/v2.0.0/gnu/libip_v2.0.0_4.a
    export IP_LIB4=${ROOT_DIR}/nwprod/lib/ip/v2.0.0/gnu/libip_v2.0.0_4.a
    export SP_LIB4=${ROOT_DIR}/nwprod/lib/sp/libsp_4.a
    export SP_LIBd=${ROOT_DIR}/nwprod/lib/sp/libsp_d.a
    export W3NCO_LIB4=${ROOT_DIR}/nwprod/lib/w3nco/v2.0.6/gnu/libw3nco_v2.0.1_4.a
    export W3NCO_LIB8=${ROOT_DIR}/nwprod/lib/w3nco/v2.0.6/gnu/libw3nco_v2.0.1_8.a
    export W3NCO_LIBd=${ROOT_DIR}/nwprod/lib/w3nco/v2.0.6/gnu/libw3nco_v2.0.1_d.a
    export W3EMC_LIB4=${ROOT_DIR}/nwprod/lib/w3emc/v2.2.0/src/gnu/libw3emc_v2.2.0_4.a
    export W3EMC_LIB8=${ROOT_DIR}/nwprod/lib/w3emc/v2.2.0/src/gnu/libw3emc_v2.2.0_8.a
    export W3EMC_LIBd=${ROOT_DIR}/nwprod/lib/w3emc/v2.2.0/src/gnu/libw3emc_v2.2.0_d.a
    export BACIO_LIB4=${ROOT_DIR}/nwprod/lib/bacio/v2.0.1/gnu/libbacio_4.a
    export BACIO_LIB8=${ROOT_DIR}/nwprod/lib/bacio/v2.0.1/gnu/libbacio_8.a
    export CRTM_LIB=${ROOT_DIR}/nwprod/lib/crtm/v2.2.3/gnu/libcrtm_v2.2.3.a
    export BUFR_LIB4_DA=${ROOT_DIR}/nwprod/lib/bufr/v11.0.1/gnu/libbufr_v11.0.1_4_64_DA.a
    export BUFR_LIB4=${BUFR_LIB4_DA}
    export BUFR_LIB8_DA=${ROOT_DIR}/nwprod/lib/bufr/v11.0.1/gnu/libbufr_v11.0.1_8_64_DA.a
    export BUFR_LIB8=${BUFR_LIB8_DA}
    export BUFR_LIBd_DA=${ROOT_DIR}/nwprod/lib/bufr/v11.0.1/gnu/libbufr_v11.0.1_d_64_DA.a
    export BUFR_LIBd=${BUFR_LIBd_DA}
    
    export PATH=${ROOT_DIR}/nwprod/prod_util.v1.1.3/ush:$PATH
    
    # ecflow
    export PATH=/home/nwp/src/repository/ecflow/bin:$PATH
    export PYTHONPATH=$PYTHONPATH:/home/nwp/src/repository/ecflow/lib/python3.8/site-packages/ecflow
    export ECF_HOST=101.32.204.175
    export ECF_PORT=3141
    
  2. 模块版本信息

    ${ROOT_DIR}/nwprod/ 下加入各个模块的版本信息。

    Note

    当测试新的模块版本的时候,可以在此修改版本号,系统会去相应的目录寻找可执行程序和脚本:

    nwp@VM-0-8-ubuntu:~/src/repository$ tree -L 1 nwprod/versions
    nwprod/versions
    |-- hrly_realtime.ver
    |-- hrrr.ver
    |-- obsproc_dump_monitor.ver
    |-- obsproc_rap.ver
    `-- rap.ver
    
    0 directories, 5 files
    

安装 ecflow

  1. 下载最新版本的 ecflow, 并按说明安装

  2. 更新环境变量,测试安装是否成功

    # add the following lines .bashrc
    
    export PATH=/home/nwp/src/repository/ecflow/bin:$PATH
    export PYTHONPATH=$PYTHONPATH:/home/nwp/src/repository/ecflow/lib/python3.8/site-packages/ecflow
    export ECF_HOST=VM-0-8-ubuntu
    export ECF_PORT=3141
    
    $ . ~/.bashrc
    $ which ecflow_client
    /home/nwp/src/repository/ecflow/bin/ecflow_client
    
  • 启动 ecflow

    $ ecflow_start.sh -p 3141
    [03:25:12 21.12.2020] Request( --ping ), Failed to connect to VM-0-8-ubuntu:3141. After 2 attempts. Is the server running ?
    
    Mon Dec 21 03:25:12 UTC 2020
    
    User "1000" attempting to start ecf server on "VM-0-8-ubuntu" using ECF_PORT "3141" and with:
    ECF_HOME     : "/home/nwp/ecflow_server"
    ECF_LOG      : "VM-0-8-ubuntu.3141.ecf.log"
    ECF_CHECK    : "VM-0-8-ubuntu.3141.check"
    ECF_CHECKOLD : "VM-0-8-ubuntu.3141.check.b"
    ECF_OUT      : "/dev/null"
    
    client version is Ecflow version(5.6.0) boost(1.75.0) compiler(gcc 10.2.0) protocol(JSON cereal 1.3.0) openssl(enabled) Compiled on Dec 20 2020 22:21:38
    Checking if the server is already running on VM-0-8-ubuntu and port 3141
    [03:25:13 21.12.2020] Request( --ping ), Failed to connect to VM-0-8-ubuntu:3141. After 2 attempts. Is the server running ?
    
    
    Backing up check point and log files
    
    OK starting ecFlow server...
    
    Placing server into RESTART mode...
    
    To view server on ecflow_ui - goto Servers/Manage Servers... and enter
    Name        : <unique ecFlow server name>
    Host        : VM-0-8-ubuntu
    Port Number : 3141
    
  • 测试 ecflow server 是否启动

    $ ecflow_client --ping
    ping server(VM-0-8-ubuntu:3141) succeeded in 00:00:00.002548  ~2 milliseconds
    

安装 NCEPLIBS

  1. bacio

    export COMP=gnu
    cd ${ROOT_DIR}/nwprod/lib/bacio/v2.0.1/src
    chmod +x makebacio_wcoss.sh
    rm -f ../gnu/libbacio_*.a
    ./makebacio_wcoss.sh
    
    v2.0.1/src> tree -L 1 ../gnu/
    ../gnu/
    ├── libbacio_4.a
    └── libbacio_8.a
    
    0 directories, 2 files
    
  2. bufr

    export COMP=gnu
    cd ${ROOT_DIR}/nwprod/lib/bufr/v11.0.1/src
    rm -fr ../gnu/libbufr*.a
    chmod +x makebufrlib.sh
    ./clean.sh
    ./makebufrlib.sh
    
    v11.0.1/src> tree -L 1 ../gnu/
    ../gnu/
    ├── libbufr_v11.0.1_4_64_DA.a
    ├── libbufr_v11.0.1_8_64_DA.a
    └── libbufr_v11.0.1_d_64_DA.a
    
    0 directories, 3 files
    
  3. g2

    export COMP=gnu
    
    cd ${ROOT_DIR}/nwprod/lib/g2/v2.5.2/src
    chmod +x makeg2lib.sh
    rm ../gnu/*.a
    ./makeg2lib.sh
    
    v2.5.2/src> tree -L 3 ../gnu/
    ../gnu/
    ├── include
    │   ├── g2_4
    │   │   ├── drstemplates.mod
    │   │   ├── g2grids.mod
    │   │   ├── grib_mod.mod
    │   │   ├── gridtemplates.mod
    │   │   ├── params_ecmwf.mod
    │   │   ├── params.mod
    │   │   ├── pdstemplates.mod
    │   │   └── re_alloc.mod
    │   └── g2_d
    │       ├── drstemplates.mod
    │       ├── g2grids.mod
    │       ├── grib_mod.mod
    │       ├── gridtemplates.mod
    │       ├── params_ecmwf.mod
    │       ├── params.mod
    │       ├── pdstemplates.mod
    │       └── re_alloc.mod
    ├── libg2_4.a
    └── libg2_d.a
    
    3 directories, 18 files
    
  4. g2tmpl

    export COMP=gnu
    cd ${ROOT_DIR}/nwprod/lib/g2tmpl/v1.4.0/src
    chmod +x makeg2tmpllib.sh
    rm -f ../gnu/libg2tmpl.a
    ./makeg2tmpllib.sh
    
    v1.4.0/src> tree -L 2 ../gnu/
    ../gnu/
    ├── include
    │   ├── gdtsec3.mod
    │   └── grib2_all_tables_module.mod
    └── libg2tmpl.a
    
    1 directory, 3 files
    
  5. gfsio

    export COMP=gnu
    cd ${ROOT_DIR}/nwprod/lib/gfsio/v1.1.0/src
    chmod +x make_wcoss.sh
    rm -f ../gnu/libgfsio_4.a
    ./make_wcoss.sh
    
    v1.1.0/src> tree -L 3 ../gnu/
    ../gnu/
    ├── include
    │   └── gfsio_4
    │       └── gfsio_module.mod
    └── libgfsio_4.a
    
    2 directories, 2 files
    
  6. ip

    export COMP=gnu
    
    export IP_VER=v2.0.0
    cd ${ROOT_DIR}/nwprod/lib/ip/v2.0.0/src
    cp makefile.gnu.conf makefile.conf
    chmod +x makelibip.sh
    ./makelibip.sh
    
    v2.0.0/src> tree -L 1  ../gnu/
    ../gnu/
    ├── libip_v2.0.0_4.a
    ├── libip_v2.0.0_8.a
    └── libip_v2.0.0_d.a
    
    0 directories, 3 files
    
    cd ${ROOT_DIR}/nwprod/lib/ip/v3.0.0
    ./make_ip_lib_wcoss-cray.sh gfortran.setup
    
    ip/v3.0.0> tree -L 3 ip/v3.0.0/gnu/
    ip/v3.0.0/gnu/
    ├── config.log.ip_v3.0.0_4
    ├── config.log.ip_v3.0.0_8
    ├── config.log.ip_v3.0.0_d
    ├── include
    │   ├── ip_v3.0.0_4
    │   │   ├── gdswzd00_mod.mod
    │   │   ├── gdswzd01_mod.mod
    │   │   ├── gdswzd03_mod.mod
    │   │   ├── gdswzd04_mod.mod
    │   │   ├── gdswzd05_mod.mod
    │   │   ├── gdswzdcb_mod.mod
    │   │   ├── gdswzdcd_mod.mod
    │   │   ├── gdswzd_mod.mod
    │   │   └── iplib.h
    │   ├── ip_v3.0.0_8
    │   │   ├── gdswzd00_mod.mod
    │   │   ├── gdswzd01_mod.mod
    │   │   ├── gdswzd03_mod.mod
    │   │   ├── gdswzd04_mod.mod
    │   │   ├── gdswzd05_mod.mod
    │   │   ├── gdswzdcb_mod.mod
    │   │   ├── gdswzdcd_mod.mod
    │   │   ├── gdswzd_mod.mod
    │   │   └── iplib.h
    │   └── ip_v3.0.0_d
    │       ├── gdswzd00_mod.mod
    │       ├── gdswzd01_mod.mod
    │       ├── gdswzd03_mod.mod
    │       ├── gdswzd04_mod.mod
    │       ├── gdswzd05_mod.mod
    │       ├── gdswzdcb_mod.mod
    │       ├── gdswzdcd_mod.mod
    │       ├── gdswzd_mod.mod
    │       └── iplib.h
    ├── libip_v3.0.0_4.a
    ├── libip_v3.0.0_8.a
    └── libip_v3.0.0_d.a
    
    4 directories, 33 files
    
  7. nemsio

    cd ${ROOT_DIR}/nwprod/lib/nemsio/v2.2.2/src
    cp conf/configure.Linux.gnu conf/configure
    chmod +x compile
    rm -f *.mod *.o
    ./compile
    
    v2.2.2/src> tree -L 3 ../..
    ../..
    ├── incmod
    │   └── nemsio
    │       ├── nemsio_module.mod
    │       ├── nemsio_module_mpi.mod
    │       ├── nemsio_openclose.mod
    │       ├── nemsio_read.mod
    │       └── nemsio_write.mod
    ├── libnemsio.a
    └── v2.2.2
        └── src
            ├── compile
            ├── compile-cray.log
            ├── compile-gnu.log
            ├── conf
            ├── FOR_SPA
            ├── incmod
            ├── Makefile
            ├── nemsio_module.f90
            ├── nemsio_module_mpi.f90
            ├── nemsio_openclose.f90
            ├── nemsio_read.f90
            ├── nemsio_write.f90
            └── readme
    
    6 directories, 17 files
    
  8. sfcio

    export COMP=gnu
    export SFCIO_VER=v1.0.0
    cd ${ROOT_DIR}/nwprod/lib/sfcio/v1.0.0/src
    rm ../../libsfcio_big_4.a
    chmod +x make.sh
    ./make.sh
    
    v1.0.0/src> tree -L 3 ../gnu/
    ../gnu/
    ├── include
    │   └── sfcio_v1.0.0_4
    │       └── sfcio_module.mod
    └── libsfcio_v1.0.0_4.a
    
    2 directories, 2 files
    
  9. sigio

    export COMP=gnu
    export SIGIO_VER=v2.0.1
    cd ${ROOT_DIR}/nwprod/lib/sigio/v2.0.1/src
    make clean
    make
    touch ../config.log
    make install
    
    v2.0.1/src> tree -L 2 sigio_v2.0.1/
    sigio_v2.0.1/
    ├── config.log
    ├── include
    │   ├── sigio_module.mod
    │   └── sigio_r_module.mod
    └── lib
        └── libsigio_v2.0.1_4.a
    
    2 directories, 4 files
    
  10. sp

    cd ${ROOT_DIR}/nwprod/lib/sp/v2.0.2/src
    chmod +x makelibsp.sh_gnu
    rm ../../libsp_*a
    ./makelibsp.sh_gnu
    
    v2.0.2/src> tree -L 1 ../..
    ../..
    ├── libsp_4.a
    ├── libsp_8.a
    ├── libsp_d.a
    └── v2.0.2
    
  11. w3emc

    export COMP=gnu
    export W3EMC_VER=v2.2.0
    cd ${ROOT_DIR}/nwprod/lib/w3emc/v2.2.0/src
    export W3EMC_SRC=`pwd`
    chmod +x configure
    chmod +x make_w3emc_lib.sh
    ./make_w3emc_lib.sh gfortran.setup
    
    v2.2.0/src> tree -L 2 gnu/
    gnu/
    ├── libw3emc_v2.2.0_4.a
    ├── libw3emc_v2.2.0_8.a
    ├── libw3emc_v2.2.0_d.a
    ├── w3emc_v2.2.0_4
    │   ├── args_mod.mod
    │   ├── gblevn_module.mod
    │   └── mersenne_twister.mod
    ├── w3emc_v2.2.0_8
    │   ├── args_mod.mod
    │   ├── gblevn_module.mod
    │   └── mersenne_twister.mod
    └── w3emc_v2.2.0_d
        ├── args_mod.mod
        ├── gblevn_module.mod
        └── mersenne_twister.mod
    
    3 directories, 12 files
    
  12. w3nco

    export COMP=gnu
    cd ${ROOT_DIR}/nwprod/lib/w3nco/v2.0.6/src
    rm ../gnu/libw3nco_*.a
    chmod +x makelibw3_nco.sh
    ./makelibw3_nco.sh
    
    v2.0.6/src> tree -L 1 ../gnu/
    ../gnu/
    ├── libw3nco_v2.0.1_4.a
    ├── libw3nco_v2.0.1_8.a
    └── libw3nco_v2.0.1_d.a
    
    0 directories, 3 files
    
  13. xmlparse

    cd ${ROOT_DIR}/nwprod/lib/xmlparse/v2.0.0/src
    export COMP=gnu
    make clean
    ./configure --prefix=${ROOT_DIR}/nwprod/lib/xmlparse/v2.0.0/${COMP} FC=gfortran
    make clean
    make
    make install
    
    v2.0.0/src> tree -L 3 ../gnu/
    ../gnu/
    └── xmlparse-2.0.0
        ├── include
        │   ├── read_xml_primitives.mod
        │   └── xmlparse.mod
        └── lib
            └── libxmlparse.a
    
    3 directories, 3 files
    
  14. crtm

    cd ${ROOT_DIR}/nwprod/lib/crtm/v2.0.6/src
    chmod +x configure/gfortran.csh.setup
    . configure/gfortran.setup
    make clean
    make
    mkdir -p ../gnu/include/crtm_v2.0.6
    mv libsrc/libCRTM.a ../gnu/libcrtm_v2.0.6.a
    mv libsrc/*.mod ../gnu/include/crtm_v2.0.6/
    
    v2.0.6/src> tree -L 3 ../gnu/
    ../gnu/
    ├── include
    │   └── crtm_v2.0.6
    │       ├── aerosolcoeff_binary_io.mod
    │       ├── aerosolcoeff_define.mod
    │       ├── antcorr_binary_io.mod
    │       ├── antcorr_define.mod
    │       ├── asvar_define.mod
    │       ├── becoeff_binary_io.mod
    │       ├── becoeff_define.mod
    │       ├── binary_file_utility.mod
    │       ├── cloudcoeff_binary_io.mod
    │       ├── cloudcoeff_define.mod
    │       ├── compare_float_numbers.mod
    │       ├── crtm_adjoint_module.mod
    │       ├── crtm_aerosolcoeff.mod
    │       ├── crtm_aerosol_define.mod
    │       ├── crtm_aerosol_io.mod
    │       ├── crtm_aerosolscatter.mod
    │       ├── crtm_ancillaryinput_define.mod
    │       ├── crtm_antcorr.mod
    │       ├── crtm_atmabsorption.mod
    │       ├── crtm_atmoptics.mod
    │       ├── crtm_atmosphere_define.mod
    │       ├── crtm_atmosphere_io.mod
    │       ├── crtm_atmosphere.mod
    │       ├── crtm_atmscatter_define.mod
    │       ├── crtm_becoeff.mod
    │       ├── crtm_channelinfo_define.mod
    │       ├── crtm_cloudcoeff.mod
    │       ├── crtm_cloud_define.mod
    │       ├── crtm_cloud_io.mod
    │       ├── crtm_cloudscatter.mod
    │       ├── crtm_emiscoeff.mod
    │       ├── crtm_fastem1.mod
    │       ├── crtm_fastem3.mod
    │       ├── crtm_forward_module.mod
    │       ├── crtm_geometry_define.mod
    │       ├── crtm_geometryinfo_define.mod
    │       ├── crtm_geometryinfo.mod
    │       ├── crtm_geometry_io.mod
    │       ├── crtm_interpolation.mod
    │       ├── crtm_ir_ice_sfcoptics.mod
    │       ├── crtm_ir_land_sfcoptics.mod
    │       ├── crtm_ir_snow_sfcoptics.mod
    │       ├── crtm_irssem.mod
    │       ├── crtm_ir_water_sfcoptics.mod
    │       ├── crtm_k_matrix_module.mod
    │       ├── crtm_lifecycle.mod
    │       ├── crtm_lowfrequency_mwssem.mod
    │       ├── crtm_model_profiles.mod
    │       ├── crtm_module.mod
    │       ├── crtm_moleculescatter.mod
    │       ├── crtm_mw_ice_sfcoptics.mod
    │       ├── crtm_mw_land_sfcoptics.mod
    │       ├── crtm_mw_snow_sfcoptics.mod
    │       ├── crtm_mw_water_sfcoptics.mod
    │       ├── crtm_options_define.mod
    │       ├── crtm_parameters.mod
    │       ├── crtm_planck_functions.mod
    │       ├── crtm_rtsolution_define.mod
    │       ├── crtm_rtsolution_io.mod
    │       ├── crtm_rtsolution.mod
    │       ├── crtm_sensordata_define.mod
    │       ├── crtm_sensordata_io.mod
    │       ├── crtm_sensorinfo.mod
    │       ├── crtm_sfcoptics_define.mod
    │       ├── crtm_sfcoptics.mod
    │       ├── crtm_spccoeff.mod
    │       ├── crtm_surface_define.mod
    │       ├── crtm_surface_io.mod
    │       ├── crtm_surface_ir_emissivity.mod
    │       ├── crtm_tangent_linear_module.mod
    │       ├── crtm_taucoeff.mod
    │       ├── crtm_utility.mod
    │       ├── crtm_vis_water_sfcoptics.mod
    │       ├── csvar_define.mod
    │       ├── date_utility.mod
    │       ├── emiscoeff_binary_io.mod
    │       ├── emiscoeff_define.mod
    │       ├── endian_utility.mod
    │       ├── file_utility.mod
    │       ├── fresnel.mod
    │       ├── fundamental_constants.mod
    │       ├── iatm_define.mod
    │       ├── message_handler.mod
    │       ├── nesdis_amsre_siceem_module.mod
    │       ├── nesdis_amsre_snowem_module.mod
    │       ├── nesdis_amsu_siceem_module.mod
    │       ├── nesdis_amsu_snowem_module.mod
    │       ├── nesdis_landem_module.mod
    │       ├── nesdis_mhs_siceem_module.mod
    │       ├── nesdis_mhs_snowem_module.mod
    │       ├── nesdis_oceanem_module.mod
    │       ├── nesdis_seaice_phyem_module.mod
    │       ├── nesdis_snowem_parameters.mod
    │       ├── nesdis_ssmi_module.mod
    │       ├── nesdis_ssmi_siceem_module.mod
    │       ├── nesdis_ssmi_snowem_module.mod
    │       ├── nesdis_ssmis_seaiceem_module.mod
    │       ├── nesdis_ssmis_snowem_module.mod
    │       ├── ocean_permittivity.mod
    │       ├── odas_atmabsorption.mod
    │       ├── odas_binary_io.mod
    │       ├── odas_define.mod
    │       ├── odas_predictor_define.mod
    │       ├── odas_predictor.mod
    │       ├── odas_taucoeff.mod
    │       ├── odps_atmabsorption.mod
    │       ├── odps_binary_io.mod
    │       ├── odps_coordinatemapping.mod
    │       ├── odps_define.mod
    │       ├── odps_predictor_define.mod
    │       ├── odps_predictor.mod
    │       ├── odps_taucoeff.mod
    │       ├── odssu_atmabsorption.mod
    │       ├── odssu_binary_io.mod
    │       ├── odssu_define.mod
    │       ├── odssu_taucoeff.mod
    │       ├── odzeeman_atmabsorption.mod
    │       ├── odzeeman_predictor.mod
    │       ├── odzeeman_taucoeff.mod
    │       ├── profile_utility_parameters.mod
    │       ├── rtv_define.mod
    │       ├── search_utility.mod
    │       ├── sensorinfo_parameters.mod
    │       ├── sort_utility.mod
    │       ├── spccoeff_binary_io.mod
    │       ├── spccoeff_define.mod
    │       ├── spectral_units_conversion.mod
    │       ├── ssu_input_define.mod
    │       ├── taucoeff_define.mod
    │       ├── type_kinds.mod
    │       ├── zeeman_input_define.mod
    │       └── zeeman_utility.mod
    └── libcrtm_v2.0.6.a
    
    2 directories, 133 files
    
    
    # Used by compiling gsi and wrfpost
    
    cd ${ROOT_DIR}/nwprod/lib/crtm/v2.2.3/src
    chmod +x make_crtm_lib.sh
    chmod +x configure
    rm -fr ../gnu
    ./make_crtm_lib.sh gfortran.setup
    mkdir -p ../gnu/include/crtm_v2.2.3
    mv libsrc/libcrtm.a ../gnu/libcrtm_v2.2.3.a
    mv libsrc/*.mod ../gnu/include/crtm_v2.2.3/.
    chmod +x link_crtm_coeffs.sh
    ./link_crtm_coeffs.sh fix ${ROOT_DIR}/nwprod/lib/crtm/v2.2.3/fix
    
    v2.2.3/src> tree -L 3 ../gnu/
    ../gnu/
    ├── include
    │   └── crtm_v2.2.3
    │       ├── accoeff_binary_io.mod
    │       ├── accoeff_define.mod
    │       ├── ada_module.mod
    │       ├── aerosolcoeff_binary_io.mod
    │       ├── aerosolcoeff_define.mod
    │       ├── aovar_define.mod
    │       ├── asvar_define.mod
    │       ├── azimuth_emissivity_f6_module.mod
    │       ├── azimuth_emissivity_module.mod
    │       ├── binary_file_utility.mod
    │       ├── cloudcoeff_binary_io.mod
    │       ├── cloudcoeff_define.mod
    │       ├── common_rtsolution.mod
    │       ├── compare_float_numbers.mod
    │       ├── crtm_adjoint_module.mod
    │       ├── crtm_aerosolcoeff.mod
    │       ├── crtm_aerosol_define.mod
    │       ├── crtm_aerosolscatter.mod
    │       ├── crtm_ancillaryinput_define.mod
    │       ├── crtm_antennacorrection.mod
    │       ├── crtm_aod_module.mod
    │       ├── crtm_atmabsorption.mod
    │       ├── crtm_atmoptics_define.mod
    │       ├── crtm_atmoptics.mod
    │       ├── crtm_atmosphere_define.mod
    │       ├── crtm_atmosphere.mod
    │       ├── crtm_channelinfo_define.mod
    │       ├── crtm_cloudcoeff.mod
    │       ├── crtm_cloud_define.mod
    │       ├── crtm_cloudscatter.mod
    │       ├── crtm_fastem1.mod
    │       ├── crtm_fastemx.mod
    │       ├── crtm_forward_module.mod
    │       ├── crtm_geometry_define.mod
    │       ├── crtm_geometryinfo_define.mod
    │       ├── crtm_geometryinfo.mod
    │       ├── crtm_interpolation.mod
    │       ├── crtm_iricecoeff.mod
    │       ├── crtm_ir_ice_sfcoptics.mod
    │       ├── crtm_irlandcoeff.mod
    │       ├── crtm_ir_land_sfcoptics.mod
    │       ├── crtm_irsnowcoeff.mod
    │       ├── crtm_ir_snow_sfcoptics.mod
    │       ├── crtm_irssem.mod
    │       ├── crtm_irwatercoeff.mod
    │       ├── crtm_ir_water_sfcoptics.mod
    │       ├── crtm_k_matrix_module.mod
    │       ├── crtm_lifecycle.mod
    │       ├── crtm_lowfrequency_mwssem.mod
    │       ├── crtm_model_profiles.mod
    │       ├── crtm_module.mod
    │       ├── crtm_moleculescatter.mod
    │       ├── crtm_mw_ice_sfcoptics.mod
    │       ├── crtm_mw_land_sfcoptics.mod
    │       ├── crtm_mw_snow_sfcoptics.mod
    │       ├── crtm_mwwatercoeff.mod
    │       ├── crtm_mw_water_sfcoptics.mod
    │       ├── crtm_nltecorrection.mod
    │       ├── crtm_options_define.mod
    │       ├── crtm_parameters.mod
    │       ├── crtm_planck_functions.mod
    │       ├── crtm_predictor_define.mod
    │       ├── crtm_predictor.mod
    │       ├── crtm_rtsolution_define.mod
    │       ├── crtm_rtsolution.mod
    │       ├── crtm_secategory.mod
    │       ├── crtm_sensordata_define.mod
    │       ├── crtm_sensorinfo.mod
    │       ├── crtm_sfcoptics_define.mod
    │       ├── crtm_sfcoptics.mod
    │       ├── crtm_spccoeff.mod
    │       ├── crtm_surface_define.mod
    │       ├── crtm_tangent_linear_module.mod
    │       ├── crtm_taucoeff.mod
    │       ├── crtm_utility.mod
    │       ├── crtm_visicecoeff.mod
    │       ├── crtm_vis_ice_sfcoptics.mod
    │       ├── crtm_vislandcoeff.mod
    │       ├── crtm_vis_land_sfcoptics.mod
    │       ├── crtm_vissnowcoeff.mod
    │       ├── crtm_vis_snow_sfcoptics.mod
    │       ├── crtm_viswatercoeff.mod
    │       ├── crtm_vis_water_sfcoptics.mod
    │       ├── csvar_define.mod
    │       ├── datetime_utility.mod
    │       ├── date_utility.mod
    │       ├── ellison.mod
    │       ├── emission_module.mod
    │       ├── endian_utility.mod
    │       ├── file_utility.mod
    │       ├── fitcoeff_define.mod
    │       ├── foam_utility_module.mod
    │       ├── fresnel.mod
    │       ├── fundamental_constants.mod
    │       ├── guillou.mod
    │       ├── hyperbolic_step.mod
    │       ├── iatm_define.mod
    │       ├── irwatercoeff_define.mod
    │       ├── large_scale_correction_module.mod
    │       ├── liu.mod
    │       ├── lseatlas_define.mod
    │       ├── message_handler.mod
    │       ├── mwwatercoeff_define.mod
    │       ├── mwwaterlut_define.mod
    │       ├── nesdis_amsre_siceem_module.mod
    │       ├── nesdis_amsre_snowem_module.mod
    │       ├── nesdis_amsu_siceem_module.mod
    │       ├── nesdis_amsu_snowem_module.mod
    │       ├── nesdis_atms_snowem_module.mod
    │       ├── nesdis_landem_module.mod
    │       ├── nesdis_mhs_siceem_module.mod
    │       ├── nesdis_mhs_snowem_module.mod
    │       ├── nesdis_seaice_phyem_module.mod
    │       ├── nesdis_snowem_atms_parameters.mod
    │       ├── nesdis_snowem_parameters.mod
    │       ├── nesdis_ssmi_module.mod
    │       ├── nesdis_ssmi_siceem_module.mod
    │       ├── nesdis_ssmi_snowem_module.mod
    │       ├── nesdis_ssmis_seaiceem_module.mod
    │       ├── nesdis_ssmis_snowem_module.mod
    │       ├── nltecoeff_binary_io.mod
    │       ├── nltecoeff_define.mod
    │       ├── nlte_parameters.mod
    │       ├── nlte_predictor_define.mod
    │       ├── nlte_predictor_io.mod
    │       ├── odas_atmabsorption.mod
    │       ├── odas_binary_io.mod
    │       ├── odas_define.mod
    │       ├── odas_predictor_define.mod
    │       ├── odas_predictor.mod
    │       ├── odas_taucoeff.mod
    │       ├── odps_atmabsorption.mod
    │       ├── odps_binary_io.mod
    │       ├── odps_coordinatemapping.mod
    │       ├── odps_define.mod
    │       ├── odps_predictor_define.mod
    │       ├── odps_predictor.mod
    │       ├── odps_taucoeff.mod
    │       ├── odssu_atmabsorption.mod
    │       ├── odssu_binary_io.mod
    │       ├── odssu_define.mod
    │       ├── odssu_taucoeff.mod
    │       ├── odzeeman_atmabsorption.mod
    │       ├── odzeeman_predictor.mod
    │       ├── odzeeman_taucoeff.mod
    │       ├── pafv_define.mod
    │       ├── profile_utility_parameters.mod
    │       ├── reflection_correction_module.mod
    │       ├── rtv_define.mod
    │       ├── search_utility.mod
    │       ├── secategory_define.mod
    │       ├── sensorinfo_parameters.mod
    │       ├── slope_variance.mod
    │       ├── small_scale_correction_module.mod
    │       ├── soi_module.mod
    │       ├── sort_utility.mod
    │       ├── spccoeff_binary_io.mod
    │       ├── spccoeff_define.mod
    │       ├── spectral_units_conversion.mod
    │       ├── ssu_input_define.mod
    │       ├── string_utility.mod
    │       ├── subset_define.mod
    │       ├── taucoeff_define.mod
    │       ├── timing_utility.mod
    │       ├── type_kinds.mod
    │       ├── unittest_define.mod
    │       ├── zeeman_input_define.mod
    │       └── zeeman_utility.mod
    └── libcrtm_v2.2.3.a
    
    2 directories, 169 files
    

安装 gempak

  • 下载最新版本的 gempark

    mkdir -p ${ROOT_DIR}/nwprod/gempak
    cd ${ROOT_DIR}/nwprod/gempak
    tar xvf gempak-7.5.1.tar ; rm gempak-7.5.1.tar
    ln -s GEMPAK7/ NAWIPS
    cd ${ROOT_DIR}/nwprod/gempak/NAWIPS
    
  • edit Gemenviron.profile

    export NAWIPS=${ROOT_DIR}/nwprod/gempak/GEMPAK7
    

    Note

    libxslt need to be installed Python version 3 is not working likely

  • compile

    . Gemenviron.profile
    make everything |& tee make.log
    

安装 decoders

# Use gempak envirs
# ------------------------

export NAWIPS=${ROOT_DIR}/nwprod/gempak/GEMPAK7

cd ${ROOT_DIR}/nwprod/gempak
cp NAWIPS/Gemenviron.profile .gempak
chmod +x .gempak
. .gempak
cd ${ROOT_DIR}/nwprod/decoders/decod_shared/lib

# Compile crex
# -------------------------

cd crex
rm libcrex.a
./makecrex.sh
cd ..
ln -sf crex/libcrex.a libcrex.a

# Compile madis
# ---------------------------

cd madis/src
make clean
make
cd ../..
ln -sf madis/lib/madislib.a libmadis.a

# Compile decod_ut
# ---------------------------

cd decod_ut
rm libdecod_ut.a
./makedecod_ut.sh
cd ..
ln -sf decod_ut/libdecod_ut.a libdecod_ut.a

# Compile bridge
# ---------------------------

cd bridge
rm libbridge.a
./makebridge.sh
cd ..
ln -fs bridge/libbridge.a libbridge.a

ln -fs ${ROOT_DIR}/nwprod/gempak/NAWIPS/os/linux64/lib/rsl.a librsl.a

# Compile decoders
# --------------------------

cd ${ROOT_DIR}/nwprod/gempak/NAWIPS/os/aix/lib
ln -fs gemlib.a libgemlib.a
ln -fs cgemlib.a libcgemlib.a

cd ${ROOT_DIR}/nwprod/decoders/decod_shared/include
ln -fs ${ROOT_DIR}/nwprod/gempak/NAWIPS/Gemenviron.profile .gempak
. .gempak
chmod +x make_decoder_links.sh
./make_decoder_links.sh
chmod +x make_all_decoders.sh
./make_all_decoders.sh
ecod_dccrad is not compiled due to the rsl.a

安装 obsproc

  1. 环境变量的设置

    export obsproc_dump_ver=v5.0.1
    export obsproc_dump_post_ver=v3.3.1
    export obsproc_prep_ver=v5.2.1
    export obsproc_prep_post_ver=v3.1.0
    export obsproc_rap_ver=v3.1.0
    export obsproc_shared_bufr_remorest_ver=v2.1.0
    export obsproc_shared_bufr_dumplist_ver=v2.0.2
    
  2. obsproc_shared

    cd ${ROOT_DIR}/nwprod/obsproc_shared/bufr_avgdata.v2.1.0/sorc
    ./clean.sh
    ./build.sh
    ./install.sh
    
    cd ${ROOT_DIR}/nwprod/obsproc_shared/bufr_cword.v1.0.0/sorc
    ./build.sh
    ./install.sh
    
    cd ${ROOT_DIR}/nwprod/obsproc_shared/bufr_remorest.${obsproc_shared_bufr_remorest_ver}/sorc
    ./clean.sh
    ./build.sh
    ./install.sh
    
  3. obsproc_dump

    cd ${ROOT_DIR}/nwprod/obsproc_dump.${obsproc_dump_ver}/sorc
    chmod +x clobber.sh
    ./clobber.sh
    chmod +x build.sh
    ./build.sh
    chmod +x install.sh
    ./install.sh
    
  4. obsproc_dump_post

    cd ${ROOT_DIR}/nwprod/obsproc_dump_post.${obsproc_dump_post_ver}/sorc
    mkdir -p ../exec
    chmod +x clean.sh
    ./clean.sh
    cd bufr_datacount.fd
    make
    make install
    cd -
    
    cd bufr_listdumps.fd
    make
    make install
    
  5. obsproc_prep

    cd ${ROOT_DIR}/nwprod/obsproc_prep.${obsproc_prep_ver}/sorc
    mkdir -p ../exec
    chmod +x clean.sh
    ./clean.sh
    chmod +x build.sh
    ./build.sh
    chmod +x install.sh
    ./install.sh
    
  6. obsproc_prep_post

    cd ${ROOT_DIR}/nwprod/obsproc_prep_post.${obsproc_prep_post_ver}/sorc
    mkdir -p ../exec
    chmod +x clean.sh
    ./clean.sh
    
    cd gdascounts_ave.fd
    make
    make install
    cd -
    
    cd global_postevents.fd
    make
    make install
    cd -
    

安装 prod_util

  1. fsync_file.cd

    编译步骤:

    cd ${ROOT_DIR}/nwprod/prod_util.v1.1.3/sorc/fsync_file.cd
    rm -f fsync_file
    make
    mv fsync_file ${ROOT_DIR}/nwprod/prod_util.v1.1.3/ush/.
    
  2. mdate.fd

    编译步骤:

    cd ${ROOT_DIR}/nwprod/prod_util.v1.1.3/sorc/mdate.fd
    rm -f mdate
    make
    mv mdate ${ROOT_DIR}/nwprod/prod_util.v1.1.3/ush/.
    
  3. ndate

    编译步骤:

    cd ${ROOT_DIR}/nwprod/prod_util.v1.1.3/sorc/ndate.fd
    rm -f ndate
    make
    mv ndate ${ROOT_DIR}/nwprod/prod_util.v1.1.3/ush/.
    
  4. nhour

    编译步骤:

    cd ${ROOT_DIR}/nwprod/prod_util.v1.1.3/sorc/nhour.fd
    rm -f nhour
    make
    mv nhour ${ROOT_DIR}/nwprod/prod_util.v1.1.3/ush/.
    
  5. ~/.profile

    export PATH=${ROOT_DIR}/nwprod/prod_util.v1.1.3/ush:$PATH
    

安装 grib_util

  1. copygb2.fd

    编译步骤:

    cd ${ROOT_DIR}/nwprod/grib_util.v1.1.1/sorc/copygb2.fd
    export IP_INCd=${ROOT_DIR}/nwprod/lib/ip/v3.0.0/ip/v3.0.0/gnu/include/ip_v3.0.0_d
    export IP_LIBd=${ROOT_DIR}/nwprod/lib/ip/v3.0.0/ip/v3.0.0/gnu/libip_v3.0.0_d.a
    cp makefile_ubuntu_gnu makefile
    make clean
    make
    make install
    
  2. degrib2.fd

    编译步骤:

    cd ${ROOT_DIR}/nwprod/grib_util.v1.1.1/sorc/degrib2.fd
    cp makefile_ubuntu_gnu makefile
    make clean
    make
    make install
    
  3. grbindex.fd

    编译步骤:

    cd ${ROOT_DIR}/nwprod/grib_util.v1.1.1/sorc/grbindex.fd
    cp makefile_ubuntu_gnu makefile
    make clean
    make
    make install
    
  4. tocgrib2.fd

    编译步骤:

    cd ${ROOT_DIR}/nwprod/grib_util.v1.1.1/sorc/tocgrib2.fd
    cp makefile_ubuntu_gnu makefile
    make clean
    make
    make install
    
  5. tocgrib.fd

    编译步骤:

    cd ${ROOT_DIR}/nwprod/grib_util.v1.1.1/sorc/tocgrib.fd
    cp makefile_ubuntu_gnu makefile
    make clean
    make
    make install
    
  6. cnvgrib.fd

    编译步骤:

    cd ${ROOT_DIR}/nwprod/grib_util.v1.1.1/sorc/cnvgrib.fd
    cp makefile_ubuntu_gnu makefile
    make clean
    make
    make install
    
  7. copygb.fd

    编译步骤:

    cd ${ROOT_DIR}/nwprod/grib_util.v1.1.1/sorc/copygb.fd
    cp makefile_ubuntu_gnu makefile
    make clean
    make
    make install
    
  8. grb2index.fd

    编译步骤:

    cd ${ROOT_DIR}/nwprod/grib_util.v1.1.1/sorc/grb2index.fd
    cp makefile_ubuntu_gnu makefile
    make clean
    make
    make install
    
  9. grib2grib.fd

    编译步骤:

    cd ${ROOT_DIR}/nwprod/grib_util.v1.1.1/sorc/grib2grib.fd
    cp makefile_ubuntu_gnu makefile
    make clean
    make
    make install
    
  10. tocgrib2super.fd

    编译步骤:

    cd ${ROOT_DIR}/nwprod/grib_util.v1.1.1/sorc/tocgrib2super.fd
    cp makefile_ubuntu_gnu makefile
    make clean
    make
    make install
    
  11. wgrib.cd

    编译步骤:

    cd ${ROOT_DIR}/nwprod/grib_util.v1.1.1/sorc/wgrib.cd
    cp makefile_wcoss_theia makefile
    rm wgrib
    make
    make install
    
  12. wgrib2

    必须使用较新版本的 wgrib2 , 下载 wgrib2.v2.0.8

    cd ${ROOT_DIR}/nwprod/grib_util.v1.1.1/
    mv wgrib2.tgz.v2.0.8 wgrib2.tgz
    tar xvf wgrib2.tgz
    rm -fr sorc/wgrib2.cd
    mv grib2 sorc/wgrib2.cd
    cd sorc/wgrib2.cd
    export CC=gcc
    export CPP=/usr/bin/cpp
    export FC=gfortran
    make
    cp wgrib2/wgrib2 ../../exec/.
    
  13. check

    grib_util.v1.1.1/sorc> tree -L 1 ../exec/
    ../exec/
    ├── cnvgrib
    ├── copygb
    ├── copygb2
    ├── degrib2
    ├── grb2index
    ├── grbindex
    ├── grib2grib
    ├── tocgrib
    ├── tocgrib2
    ├── tocgrib2super
    ├── wgrib
    └── wgrib2
    
    0 directories, 12 files
    

安装 bufr_util

  1. bufr_tranjb

    编译步骤:

    cd ${ROOT_DIR}/nwprod/bufr_util/sorc/bufr_tranjb.fd
    mkdir -p ${ROOT_DIR}/nwprod/bufr_util/exc
    make
    make install
    
  2. cwordsh

    编译步骤:

    cd ${ROOT_DIR}/nwprod/bufr_util/sorc/cwordsh.fd
    make
    mv cwordsh ../../exec/.
    
  3. debufr

    编译步骤:

    cd ${ROOT_DIR}/nwprod/bufr_util/sorc/debufr.fd
    make
    make install
    
  4. check

    nwp@VM-0-8-ubuntu:~/src/repository/nwprod/bufr_util/sorc/debufr.fd$ tree -L 1 ../../exec/
    ../../exec/
    |-- bufr_tranjb
    |-- cwordsh
     -- debufr
    
    0 directories, 3 files
    

安装 rap

  1. 公用环境变量

    将如下环境变量加入到 ~/.bashrc

    export NETCDF=$(spack location -i netcdf-fortran)
    export PNETCDF=$(spack location -i parallel-netcdf)
    export WRFIO_NCD_LARGE_FILE_SUPPORT=1
    export WRF_DFI_RADAR=1
    

    temporary enviromental variable:

    export BASE=${ROOT_DIR}/nwprod/rap.v4.0.12/sorc

  2. rap_wrfarw_serial

    编译步骤:

    cd ${BASE}/rap_wrfarw.fd/WRFV3.8.1
    ./clean -aa
    ./clean -a
    ./clean
    cd external/io_int/
    rm -f *.f *.o *.obj *.i *.mod *.a diffwrf io_int_idx_tags.h
    cd -
    cp configure.wrf.serial configure.wrf
    ./compile em_real |& tee make.log
    
  3. rap_wrfpost

    Note

    我们使用 community 版本的 UPP下载

    cd ${BASE}
    # 解压缩在该目录下
    cd UPPV4.0.1
    ./clean -a
    cp configure.upp.gnu configure.upp
    mkdir -p include lib bin
    
    ./compile |& tee make.log
    cp bin/unipost.exe ../../exec/rap_wrfpost
    
  4. rap_update_bc

    编译步骤:

    cd ${BASE}/rap_update_bc.fd
    make clean
    make
    
  5. rap_wps

    编译步骤:

    cd ${BASE}/rap_wps.fd/WPSV3.9.0.1
    ./clean -aa
    ./clean -a
    ./clean
    cp configure.wps.optim configure.wps
    ./compile |& tee make.log
    cp ungrib/src/ungrib.exe ${BASE}/../exec/rap_wps_ungrib
    cp metgrid/src/metgrid.exe ${BASE}/../exec/rap_wps_metgrid
    

    Note

    ${BASE}/../parm/rap_Vtable.gfs 必须替换成为 WRF-WPS 提供的给**community**用户使用的 Vtable

  6. rap_wrfarw

    编译步骤:

    cd ${BASE}/rap_wrfarw.fd/WRFV3.8.1
    ./clean -aa
    ./clean -a
    ./clean
    cd external/io_int/
    rm -f *.f *.o *.obj *.i *.mod *.a diffwrf io_int_idx_tags.h
    cd -
    cp configure.wrf.optim configure.wrf
    ./compile em_real |& tee make.log
    cp main/real.exe ${BASE}/../exec/rap_wrfarw_real
    cp main/wrf.exe ${BASE}/../exec/rap_wrfarw_fcst
    
  7. rap_gsi

    编译步骤:

    export NETCDF_INCLUDE="${NETCDF}/include"
    export NETCDF_LDFLAGS_F="-L${NETCDF}/lib -lnetcdff -lnetcdf"
    cd ${BASE}/rap_gsi.fd
    cp Makefile.conf.wcoss Makefile.conf
    make clean
    cd gsdcloud
    cp Makefile.conf.wcoss Makefile.conf
    make clean
    make
    cd ..
    make
    make install
    make library
    
  8. rap_process_enkf

    编译步骤:

    cd ${BASE}/rap_process_enkf.fd
    cp Makefile.conf_gnu Makefile.conf
    make clean
    make
    # it will fail, you have to manually build two files with fixed-form
    mpif90 -FI -D_REAL8_ -DWRF -DRR_CLOUDANALYSIS -I./ -I/glade/work/xinzhang/repository/nwprod/rap.v4.0.12/sorc/rap_gsi.fd -I/glade/work/xinzhang/repository/nwprod/lib/crtm/v2.2.3/gnu/include/crtm_v2.2.3/ -I/glade/work/xinzhang/repository/nwprod/lib/sfcio/v1.0.0/gnu/include/sfcio_v1.0.0_4 -I/glade/work/xinzhang/repository/nwprod/lib/sigio/v2.0.1/src/sigio_v2.0.1/include -I/glade/work/xinzhang/repository/nwprod/lib/nemsio/incmod/nemsio -I/glade/u/home/xinzhang/spack/opt/spack/linux-sles12-broadwell/gnu-19.0.5.281/netcdf-fortran-4.5.2-iiqxmna2ejlv4c6g5oot4t4l5wicuau2/include -I/glade/work/xinzhang/repository/nwprod/lib/w3emc/v2.2.0/src/gnu/w3emc_v2.2.0_d -O3 -traceback -convert big_endian -assume byterecl -g -fp-model source -qopenmp   -c dlarnv.f90
    mpif90 -FI -D_REAL8_ -DWRF -DRR_CLOUDANALYSIS -I./ -I/glade/work/xinzhang/repository/nwprod/rap.v4.0.12/sorc/rap_gsi.fd -I/glade/work/xinzhang/repository/nwprod/lib/crtm/v2.2.3/gnu/include/crtm_v2.2.3/ -I/glade/work/xinzhang/repository/nwprod/lib/sfcio/v1.0.0/gnu/include/sfcio_v1.0.0_4 -I/glade/work/xinzhang/repository/nwprod/lib/sigio/v2.0.1/src/sigio_v2.0.1/include -I/glade/work/xinzhang/repository/nwprod/lib/nemsio/incmod/nemsio -I/glade/u/home/xinzhang/spack/opt/spack/linux-sles12-broadwell/gnu-19.0.5.281/netcdf-fortran-4.5.2-iiqxmna2ejlv4c6g5oot4t4l5wicuau2/include -I/glade/work/xinzhang/repository/nwprod/lib/w3emc/v2.2.0/src/gnu/w3emc_v2.2.0_d -O3 -traceback -convert big_endian -assume byterecl -g -fp-model source -qopenmp   -c dlaruv.f90
    make
    make install
    
  9. rap_full_cycle_surface

    编译步骤:

    cd ${BASE}/rap_full_cycle_surface.fd
    make clean
    make
    
  10. rap_process_cloud

    编译步骤:

    cd ${BASE}/rap_process_cloud.fd
    make clean
    make
    
  11. rap_update_fields

    编译步骤:

    cd ${BASE}/rap_update_fields.fd
    make clean
    make
    
  12. rap_process_sst

    编译步骤:

    cd ${BASE}/rap_process_sst.fd
    make clean
    make
    
  13. rap_update_gvf

    编译步骤:

    cd ${BASE}/rap_update_gvf.fd
    make clean
    make
    
  14. rap_process_imssnow.fd

    编译步骤:

    cd ${BASE}/rap_process_imssnow.fd
    make clean
    make