diff --git a/images/wechat-group-qr.png b/images/wechat-group-qr.png index 11a5b83113150f59de05b24744b63a67b55a5449..2e4521d9d2535db91f7b67b2707c7db372819201 100644 Binary files a/images/wechat-group-qr.png and b/images/wechat-group-qr.png differ diff --git a/package/hdf5/1.10.1/clang/install.sh b/package/hdf5/1.10.1/clang/install.sh index 1050eaf5d66208cad8dc6a05daea4b0ef0e0487a..14587d6046a94bc257b93c170a86eb107bb32610 100644 --- a/package/hdf5/1.10.1/clang/install.sh +++ b/package/hdf5/1.10.1/clang/install.sh @@ -1,4 +1,3 @@ -#download from https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.10/hdf5-1.10.1/src/hdf5-1.10.1.tar.gz #!/bin/bash set -x set -e @@ -7,8 +6,8 @@ cd ${JARVIS_TMP} rm -rf hdf5-1.10.1 tar -xvf ${JARVIS_DOWNLOAD}/hdf5-1.10.1.tar.gz cd hdf5-1.10.1 -#CC=mpicc CXX=mpicxx FC=mpifort F77=mpifort -Wno-incompatible-pointer-types-discards-qualifiers -./configure --prefix=$1 --build=aarch64-unknown-linux-gnu --build=aarch64-unknown-linux-gnu --enable-fortran --enable-static=yes --enable-parallel --enable-shared CFLAGS="-O3 -fPIC -Wno-incompatible-pointer-types-discards-qualifiers -Wno-non-literal-null-conversion" FCFLAGS="-O3 -fPIC" LDFLAGS="-Wl,--build-id" +export CC=mpicc CXX=mpicxx FC=mpif90 F77=mpif90 +./configure --prefix=$1 --enable-fortran --enable-static=yes --enable-parallel --enable-shared CFLAGS="-O3 -fPIC -Wno-incompatible-pointer-types-discards-qualifiers -Wno-non-literal-null-conversion" FCFLAGS="-O3 -fPIC" LDFLAGS="-Wl,--build-id" sed -i '11835c wl="-Wl,"' libtool make -j -make install +make install \ No newline at end of file diff --git a/package/kahip/3.10/install.sh b/package/kahip/3.10/install.sh new file mode 100644 index 0000000000000000000000000000000000000000..8d67dde6d2d753c20416ddeb366495a31a72d475 --- /dev/null +++ b/package/kahip/3.10/install.sh @@ -0,0 +1,12 @@ +#!/bin/bash +set -x +set -e +file_noext='KaHIP-3.10' +. ${DOWNLOAD_TOOL} -u https://github.com/KaHIP/KaHIP/archive/v3.10.tar.gz -f $file_noext.tar.gz +cd ${JARVIS_TMP} +rm -rf $file_noext +tar -xvf ${JARVIS_DOWNLOAD}/$file_noext.tar.gz +cd $file_noext +./compile_withcmake.sh +mkdir -p $1/lib +cp -rf deploy/* $1/lib/ \ No newline at end of file diff --git a/package/parmetis/4.0.3/install.sh b/package/parmetis/4.0.3/install.sh new file mode 100644 index 0000000000000000000000000000000000000000..f6da60a66a560869898384431b963e5c35b4f595 --- /dev/null +++ b/package/parmetis/4.0.3/install.sh @@ -0,0 +1,17 @@ +#!/bin/bash +set -x +set -e +yum install libstdc++-devel.aarch64 bison flex cmake -y +. ${DOWNLOAD_TOOL} -u http://glaros.dtc.umn.edu/gkhome/fetch/sw/parmetis/parmetis-4.0.3.tar.gz +cd ${JARVIS_TMP} +rm -rf parmetis-4.0.3 +tar -xvf ${JARVIS_DOWNLOAD}/parmetis-4.0.3.tar.gz +cd parmetis-4.0.3 +sed -i -e 's/\#define IDXTYPEWIDTH 32/\#define IDXTYPEWIDTH 64/g' metis/include/metis.h +cd metis +make config shared=1 prefix=$1 +make install +cd ../ +sed -i -e '29i add_compile_options(-fPIC)' CMakeLists.txt +make config shared=1 prefix=$1 +make install \ No newline at end of file diff --git a/package/scotch/7.0.1/install.sh b/package/scotch/7.0.1/install.sh new file mode 100644 index 0000000000000000000000000000000000000000..a494f6b5dc1dfdeaacf9ee7ac5edd2894cfad3d1 --- /dev/null +++ b/package/scotch/7.0.1/install.sh @@ -0,0 +1,14 @@ +#!/bin/bash +set -x +set -e +yum install libstdc++-devel.aarch64 bison flex +. ${DOWNLOAD_TOOL} -u https://gitlab.inria.fr/scotch/scotch/-/archive/v7.0.1/scotch-v7.0.1.tar.gz +cd ${JARVIS_TMP} +rm -rf scotch-v7.0.1 +tar -xvf ${JARVIS_DOWNLOAD}/scotch-v7.0.1.tar.gz +cd scotch-v7.0.1 +mkdir -p build +cd build +cmake -DCMAKE_INSTALL_PREFIX=$1 -DIDXSIZE=32 -DTHREADS=OFF -DCMAKE_BUILD_TYPE=Release .. +make -j +make install diff --git a/templates/grapes/3.0.2/fortran-uninited-array-analysis.py b/templates/grapes/3.0.2/fortran-uninited-array-analysis.py new file mode 100644 index 0000000000000000000000000000000000000000..1905edfc9364fbd30c8687d6972814c4bc14608f --- /dev/null +++ b/templates/grapes/3.0.2/fortran-uninited-array-analysis.py @@ -0,0 +1,157 @@ +# -*- coding: utf-8 -*- +# 本程序用于自动将Fortran代码中未初始化的变量进行自动初始化 +#在气象领域未初始化变量有可能导致计算精度下降 + +from glob import glob +import re +SRC_PATH = './trams_v3.02/phys/key' +SUBROUTINE_FOR_KEYWORD = 'subroutine' +END_SUBROUTINE_FOR_KEYWORD = 'end subroutine' +INTENT_FOR_KEYWORD = 'intent' +DEFINE_FOR_KEYWORD = '::' +MARK_FOR_KEYWORD = '!' +DIMENSION_FOR_KEYWORD = 'dimension' +POINTER_FOR_KEYWORD = 'pointer' +REAL_FOR_KEYWORD = 'real' +INTEGER_FOR_KEYWORD = 'integer' +DATA_FOR_KEYWORD = 'data' +LOGICAL_FOR_KEYWORD = 'logical' +COMMA = ',' +FILE_POSTFIX = ['.F'] + +def read_file(filename): + content = '' + with open(filename) as f: + content = f.read().strip() + return content + +def write_file(filename, content=""): + with open(filename,'w') as f: + f.write(content) + +def get_input_para(line): + input_para = set() + if line.lower().startswith(SUBROUTINE_FOR_KEYWORD): + variable_list = re.split(r',|\(|\)', line) + for exits_variable in variable_list: + input_para.add(exits_variable.strip()) + return input_para + +def get_undefined_variables(line): + var_list = [] + line_lower = line.lower() + if DIMENSION_FOR_KEYWORD not in line_lower or POINTER_FOR_KEYWORD in line_lower: + return var_list + if INTENT_FOR_KEYWORD not in line_lower and DEFINE_FOR_KEYWORD in line: + variables = line.split(DEFINE_FOR_KEYWORD)[1].strip() + var_list = variables.split(COMMA) + return var_list + +def check_is_defined(var , content): + matched = [] + try: + pattern = re.compile('.*'+var+r'( *= *\d)') + matched = re.findall(pattern, content) + except: + return False + #说明定义过 + if len(matched) >= 1: + return True + return False + +def check_is_valid(var): + pattern = re.compile('^[_a-zA-Z]\w*$') + ismatch = re.match(pattern, var) + if not ismatch: + return False + return True + +def check_is_input_para(var, input_paras): + return var in input_paras + +def get_var_inited(var, line): + line_lower = line.lower() + init_line = '' + if REAL_FOR_KEYWORD in line_lower: + init_line= f'{var} = 0.0\n' + elif INTEGER_FOR_KEYWORD in line_lower: + init_line= f'{var} = 0\n' + return init_line + +def is_define_line(line): + line_lower = line + return line_lower.startswith(DATA_FOR_KEYWORD) or line.startswith(LOGICAL_FOR_KEYWORD) + +def get_inited_content(content, last_line, init_lines): + return content.replace(last_line, last_line + init_lines) + +def init_undefined_variables(content): + lines = content.splitlines() + init_lines = '\n' + last_line = '' + is_change = 0 + input_paras = set() + for line in lines: + line = line.strip() + input_paras = input_paras | get_input_para(line) + var_list = get_undefined_variables(line) + if len(var_list)>0:last_line = line + for var in var_list: + var = var.strip() + if check_is_defined(var, content): + continue + if not check_is_valid(var): + continue + if check_is_input_para(var, input_paras): + continue + init_line = get_var_inited(var, line) + if init_line: is_change = 1 + init_lines += init_line + if is_define_line(line): + last_line = line + init_lines += '\n' + if not is_change: + return content + return get_inited_content(content, last_line, init_lines) + +def remove_mk(content): + #注释的处理 + content_line = content.split('\n') + nomk_content = '' + for line in content_line: + exclamation_index = line.find(MARK_FOR_KEYWORD) + if exclamation_index >= 0: + line = line[0:exclamation_index] + if line: + nomk_content += line + '\n' + return nomk_content + +def remove_line_break(content): + return content.replace('&\n', '').replace('& \n', '').replace('&', '') + +def split_routine(content): + return re.split(f'{END_SUBROUTINE_FOR_KEYWORD}|{END_SUBROUTINE_FOR_KEYWORD.lower()}', content) + +def handle_routines(routines, filename): + inited_file_content = [] + for routine in routines: + content = init_undefined_variables(routine) + inited_file_content.append(content) + write_file(filename, END_SUBROUTINE_FOR_KEYWORD.lower().join(inited_file_content)) + +def init_file(filename): + content = read_file(filename) + content = remove_mk(content) + content = remove_line_break(content) + routines = split_routine(content) + handle_routines(routines, filename) + +def init_all_files(): + file_list = [d for d in glob(SRC_PATH+'/**', recursive=True)] + for file in file_list: + if file.endswith('.F'): + init_file(file) + print(file+" Successfully INITED") + +if __name__ == "__main__": + init_all_files() \ No newline at end of file diff --git a/templates/grapes/3.0.2/grapes.arm.cpu.bisheng.hmpi.config b/templates/grapes/3.0.2/grapes.arm.cpu.bisheng.hmpi.config new file mode 100644 index 0000000000000000000000000000000000000000..b3f7ae4cd2d7d7fb954d7eded9bbbe7819a6c2df --- /dev/null +++ b/templates/grapes/3.0.2/grapes.arm.cpu.bisheng.hmpi.config @@ -0,0 +1,44 @@ +[SERVER] +11.11.11.11 + +[DEPENDENCY] +module purge +module use ./software/modulefiles +./jarvis -install bisheng/2.1.0 +module load bisheng2/2.1.0 +./jarvis -install hmpi/1.1.1 +module load hmpi1/1.1.1 +export CC=mpicc CXX=mpicxx FC=mpifort F77=mpifort +./jarvis -install hdf5/1.10.1 clang+mpi +./jarvis -install pnetcdf/1.11.2 clang+mpi +./jarvis -install netcdf/4.7.0 clang+mpi +tar -zxvf $JARVIS_DOWNLOAD/trams_v3.02.tar.gz + +[ENV] +module purge +module use ./software/modulefiles +module load bisheng2/2.1.0 +module load hmpi1/1.1.1 +module load netcdf/4.7.0 +export NETCDF=$JARVIS_ROOT/software/libs/bisheng2/hmpi1/netcdf/4.7.0 + +[APP] +app_name = Grapes +build_dir = $JARVIS_ROOT/trams_v3.02 +binary_dir = $JARVIS_ROOT/trams_v3.02/run +case_dir = $JARVIS_ROOT/trams_v3.02/run + +[BUILD] +./clean -a +sed -i "30c\FCBASEOPTS = -O1 -mcpu=tsv110 ${OPTION} -fveclib=MATHLIB -finline-functions -ftree-vectorize -falign-functions -mllvm -min-prefetch-stride=2 -ffree-form -finit-zero -freciprocal-math -mrecip=vec-div:1 -faarch64-pow-alt-precision -mllvm --aarch64-recip-alt-accuracy -fstack-arrays -mllvm -disable-sincos-opt" configure.grapes +./compile grapes + +[CLEAN] +cd .. +sh run_plevchk.sh trams_v3.02/run/ +cat chk/ab22062500 + +[RUN] +run = mpirun --allow-run-as-root -np 4 --map-by socket --rank-by core -x LD_LIBRARY_PATH -x PATH -x OMP_NUM_THREADS=1 +binary = grapes.exe +nodes = 1 \ No newline at end of file diff --git a/templates/grapes/3.0.2/grapes.arm.cpu.kgcc.hmpi.config b/templates/grapes/3.0.2/grapes.arm.cpu.kgcc.hmpi.config new file mode 100644 index 0000000000000000000000000000000000000000..d17ef8daab143bf1b7d681a73aa2ff708b244dae --- /dev/null +++ b/templates/grapes/3.0.2/grapes.arm.cpu.kgcc.hmpi.config @@ -0,0 +1,44 @@ +[SERVER] +11.11.11.11 + +[DEPENDENCY] +module purge +module use ./software/modulefiles +./jarvis -install kgcc/9.3.1 +module load kgcc9/9.3.1 +./jarvis -install openmpi/4.1.2 +module load openmpi4/4.1.2 +export CC=mpicc CXX=mpicxx FC=mpifort F77=mpifort +./jarvis -install hdf5/1.10.1 gcc+mpi +./jarvis -install pnetcdf/1.11.2 gcc+mpi +./jarvis -install netcdf/4.7.0 gcc+mpi +tar -zxvf $JARVIS_DOWNLOAD/trams_v3.02.tar.gz + +[ENV] +module purge +module use ./software/modulefiles +module load kgcc9/9.3.1 +module load openmpi4/4.1.2 +module load netcdf/4.7.0 +export NETCDF=$JARVIS_ROOT/software/libs/kgcc9/openmpi4/netcdf/4.7.0 + +[APP] +app_name = Grapes +build_dir = $JARVIS_ROOT/trams_v3.02 +binary_dir = $JARVIS_ROOT/trams_v3.02/run +case_dir = $JARVIS_ROOT/trams_v3.02/run + +[BUILD] +./clean -a +sed -i "30c\FCBASEOPTS = -O1 -ffree-line-length-none -std=legacy" configure.grapes +./compile grapes + +[CLEAN] +cd .. +sh run_plevchk.sh trams_v3.02/run/ +cat chk/ab22062500 + +[RUN] +run = mpirun --allow-run-as-root -np 120 --map-by socket --rank-by core -x LD_LIBRARY_PATH -x PATH -x OMP_NUM_THREADS=1 +binary = grapes.exe +nodes = 1 \ No newline at end of file diff --git a/templates/grapes/3.0.2/grapes.x86.cpu.config b/templates/grapes/3.0.2/grapes.x86.cpu.config new file mode 100644 index 0000000000000000000000000000000000000000..46a758c3b8690972bd828ea6ddc435354893b4f0 --- /dev/null +++ b/templates/grapes/3.0.2/grapes.x86.cpu.config @@ -0,0 +1,33 @@ +[SERVER] +11.11.11.11 + +[DEPENDENCY] +tar -zxvf $JARVIS_DOWNLOAD/trams_v3.02.tar.gz + +[ENV] +module purge +source /share/app/intel/oneapi/setvars.sh + +[APP] +app_name = Grapes +build_dir = $JARVIS_ROOT/trams_v3.02 +binary_dir = +case_dir = $JARVIS_ROOT/trams_v3.02/run + +[BUILD] +./clean -a +rm -rf ./run/grapes.exe +sed -i "30c\FCBASEOPTS = -O3" configure.grapes +./compile grapes + +[CLEAN] +cd .. +sh run_plevchk.sh trams_v3.02/run/ +cat chk/ab22062500 + +[RUN] +#run = sed -i "10c\ time_step_max = 1440," namelist.input && dsub -s run_12n.sh +#run = dsub -n grapes_compile -q root.default -R "cpu=100;mem=256000" -o grapes_compile_%J.log -e grapes_compile_err_%J.log "./jarvis -b" +run = mpirun -n 4 ./grapes.exe +binary = +nodes = 1 \ No newline at end of file diff --git a/templates/mg-cfd/1.1.0/mg-cfd.arm.config b/templates/mg-cfd/1.1.0/mg-cfd.arm.config new file mode 100644 index 0000000000000000000000000000000000000000..d809c3a3f090af48ed8d064b0bc4dd36f87c943b --- /dev/null +++ b/templates/mg-cfd/1.1.0/mg-cfd.arm.config @@ -0,0 +1,78 @@ +[SERVER] +11.11.11.11 + +[DOWNLOAD] +mg-cfd/1.0.0 https://github.com/warwick-hpsc/MG-CFD-app-OP2/archive/refs/heads/master.zip MG-CFD-app-OP2-master.zip + +[DEPENDENCY] +module purge +./jarvis -install bisheng/2.1.0 com +module use ./software/modulefiles +module load bisheng2/2.1.0 +export CC=clang CXX=clang++ FC=flang +./jarvis -install hmpi/1.1.1 clang +module load hmpi1/1.1.1 +./jarvis -install scotch/7.0.1 clang+mpi +./jarvis -install parmetis/4.0.3 clang+mpi +./jarvis -install hdf5/1.10.1/clang clang+mpi +./jarvis -install kahip/3.10 clang+mpi +unzip ${JARVIS_DOWNLOAD}/MG-CFD-app-OP2-master.zip + +[ENV] +module purge +module use ./software/modulefiles +module load bisheng2/2.1.0 +module load hmpi1/1.1.1 +export CC=clang CXX=clang++ FC=flang +module load scotch/7.0.1 +module load parmetis/4.0.3 +module load kahip/3.10 +module load hdf5-clang/1.10.1 +export OP2_COMPILER='clang' +export LIB_PATH=$JARVIS_LIBS/bisheng2/hmpi1 +export CUDA_INSTALL_PATH=/usr/local/cuda-11.4 +export MPI_INSTALL_PATH=$JARVIS_MPI/hmpi1-bisheng2/1.1.1 +export PTSCOTCH_INSTALL_PATH=$LIB_PATH/scotch/7.0.1 +export PARMETIS_INSTALL_PATH=$LIB_PATH/parmetis/4.0.3 +export KAHIP_INSTALL_PATH=$LIB_PATH/kahip/3.10/lib/parallel +export HDF5_INSTALL_PATH=$LIB_PATH/hdf5-clang/1.10.1 +export CPLUS_INCLUDE_PATH=$LIB_PATH/kahip/3.10/lib:$CPLUS_INCLUDE_PATH +export OP2_INSTALL_PATH=$JARVIS_ROOT/OP2-Common-master/op2 +export CC=mpicc CXX=mpic++ FC=mpif90 +export NV_ARCH={Ampere} +export PATH=/usr/local/cuda-11.4/bin:$PATH + +[APP] +app_name = MG-CFD +build_dir = $JARVIS_ROOT/MG-CFD-app-OP2-master/ +binary_dir = +case_dir = $JARVIS_ROOT/MG-CFD-app-OP2-master/ + +[CLEAN] +./cleanOp2.sh + +[BUILD] +./translate2op2.sh +make -j + +[RUN] +#run = +#binary = ./airfoil_seq + +#run = mpirun --allow-run-as-root -np 8 -mca pml ucx -x UCX_NET_DEVICES=mlx5_0:1 -mca btl ^vader,tcp,openib,uct -x UCX_TLS=self,sm,rc +#binary = airfoil_mpi + +#run = +#binary = ./airfoil_genseq + +#run = mpirun --allow-run-as-root -np 8 -mca pml ucx -x UCX_NET_DEVICES=mlx5_0:1 -mca btl ^vader,tcp,openib,uct -x UCX_TLS=self,sm,rc +#binary = airfoil_mpi_genseq + +#run = +#binary = export OMP_NUM_THREADS=4 && ./airfoil_openmp OP_PART_SIZE=256 + +run = mpirun --allow-run-as-root -np 4 -mca pml ucx -x UCX_NET_DEVICES=mlx5_0:1 -mca btl ^vader,tcp,openib,uct -x UCX_TLS=self,sm,rc -x OMP_NUM_THREADS=8 +binary = airfoil_mpi_openmp OP_PART_SIZE=256 +nodes = 1 + + diff --git a/templates/op2/op2.arm.cpu.config b/templates/op2/op2.arm.cpu.config new file mode 100644 index 0000000000000000000000000000000000000000..2a519696131055f361699e588ce396f96c49d2cf --- /dev/null +++ b/templates/op2/op2.arm.cpu.config @@ -0,0 +1,78 @@ +[SERVER] +11.11.11.11 + +[DOWNLOAD] +OP2/1.1.0 https://github.com/OP-DSL/OP2-Common/archive/refs/heads/master.zip OP2-Common-master.zip + +[DEPENDENCY] +module purge +./jarvis -install bisheng/2.1.0 com +module use ./software/modulefiles +module load bisheng2/2.1.0 +export CC=clang CXX=clang++ FC=flang +./jarvis -install hmpi/1.1.1 clang +module load hmpi1/1.1.1 +./jarvis -install scotch/7.0.1 clang+mpi +./jarvis -install parmetis/4.0.3 clang+mpi +./jarvis -install hdf5/1.10.1/clang clang+mpi +./jarvis -install kahip/3.10 clang+mpi +#unzip ${JARVIS_DOWNLOAD}/OP2-Common-master.zip + +[ENV] +module purge +module use ./software/modulefiles +module load bisheng2/2.1.0 +module load hmpi1/1.1.1 +export CC=clang CXX=clang++ FC=flang +module load scotch/7.0.1 +module load parmetis/4.0.3 +module load kahip/3.10 +module load hdf5-clang/1.10.1 +export OP2_COMPILER='clang' +export NV_ARCH={Ampere} +export LIB_PATH=$JARVIS_LIBS/bisheng2/hmpi1 +export PTSCOTCH_INSTALL_PATH=$LIB_PATH/scotch/7.0.1 +export PARMETIS_INSTALL_PATH=$LIB_PATH/parmetis/4.0.3 +export KAHIP_INSTALL_PATH=$LIB_PATH/kahip/3.10/lib/parallel +export HDF5_INSTALL_PATH=$LIB_PATH/hdf5-clang/1.10.1 +export CPLUS_INCLUDE_PATH=$LIB_PATH/kahip/3.10/lib:$CPLUS_INCLUDE_PATH +export CUDA_INSTALL_PATH=/usr/local/cuda-11.4 +export OP2_INSTALL_PATH=$JARVIS_ROOT/OP2-Common-master/op2 +export PATH=/usr/local/cuda-11.4/bin:$PATH + +[APP] +app_name = OP2 +build_dir = $JARVIS_ROOT/OP2-Common-master/ +binary_dir = +case_dir = $JARVIS_ROOT/OP2-Common-master/apps/c/airfoil/airfoil_plain/dp + +[CLEAN] +make -C op2 clean +make -C apps/c/airfoil/airfoil_plain/dp clean + +[BUILD] +make -C op2 config +make -C op2 -j 16 +make -C apps/c/airfoil/airfoil_plain/dp -j 16 + +[RUN] +#run = +#binary = ./airfoil_seq + +#run = mpirun --allow-run-as-root -np 8 -mca pml ucx -x UCX_NET_DEVICES=mlx5_0:1 -mca btl ^vader,tcp,openib,uct -x UCX_TLS=self,sm,rc +#binary = airfoil_mpi + +#run = +#binary = ./airfoil_genseq + +#run = mpirun --allow-run-as-root -np 8 -mca pml ucx -x UCX_NET_DEVICES=mlx5_0:1 -mca btl ^vader,tcp,openib,uct -x UCX_TLS=self,sm,rc +#binary = airfoil_mpi_genseq + +#run = +#binary = export OMP_NUM_THREADS=4 && ./airfoil_openmp OP_PART_SIZE=256 + +run = mpirun --allow-run-as-root -np 4 -mca pml ucx -x UCX_NET_DEVICES=mlx5_0:1 -mca btl ^vader,tcp,openib,uct -x UCX_TLS=self,sm,rc -x OMP_NUM_THREADS=8 +binary = airfoil_mpi_openmp OP_PART_SIZE=256 +nodes = 1 + +