Skip to content

第 40 章:Tcl 接口

基于网格的运行时支持

Element

使用指向 element 的指针进行以下操作:

  • 读取索引以访问 element 数据:
tcl
$element index
  • 读取 element 的类型:
tcl
$element type

返回以下值之一:

tcl
$::des_element_point
$::des_element_line
$::des_element_triangle
$::des_element_rectangle
$::des_element_tetrahedron
$::des_element_pyramid
$::des_element_prism
$::des_element_cuboid
$::des_element_tetrabrick
  • element 中的顶点数:
tcl
$element size_vertex
  • 读取指向顶点 i 的指针:
tcl
set vertex [$element vertex $i]
  • 连接到该 element 的边数:
tcl
$element size_edge
  • 读取指向边 i 的指针:
tcl
set edge [$element edge $i]
  • 读取包含该 element 的 bulk 区域的指针:
tcl
set bulk [$element bulk]
  • element 中 element-vertex 数据的起始索引:
tcl
$element element_vertex_offset

Region

使用指向 region 的指针进行以下操作:

  • 读取索引:
tcl
$region index
  • 读取 region 的类型:
tcl
$region type

返回 $::des_region_bulk$::des_region_contact 之一。

  • 读取 region 的名称:
tcl
$region name
  • region 中的顶点数:
tcl
$region size_vertex
  • 读取指向顶点 i 的指针:
tcl
set vertex [$region vertex $i]
  • region 中的边数:
tcl
$region size_edge
  • 读取指向边 i 的指针:
tcl
set edge [$region edge $i]

使用以下函数将指向 region 的指针转换为指向 bulk 区域或 contact 的指针:

tcl
set bulk [tcl_cp_region2bulk $region]
set contact [tcl_cp_region2contact $region]

指向 bulk 区域的指针支持以下附加操作:

  • 读取 region 的材料:
tcl
$bulk material
  • region 中的 element 数:
tcl
$bulk size_element
  • 读取指向 element i 的指针:
tcl
set element [$bulk element $i]
  • region 中的 region interface 数:
tcl
$bulk size_regioninterface
  • 读取指向 region interface i 的指针:
tcl
set regioninterface [$bulk regioninterface $i]

Region Interface

使用指向 region interface 的指针进行以下操作:

  • 读取索引:
tcl
$regioninterface index
  • 读取指向连接到 region interface 的第一个 bulk 区域的指针:
tcl
set bulk [$regioninterface bulk1]
  • 读取指向连接到 region interface 的第二个 bulk 区域的指针:
tcl
set bulk [$regioninterface bulk2]
  • 判断该 region interface 是否为异质接口:
tcl
$regioninterface is_heterointerface
  • region interface 中的顶点数:
tcl
$regioninterface size_vertex
  • 读取指向顶点 i 的指针:
tcl
set vertex [$regioninterface vertex $i]
  • 读取访问存储在 region interface 顶点 i 上的数据的索引:
tcl
$regioninterface index $i

Device Data

使用指向 Sentaurus Device 数据的指针(如 set data [$tcl_cp_adr Data])进行以下操作:

  • 读取指向 box method 系数(2D 数组,C++ 数据类型 double**)的指针:
tcl
set coefficient [$data ReadCoefficient]
  • 读取指向 box method 测度(2D 数组,C++ 数据类型 double**)的指针:
tcl
set measure [$data ReadMeasure]
  • 读取指向 box method 表面测度(2D 数组,C++ 数据类型 double**)的指针:
tcl
set surfacemeasure [$data ReadSurfaceMeasure]
  • 读取指向标量数据(1D 数组,C++ 数据类型 double*)的指针:
tcl
set scalar [$data ReadScalar $location $name]
  • 读取指向矢量数据(2D 数组,C++ 数据类型 double**)的指针:
tcl
set vector [$data ReadVector $location $name]
  • 写入标量数据(1D 数组,C++ 数据类型 double*):
tcl
$data WriteScalar $location $name $newvalue
  • 读取指向梯度(2D 数组,C++ 数据类型 double**)的指针:
tcl
set gradient [$data ReadGradient $location $name]
  • 读取指向通量(1D 数组,C++ 数据类型 double*)的指针:
tcl
set flux [$data ReadFlux $location $name]
  • SHE 方法的电子分布:
tcl
$data ReadeSHEDistribution $bulk $vertex $energy
  • SHE 方法的空穴分布:
tcl
$data ReadhSHEDistribution $bulk $vertex $energy
  • SHE 方法的电子态密度:
tcl
$data ReadeSHETotalDOS $bulk $energy
  • SHE 方法的空穴态密度:
tcl
$data ReadhSHETotalDOS $bulk $energy
  • SHE 方法的电子群速度:
tcl
$data ReadeSHETotalGSV $bulk $energy
  • SHE 方法的空穴群速度:
tcl
$data ReadhSHETotalGSV $bulk $energy

$location 支持以下值:

tcl
$::des_data_vertex
$::des_data_edge
$::des_data_element
$::des_data_rivertex
$::des_data_element_vertex

有关标量和矢量数据的名称,请参阅第 1573 页的附录 F。

一维数组

使用以下函数分配一维数组(C++ 数据类型 double*):

tcl
set v1 [tcl_cp_new_double $size]

使用以下函数读取一维数组的元素(C++ 数据类型 double*):

tcl
set value [tcl_cp_get_double $v1 $index]

使用以下函数写入一维数组的元素(C++ 数据类型 double*):

tcl
tcl_cp_set_double $v1 $index $value

使用以下函数释放一维数组(C++ 数据类型 double*):

tcl
tcl_cp_delete_double $v1

二维数组

使用以下函数读取二维数组的元素(C++ 数据类型 double**):

tcl
set value [tcl_cp_get_double2 $v2 $index1 $index2]

Current Plot 文件

您可以使用 current plot Tcl 接口向 current plot 文件添加新条目。它在功能上等同于第 1489 页的 Current Plot File 中描述的 current plot PMI。

必须通过 CurrentPlot 部分中的 tcl 语句指定所需的 Tcl 代码。例如:

tcl
CurrentPlot {
Tcl (tcl = "source CurrentPlot.tcl"
}

par1=<value> par2=<value>)

在此示例中,Tcl 代码存储在文件 CurrentPlot.tcl 中。如有需要,您也可以指定模型参数(par1par2)。

Tcl 函数

您必须为以下目的定义 Tcl 函数:

  • tcl_cp_constructor:构造函数
  • tcl_cp_destructor:析构函数(可选)
  • tcl_cp_Compute_Dataset_Names:计算 current plot 文件头部的数据集名称列表
  • tcl_cp_Compute_Function_Names:计算 current plot 文件头部的函数名称列表
  • tcl_cp_Compute_Plot_Values:计算 current plot 值

这些 Tcl 过程必须实现与 C++ 类 PMI_CurrentPlot(请参阅第 1489 页的 Current Plot File)对应方法相同的功能。Tcl 解释器还可以访问运行时支持函数以及整个 Sentaurus Device 网格和数据字段(请参阅第 1536 页的基于网格的运行时支持)。

tcl_cp_constructor

构造函数在每个 Tcl current plot 语句的开头调用一次:

tcl
proc tcl_cp_constructor {} {
upvar #1 tcl_cp_adr tcl_cp_adr
...
}

所有 current plot Tcl 过程都在它们自己的 Tcl 命名空间中执行。这确保多个 Tcl current plot 语句可以同时处于活动状态,并且它们都在各自私有的命名空间中操作。使用 Tcl upvar 命令访问此命名空间中的变量。

如第 1536 页的基于网格的运行时支持中所述,Tcl 指针 tcl_cp_adr 提供对 Sentaurus Device 网格和数据的访问:

tcl
set mesh [$tcl_cp_adr Mesh]
set data [$tcl_cp_adr Data]

构造函数还可用于预计算稍后评估 current plot 值所需的数据。

tcl_cp_destructor

此可选过程可用于释放数据结构,或打印统计输出:

tcl
proc tcl_cp_destructor {} {
}

tcl_cp_Compute_Dataset_Names

此过程必须返回 Tcl 数据集名称列表。例如:

tcl
proc tcl_cp_Compute_Dataset_Names {} {
lappend result "channel eConductivity"
return $result
}

支持多个数据集名称。

基于 Sentaurus TCAD 官方文档构建

代码块