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,出现正在配置您的系统,这可能需要一些时间,然后就出现卡住半个小时第二行的条都没有动的问题,这里提供vs2015以及以前版本的卸载方式 问题产生原因:他需要下载一些东西,然后由于你懂的网络原因…...
JavaScript如何声明和定义函数
JavaScript是一门非常有趣的编程语言,它可以让我们创建各种各样的函数来解决各种各样的问题。在JavaScript中,函数的声明和定义非常重要,因为它们决定了函数的行为和执行过程。 首先,让我们来看看JavaScript中函数的声明。在Java…...
微信小程序 WebSocket 通信 —— 在线聊天
在Node栏目就讲到了Socket通信的内容,使用Node实现Socke通信,还使用两个流行的WebSocket 库,ws 和 socket.io,在小程序中的WebSocket接口和HTML5的WebSocket基本相同,可以实现浏览器与服务器之间的全双工通信。那么本篇…...
VMware快照:简化虚拟化环境管理与数据保护
引言: 在虚拟化环境中,数据保护和灵活性是至关重要的。VMware快照作为一项强大的功能,为虚拟机管理者提供了便利和安全性。本文将介绍VMware快照的使用,以及它为用户带来的几个关键优势。 VMware快照是一项重要的功能,…...
图的最短路径
最短路径算法对图结构没有特殊要求,不要求连通图,且有向图无向图均可。 最短路径算法目标是求得从某顶点出发,沿图的边到达另一顶点所经过的路径中,各边上权值之和最小的一条路径。解决最短路的问题有以下算法:Dijkst…...
RHCE----Shell变量和引用
1.变量的类型及含义 变量类型: 1、自定义变量: 在当前的shell命令行界面设置的变量是局部变量 例子: num1 namezhangsan 2、环境变量全局变量,通过export 导出后的局部变量是全局变量 、bash的初始化文件:/etc/profile:存放一些全局变量…...
【Redis】聊一下缓存雪崩、击穿、穿透、预热
缓存的引入带来了数据读取性能的提升,但是因此也引入新的问题,一个是数据双写一致性,另一个就是雪崩、击穿、穿透,那么如何解决这些问题,我们来说下对应的问题和解决方案 雪崩 缓存雪崩:同一时间内大量请…...
全景描绘云原生技术图谱,首个《云原生应用引擎技术发展白皮书》发布
5月12日,由神州数码主办、北京经开区国家信创园、中关村云计算产业联盟协办的2023通明湖论坛-云原生分论坛在京召开。论坛期间,神州数码联合北京通明湖信息技术应用创新中心、中国信通院和通明智云正式发布了《云原生应用引擎技术发展白皮书》࿰…...
【Python共享文件】——Python快速搭建HTTP web服务实现文件共享并公网远程访问
文章目录 1. 前言2. 视频教程3. 本地文件服务器搭建3.1 python的安装和设置3.2 cpolar的安装和注册 4. 本地文件服务器的发布4.1 Cpolar云端设置4.2 Cpolar本地设置 5. 公网访问测试6. 结语 1. 前言 数据共享作为和连接作为互联网的基础应用,不仅在商业和办公场景有…...
Mysql数据库分库分表
为什么使用分库分表? 传统的将数据集中存储至单一数据节点的解决方案,在性能、可用性和运维成本这三方面已经难于满足互联网的海量数据场景。 1)性能 从性能方面来说,由于关系型数据库大多采用 B 树类型的索引,在数…...
SpringBoot热部署插件原理分析及实战演练
目录 1、关于热部署(Hot Deploy)产生的背景 1)热部署出现前 2)热部署出现后 2、spring-boot-devtools插件原理 1)解决变更文件自动加载到JVM中 2)spring-boot-devtools重启速度比手动重启快 3、关于…...
【C++ 入坑指南】(10)函数
文章目录 简介定义实例函数的分文件编写 简介 函数是一组一起执行一个任务的语句。每个 C 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数。 您可以把代码划分到不同的函数中。如何划分代码到不同的函数中是由您来决定…...
P2233 [HNOI2002]公交车路线
题目描述 在长沙城新建的环城公路上一共有 8 个公交站,分别为 A、B、C、D、E、F、G、H。公共汽车只能够在相邻的两个公交站之间运行,因此你从某一个公交站到另外一个公交站往往要换几次车,例如从公交站 A 到公交站 D,你就至少需要…...
java入门-W11(K168-K182)网络编程
1. 网络编程入门 1.1 网络编程概述 计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统…...
距离6月18日DAMA-CDGA/CDGP认证考试还有31天,报名从速
6月18日DAMA-CDGA/CDGP数据治理认证考试开放报名中! 考试开放地区:北京、上海、广州、深圳、长沙、呼和浩特、杭州、南京、济南、成都、西安。其他地区凑人数中… DAMA-CDGA/CDGP数据治理认证班进行中,报名从速! DAMA认证为数据管…...
PO、VO、DAO、BO、DTO、POJO区分
一 分层领域模型规约: DO(Data Object):此对象与数据库表结构一一对应,通过 DAO 层向上传输数据源对象。DTO(Data Transfer Object):数据传输对象,Service 或 Manager 向外传输的对象。BO(Business Object):业务对象,由 Service 层输出的封装…...
MobPush Flutter平台插件
集成准备 注册账号 使用PushSDK之前,需要先在MobTech官网注册开发者账号,并获取MobTech提供的AppKey和AppSecret,详情可以点击查看注册流程 MobPush后台配置 注册MobTech账号后,需要在MobTech后台进行相关信息的配置ÿ…...
机器学习面试题库:K-means
一、简述K-means算法的原理及工作流程? 原理: K-means是一个无监督的聚类算法。它的主要目的是对同一组数据对象进行分类。其原理是基于样本间的相似性来聚类分析的,即将所有样本分为K个簇,使得同一个簇间中样本相似性最高&#…...
Linux:文本三剑客之awk
Linux:文本三剑客之awk 一、awk编辑器1.1 awk概述1.2 awk工作原理1.3 awk与sed的区别 二、awk的应用2.1 命令格式2.2 awk常见的内建变量(可直接用) 三、awk使用3.1 按行输出文本3.2 按字段输出文本3.3 通过管道、双引号调用 Shell 命令 一、a…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...
Qemu arm操作系统开发环境
使用qemu虚拟arm硬件比较合适。 步骤如下: 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载,下载地址:https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...
Vue ③-生命周期 || 脚手架
生命周期 思考:什么时候可以发送初始化渲染请求?(越早越好) 什么时候可以开始操作dom?(至少dom得渲染出来) Vue生命周期: 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...
Linux部署私有文件管理系统MinIO
最近需要用到一个文件管理服务,但是又不想花钱,所以就想着自己搭建一个,刚好我们用的一个开源框架已经集成了MinIO,所以就选了这个 我这边对文件服务性能要求不是太高,单机版就可以 安装非常简单,几个命令就…...
十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建
【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...
uni-app学习笔记三十五--扩展组件的安装和使用
由于内置组件不能满足日常开发需要,uniapp官方也提供了众多的扩展组件供我们使用。由于不是内置组件,需要安装才能使用。 一、安装扩展插件 安装方法: 1.访问uniapp官方文档组件部分:组件使用的入门教程 | uni-app官网 点击左侧…...
Python爬虫实战:研究Restkit库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的有价值数据。如何高效地采集这些数据并将其应用于实际业务中,成为了许多企业和开发者关注的焦点。网络爬虫技术作为一种自动化的数据采集工具,可以帮助我们从网页中提取所需的信息。而 RESTful API …...
