跳到主要内容
版本:FCP 24.11

HFSS

parameters:
- name: version
display: 版本
type: enum
required: true
option:
enum:
- value: 2021
display: 2021
- value: 2023
display: 2023
- name: input_file
display: 输入文件
type: path
required: true
description: 输入文件类型(.aedt,.zip)
- name: np
display: 每个节点并发数
type: int
required: true
usage: SCHEDULER
schedPrefix: --ntasks-per-node
option:
int:
min: 1
max: 48
description: 输入值范围1~48
- name: node_num
display: 节点数
type: enum
required: true
usage: SCHEDULER
schedPrefix: -N
option:
enum:
- value: 1
display: 1
- name: Memory_Percent
display: 内存百分比
type: enum
required: true
option:
enum:
- value: 80
display: 80%
- value: 90
display: 90%
outputs:
- path: taskout.log
type: TEXT
script: |-
#!/bin/bash
set -ex

# 设置license环境变量
export ANSYSLMD_LICENSE_FILE=27005@10.105.1.10

# 应用command的绝对路径
#NODELIST=/fastone/softwares/eda/nodelist
#HFSS=/fastone/softwares/ansys/hfss/2021/AnsysEM/AnsysEM21.1/Linux64/ansysedt
# 输入参数处理
INPUT={{ input_file }}

case {{ version }} in

2020)
AppFolder=""
;;
2021)
AppFolder="/fastone/softwares/ansys/hfss/2021/AnsysEM/AnsysEM21.1/Linux64"
;;
2022)
AppFolder=""
;;
2023)
AppFolder="/fastone/softwares/ansys/hfss/2023/v232/Linux64"
;;
*)
echo "ERROR: Unsupported versions"
exit 1
;;
esac

export ANSOFT_PASS_DEBUG_ENV_TO_REMOTE_ENGINES=1


# setup environment and srun
export ANSYSEM_GENERIC_MPI_WRAPPER=${AppFolder}/schedulers/scripts/utils/slurm_srun_wrapper.sh
export ANSYSEM_COMMON_PREFIX=${AppFolder}/common
export ANSYSEM_TASKS_PER_NODE=${SLURM_TASKS_PER_NODE}

srun_cmd="srun --overcommit --export=ALL -n 1 --mem-per-cpu=0 "
LogFile=taskout.log

if [ -z "${INPUT}" ]; then
echo "ERROR: missing input data"
exit 1
fi

# 检查输入文件后缀
function check_input_file(){
if [ -n "$1" ];then
input_file_status=0
for sub_str in $(echo "$1" | tr "," " ")
do
if $(echo ${2}|grep -i ${sub_str} >/dev/null 2>&1);then
input_file_status=0
break
else
input_file_status=1
fi
done

if [ ${input_file_status} -ne 0 ];then
echo "Invalid inputs file"
exit 2
fi
fi
}

# 处理输入文件
if [ -f "${INPUT}" ];then
InputFileName=$(basename ${INPUT})
# 判断输入文件后缀是否为zip和aedt
check_input_file '.zip$,.aedt$' ${InputFileName}
if (echo ${InputFileName}|grep -i '.zip$' >/dev/null 2>&1);then
unzip ${INPUT} -d .
CaseFile=$(ls *.aedt)
else
cp -rf ${INPUT} .
CaseFile=$(basename ${INPUT})
fi
else
echo "Input file does not exist"
exit 1
fi

# 创建临时目录
TEMP=${HOME}/HFSSTEMP

if [ ! -d ${TEMP} ];then
mkdir -p ${TEMP}
fi

# 执行防真commond
${srun_cmd} ${AppFolder}/ansysedt -ng -batchsolve -distributed -monitor -machinelist numcores=${SLURM_NPROCS} -auto -batchoptions "'HFSS/RAMLimitPercent'={{ Memory_Percent }} 'HFSS 3D Layout Design/RAMLimitPercent'={{ Memory_Percent }} 'tempdirectory'='${TEMP}'" ./${CaseFile} >> ${LogFile}