#### Manual de Compilação e Instalação do BRAMS Operacional

#### TAG BRAMS-OPER-20201013

19 de outubro de 2020
Luiz Flávio Rodrigues

## Baixar pacote

Pegar o pacote completo usando subversion no repositório de tags do INPE/CPTEC:

    svn co https://svn.cptec.inpe.br/brams/tags/BRAMS-OPER-20201013

## Carregar o módulo skylake

    module load craype-x86-skylake

## Configurar e compilar o modelo

    ./configure --program-prefix=BRAMS_5.5 --prefix=/lustre_xc50/luiz_flavio --enable-jules --with-chem=RELACS_TUV --with-aer=SIMPLE --with-fpcomp=ftn --with-cpcomp=cc --with-fcomp=ftn --with-ccomp=cc

> Nota: Substitua /lustre_xc50/luiz_flavio pelo diretório onde será criado o subdiretório bin

Altere manualmente as linhas do Makefile (criado pelo configure) indicadas abaixo, trocando -O3 por -O0 para evitar a agressividade do compilador CCE/CRAY:

     F_COMMAND_ADVC         =$(VERBOSE_FC_O0) $(FC) -c -O0
     F_COMMAND_AERCLIM      =$(VERBOSE_FC_O3) $(FC) -c -O3
     F_COMMAND_AEROSOL      =$(VERBOSE_FC_O3) $(FC) -c -O3
     F_COMMAND_BC           =$(VERBOSE_FC_O0) $(FC) -c -O0
     F_COMMAND_CCATT        =$(VERBOSE_FC_O3) $(FC) -c -O3
     F_COMMAND_COMM_SPC     =$(VERBOSE_FC_O0) $(FC) -c -O0
     F_COMMAND_CUPARM       =$(VERBOSE_FC_O0) $(FC) -c -O0
     F_COMMAND_ENERGY       =$(VERBOSE_FC_O3) $(FC) -c -O3
     F_COMMAND_EVAL         =$(VERBOSE_FC_O3) $(FC) -c -O3
     F_COMMAND_FDDA         =$(VERBOSE_FC_O0) $(FC) -c -O0
     F_COMMAND_INIT         =$(VERBOSE_FC_O3) $(FC) -c -O3
     F_COMMAND_IO           =$(VERBOSE_FC_O0) $(FC) -c -O0
     F_COMMAND_ISAN         =$(VERBOSE_FC_O0) $(FC) -c -O0
     F_COMMAND_ISAN_CHEM    =$(VERBOSE_FC_O0) $(FC) -c -O0
     F_COMMAND_ISAN_MODS    =$(VERBOSE_FC_O0) $(FC) -c -O0
     F_COMMAND_JULES        =$(VERBOSE_FC_O0) $(FC) -c -O0
     F_COMMAND_MATRIX       =$(VERBOSE_FC_O0) $(FC) -c -O0
     F_COMMAND_MEMORY       =$(VERBOSE_FC_O0) $(FC) -c -O0
     F_COMMAND_MICRO        =$(VERBOSE_FC_O3) $(FC) -c -O3
     F_COMMAND_MKSFC        =$(VERBOSE_FC_O0) $(FC) -c -O0
     F_COMMAND_MODEL        =$(VERBOSE_FC_O0) $(FC) -c -O0
     F_COMMAND_MODEL_CHEM   =$(VERBOSE_FC_O0) $(FC) -c -O0
     F_COMMAND_MPI          =$(VERBOSE_FC_O0) $(FC) -c -O0
     F_COMMAND_NESTING      =$(VERBOSE_FC_O0) $(FC) -c -O0
     F_COMMAND_POST_SRC     =$(VERBOSE_FC_O3) $(FC) -c -O3
     F_COMMAND_RADIATE      =$(VERBOSE_FC_O0) $(FC) -c -O0
     F_COMMAND_RRTMG        =$(VERBOSE_FC_O0) $(FC) -c -O0
     F_COMMAND_STILT        =$(VERBOSE_FC_O0) $(FC) -c -O0
     F_COMMAND_SURFACE      =$(VERBOSE_FC_O3) $(FC) -c -O3
     F_COMMAND_SOIL_MOISTURE=$(VERBOSE_FC_O3) $(FC) -c -O3
     F_COMMAND_TEB_SPM      =$(VERBOSE_FC_O0) $(FC) -c -O0
     F_COMMAND_TURB         =$(VERBOSE_FC_O0) $(FC) -c -O0
     F_COMMAND_TUV          =$(VERBOSE_FC_O0) $(FC) -c -O0
     F_COMMAND_UTILS_MODS   =$(VERBOSE_FC_O0) $(FC) -c -O0
     F_COMMAND_UTILS_TOOLS  =$(VERBOSE_FC_O3) $(FC) -c -O3
     F_COMMAND_WIND_FARM    =$(VERBOSE_FC_O3) $(FC) -c -O3

##### Compile o código do modelo:

    make

> OBS: A compilação demora muito tempo. Fique atento para o sistema não matar o processo.

Faça a instalação do código:

    make install

> OBS: O executável será instalado no diretório apontado em --prefix do configure

##### Baixe e compíle o API de grib2

> OBS: Caso queira usar o grib2 instalado em minha área pule essa etapa. O meu está instalado em `/lustre_xc50/luiz_flavio/models/BRAMS-5.5/auxProgs/PRE-BRAMS/install/grib2/`

O modelo usa API do grib2 para ler os dados do GFS. Para isso crie um diretório de instalação, vá até ele e baixe e descompacte a API:

    wget https://www.ftp.cpc.ncep.noaa.gov/wd51we/wgrib2/wgrib2.tgz
    tar -zxvf wgrib2.tgz
    cd grib2

Edite o makefile e altere as variáveis conforme a lista abaixo:

    USE_NETCDF3=0
    USE_NETCDF4=0
    USE_REGEX=1
    USE_TIGGE=1
    USE_MYSQL=0
    USE_IPOLATES=3
    USE_SPECTRAL=0
    USE_UDF=0
    USE_OPENMP=0
    USE_PROJ4=0
    USE_WMO_VALIDATION=0
    DISABLE_TIMEZONE=0
    MAKE_FTN_API=1
    DISABLE_ALARM=0
    USE_G2CLIB=0
    USE_PNG=0
    USE_JASPER=0
    USE_AEC=0

Alterne o Módulo de linguagem de CRAY para GNU:

    module swap PrgEnv-cray/6.0.4 PrgEnv-gnu

Compile a API e bibliotecas:

    make CC=gcc FC=gfortran
    make CC=gcc FC=gfortran lib

> OBS: Apesar de alguns erros serem notados na compilação, as libs necessárias são criadas: libwgrib2.a e libwgrib2_api.a, e os módulos wgrib2lowapi.mod e wgrib2api.mod. Verifique se os mesmos foram criados no subdiretório lib.

##### Compile o prep do modelo:

Vá para o diretório de programas auxiliares:

    cd BRAMS-OPER-20201013/auxProgs/PRE-BRAMS/build

Alterne o Módulo de linguagem de CRAY par GNU:

    module swap PrgEnv-cray/6.0.4 PrgEnv-gnu

Edite o arquivo paths.mk para colocar as bibliotecas necessárias (grib2 e netCDF) e o caminho correto para o modelo:

    # USER RELATED
    CHEM_MECH=RELACS_TUV
    GRIB2_PATH=/lustre_xc50/luiz_flavio/models/BRAMS-5.5/auxProgs/PRE-BRAMS/install/grib2/
    NETCDFC_PATH=/opt/cray/pe/netcdf/4.4.1.1.6/gnu/51/
    NETCDFF_PATH=/opt/cray/pe/netcdf/4.4.1.1.6/gnu/51/

> OBS: Coloque corretamente os endereços. Para o grib2 use o caminho no qual você compilou a API grib2.

Compile o código:

    make OPT=gnu

O executável prep_1.0 será colocado no diretório bin acima.

##### Compile o prep-chem do modelo:

Vá para o diretório PREP-CHEM-SRC-1.8.3:

    cd ../../PREP-CHEM-SRC-1.8.3/bin/build

Edite o arquivo include.mk.gfortran colocando as bibliotecas corretas:

    NETCDF=/opt/cray/pe/netcdf/4.4.1.1.6/gnu/51/

    HDF5=/opt/cray/pe/hdf5/default/gnu/5.1/

Copie o arquivo de aerossóis do código para a área de src:

    cp ../../../../src/brams/ccatt/aer1_list_SIMPLE.f90 ../../src/aer1_list.f90

compile o código

    make OPT=gfortran CHEM=RELACS_TUV

> OBS: O executável prep_chem_sources_RELACS_TUV_.exe será instalado no diretório acima.

##### Compile os programas geradores de Focos:

Vá para o diretório firesTrad

    cd ../../../firesTrad/build

edite o arquivo make.sh para ajustar o caminho das bibliotecas hdf5 necessárias para os dados do meteosat, procure a linha com a compilação de rmeteosat23bem.f90 e proceda a alteração conforme a linha abaixo

    gfortran -m64 -ffree-form -ffree-line-length-none -cpp -O3 -frecord-marker=4 -o rmeteosat23bem.exe hdf5utils.f90 rmeteosat23bem.f90 -I/opt/cray/pe/hdf5/1.10.1.1/GNU/5.1/include -L/opt/cray/pe/hdf5/1.10.1.1/GNU/5.1/lib/ /opt/cray/pe/hdf5/1.10.1.1/GNU/5.1/lib/libhdf5hl_fortran.a /opt/cray/pe/hdf5/1.10.1.1/GNU/5.1/lib/libhdf5_hl.a /opt/cray/pe/hdf5/1.10.1.1/GNU/5.1/lib/libhdf5_fortran.a /opt/cray/pe/hdf5/1.10.1.1/GNU/5.1/lib/libhdf5.a -lz -lrt -ldl -lm -Wl,-rpath -Wl,/opt/cray/pe/hdf5/1.10.1.1/GNU/5.1/lib/

rode o shell que faz o make

    ./make.sh

> Nota: 4 programas serão gerados no diretório bin acima, dsa23bem.exe, goes23bem.exe, rmeteosat23bem.exe e rviirs23bem.exe.

##### Conclusão

Todos os programas necessários para a rodada do modelo, desde os dados de focos, condições iniciais e de contorno e background de química estão gerados. Os scripts necessários para a aquisição dos dados e das rodadas serão abordados no documento "manual da operação".