PFCdocumentation_FISH Rules and Usage

news/2024/5/17 14:48:47/文章来源:https://blog.csdn.net/weixin_52546971/article/details/130347337

目录

FISH Scripting

FISH Rules and Usage

Lines

Data Types

Reserved Names for Functions and Variables

Scope of Variables

Functions: Structure, Evaluation, and Calling Scheme

Arithmetic: Expressions and Type Conversions

Redefining FISH Functions

Execution of FISH Functions

Inline FISH or FISH Fragments

FISH Error Handling

FISH Callback Events

FISH Debugging


FISH Scripting


        FISH是一种嵌入式编程语言,使用户能够与PFC模型进行交互和操作,根据需要定义新的变量和函数。这些功能可用于扩展PFC的用途或增加用户定义的功能。

        FISH程序被简单地嵌入到一个正常的PFC数据文件中。define字样之后的行被作为FISH函数处理;当遇到end字样时,函数终止。函数可以调用其他函数,而其他函数可以调用其他函数,以此类推。定义函数的顺序并不重要,只要它们在被使用之前都被定义了


FISH Rules and Usage


Lines


        FISH程序可以嵌入到PFC数据文件中,也可以直接输入到控制台。

FISH的变量、函数名和语句必须全拼--它们不能被截断,这与PFC命令不同。允许在行末使用...控制语句的续行。FISH在任何时候都是 "不区分大小写的"。空格可以用于分隔变量、关键字等,以提高可读性;在变量或函数名称中不允许嵌入空位分号(;)后面的任何字符都会被忽略;注释可以通过在FISH程序前面加上分号来嵌入。

有效的fish代码的形式:

①The line starts with a statement, such as if, loop, etc. (see “FISH statements”).
②The line contains one or more names of user-defined FISH functions, separated by spaces (for example, fun_1 fun_2 fun_3).
③The line consists of an assignment statement (i.e., the expression on the right of the = sign is evaluated, and the value is given to the variable or function name on the left of the = sign).
④The line consists of a PFC command, provided that the line is embedded in a section of FISH code delimited by command - endcommand.
⑤The line is blank or starts with a semicolon.

该行是空白或以分号开始。


Data Types


FISH变量的形式:

Integer: Exact numbers in the range -2,147,483,648 to +2,147,483,647.
Boolean: Either a value of true or false.
Floating-point: Approximate numbers with about fourteen decimal digits of precision, with a range of approximately 10^-308 to 10^308.
String: Packed sequence of any printable characters; the sequence may be any length, but it may be truncated when printed. Strings are denoted in FISH and PFC by a sequence of characters enclosed by single or double quotes (e.g., 'Have a nice day' or "Have a nice day"). See the “Strings” section for further details.
Pointer: Machine address used when looping through a list and marking references to an object. They have an associated type from the object to which the pointer refers, except for the null pointer. 
Vector: 2D or 3D vector of floating-point types. 浮点类型的二维或三维矢量。
Array: A collection of FISH variables with specified dimensionality
Matrix: Matrix of numeric values with specified dimensionality. 
Tensor: A symmetric tensor. 对称的张量
Map: An associative array with string or number key and any FISH variable as value.
Structure: A structure may contain multiple FISH variables.

string

        唯一对字符串变量有效的算术运算是加法。

Pointer

        指针可以不引用任何对象,也可以为 null。如果对象被删除或销毁,则所有 FISH 符号 指向该对象的点将设置为 null。同样只能进行+运算。

vector

        FISH中内置了五个协助创建和操作矢量的通用函数。这些函数被列在FISH参考文献的三个部分:comp.x、comp.y和comp.z在组件实用程序部分;math.dot和math.cross在数学实用程序部分;vector在构造函数部分。

        数学运算符/、*、+、-可以在两个相同类型的向量之间使用。在向量和数字(整数或浮点)之间可以使用*运算符。在向量和数字之间也可以使用/运算符,但数字必须在右边。

Array(数组)

        Arrays are less flexible and perform less well than Maps. We suggest arrays be replaced with Maps whenever possible.

array array1 (i1 , i2 …)
;创建名字为array1的array
array abc(1,2,3)
abc = array.create(1,2,3)
;前者是在编译时执行,而后者是在运行时执行。

数组对象也可以用array.create和array.delete的内在函数来创建和销毁。

一个FISH阵列的符号名称可以在命令行中使用,并带有索引参数:set gravity 0 0 @abc(1,2,3) ,其中abc指向一个三维数组。赋值情况: set @abc(1,2,3) = 4.0。list @abc(1,2,3)打印了数组的数组指针、数组大小以及数组条目。

model new
model random 10001
fish define afill          ; fill matrix with random numbersarray var(4,3)loop local m (1,array.size(var,1))loop local n (1,array.size(var,2))var(m,n) = math.random.uniformend_loopend_loop
end
fish define ashow          ; display contents of matrixloop local m (1,array.size(var,1))local hed = '   'local msg = '  '+string(m)loop local n (1,array.size(var,2))hed = hed + '               '+string(n)msg = msg + '  '+string(var(m,n),8,' ',8,'e')end_loopif m = 1io.out(hed)end_ifio.out(msg)end_loop
end
@afill
@ashow

Matrices

        矩阵可以用array.convert方法转换为数组。矩阵可以由张量创建。

Tensors

        FISH支持3x3的对称张量。张量在计算主轴和应力不变量时非常有用。张量可以被添加和相乘。注意,张量乘法的结果是一个矩阵。

Maps

        地图与数组类似,它们以一种有序的方式存储FISH变量。与数组不同的是,地图的大小可以是动态的,用于从地图中检索数值的键可以是一个整数或一个字符串

map1 = map (i1 or s1, var1, i2 or s2, var2, ...)
;其中键可以是整数或字符串。额外的值可以用map.add方法添加,用map.remove方法删除。我们可以简单地通过给出地图名称和括号()中的键来访问值。

Structures

        结构可以包含多个FISH变量。这是一种编程数据结构,可用于对FISH变量进行分门别类

model new
fish define teststruct mystruct val1 val2 val3construct mystruct fred(1,2,3) test = fred->val1
end
[test]fish define test2construct mystruct fred(1,2,3)construct mystruct george(1,2,3)if ( fred == george )test2 = 7endif
end
[test2]

Reserved Names for Functions and Variables


①变量或函数名称必须以非数字开头,并且不能包含以下任何符号:. , * / + - ^ = < > # ( ) [ ] @ ; ' "

②变量或函数名称不区分大小写

③一般来说,名称可以任意选择,尽管它们不能与FISH语句或预定义的变量或函数相同


Scope of Variables


        默认情况下,变量和函数名是全局识别的。当给出fish list symbols命令时,一个变量也会出现在显示的变量列表中。

        如果FISH变量的自动创建选项被禁用(see the fish automatic-create command)),所有的全局变量必须用global关键字来声明。一个全局变量可以在一个FISH函数中被赋予一个值,并在另一个函数或PFC命令中使用。这个值会被保留,直到它被改变。所有全局变量的值也由模型保存model save命令保存,由模型恢复model restore命令恢复。

If the local identifier is used to declare a variable, the variable is considered local to that function and is not available once the function has been executed. 


Functions: Structure, Evaluation, and Calling Scheme


        FISH语言中唯一可以执行的对象函数

        一个函数在被定义之前可以在另一个函数中被提及;FISH编译器只是在第一次提及时创建一个符号,然后在用define语句定义该函数时链接所有对它的引用。一个函数不能被删除,但它可以被重新定义。

函数可以被以下几种方式调用:

①as the single word xxx inside a FISH function;

②as the variable xxx in a FISH formula, e.g.,: new_var = (math.sqrt(xxx) / 5.6)^4;
③as a single word @xxx in a PFC input line;

④as a single word [xxx] enclosed in brackets as outlined here;

⑤as a symbolic replacement for a number in a PFC input line; 

⑥as a parameter to the fish set, program list, or history commands.


Arithmetic: Expressions and Type Conversions


        ^      /      *      -      +      运算  

        可以使用任意数量的小括号来明确计算的顺序;小括号内的表达式在其他东西之前被计算。

        如果算术运算中的两个参数(arguments)中的任何一个是浮点类型的,那么结果将是浮点的( floating-point type)。如果两个参数都是整数(integers),那么结果将是整数。

一个整数除以另一个整数会导致结果的截断。例如,5/2产生的结果是2,而5/6产生的结果是0。

It is important to note that the division of one integer by another causes truncation of the result. For example, 5/2 produces the result 2, and 5/6 produces the result 0.


Redefining FISH Functions


重新定义函数时注意事项:

①在一个函数中使用的变量仍然存在,即使该函数被重新定义;只有代码被删除。由于变量是全局性的,它们很可能被用在其他地方。
所有对旧函数的调用都将调用新函数。这包括FISH的回调事件。注意,如果参数的数量发生变化,这将导致运行时错误。


Execution of FISH Functions

;fname: fishr12.dat
model new
model domain extent -10 10
contact cmat default model linearpbond
ball create id=1 pos-x=0.0 pos-y=0.0 pos-z=0.0 rad=0.5   ; create 5 balls in a line
ball create id=2 pos-x=1.0 pos-y=0.0 pos-z=0.0 rad=0.5
ball create id=3 pos-x=2.0 pos-y=0.0 pos-z=0.0 rad=0.5
ball create id=4 pos-x=3.0 pos-y=0.0 pos-z=0.0 rad=0.5
ball create id=5 pos-x=4.0 pos-y=0.0 pos-z=0.0 rad=0.5
ball attribute density 2000 damp 0.7
ball property 'kn'=1e8 'ks'=1e8  
; create contacts
model clean
; bond them into a beam using pbonds
contact method bond gap 0.1
contact property pb_kn=1e10 pb_ks=1e10 pb_ten=1e20 pb_coh=1e20
ball fix velocity spin range id=1     ; fix ball at left end
model gravity 0 0 -9.8                ; specify gravity loading
ball history name 10 position-z id=5    ; monitor y-position of tip ball
;
fish define run_seriesbdens = 2000.0loop nn (1,3)t_var = ' Density of tip ball = ' + string(bdens)commandball attribute dens @bdens range id=5  ; modify density of tip ballmodel title @t_var
model cycle 1000end_commandbdens = bdens + 3000end_loop
end
@run_series


Inline FISH or FISH Fragments


        除了@符号约定外,还有一种替代的语法用于将FISH连接到命令行。任何在方括号[]内发现的东西都会被识别并被视为内联FISH(inline FISH)

;提前创建函数
ball create id [ballID] position [ballPos] radius [ballRad]
;直接执行FISH片段,作为单行FISH的方便速记,不需要创建一个明确的函数
[global fred = math.cos(4.5)]
[execute_my_imported_fish_intrisic(with,three,arguments)]

FISH Error Handling


        PFC有一个内置的错误处理机制,当程序的某些部分检测到错误时,就会调用这个机制。错误处理机制也可以在不涉及 "错误 "的情况下使用。例如,当检测到某一条件时,步进可以停止。

The same logic may be accessed by a user-written FISH function by using the system.error FISH function. If a FISH function assigns a string to system.error, then the error-handling facility of PFC is invoked immediately, and a message containing the string assigned to system.error is printed. Stepping and FISH processing stop as soon as system.error is set.


FISH Callback Events


        在PFC程序执行过程中,FISH函数可以从多个地方被调用。将FISH函数附加到回调事件上会导致FISH函数被PFC执行,可以是在周期序列中的一个固定点,也可以是对一个特定事件的响应。可以通过fish list callbacks命令列出与回调事件一起注册的FISH函数集。

在fish callback命令中,可以给出删除关键字来取消FISH函数的注册。比如说

set fish callback 11.0 remove xxx删除函数xxx和循环点11.0之间的关联。

一个FISH函数可能与同一个周期点关联两次(或更多)。在这种情况下,它将被调用两次(或更多)。删除关键字将只删除FISH函数的一个实例。

FISH函数中的whilestepping表达式会自动将FISH函数插入周期点-1.0的周期序列中。


FISH Debugging


To enter debugging mode, use the fish debug command, supplying the name of a FISH function. If the function requires arguments, these must be specified on the command line following the function name. The arguments will be evaluated, and the function will begin to execute in debug mode.

While interpreting a FISH function, each line of source is converted (pseudo-compiled) into one or more pseudo-code objects, and these objects are executed when the function is called. Each pseudo-code object created is assigned a unique ID number for reference. Each pseudo-code object is also aware of the source file from which it originated and the line number of that file. The pseudo-code objects, their ID numbers, and their breakpoint status are available through the fish list code command.

        在调试模式(debug mode)下,代码进入函数时就会停止。每次当前执行点发生变化时,信息就会输出到屏幕上。命令提示符变为Debug>,PFC等待用户对如何进行的回应。注意,将接受来自当前输入源的输入,因此有可能在数据文件中包括调试命令。

debug模式下可用命令

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_488537.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中断相关内容大全

中断基本概念&#xff1a;程序中断指计算机执行现行程序过程中&#xff0c;出现某种急需处理的异常情况或特殊请求&#xff0c;CPU暂时中止现行程序&#xff0c;而转去对这些异常情况或特殊请求进行处理&#xff0c;处理完毕后CPU又自动返回到现行程序的断点处&#xff0c;继续…

算法修炼之练气篇——练气十七层

博主&#xff1a;命运之光 专栏&#xff1a;算法修炼之练气篇 前言&#xff1a;每天练习五道题&#xff0c;炼气篇大概会练习200道题左右&#xff0c;题目有C语言网上的题&#xff0c;也有洛谷上面的题&#xff0c;题目简单适合新手入门。&#xff08;代码都是命运之光自己写的…

【最新可用】chatGPT镜像网站国内使用,免费稳定!

新建了一个网站 https://ai.weoknow.com/ 每天给大家更新可用的国内可用chatGPT 2023.5.8新增一个 ChatGPT 国内免翻版 【网站名称】&#xff1a;Chat GPT Ai 【使用环境】&#xff1a;移动端/电脑网页端 ChatGPT是一款功能强大的免费在线聊天机器人&#xff0c;具有人工智能…

JavaScript通过js的方式来计算平行四边形的面积的代码

以下为通过js的方式来计算平行四边形的程序代码和运行截图 目录 前言 一、通过js的方式来计算平行四边形&#xff08;html部分&#xff09; 1.1 运行流程及思想 1.2 代码段 二、通过js的方式来计算平行四边形&#xff08;js部分&#xff09; 2.1 运行流程及思想 2.2 代码…

C#中如何使用ObjectPool来提高StringBuilder的性能

在C#中我们知道使用StringBuilder能提高大量字符串拼接的效率&#xff0c;其实StringBuilder的效率也可以提升&#xff0c;那就是使用ObjectPool。以下介绍怎么使用ObjectPool提高StringBuilder的性能。一、简介 C# ObjectPool类是一个内置的类库&#xff0c;用于实现对象…

AFG1062任意波形/函数发生器 产品资料

AFG1000 任意波形/函数发生器&#xff0c;提供 25MHz 或 60MHz 带宽&#xff0c;2 个输出通道&#xff0c;在整个带宽内 1mVpp 到 10Vpp 输出振幅&#xff0c;泰克 AFG1000 任意波形/函数发生器可以生成各种实验室测试所需波形。 *重要的是&#xff0c;它在泰克任意函数发生器系…

基于知识图谱的个性化学习资源推荐系统的设计与实现(论文+源码)_kaic

摘 要 最近几年来&#xff0c;伴随着教育信息化、个性化教育和K12之类的新观念提出,一如既往的教育方法向信息化智能化的转变&#xff0c;学生群体都对这种不受时间和地点约束的学习方式有浓厚的兴趣。而现在市面上存在的推荐系统给学生推荐资料时不符合学生个人对知识获取的…

小曾同学【五周年创作纪念日】——努力向前冲的菜鸟

&#x1f604;作者简介&#xff1a; 小曾同学.com,一个致力于测试开发的博主⛽️&#xff0c; 如果文章知识点有错误的地方&#xff0c;还请大家指正&#xff0c;让我们一起学习&#xff0c;一起进步。&#x1f60a; 座右铭&#xff1a;不想当开发的测试&#xff0c;不是一个好…

自主可控不走捷径,中国长城做难且正确的事

2020-2022年是中国信创产业的重要推广期&#xff0c;在国家战略的支持下&#xff0c;自主可控领域诸多相关企业均获得绝佳发展良机。 但信创产业“完成替代”不是终点&#xff0c;“实现领先”方是目标。如今势已启、路尚远&#xff0c;前景广阔的市场并不意味着自主可控相关企…

Hadoop之block切片

切片是一个逻辑概念 在不改变现在数据存储的情况下&#xff0c;可以控制参与计算的节点数目 通过切片大小可以达到控制计算节点数量的目的 有多少个切片就会执行多少个Map任务 hdfs上数据存储的一个单元,同一个文件中块的大小都是相同的 因为数据存储到HDFS上不可变&#xff0…

Lucene(1):Lucene介绍

Lucene官网&#xff1a; http://lucene.apache.org/ 1 搜索技术理论基础 1.1 lucene优势 原来的方式实现搜索功能&#xff0c;我们的搜索流程如下图&#xff1a; 上图就是原始搜索引擎技术&#xff0c;如果用户比较少而且数据库的数据量比较小&#xff0c;那么这种方式实现搜…

2路 QSFP,40G 光纤的数据实时采集(5GByte/s 带宽)板卡设计原理图 -PCIE732

板卡概述 PCIE732 是一款基于 PCIE 总线架构的高性能数据传输卡&#xff0c;板卡具有 1 个 PCIex8 主机接口、2 个 QSFP40G 光纤接口&#xff0c;可以实现 2 路 QSFP 40G 光纤的数据实时采集、传输。板卡采用 Xilinx 的高性 能 Kintex UltraScale 系列 FPGA 作为实时处理器…

小程序开发中的插件、组件、控件到底有什么区别?

小程序插件代码由一些自定义组件和 JS 代码文件构成&#xff0c;插件开发者在发布插件时&#xff0c;这些代码被上传到后台保存起来。当小程序使用插件时&#xff0c;使用者需填写插件的 AppID 和版本号&#xff0c;就可从后台获取相应的插件代码。小程序代码编译时&#xff0c…

2023什么蓝牙耳机好?经销商盘点新手必入蓝牙耳机品牌

蓝牙耳机是除手机外我们使用频率最高的数码产品&#xff0c;我做蓝牙耳机经销商五年来&#xff0c;对各个品牌都有深入了解。近期看到很多新手们咨询什么蓝牙耳机好&#xff0c;我给大家盘点一下新手必看的五大蓝牙耳机品牌。 1.JEET Air 2蓝牙耳机 推荐理由&#xff1a;专为舒…

知识点回顾(一)

1.final,finally ,finalize final?修饰符&#xff08;关键字&#xff09;如果一个类被声明为final&#xff0c;意味着它不能再派生出新的子类&#xff0c;不能作为父类被继承。因此一个类不能既被声明为 abstract的&#xff0c;又被声明为final的。将变量或方法声明为final&…

外强中干——双向带头循环链表

前言&#xff1a;众所周知&#xff0c;链表有八种结构&#xff0c;由单向或双向&#xff0c;有头或无头&#xff0c;循环或不循环构成。在本篇&#xff0c;将介绍8种链表结构中最复杂的——双向带头循环链表。听着名字或许挺唬人的&#xff0c;但实际上双向带头循环链表实现起来…

H3C防火墙单机旁路部署(网关在防火墙)

防火墙旁路部署在核心交换机上&#xff0c;内网有三个网段vlan 10&#xff1a;172.16.10.1/24、vlan 20&#xff1a;172.16.20.1/24、vlan30&#xff1a;172.16.30.1。要求内网网关在防火墙设备上&#xff0c;由防火墙作为DHCP服务器给终端下发地址&#xff0c;同时由防火墙来控…

网站域名历史记录批量查询-老域名建站历史快照数据查询

域名建站历史查询软件 域名建站历史查询软件是一种用于查询一个域名被使用的网站的历史记录的工具。它可以提供许多有用的信息&#xff0c;包括该网站的创建和修改日期、使用的网站建设平台、使用的CMS系统、网站的历史页面内容和页面结构等。 域名建站历史查询软件的作用是帮…

【MATLAB第30期】基于MATLAB的adaboost多分类预测集成学习模型(四种模型GDA高斯判别分析、Knn、NB朴素贝叶斯、SVM)

【MATLAB第30期】基于MATLAB的adaboost多分类预测集成学习模型&#xff08;四种模型GDA高斯判别分析、Knn、NB朴素贝叶斯、SVM&#xff09; 一、简介 弱分类器 %1.GDA高斯判别分析 %2.Knn (NumNeighbors 5) K邻近 %3.Naive Bayes 朴素贝叶斯 %4.SVM 支持向量机 强分类器 1.a…

视频理解AI模型分类与汇总

人工智能领域视频模型大体也经历了从传统手工特征&#xff0c;到卷积神经网络、双流网络&#xff08;2014年-2017年&#xff09;、3D卷积网络、transformer的发展脉络。为了时序信息&#xff0c;有的模型也结合用LSTM。 视频的技术大多借鉴图像处理技术&#xff0c;只是视频比…