Appearance
Tcl 接口
NOTE
原文来源:Sentaurus Data Explorer User Guide, Version W-2024.09, Synopsys, Inc. PDF 源页码:第 3 章,对应 PDF 第 30–121 页
Tcl 接口概述
Sentaurus Data Explorer 的 Tcl 接口基于工具命令语言(Tcl)。TDX 的输入脚本实际上就是 Tcl 脚本,因此具有 Tcl 的全部灵活性。
使用 Tcl 接口可以:
- 从 TDR 文件中提取和处理信息
- 修改 TDR 文件中的特定条目,如材料和数据集的名称
- 使用标签(Tag)向 TDR 文件中的对象添加自定义信息
NOTE
在编写脚本之前,需要先了解 TDR 文件结构。TDR 文件结构说明见附录 B。
使用 Tcl 接口
运行 Tcl 脚本
bash
tdx -tcl script.tcl运行单个 Tcl 命令
bash
tdx -tclcmd TdrFileOpen tdr_file.tdr访问命令行参数
TDX 在 Tcl 数组 cmd_args 中提供命令行参数:
| 变量 | 说明 |
|---|---|
$cmd_args(all) | 完整的命令行参数,包括可执行文件名 |
$cmd_args(rest) | 除 -tcl、脚本文件名和可执行文件名外的所有参数 |
$cmd_args(-tcl) | Tcl 脚本文件名 |
循环中删除条目
在循环中调用删除函数时,必须按反向顺序遍历条目:
tcl
for { set index N-1 } { $index >= 0 } { incr index -1 } {
TdrStateDelete ... $index ...
}这是因为删除后,剩余的条目会被重新索引。
WARNING
按正向顺序遍历会导致未定义行为。
示例脚本
提取文件头信息
tcl
set f myfile.tdr
puts "file: $f"
TdrFileOpen $f
# 遍历几何体
set ng [TdrFileGetNumGeometry $f]
puts "#geometries: $ng"
for {set ig 0} {$ig < $ng} {incr ig} {
set gname [TdrGeometryGetName $f $ig]
set ns [TdrGeometryGetNumState $f $ig]
set nr [TdrGeometryGetNumRegion $f $ig]
puts " geometry $ig: $gname"
puts " type : [TdrGeometryGetType $f $ig]"
puts " dimension: [TdrGeometryGetDimension $f $ig]"
puts " transform: [TdrGeometryGetTransform $f $ig]"
puts " shift : [TdrGeometryGetShift $f $ig]"
puts " #states : $ns"
# 遍历状态
for {set is 0} {$is < $ns} {incr is} {
set sname [TdrStateGetName $f $ig $is]
puts " state $is: $sname"
}
puts " #regions: $nr"
# 遍历区域
for {set ir 0} {$ir < $nr} {incr ir} {
set rname [TdrRegionGetName $f $ig $ir]
puts " region $ir: $rname"
}
}
TdrFileClose $f修改数据值
tcl
set inp original.tdr
set out modified.tdr
TdrFileOpen $inp
# 遍历几何体
set ng [TdrFileGetNumGeometry $inp]
for {set ig 0} {$ig < $ng} {incr ig} {
set ns [TdrGeometryGetNumState $inp $ig]
set nr [TdrGeometryGetNumRegion $inp $ig]
# 遍历状态
for {set is 0} {$is < $ns} {incr is} {
# 遍历区域
for {set ir 0} {$ir < $nr} {incr ir} {
# 遍历数据集
set nd [TdrRegionGetNumDataset $inp $ig $ir $is]
for {set id 0} {$id < $nd} {incr id} {
# 遍历数据值
set nv [TdrDatasetGetNumValue $inp $ig $ir $is $id]
for {set iv 0} {$iv < $nv} {incr iv} {
set ni [TdrDataGetNumRow $inp $ig $ir $is $id $iv]
set nj [TdrDataGetNumCol $inp $ig $ir $is $id $iv]
for {set i 0} {$i < $ni} {incr i} {
for {set j 0} {$j < $nj} {incr j} {
set original [TdrDataGetComponent $inp $ig $ir $is $id $iv $i $j]
set modified [expr $original + 1]
TdrDataSetComponent $inp $ig $ir $is $id $iv $i $j $modified
}
}
}
}
}
}
}
TdrFileSave $inp $out
TdrFileClose $inp打印标签
tcl
set f myfile.tdr
set recursive 1
proc PrintTagGroup {tg indent recursive} {
set space [format "% ${indent}s" ""]
set nt [TdrTagGroupGetNumTag $tg]
set ng [TdrTagGroupGetNumTagGroup $tg]
if {$ng > 0 || $nt > 0} {
puts "${space}tag group: \'[TdrTagGroupGetName $tg]\'"
puts "${space} contains $ng tag groups and $nt tags"
# 列出标签
for {set it 0} {$it < $nt} {incr it} {
set struc [TdrTagGetStructure $tg $it]
set type [TdrTagGetType $tg $it]
puts "${space} tag $it:"
puts "${space} name: [TdrTagGetName $tg $it]"
puts "${space} structure: $struc"
puts "${space} type: $type"
if {$struc == "scalar"} {
puts "${space} value: [TdrTagGetValue $tg $it]"
} else {
puts "${space} rows: [TdrTagGetNumRow $tg $it]"
puts "${space} cols: [TdrTagGetNumCol $tg $it]"
}
}
# 列出标签组
for {set ig 0} {$ig < $ng} {incr ig} {
set tgi [TdrTagGroupGetTagGroup $tg $ig]
if {$recursive} {
PrintTagGroup $tgi [expr $indent + 3] $recursive
} else {
puts "${space} tag group $ig: \'[TdrTagGroupGetName $tgi]\'"
}
}
}
}
TdrFileOpen $f
puts "file $f"
PrintTagGroup [TdrFileGetTagGroup $f] 3 $recursive
# 遍历几何体
set ng [TdrFileGetNumGeometry $f]
for {set ig 0} {$ig < $ng} {incr ig} {
set gname [TdrGeometryGetName $f $ig]
puts " geometry $ig: $gname"
PrintTagGroup [TdrGeometryGetTagGroup $f $ig] 6 $recursive
}
TdrFileClose $fTcl 接口限制
- 不支持复数:包含复数值的数据集无法读取或修改
- 不支持几何坐标访问:无法访问顶点、边、元素的几何坐标
- 只能创建标签和标签组:创建其他新数据是不可能的
函数分类
Tcl 接口函数分为以下几类:
| 类别 | 说明 |
|---|---|
| 文件相关函数 | 文件的打开、保存、关闭和转换 |
| 几何相关函数 | 几何体的名称、类型、维度、变换矩阵 |
| 状态相关函数 | 状态的管理和查询 |
| 区域相关函数 | 区域的材料、名称、类型 |
| 数据集相关函数 | 数据集的名称、数量、单位 |
| 数据值相关函数 | 数据值的读取和修改 |
| 标签组相关函数 | 标签组的层次结构管理 |
| 标签相关函数 | 标签的创建和修改 |
NOTE
大多数函数使用整数参数按索引指定列表条目。索引从零开始,即第一个条目的索引为 0。
文件相关函数
TdrFileClose
关闭 TDR 文件,不保存任何修改。
tcl
TdrFileClose <filename>返回值:Boolean — 成功关闭返回 TRUE,否则返回 FALSE
tcl
TdrFileClose file1.tdrTdrFileConvert
转换文件格式,语法与命令行接口相同。
tcl
TdrFileConvert <convert-command> [parameter] <source-file> [<destination-file>]返回值:Boolean — 转换成功返回 TRUE,否则返回 FALSE
tcl
TdrFileConvert -mtt -y tdr_file.tdr tdr_mirr.tdrTdrFileGetNumGeometry
返回文件中的几何体数量。
tcl
TdrFileGetNumGeometry <filename>返回值:Integer — 几何体数量;出错时返回负值
tcl
set file1_num_geom [TdrFileGetNumGeometry file1.tdr]TdrFileGetTagGroup
返回文件的标签组句柄。
tcl
TdrFileGetTagGroup <filename>返回值:Handle — 用于标签组相关函数
tcl
set tg [TdrFileGetTagGroup file1.tdr]TdrFileOpen
打开 TDR 文件。使用文件前必须先调用此命令。
tcl
TdrFileOpen <filename> [-native_units] [-reference_coordinates]| 选项 | 说明 |
|---|---|
-native_units | 不进行单位缩放,按原始单位读取数据 |
-reference_coordinates | 将坐标和矢量数据集转换为参考坐标系 |
返回值:Boolean — 成功打开返回 TRUE,否则返回 FALSE
tcl
TdrFileOpen file1.tdr -native_unitsTdrFileSave
保存文件的所有更改。
tcl
TdrFileSave <filename> [<new_filename>]返回值:Boolean — 成功保存返回 TRUE,否则返回 FALSE
tcl
TdrFileSave file1.tdr file1_copy.tdr
TdrFileSave file2.tdr几何相关函数
TdrGeometryDelete
删除指定几何体。
tcl
TdrGeometryDelete <filename> <geometry_index>WARNING
在循环中调用时,必须按反向顺序遍历。
tcl
TdrGeometryDelete file1.tdr 1TdrGeometryGetDimension
返回几何体的维度。
tcl
TdrGeometryGetDimension <filename> <geometry_index>返回值:Integer — 几何体维度
tcl
set geom_dim [TdrGeometryGetDimension file1.tdr 1]TdrGeometryGetName
返回几何体的名称。
tcl
TdrGeometryGetName <filename> <geometry_index>返回值:String — 几何体名称
tcl
set geom_name [TdrGeometryGetName file1.tdr 1]TdrGeometryGetNumRegion
返回几何体中的区域数量。
tcl
TdrGeometryGetNumRegion <filename> <geometry_index>返回值:Integer — 区域数量
TdrGeometryGetNumState
返回几何体中的状态数量。
tcl
TdrGeometryGetNumState <filename> <geometry_index>返回值:Integer — 状态数量
TdrGeometryGetShift
返回几何体的偏移向量(长度为 3 的列表)。
tcl
TdrGeometryGetShift <filename> <geometry_index>返回值:List — 格式为 {x y z} 的偏移向量
tcl
set geom_shift [TdrGeometryGetShift file1.tdr 1]TdrGeometryGetTagGroup
返回几何体的标签组句柄。
tcl
TdrGeometryGetTagGroup <filename> <geometry_index>返回值:Handle
tcl
set tg [TdrGeometryGetTagGroup file1.tdr 1]TdrGeometryGetTransform
返回几何体的变换矩阵(3×3 矩阵,表示为列表)。
tcl
TdrGeometryGetTransform <filename> <geometry_index>返回值:List — 格式为 {x00 x01 x02 ... x21 x22} 的变换矩阵
TdrGeometryGetType
返回几何体的类型。
tcl
TdrGeometryGetType <filename> <geometry_index>返回值:String — 可能的值包括:
"envelop""grid_raytree""mixed_element""tensor_rectilinear""tensor_uniform""tensor_warped""tensor_xy"
TdrGeometrySetName
设置几何体的新名称。
tcl
TdrGeometrySetName <filename> <geometry_index> <name>返回值:Boolean
tcl
TdrGeometrySetName file1.tdr 1 new_geometry_nameTdrGeometrySetShift
设置几何体的新偏移向量。
tcl
TdrGeometrySetShift <filename> <geometry_index> <shift_list>tcl
set new_shift {0.1 0.4 0.3}
TdrGeometrySetShift file1.tdr 1 $new_shiftTdrGeometrySetTransform
设置几何体的新旋转矩阵。
tcl
TdrGeometrySetTransform <filename> <geometry_index> <transformation_list>tcl
set new_transform {1 3.14 4.13 3.13 1 6.13 4.13 6.13 1}
TdrGeometrySetTransform file1.tdr 1 $new_transform状态相关函数
TdrStateDelete
删除指定状态。
tcl
TdrStateDelete <filename> <geometry_index> <state_index>WARNING
在循环中调用时,必须按反向顺序遍历。
tcl
TdrStateDelete file1.tdr 1 2TdrStateGetName
返回状态的名称。
tcl
TdrStateGetName <filename> <geometry_index> <state_index>返回值:String
tcl
set state_name [TdrStateGetName file1.tdr 1 2]TdrStateGetTagGroup
返回状态的标签组句柄。
tcl
TdrStateGetTagGroup <filename> <geometry_index> <state_index>返回值:Handle
TdrStateSetName
设置状态的新名称。
tcl
TdrStateSetName <filename> <geometry_index> <state_index> <name>tcl
TdrStateSetName file1.tdr 1 2 FinalState区域相关函数
TdrRegionGetDimension
返回区域的维度。
tcl
TdrRegionGetDimension <filename> <geometry_index> <region_index>返回值:Integer
TdrRegionGetMaterial
返回区域的材料名称。
tcl
TdrRegionGetMaterial <filename> <geometry_index> <region_index>返回值:String
tcl
set region_material [TdrRegionGetMaterial file1.tdr 1 2]TdrRegionGetName
返回区域的名称。
tcl
TdrRegionGetName <filename> <geometry_index> <region_index>返回值:String
TdrRegionGetNumDataset
返回区域的数据集数量。
tcl
TdrRegionGetNumDataset <filename> <geometry_index> <region_index> <state_index>返回值:Integer
TdrRegionGetTagGroup
返回区域的标签组句柄。
tcl
TdrRegionGetTagGroup <filename> <geometry_index> <region_index>返回值:Handle
TdrRegionGetType
返回区域的类型。
tcl
TdrRegionGetType <filename> <geometry_index> <region_index>返回值:String — 可能的值包括:
"bulk""contact""interface""raytree""ten_bulk""ten_contact""ten_xy"
TdrRegionSetMaterial
设置区域的新材料。
tcl
TdrRegionSetMaterial <filename> <geometry_index> <region_index> <material>tcl
TdrRegionSetMaterial file1.tdr 1 2 CopperTdrRegionSetName
设置区域的新名称。
tcl
TdrRegionSetName <filename> <geometry_index> <region_index> <name>tcl
TdrRegionSetName file1.tdr 1 2 new_region_name数据集相关函数
TdrDatasetDelete
删除数据集。
tcl
TdrDatasetDelete <filename> <geometry_index> <region_index> <state_index> <dataset_index>WARNING
在循环中调用时,必须按反向顺序遍历。
tcl
TdrDatasetDelete file1.tdr 1 2 0 0TdrDatasetDeleteByName
按名称删除数据集。
tcl
TdrDatasetDeleteByName <filename> [<name>]name 可以是 Tcl 正则表达式,指定要删除的数据集。如果省略参数,则删除所有数据集。
tcl
TdrDatasetDeleteByName file1.tdr DopingConcentrationTdrDatasetGetLocation
返回数据集的位置。
tcl
TdrDatasetGetLocation <filename> <geometry_index> <region_index> <state_index> <dataset_index>返回值:String — 可能的值:
"edge""element""element_edge""element_face""element_vertex""face""region""vertex"
TdrDatasetGetName
返回数据集的名称。
tcl
TdrDatasetGetName <filename> <geometry_index> <region_index> <state_index> <dataset_index>返回值:String
TdrDatasetGetNumValue
返回数据集的数据值数量。
tcl
TdrDatasetGetNumValue <filename> <geometry_index> <region_index> <state_index> <dataset_index>返回值:Integer
TdrDatasetGetQuantity
返回数据集的物理量名称。
tcl
TdrDatasetGetQuantity <filename> <geometry_index> <region_index> <state_index> <dataset_index>返回值:String — 例如 "DopingConcentration"、"ElectricField" 等
TdrDatasetGetStructure
返回数据集的结构类型。
tcl
TdrDatasetGetStructure <filename> <geometry_index> <region_index> <state_index> <dataset_index>返回值:String — 可能的值:
"matrix""scalar""tensor_sym""var_dim_matrix""var_dim_vector""vector"
TdrDatasetGetTagGroup
返回数据集的标签组句柄。
tcl
TdrDatasetGetTagGroup <filename> <geometry_index> <region_index> <state_index> <dataset_index>返回值:Handle
TdrDatasetGetType
返回数据集的类型。
tcl
TdrDatasetGetType <filename> <geometry_index> <region_index> <state_index> <dataset_index>返回值:String
TdrDatasetGetUnit / TdrDatasetGetUnitLong
返回数据集的单位(短名称/长名称)。
tcl
TdrDatasetGetUnit <filename> <geometry_index> <region_index> <state_index> <dataset_index>
TdrDatasetGetUnitLong <filename> <geometry_index> <region_index> <state_index> <dataset_index>返回值:String
TdrDatasetRename
全局重命名数据集。
tcl
TdrDatasetRename <filename> <old_name> <new_name>TdrDatasetRenameQuantity
全局更改数据集的物理量。
tcl
TdrDatasetRenameQuantity <filename> <old_quantity> <new_quantity>TdrDatasetSetName
设置数据集的新名称。
tcl
TdrDatasetSetName <filename> <geometry_index> <region_index> <state_index> <dataset_index> <name>TdrDatasetSetQuantity
设置数据集的物理量。
tcl
TdrDatasetSetQuantity <filename> <geometry_index> <region_index> <state_index> <dataset_index> <quantity>数据值相关函数
TdrDataGetAllCoordinates
返回数据值的所有坐标。
tcl
TdrDataGetAllCoordinates <filename> <geometry_index> <region_index> <state_index> <dataset_index> <value_index>返回值:String
TdrDataGetComponent
返回数据值的指定分量。
tcl
TdrDataGetComponent <filename> <geometry_index> <region_index> <state_index> <dataset_index> <value_index> [<row>] [<col>]返回值:Double
TdrDataGetCoordinate
返回数据值的指定坐标。
tcl
TdrDataGetCoordinate <filename> <geometry_index> <region_index> <state_index> <dataset_index> <value_index> <coordinate_index>返回值:Integer
TdrDataGetNumCol
返回数据值的列数。
tcl
TdrDataGetNumCol <filename> <geometry_index> <region_index> <state_index> <dataset_index> <value_index>返回值:Integer
TdrDataGetNumRow
返回数据值的行数。
tcl
TdrDataGetNumRow <filename> <geometry_index> <region_index> <state_index> <dataset_index> <value_index>返回值:Integer
TdrDataGetValue
返回数据值。
tcl
TdrDataGetValue <filename> <geometry_index> <region_index> <state_index> <dataset_index> <value_index>返回值:Boolean
TdrDataSetComponent
设置数据值的指定分量。
tcl
TdrDataSetComponent <filename> <geometry_index> <region_index> <state_index> <dataset_index> <value_index> [<row>] [<col>] <value>返回值:Boolean
标签组相关函数
TdrTagGroupCreate
创建新标签组。
tcl
TdrTagGroupCreate <parent_tag_group> <name>返回值:Handle
TdrTagGroupDelete
删除标签组。
tcl
TdrTagGroupDelete <parent_tag_group> <tag_group_index>返回值:Boolean
TdrTagGroupDeleteByName
按名称删除标签组。
tcl
TdrTagGroupDeleteByName <parent_tag_group> <tag_group_name>返回值:Boolean
TdrTagGroupGetByPath
按路径获取标签组。
tcl
TdrTagGroupGetByPath <filename> [<geometry_index>] [<region_index>] [<state_index>] [<dataset_index>] <path>返回值:Handle
TdrTagGroupGetName
返回标签组的名称。
tcl
TdrTagGroupGetName <tag_group>返回值:String
TdrTagGroupGetNumTag
返回标签组中的标签数量。
tcl
TdrTagGroupGetNumTag <tag_group>返回值:Integer
TdrTagGroupGetNumTagGroup
返回标签组中的子标签组数量。
tcl
TdrTagGroupGetNumTagGroup <tag_group>返回值:Integer
TdrTagGroupGetTagGroup
返回指定索引的子标签组。
tcl
TdrTagGroupGetTagGroup <parent_tag_group> <tag_group_index>返回值:Handle
标签相关函数
TdrTagCreateScalar
创建标量标签。
tcl
TdrTagCreateScalar <parent_tag_group> <name> <type> <value>返回值:Boolean
TdrTagDelete
删除标签。
tcl
TdrTagDelete <tag_group> <tag_index>返回值:Boolean
TdrTagDeleteByName
按名称删除标签。
tcl
TdrTagDeleteByName <tag_group> <tag_name>返回值:Boolean
TdrTagGetComponent
返回标签的指定分量。
tcl
TdrTagGetComponent <tag_group> <tag_index> [<row>] [<col>]返回值:String
TdrTagGetName
返回标签的名称。
tcl
TdrTagGetName <tag_group> <tag_index>返回值:String
TdrTagGetNumCol
返回标签的列数。
tcl
TdrTagGetNumCol <tag_group> <tag_index>返回值:Integer
TdrTagGetNumRow
返回标签的行数。
tcl
TdrTagGetNumRow <tag_group> <tag_index>返回值:Integer
TdrTagGetStructure
返回标签的结构类型。
tcl
TdrTagGetStructure <tag_group> <tag_index>返回值:String — "scalar" 或 "matrix"
TdrTagGetType
返回标签的值类型。
tcl
TdrTagGetType <tag_group> <tag_index>返回值:String
TdrTagGetValue
返回标签的值。
tcl
TdrTagGetValue <tag_group> <tag_index>返回值:String
TdrTagSetComponent
设置标签的分量值。
tcl
TdrTagSetComponent <tag_group> <tag_index> [<row>] [<col>] <value>返回值:Boolean
本章小结
- TDX 提供基于 Tcl 的脚本接口,支持完整的 Tcl 语法
- 使用
tdx -tcl script.tcl运行脚本,tdx -tclcmd运行单条命令 - 循环删除时必须按反向顺序遍历
- 支持文件、几何体、状态、区域、数据集、数据值、标签组、标签的管理和修改