commit d1f5c5656c7595c7784fe293e3a099e557a7f823 Author: baol Date: Tue Jun 4 14:20:20 2024 +0800 first commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..b20cb4b --- /dev/null +++ b/Dockerfile @@ -0,0 +1,123 @@ +FROM ubuntu:22.04 + +## CLM5.0 +MAINTAINER "SHUD" + +WORKDIR /model +ENV DEBIAN_FRONTEND=noninteractive + +ENV VERSION_CODENAME=jammy + + +RUN rm /etc/apt/sources.list \ + && echo "deb [trusted=yes] https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ ${VERSION_CODENAME} main restricted universe multiverse" >> /etc/apt/sources.list \ + && echo "deb [trusted=yes] https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ ${VERSION_CODENAME}-updates main restricted universe multiverse" >> /etc/apt/sources.list \ + && echo "deb [trusted=yes] https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ ${VERSION_CODENAME}-backports main restricted universe multiverse" >> /etc/apt/sources.list \ + && echo "deb [trusted=yes] https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ ${VERSION_CODENAME}-security main restricted universe multiverse" >> /etc/apt/sources.list \ + && echo 'Acquire::https { Verify-Peer "false"; Verify-Host "false"; }' >> /etc/apt/apt.conf.d/tuna.conf + +# && echo "deb https://cloud.r-project.org/bin/linux/ubuntu cosmic-cran35/" >> /etc/apt/sources.list + +RUN apt-get update \ + && apt install -y --no-install-recommends --assume-yes \ + ca-certificates \ + dejagnu \ + sudo libtool \ + vim git subversion gfortran cmake \ + libxml2-utils libxml-libxml-perl \ + python \ + make m4 \ + libcurl4-openssl-dev liblapack-dev libblas-dev mpich libmpich-dev \ + gnupg wget curl \ + && apt-get clean + +ADD pkgs/*.gz /usr/local/src/ + +ARG ZDIR=/usr/local/zlib +RUN cd /usr/local/src/zlib-1.2.11 \ + && CC=mpicc ./configure --prefix=${ZDIR} \ + && make \ + # && make check \ + && make install \ + && rm -rf /usr/local/src/zlib-1.2.11 + +ENV CC=mpicc \ + CXX=mpicxx \ + FC=mpif90 \ + F77=mpif90 + +ARG PNDIR=/usr/local/pnetcdf +RUN cd /usr/local/src/pnetcdf-1.11.0 \ + && FC=mpif90 MPICC=mpicc CFLAGS="-fPIC -g -O2" \ + ./configure --prefix=${PNDIR} --enable-shared --enable-profiling\ + && make \ + # && make tests \ + # && make check \ + # && make ptests \ + && make install \ + && rm -rf /usr/local/src/pnetcdf-1.11.0 + +# Parallel OpenMPI-HDF5-NetCDF stack +# https://gist.github.com/milancurcic/3a6c1a97a99d291f88cc61dae6621bdf +ARG H5DIR=/usr/local/hdf5 +RUN cd /usr/local/src/hdf5-1.10.4 \ + && CC=mpicc FC=mpif90 CFLAGS="-fPIC -w" ./configure --prefix=${H5DIR} \ + --with-zlib=${ZDIR} --enable-parallel --enable-hl \ + && make \ + # && make check \ + && make install \ + && rm -rf /usr/local/src/hdf5-1.10.4 +#--enable-shared --enable-fortran + +ARG NCDIR=/usr/local/netcdf4 +RUN cd /usr/local/src/netcdf-c-4.6.2 \ + && CC=mpicc CPPFLAGS="-I${PNDIR}/include -I${H5DIR}/include -I${ZDIR}/include" \ + LDFLAGS="-L${PNDIR}/lib -L${H5DIR}/lib -L${ZDIR}/lib" \ + ./configure --prefix=${NCDIR} --enable-parallel-tests \ + && make \ + # && make check \ + && make install \ + && rm -rf /usr/local/src/netcdf-c-4.6.2 + +ARG NFDIR=/usr/local/netcdff4 +RUN cd /usr/local/src/netcdf-fortran-4.4.5 \ + && CPPFLAGS=-I${NCDIR}/include LDFLAGS=-L${NCDIR}/lib \ + ./configure --prefix=${NFDIR} \ + && make \ + # && make check \ + && make install \ + && rm -rf /usr/local/src/netcdf-fortran-4.4.5 + +RUN echo ${NCDIR}/lib > /etc/ld.so.conf.d/netcdf.conf \ + && echo ${NFDIR}/lib >> /etc/ld.so.conf.d/netcdf.conf \ + && echo ${ZDIR}/lib >> /etc/ld.so.conf.d/netcdf.conf \ + && echo ${H5DIR}/lib >> /etc/ld.so.conf.d/netcdf.conf \ + && echo ${PNDIR}/lib >> /etc/ld.so.conf.d/netcdf.conf \ + && ldconfig + +ENV USER=clm +RUN useradd -m -G adm,sudo -s /bin/bash $USER \ + && echo "root:root" | chpasswd \ + && echo "clm:clm" | chpasswd \ + && apt-get remove wget -y + +RUN git clone -b release-clm5.0 https://github.com/ESCOMP/ctsm \ + && cd ctsm && ./manage_externals/checkout_externals \ + && chown -R clm:clm /model/ctsm \ + && cd .. + +VOLUME ["/inputdata"] +ENV PATH="/model/ctsm/cime/scripts:${NCDIR}/bin:${PATH}" \ + LANG=C.UTF-8 + +COPY config/*.xml /home/${USER}/.cime/ +COPY config /home/${USER}/cesm/config +COPY run_CLM50_example01.sh /home/${USER}/cesm/ + +WORKDIR /home/${USER}/cesm + +RUN chown -R clm:clm /home /home/${USER} /home/${USER}/.cime /inputdata + # && chmod 755 -R /inputdata /home/${USER}/.cime /home/${USER} \ + +USER ${USER} +CMD bash diff --git a/README.md b/README.md new file mode 100644 index 0000000..21d9c40 --- /dev/null +++ b/README.md @@ -0,0 +1,11 @@ +## container for CLM5.0(Community Land Surface Model) + +### Usage + +```bash +docker run -it --rm -v /data/cesm/inputdata:/inputdata -v ${PWD}:/home/clm/cesm -e USERID=$UID . bash +``` + +* Document of CLM5.0: +https://escomp.github.io/ctsm-docs/ +https://github.com/ESCOMP/ctsm. diff --git a/bin/findpkg b/bin/findpkg new file mode 100644 index 0000000..d3fb22f --- /dev/null +++ b/bin/findpkg @@ -0,0 +1,12 @@ +#!/bin/bash +# Dongdong Kong +# Find install related packages + +for pkg in "$@" +do + echo "=====================================================================" + echo $pkg + echo "=====================================================================" + # dpkg --listfiles $pkg + dpkg --list | grep $pkg +done diff --git a/bin/pkginfo b/bin/pkginfo new file mode 100644 index 0000000..dd00a40 --- /dev/null +++ b/bin/pkginfo @@ -0,0 +1,11 @@ +#!/bin/bash +# Dongdong Kong +# Show package detailed info + +for pkg in "$@" +do + echo "=====================================================================" + echo $pkg + echo "=====================================================================" + dpkg --listfiles $pkg +done diff --git a/config/config_compilers.xml b/config/config_compilers.xml new file mode 100644 index 0000000..9193e1f --- /dev/null +++ b/config/config_compilers.xml @@ -0,0 +1,135 @@ + + + + + + + -std=gnu99 + -fopenmp + -g -Wall -Og -fbacktrace -ffpe-trap=invalid,zero,overflow -fcheck=bounds + -O + + + + -DFORTRANUNDERSCORE -DNO_R16 -DCPRGNU + + FORTRAN + + -fdefault-real-8 + + + + -fconvert=big-endian -ffree-line-length-none -ffixed-line-length-none + -fopenmp + + -g -Wall -Og -fbacktrace -ffpe-trap=zero,overflow -fcheck=bounds + -O + + + -O0 + + + -ffixed-form + + + -ffree-form + + FALSE + + mpicc + mpicxx + mpif90 + gcc + g++ + gfortran + + + + -L/usr/local/netcdf4/lib -L/usr/local/netcdff4/lib -lnetcdff -lnetcdf + -llapack -lblas + + + TRUE + + diff --git a/config/config_machines.xml b/config/config_machines.xml new file mode 100644 index 0000000..f11ea38 --- /dev/null +++ b/config/config_machines.xml @@ -0,0 +1,57 @@ + + + + + Example port to centos7 linux system with gcc, netcdf, pnetcdf and mpich + using modules from http://www.admin-magazine.com/HPC/Articles/Environment- + Modules + + .* + LINUX + + gnu + mpich + none + $ENV{HOME}/cesm + $ENV{HOME}/cesm + /inputdata + /inputdata/atm/datm7 + $ENV{HOME}/cesm/$CASE/archive + $ENV{HOME}/cesm/cesm_baselines + $ENV{HOME}/cesm/cprnc + make + 2 + none + admin@shud.xyz + 2 + 2 + FALSE + + mpirun + + -np {{ total_tasks }} + + + + + + + /usr/local/netcdf4 + /usr/local/netcdff4 + + /usr/local/pnetcdf + + + + + -1 + + + + diff --git a/pkgs/hdf5-1.10.4.tar.gz b/pkgs/hdf5-1.10.4.tar.gz new file mode 100644 index 0000000..28eec94 Binary files /dev/null and b/pkgs/hdf5-1.10.4.tar.gz differ diff --git a/pkgs/netcdf-c-4.6.2.tar.gz b/pkgs/netcdf-c-4.6.2.tar.gz new file mode 100644 index 0000000..9501d3d Binary files /dev/null and b/pkgs/netcdf-c-4.6.2.tar.gz differ diff --git a/pkgs/netcdf-fortran-4.4.5.tar.gz b/pkgs/netcdf-fortran-4.4.5.tar.gz new file mode 100644 index 0000000..0509654 Binary files /dev/null and b/pkgs/netcdf-fortran-4.4.5.tar.gz differ diff --git a/pkgs/pio2_3_1.tar.gz b/pkgs/pio2_3_1.tar.gz new file mode 100644 index 0000000..b30d6c2 Binary files /dev/null and b/pkgs/pio2_3_1.tar.gz differ diff --git a/pkgs/pnetcdf-1.11.0.tar.gz b/pkgs/pnetcdf-1.11.0.tar.gz new file mode 100644 index 0000000..908f6f9 Binary files /dev/null and b/pkgs/pnetcdf-1.11.0.tar.gz differ diff --git a/pkgs/zlib-1.2.11.tar.gz b/pkgs/zlib-1.2.11.tar.gz new file mode 100644 index 0000000..7e75a8b Binary files /dev/null and b/pkgs/zlib-1.2.11.tar.gz differ diff --git a/run_CLM50_example01.sh b/run_CLM50_example01.sh new file mode 100644 index 0000000..00b1d14 --- /dev/null +++ b/run_CLM50_example01.sh @@ -0,0 +1,40 @@ +# /bin/bash + +## initial project +# git clone https://github.com/ESCOMP/cesm +# git clone https://github.com/ESCOMP/ctsm +casename=year2019 # test + +dir_cime=/model/ctsm/cime + + +## 1. create_newcase +${dir_cime}/scripts/create_newcase --case $casename --res f19_g16 --compset I1850Clm50Bgc --run-unsupported \ + --compiler gnu --mach shudmach + +cd $casename # year2019 + +# # setup YR_START and YR_END +# ./xmlchange DATM_CLMNCEP_YR_START=2000,DATM_CLMNCEP_YR_END=2000 +# ./xmlchange NTASKS=2 + +## CLM5 configure +# ROOT_INPUT=/inputdata # ${HOME}/cesm +# ROOT_CLMFORC=${ROOT_INPUT}/atm/datm7 # lmwg # + +./xmlquery DATM_CLMNCEP_YR_START,DATM_CLMNCEP_YR_END +./xmlchange DATM_CLMNCEP_YR_START=2010,DATM_CLMNCEP_YR_END=2010 +./xmlquery NTASKS +./xmlchange NTASKS=2 #[核心数] +./xmlquery DIN_LOC_ROOT,DIN_LOC_ROOT_CLMFORC +./xmlchange DIN_LOC_ROOT=${ROOT_INPUT},DIN_LOC_ROOT_CLMFORC=${ROOT_CLMFORC} + +./xmlquery STOP_N +./xmlquery STOP_OPTION + +./xmlchange STOP_N=14,STOP_OPTION=ndays + +## build and submit task +./case.setup +./case.build +./case.submit