当前位置: 首页 > news >正文

PFCdocumentation_FISH Rules and Usage

目录

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模式下可用命令

相关文章:

PFCdocumentation_FISH Rules and Usage

目录 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 Ex…...

如何完美卸载VS2015(2023年5月份实测有效)

使用控制面板卸载VS2015&#xff0c;出现正在配置您的系统&#xff0c;这可能需要一些时间&#xff0c;然后就出现卡住半个小时第二行的条都没有动的问题&#xff0c;这里提供vs2015以及以前版本的卸载方式 问题产生原因:他需要下载一些东西&#xff0c;然后由于你懂的网络原因…...

JavaScript如何声明和定义函数

JavaScript是一门非常有趣的编程语言&#xff0c;它可以让我们创建各种各样的函数来解决各种各样的问题。在JavaScript中&#xff0c;函数的声明和定义非常重要&#xff0c;因为它们决定了函数的行为和执行过程。 首先&#xff0c;让我们来看看JavaScript中函数的声明。在Java…...

微信小程序 WebSocket 通信 —— 在线聊天

在Node栏目就讲到了Socket通信的内容&#xff0c;使用Node实现Socke通信&#xff0c;还使用两个流行的WebSocket 库&#xff0c;ws 和 socket.io&#xff0c;在小程序中的WebSocket接口和HTML5的WebSocket基本相同&#xff0c;可以实现浏览器与服务器之间的全双工通信。那么本篇…...

VMware快照:简化虚拟化环境管理与数据保护

引言&#xff1a; 在虚拟化环境中&#xff0c;数据保护和灵活性是至关重要的。VMware快照作为一项强大的功能&#xff0c;为虚拟机管理者提供了便利和安全性。本文将介绍VMware快照的使用&#xff0c;以及它为用户带来的几个关键优势。 VMware快照是一项重要的功能&#xff0c…...

图的最短路径

最短路径算法对图结构没有特殊要求&#xff0c;不要求连通图&#xff0c;且有向图无向图均可。 最短路径算法目标是求得从某顶点出发&#xff0c;沿图的边到达另一顶点所经过的路径中&#xff0c;各边上权值之和最小的一条路径。解决最短路的问题有以下算法&#xff1a;Dijkst…...

RHCE----Shell变量和引用

1.变量的类型及含义 变量类型: 1、自定义变量: 在当前的shell命令行界面设置的变量是局部变量 例子&#xff1a; num1 namezhangsan 2、环境变量全局变量,通过export 导出后的局部变量是全局变量 、bash的初始化文件&#xff1a;/etc/profile&#xff1a;存放一些全局变量…...

【Redis】聊一下缓存雪崩、击穿、穿透、预热

缓存的引入带来了数据读取性能的提升&#xff0c;但是因此也引入新的问题&#xff0c;一个是数据双写一致性&#xff0c;另一个就是雪崩、击穿、穿透&#xff0c;那么如何解决这些问题&#xff0c;我们来说下对应的问题和解决方案 雪崩 缓存雪崩&#xff1a;同一时间内大量请…...

全景描绘云原生技术图谱,首个《云原生应用引擎技术发展白皮书》发布

5月12日&#xff0c;由神州数码主办、北京经开区国家信创园、中关村云计算产业联盟协办的2023通明湖论坛-云原生分论坛在京召开。论坛期间&#xff0c;神州数码联合北京通明湖信息技术应用创新中心、中国信通院和通明智云正式发布了《云原生应用引擎技术发展白皮书》&#xff0…...

【Python共享文件】——Python快速搭建HTTP web服务实现文件共享并公网远程访问

文章目录 1. 前言2. 视频教程3. 本地文件服务器搭建3.1 python的安装和设置3.2 cpolar的安装和注册 4. 本地文件服务器的发布4.1 Cpolar云端设置4.2 Cpolar本地设置 5. 公网访问测试6. 结语 1. 前言 数据共享作为和连接作为互联网的基础应用&#xff0c;不仅在商业和办公场景有…...

Mysql数据库分库分表

为什么使用分库分表&#xff1f; 传统的将数据集中存储至单一数据节点的解决方案&#xff0c;在性能、可用性和运维成本这三方面已经难于满足互联网的海量数据场景。 1&#xff09;性能 从性能方面来说&#xff0c;由于关系型数据库大多采用 B 树类型的索引&#xff0c;在数…...

SpringBoot热部署插件原理分析及实战演练

目录 1、关于热部署&#xff08;Hot Deploy&#xff09;产生的背景 1&#xff09;热部署出现前 2&#xff09;热部署出现后 2、spring-boot-devtools插件原理 1&#xff09;解决变更文件自动加载到JVM中 2&#xff09;spring-boot-devtools重启速度比手动重启快 3、关于…...

【C++ 入坑指南】(10)函数

文章目录 简介定义实例函数的分文件编写 简介 函数是一组一起执行一个任务的语句。每个 C 程序都至少有一个函数&#xff0c;即主函数 main() &#xff0c;所有简单的程序都可以定义其他额外的函数。 您可以把代码划分到不同的函数中。如何划分代码到不同的函数中是由您来决定…...

P2233 [HNOI2002]公交车路线

题目描述 在长沙城新建的环城公路上一共有 8 个公交站&#xff0c;分别为 A、B、C、D、E、F、G、H。公共汽车只能够在相邻的两个公交站之间运行&#xff0c;因此你从某一个公交站到另外一个公交站往往要换几次车&#xff0c;例如从公交站 A 到公交站 D&#xff0c;你就至少需要…...

java入门-W11(K168-K182)网络编程

1. 网络编程入门 1.1 网络编程概述 计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备&#xff0c;通过通信线路连接起来&#xff0c;在网络操作系统&#xff0c;网络管理软件及网络通信协议的管理和协调下&#xff0c;实现资源共享和信息传递的计算机系统…...

距离6月18日DAMA-CDGA/CDGP认证考试还有31天,报名从速

6月18日DAMA-CDGA/CDGP数据治理认证考试开放报名中&#xff01; 考试开放地区&#xff1a;北京、上海、广州、深圳、长沙、呼和浩特、杭州、南京、济南、成都、西安。其他地区凑人数中… DAMA-CDGA/CDGP数据治理认证班进行中&#xff0c;报名从速&#xff01; DAMA认证为数据管…...

PO、VO、DAO、BO、DTO、POJO区分

一 分层领域模型规约: DO(Data Object):此对象与数据库表结构一一对应&#xff0c;通过 DAO 层向上传输数据源对象。DTO(Data Transfer Object):数据传输对象&#xff0c;Service 或 Manager 向外传输的对象。BO(Business Object):业务对象&#xff0c;由 Service 层输出的封装…...

MobPush Flutter平台插件

集成准备 注册账号 使用PushSDK之前&#xff0c;需要先在MobTech官网注册开发者账号&#xff0c;并获取MobTech提供的AppKey和AppSecret&#xff0c;详情可以点击查看注册流程 MobPush后台配置 注册MobTech账号后&#xff0c;需要在MobTech后台进行相关信息的配置&#xff…...

机器学习面试题库:K-means

一、简述K-means算法的原理及工作流程&#xff1f; 原理&#xff1a; K-means是一个无监督的聚类算法。它的主要目的是对同一组数据对象进行分类。其原理是基于样本间的相似性来聚类分析的&#xff0c;即将所有样本分为K个簇&#xff0c;使得同一个簇间中样本相似性最高&#…...

Linux:文本三剑客之awk

Linux&#xff1a;文本三剑客之awk 一、awk编辑器1.1 awk概述1.2 awk工作原理1.3 awk与sed的区别 二、awk的应用2.1 命令格式2.2 awk常见的内建变量&#xff08;可直接用&#xff09; 三、awk使用3.1 按行输出文本3.2 按字段输出文本3.3 通过管道、双引号调用 Shell 命令 一、a…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...