diff --git a/.travis.yml b/.travis.yml index efdf6cc..2a6cda9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,78 +1,120 @@ #====================================================================== -# Project settings +# Which branches are impacted by this #====================================================================== -# Only build master. branches: only: - master - -language: fortran + - develop + - /^release-v.*$/ #====================================================================== -# Environment +# Build Matrix #====================================================================== +env: + matrix: + - name=real_s core=em_real par=32 nest=1 flag=' ' data_loc=em_real test=07NE proc=1 cenv='WRF_EM_CORE=1' + - name=real_o core=em_real par=33 nest=1 flag=' ' data_loc=em_real test=07NE proc=3 cenv='WRF_EM_CORE=1' + - name=real_m core=em_real par=34 nest=1 flag=' ' data_loc=em_real test=07NE proc=3 cenv='WRF_EM_CORE=1' + - name=nmm_s core=nmm_real par=32 nest=1 flag=' ' data_loc=nmm_nest test=01 proc=1 cenv='WRF_NMM_CORE=1' + - name=nmm_m core=nmm_real par=34 nest=1 flag=' ' data_loc=nmm_nest test=01 proc=3 cenv='WRF_NMM_CORE=1' + - name=qss_s core=em_quarter_ss par=32 nest=1 flag=' ' data_loc=em_quarter_ss test=02NE proc=1 cenv='WRF_EM_CORE=1' + - name=qss_o core=em_quarter_ss par=33 nest=1 flag=' ' data_loc=em_quarter_ss test=02NE proc=3 cenv='WRF_EM_CORE=1' + - name=qss_m core=em_quarter_ss par=34 nest=1 flag=' ' data_loc=em_quarter_ss test=02NE proc=3 cenv='WRF_EM_CORE=1' + - name=bw_s core=em_b_wave par=32 nest=1 flag=' ' data_loc=em_b_wave test=1NE proc=1 cenv='WRF_EM_CORE=1' + - name=bw_o core=em_b_wave par=33 nest=1 flag=' ' data_loc=em_b_wave test=1NE proc=3 cenv='WRF_EM_CORE=1' + - name=bw_m core=em_b_wave par=34 nest=1 flag=' ' data_loc=em_b_wave test=1NE proc=3 cenv='WRF_EM_CORE=1' + - name=real8_s core=em_real par=32 nest=1 flag=' -r8' data_loc=em_real8 test=14 proc=1 cenv='WRF_EM_CORE=1' + - name=real8_o core=em_real par=33 nest=1 flag=' -r8' data_loc=em_real8 test=14 proc=3 cenv='WRF_EM_CORE=1' + - name=real8_m core=em_real par=34 nest=1 flag=' -r8' data_loc=em_real8 test=14 proc=3 cenv='WRF_EM_CORE=1' + - name=qss8_s core=em_quarter_ss par=32 nest=1 flag=' -r8' data_loc=em_quarter_ss8 test=03 proc=1 cenv='WRF_EM_CORE=1' + - name=qss8_o core=em_quarter_ss par=33 nest=1 flag=' -r8' data_loc=em_quarter_ss8 test=03 proc=3 cenv='WRF_EM_CORE=1' + - name=qss8_m core=em_quarter_ss par=34 nest=1 flag=' -r8' data_loc=em_quarter_ss8 test=03 proc=3 cenv='WRF_EM_CORE=1' + - name=move_m core=em_real par=34 nest=3 flag=' ' data_loc=em_move test=01 proc=3 cenv='WRF_EM_CORE=1' + - name=fire_s core=em_fire par=32 nest=1 flag=' ' data_loc=em_fire test=01 proc=1 cenv='WRF_EM_CORE=1' + - name=fire_o core=em_fire par=33 nest=1 flag=' ' data_loc=em_fire test=01 proc=3 cenv='WRF_EM_CORE=1' + - name=fire_m core=em_fire par=34 nest=1 flag=' ' data_loc=em_fire test=01 proc=3 cenv='WRF_EM_CORE=1' + - name=hill_s core=em_hill2d_x par=32 nest=0 flag=' ' data_loc=em_hill2d_x test=01 proc=1 cenv='WRF_EM_CORE=1' +# NO chem, ever, I am not kidding, for reals! +# - name=chem_s core=em_real par=32 nest=1 flag=' ' data_loc=em_chem test=1 proc=1 cenv='WRF_CHEM=1' +# - name=chem_m core=em_real par=34 nest=1 flag=' ' data_loc=em_chem test=1 proc=3 cenv='WRF_CHEM=1' -# Code is Fortran. -addons: - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - gcc-6 - - gfortran-6 - - g++-6 - - lcov -#====================================================================== -# Build Matrix -#====================================================================== -matrix: - include: - - os: linux - compiler: gcc - sudo: false - dist: trusty - - os: osx - compiler: gcc - osx_image: xcode9.4 +services: + - docker #====================================================================== # Building #====================================================================== before_install: - - | - if [[ "$TRAVIS_OS_NAME" == "osx" ]] ; then - brew install gcc@7 || true; - brew link --overwrite gcc@7; - fi - | if [[ "$TRAVIS_OS_NAME" == "linux" ]] ; then pip install --user cpp-coveralls fi -before_script: - - | - if [[ "$TRAVIS_OS_NAME" == "osx" ]] ; then - export CC="clang" FC="gfortran-7" CXX="clang++" ; - fi - - | - if [[ "$TRAVIS_OS_NAME" == "linux" ]] ; then - export CC="gcc-6" FC="gfortran-6" CXX="g++-6" ; - fi -# - export CC="gcc-6" FC="gfortran-6" CXX="g++-6" ; - +#====================================================================== +# Here are the run steps +#====================================================================== script: - - make + - date + - sed -e 's/_HERE1_/"DAVE START"/' -e 's/_HERE2_/"DAVE END CLONE"/' Dockerfile-template > Dockerfile + - date + - docker build -t wrf_regtest --build-arg argname=regtest . + - date + - docker images -a + - date + - docker run -d -t --name ${name} wrf_regtest + - date + - docker ps -a + - date + - travis_wait 25 docker exec ${name} ./script.csh BUILD CLEAN ${par} ${nest} ${core} ${flag} J=-j@3 ${cenv} + - date + - OK=0 - | - if [[ "$TRAVIS_OS_NAME" == "linux" ]] ; then - export LD_LIBRARY_PATH=${PWD}/schemes/check/src/check-build - make test - fi + if [ $OK -eq 0 ] ; then + echo FILE STATUS + docker exec ${name} ls -ls WRF/main/wrf.exe + OK_wrf=$? + echo OK_wrf $OK_wrf + docker exec ${name} ls -ls WRF/main/real.exe + OK_real=$? + echo OK_real $OK_real + docker exec ${name} ls -ls WRF/main/real_nmm.exe + OK_nmm=$? + echo OK_nmm $OK_nmm + docker exec ${name} ls -ls WRF/main/ideal.exe + OK_ideal=$? + echo OK_ideal $OK_ideal + fi + - date + - docker exec ${name} ls -ls WRF/main - | - if [[ "$TRAVIS_OS_NAME" == "osx" ]] ; then - export DYLD_LIBRARY_PATH=${PWD}/schemes/check/src/check-build - make test + if [ $OK_wrf = 0 ] && ([ $OK_real = 0 ] || [ $OK_nmm = 0 ] || [ $OK_ideal = 0 ]) ; then + date + docker exec ${name} ./script.csh RUN ${core} ${par} ${data_loc} ${test} NP=${proc} OMP_NUM_THREADS=${proc} + date + docker exec ${name} cat WRF/test/${core}/real.print.out + date + docker exec ${name} ls -ls WRF/test/${core} + date + docker exec ${name} ls -ls wrfoutput + date + else + docker exec ${name} gfortran --version + docker exec ${name} gcc --version + docker exec ${name} ls -ls WRF + docker exec ${name} ls -ls WRF/main + docker exec ${name} ls -ls WRF/compile.log.${data_loc}.${par} + docker exec ${name} grep Error WRF/compile.log.${data_loc}.${par} + docker exec ${name} cat WRF/compile.log.${data_loc}.${par} + date fi + - docker stop ${name} + - date + - docker rm ${name} + - date + - docker rmi wrf_regtest + - date + - env | grep TRAVIS_ #====================================================================== # Notifications diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..5ff81a7 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,163 @@ +# +FROM centos:latest +MAINTAINER Dave Gill + +ENV WRF_VERSION 4.0.3 +ENV WPS_VERSION 4.0.2 +ENV NML_VERSION 4.0.2 + +# Set up base OS environment + +RUN yum -y update +RUN yum -y install scl file gcc gcc-gfortran gcc-c++ glibc.i686 libgcc.i686 libpng-devel jasper \ + jasper-devel hostname m4 make perl tar bash tcsh time wget which zlib zlib-devel \ + openssh-clients openssh-server net-tools fontconfig libgfortran libXext libXrender \ + ImageMagick sudo epel-release git + +# Newer version of GNU compiler, required for WRF 2003 and 2008 Fortran constructs + +RUN yum -y install centos-release-scl \ + && yum -y install devtoolset-8 \ + && yum -y install devtoolset-8-gcc devtoolset-8-gcc-gfortran devtoolset-8-gcc-c++ \ + && scl enable devtoolset-8 bash \ + && scl enable devtoolset-8 tcsh + +RUN groupadd wrf -g 9999 +RUN useradd -u 9999 -g wrf -G wheel -M -d /wrf wrfuser +RUN mkdir /wrf \ + && chown -R wrfuser:wrf /wrf \ + && chmod 6755 /wrf + +# Build the libraries with a parallel Make +ENV J 4 + +# Build OpenMPI +RUN mkdir -p /wrf/libs/openmpi/BUILD_DIR +RUN source /opt/rh/devtoolset-8/enable \ + && cd /wrf/libs/openmpi/BUILD_DIR \ + && curl -L -O https://download.open-mpi.org/release/open-mpi/v4.0/openmpi-4.0.0.tar.gz \ + && tar -xf openmpi-4.0.0.tar.gz \ + && cd openmpi-4.0.0 \ + && ./configure --prefix=/usr/local &> /wrf/libs/build_log_openmpi_config \ + && echo dummy printout to keep travis happy openmpi config \ + && make all install \ + && echo "make all install | awk 'NR % 1000 == 0'" \ + && echo "make all install &> /wrf/libs/build_log_openmpi_make" \ + && echo dummy printout to keep travis happy openmpi make \ + && cd / \ + && rm -rf /wrf/libs/openmpi/BUILD_DIR + +# Build HDF5 libraries +RUN mkdir -p /wrf/libs/hdf5/BUILD_DIR +RUN source /opt/rh/devtoolset-8/enable \ + && cd /wrf/libs/hdf5/BUILD_DIR \ + && git clone https://bitbucket.hdfgroup.org/scm/hdffv/hdf5.git \ + && cd hdf5 \ + && git checkout hdf5-1_10_4 \ + && ./configure --enable-fortran --enable-cxx --prefix=/usr/local/ &> /wrf/libs/build_log_hdf5_config \ + && echo dummy printout to keep travis happy hdf5 config \ + && make install &> /wrf/libs/build_log_hdf5_make \ + && echo dummy printout to keep travis happy hdf5 make \ + && rm -rf /wrf/libs/hdf5/BUILD_DIR +ENV LD_LIBRARY_PATH /usr/local/lib + +# Build netCDF C and Fortran libraries +RUN yum -y install libcurl-devel zlib-devel +ENV NETCDF /wrf/libs/netcdf +RUN mkdir -p ${NETCDF}/BUILD_DIR +RUN source /opt/rh/devtoolset-8/enable \ + && cd ${NETCDF}/BUILD_DIR \ + && curl -L -O https://github.com/Unidata/netcdf-c/archive/v4.6.2.tar.gz \ + && curl -L -O https://github.com/Unidata/netcdf-fortran/archive/v4.4.5.tar.gz \ + && tar -xf v4.6.2.tar.gz \ + && cd netcdf-c-4.6.2 \ + && ./configure --prefix=${NETCDF} &> /wrf/libs/build_log_ncc_config \ + && echo dummy printout to keep travis happy ncc config \ + && make install &> /wrf/libs/build_log_ncc_make \ + && echo dummy printout to keep travis happy ncc make +RUN source /opt/rh/devtoolset-8/enable \ + && env \ + && cd ${NETCDF}/BUILD_DIR \ + && tar -xf v4.4.5.tar.gz \ + && cd netcdf-fortran-4.4.5/ \ + && export LD_LIBRARY_PATH=${NETCDF}/lib:${LD_LIBRARY_PATH} \ + && CPPFLAGS=-I${NETCDF}/include LDFLAGS=-L${NETCDF}/lib ./configure --prefix=${NETCDF} &> /wrf/libs/build_log_ncf_config \ + && echo dummy printout to keep travis happy ncf config \ + && make install &> /wrf/libs/build_log_ncf_make \ + && echo dummy printout to keep travis happy ncf make + +RUN mkdir -p /var/run/sshd \ + && ssh-keygen -A \ + && sed -i 's/#PermitRootLogin yes/PermitRootLogin yes/g' /etc/ssh/sshd_config \ + && sed -i 's/#RSAAuthentication yes/RSAAuthentication yes/g' /etc/ssh/sshd_config \ + && sed -i 's/#PubkeyAuthentication yes/PubkeyAuthentication yes/g' /etc/ssh/sshd_config + +RUN mkdir -p /wrf/WPS_GEOG /wrf/wrfinput /wrf/wrfoutput \ + && chown -R wrfuser:wrf /wrf /wrf/WPS_GEOG /wrf/wrfinput /wrf/wrfoutput /usr/local \ + && chmod 6755 /wrf /wrf/WPS_GEOG /wrf/wrfinput /wrf/wrfoutput /usr/local + +# Download NCL +RUN curl -SL https://ral.ucar.edu/sites/default/files/public/projects/ncar-docker-wrf/nclncarg-6.3.0.linuxcentos7.0x8664nodapgcc482.tar.gz | tar zxC /usr/local +ENV NCARG_ROOT /usr/local + +# Set environment for interactive container shells +RUN echo export LDFLAGS="-lm" >> /etc/bashrc \ + && echo export NETCDF=${NETCDF} >> /etc/bashrc \ + && echo export JASPERINC=/usr/include/jasper/ >> /etc/bashrc \ + && echo export JASPERLIB=/usr/lib64/ >> /etc/bashrc \ + && echo export LD_LIBRARY_PATH="/opt/rh/devtoolset-8/root/usr/lib/gcc/x86_64-redhat-linux/8:/usr/lib64/openmpi/lib:${NETCDF}/lib:${LD_LIBRARY_PATH}" >> /etc/bashrc \ + && echo export PATH=".:/opt/rh/devtoolset-8/root/usr/bin:/usr/lib64/openmpi/bin:${NETCDF}/bin:$PATH" >> /etc/bashrc + +RUN echo setenv LDFLAGS "-lm" >> /etc/csh.cshrc \ + && echo setenv NETCDF "${NETCDF}" >> /etc/csh.cshrc \ + && echo setenv JASPERINC "/usr/include/jasper/" >> /etc/csh.cshrc \ + && echo setenv JASPERLIB "/usr/lib64/" >> /etc/csh.cshrc \ + && echo setenv LD_LIBRARY_PATH "/opt/rh/devtoolset-8/root/usr/lib/gcc/x86_64-redhat-linux/8:/usr/lib64/openmpi/lib:${NETCDF}/lib:${LD_LIBRARY_PATH}" >> /etc/csh.cshrc \ + && echo setenv PATH ".:/opt/rh/devtoolset-8/root/usr/bin:/usr/lib64/openmpi/bin:${NETCDF}/bin:$PATH" >> /etc/csh.cshrc + +RUN mkdir /wrf/.ssh ; echo "StrictHostKeyChecking no" > /wrf/.ssh/config +COPY default-mca-params.conf /wrf/.openmpi/mca-params.conf +RUN mkdir -p /wrf/.openmpi +RUN chown -R wrfuser:wrf /wrf/ + +# all root steps completed above, now below as regular userID wrfuser +USER wrfuser +WORKDIR /wrf + +# Download data +ARG argname=tutorial +RUN echo DAVE $argname +RUN if [ "$argname" = "tutorial" ] ; then curl -SL http://www2.mmm.ucar.edu/wrf/src/wps_files/geog_low_res_mandatory.tar.gz | tar -xzC /wrf/WPS_GEOG ; fi +RUN if [ "$argname" = "tutorial" ] ; then curl -SL http://www2.mmm.ucar.edu/wrf/TUTORIAL_DATA/colorado_march16.new.tar.gz | tar -xzC /wrf/wrfinput ; fi +RUN if [ "$argname" = "tutorial" ] ; then curl -SL http://www2.mmm.ucar.edu/wrf/src/namelists_v$NML_VERSION.tar.gz | tar -xzC /wrf/wrfinput ; fi +RUN if [ "$argname" = "tutorial" ] ; then curl -SL http://www2.mmm.ucar.edu/wrf/TUTORIAL_DATA/WRF_NCL_scripts.tar.gz | tar -xzC /wrf ; fi +RUN if [ "$argname" = "regtest" ] ; then curl -SL http://www2.mmm.ucar.edu/wrf/dave/DATA/Data_small/data_SMALL.tar.gz | tar -xzC /wrf ; fi +RUN if [ "$argname" = "regtest" ] ; then curl -SL http://www2.mmm.ucar.edu/wrf/dave/nml.tar.gz | tar -xzC /wrf ; fi +RUN if [ "$argname" = "regtest" ] ; then curl -SL http://www2.mmm.ucar.edu/wrf/dave/script.tar | tar -xC /wrf ; fi + +# Download wps source +RUN if [ "$argname" = "tutorial" ] ; then git clone https://github.com/wrf-model/WPS.git WPS ; fi + +RUN echo _HERE1_ +RUN git clone https://github.com/davegill/WRF.git davegill/WRF \ + && cd davegill/WRF \ + && git fetch origin +refs/pull/4/merge: \ + && git checkout -qf FETCH_HEAD \ + && cd .. \ + && mv WRF /wrf/WRF +RUN echo _HERE2_ + +ENV JASPERINC /usr/include/jasper +ENV JASPERLIB /usr/lib64 +ENV NETCDF_classic 1 +ENV LD_LIBRARY_PATH /opt/rh/devtoolset-8/root/usr/lib/gcc/x86_64-redhat-linux/8:/usr/lib64/openmpi/lib:${NETCDF}/lib:${LD_LIBRARY_PATH} +ENV PATH .:/opt/rh/devtoolset-8/root/usr/bin:/usr/lib64/openmpi/bin:${NETCDF}/bin:$PATH + +RUN ssh-keygen -f /wrf/.ssh/id_rsa -t rsa -N '' \ + && chmod 600 /wrf/.ssh/config \ + && chmod 700 /wrf/.ssh \ + && cp /wrf/.ssh/id_rsa.pub /wrf/.ssh/authorized_keys + +VOLUME /wrf +CMD ["/bin/tcsh"] +# diff --git a/Dockerfile-template b/Dockerfile-template new file mode 100644 index 0000000..9812d77 --- /dev/null +++ b/Dockerfile-template @@ -0,0 +1,22 @@ +# +FROM davegill/wrf-coop:fifthtry +MAINTAINER Dave Gill + +#RUN echo _HERE1_ +#RUN git clone https://github.com/davegill/WRF.git davegill/WRF \ +# && cd davegill/WRF \ +# && git fetch origin +refs/pull/4/merge: \ +# && git checkout -qf FETCH_HEAD \ +# && cd .. \ +# && mv WRF /wrf/WRF +#RUN echo _HERE2_ + +RUN git clone https://github.com/wrf-model/WRF.git WRF \ + && cd WRF \ + && git checkout release-v4.1.2 \ + && cd .. + +RUN curl -SL http://www2.mmm.ucar.edu/wrf/dave/script.tar | tar -xC /wrf + +VOLUME /wrf +CMD ["/bin/tcsh"] diff --git a/default-mca-params.conf b/default-mca-params.conf new file mode 100644 index 0000000..3b6df17 --- /dev/null +++ b/default-mca-params.conf @@ -0,0 +1,4 @@ +btl=tcp,self +plm_rsh_no_tree_spawn=1 +btl_base_warn_component_unused=0 +pml=ob1