二维鱼游CFD代码

news2024/12/24 2:07:17

最近学了会Julia,参考了原作者的shark,做一下基于airfoils 2D的鱼游,暂时没想好有什么需要深入研究的,代码公开如下:

鱼身是naca0016,然后一些参数可以参考我以前发的论文。

using WaterLily, StaticArrays, Interpolations, Plots, Images

fit = y -> scale(interpolate(y, BSpline(Quadratic(Line(OnGrid())))),range(0,1,length=length(y)))
width1 = [0.02, 0.07, 0.06, 0.048, 0.03, 0.019, 0.01]
function naca0016_points(n_points::Int)
    x = range(0, stop=1, length=n_points)
    yt = 5 * 0.16 * (0.2969 * sqrt.(x) .- 0.1260 * x .- 0.3516 * x.^2 .+ 0.2843 * x.^3 .- 0.1015 * x.^4)
    return yt
end
width2 = naca0016_points(100)
thk = fit(width2)
envelope1 = [0.2,0.21,0.23,0.4,0.88,1.0]
ampfun = (x; a0=0, a1=0.00294, a2=0.111) -> a0 + a1 * x + a2 * x^2
envelop2 = ampfun.(0:0.01:1; a0=0, a1=0.00294, a2=0.111)
amp = fit(envelop2)

function fish(thk, amp, k=10.472;St,ω, L=2^6,fish_shift, Re=1e4, U = 1,T=Float32,mem=Array)
  function map(x, t)
		xc = x .- fish_shift # shift origin
		return xc - SVector(0., L * amp(s(xc)) * sin(k*s(xc)-ω*t))
	end
	s(x) = clamp(x[1]/L, 0, 1)
	sdf(x,t) =sum(abs2, x - L * SVector(s(x), 0.)) - L * thk(s(x))
	return Simulation((300,180), (U,0.), L; ν=U*L/Re, body=AutoBody(sdf,map))
end
pending_singal = (x, coeff) -> coeff * x

U = 1
L = 60 # length of the fish L
fish_shift = 90
St = 6.858*amp(1)/U
ω = 2π * St * U/(2amp(1) * L)
swimmer = fish(thk, amp;St,ω, L, U, fish_shift);

period = 2amp(1)/St # Save a time span for one swimming cycle
cycle = range(0, 23/24*period, length=24)
@gif for t ∈ cycle
	measure!(swimmer, t*swimmer.L/swimmer.U)
	contour(swimmer.flow.μ₀[:,:,1]',
			aspect_ratio=:equal, legend=false, border=:none)
end

结果可以看到鱼游动的形态

在这里插入图片描述

下面是仿真

stop = 5
@time @gif for tᵢ in range(0.,stop;step=0.05)
    if tᵢ % 0.2 == 0
      println("Simulation tU/L = ",round(tᵢ,digits=4))
    end
    sim_step!(swimmer,tᵢ,remeasure=true)
end

保存gif

function plot_vorticity(sim)
	@inside sim.flow.σ[I] = WaterLily.curl(3, I, sim.flow.u) * sim.L / sim.U
	contourf(sim.flow.σ',
			 color=palette(:BuGn), clims=(-10, 10), linewidth=0,
			 aspect_ratio=:equal, legend=false, border=:none)
end
cycle = range(0, 23/24*period, length=24)
# make a gif over a swimming cycle
@gif for t ∈ sim_time(swimmer) .+ cycle
	sim_step!(swimmer, t, remeasure=true)
	plot_vorticity(swimmer)
end

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何解决网络问题?

组织和 IT 管理员尽其所能完善他们的网络,但是,不同程度的网络问题仍然可能出现,这些网络问题需要立即响应和解决,如果这些问题在不合理的时间内得不到解决,网络和组织的损害可能会付出高昂的代价。这就是为什么 IT 管…

【C#线程设计】3:threadpool

实现: (1).控件:group Box,text Box,check Box,label,botton,richtextbox 控件拉取见:https://blog.csdn.net/m0_74749240/article/details/139409510?spm1…

IDEA配置mybatis-config.xml模板文件

IDEA配置mybatis-config.xml模板文件 File>>Settings>>File and Code Templates 创建mybatis-config.xml模板 模板内容取自mybatis官网 mybatis官网 <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE configurationPUBLIC &qu…

怎么使用手机远程访问电脑文件?(3种方法)

手机远程访问电脑文件 “有时&#xff0c;当我离开电脑时&#xff0c;仍然需要访问和使用桌面上的文件。是否有一种工具可以通过WiFi而不是USB连接&#xff0c;让我的手机远程访问电脑上的文件&#xff1f;如果有任何建议&#xff0c;我将非常感激&#xff01;” 除了希望手机…

c++引用的本质(反汇编角度分析)

目录 一、引用基础理论 二、 引用的本质 三、从反汇编角度进行分析 1.变量赋值 2.引用和指针初始化 3.通过引用和指针赋值 4.eaxd的作用 一、引用基础理论 在c中我们都知道&#xff0c;引用&#xff08;&&#xff09;就是变量的一个别名&#xff0c;它允许我们为已存…

上市公司-市场竞争程度(1999-2023年)赫份达尔、勒纳指数数据集

数据年份&#xff1a;1999-2023年 有效样本&#xff1a;64505条 数据来源&#xff1a;上市公司年报 数据说明&#xff1a; ① 在行业层面&#xff0c;赫芬达尔指数可衡量一个公司在市场中的相对份额或集中度。它是由每家公司在市场中份额的平方和得到的。指数值越高&#x…

idea打开hierarchy面板

hierarchy&#xff1a;查看类层级关系图 不同版本的IDEA的快捷键不一样&#xff0c;同时如果修改了IDEA快捷键&#xff0c;也可能会不一样&#xff0c;具体查看可通过IDEA上方的Navigate来查看navigate--Type Hierarchy&#xff0c;就可以看见其快捷键了&#xff0c;我的快捷键…

数据结构--递归和数组

个人介绍 hello hello~ &#xff0c;这里是 code袁~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的…

企业网站策划

企业网站策划是企业推广和宣传的重要组成部分&#xff0c;它不仅是企业对外传达形象和信息的平台&#xff0c;更是企业与客户、供应商、合作伙伴进行交流和互动的重要工具。好的企业网站策划不仅能够展示企业形象和产品信息&#xff0c;还能够为用户提供更好的体验&#xff0c;…

双指针数组问题

删除有序数组中的重复项 重点在于p1 class Solution {public int removeDuplicates(int[] nums) {if(nums.length0) return 0;int p10,p21;while(p2<nums.length){if(nums[p2]!nums[p1]){nums[p1]nums[p2];}else p2;}return p11;} } class Solution {public void moveZeroe…

数据结构(C):二叉树前中后序和层序详解及代码实现及深度刨析

目录 &#x1f31e;0.前言 &#x1f688;1.二叉树链式结构的代码是实现 &#x1f688;2.二叉树的遍历及代码实现和深度刨析代码 &#x1f69d;2.1前序遍历 ✈️2.1.1前序遍历的理解 ✈️2.1.2前序代码的实现 ✈️2.1.3前序代码的深度解剖 &#x1f69d;2.2中序遍历 ✈…

简单记录玩4399游戏flash插件问题

一、因谷歌浏览器默认禁止flash插件自动运行,所以玩家在使用谷歌浏览器,访问www.4399.com平台页面或者4399小游戏(flash资源)时,可能会出现加载异常的情况。今天教大家如何开启flash插件 二、下载falsh官方插件 地址:Flash Player官方下载中心-Flash中国官网 三、如果您…

【Modelground】个人AI产品MVP迭代平台(5)——神投手(实时投篮检测游戏)

文章目录 介绍篮框识别进球算法离屏渲染总结 介绍 神投手是我开发的一款移动端web实时投篮检测游戏&#xff0c;基于Mediapipe对象检测模型&#xff0c;提供数据集&#xff0c;训练出可识别篮框的模型。利用图像处理算法&#xff0c;检测篮球进框的场景。提供了两种模式&#…

「React」RSC 服务端组件

前言 RSC&#xff08;React Server Components&#xff09;是React框架的一个新特性&#xff0c;它允许开发者编写只在服务器端渲染的组件。与传统的服务器端渲染&#xff08;SSR&#xff09;不同&#xff0c;RSC的目标是提升性能和用户体验&#xff0c;同时减少客户端加载的J…

【iOS】UI学习——登陆界面案例、照片墙案例

文章目录 登陆界面案例照片墙案例 登陆界面案例 这里通过一个登陆界面来复习一下前面学习的内容。 先在接口部分定义两个UILabel、两个UITextField、两个UIButton按键&#xff1a; #import <UIKit/UIKit.h>interface ViewController : UIViewController {UILabel* _lb…

【算法】常用排序算法(插入排序、希尔排序、堆排序、选择排序、冒泡排序、快速排序、归并排序、计数排序)超详细

排序算法是数据结构相关知识中非常重要的一节&#xff0c;相信很多小伙伴对这部分知识一知半解。那么接下来&#xff0c;小编就要带领大家一起来进行对排序算法的深入剖析学习&#xff0c;希望本篇文章能够使你有所收获&#xff01; 一.常见的排序算法 排序算法有很多种&#…

报错:CMake Error OpenCVConfig.cmake opencv-config.cmake

1、编译过程中&#xff0c;出现OpenCV 报错问题 报错&#xff1a;CMake Error OpenCVConfig.cmake opencv-config.cmake 解决思路&#xff1a;参考此链接

3.大模型高效微调PEFT

大模型高效微调(PEFT)技术 预训练模型的背景 预训练与微调:传统的微调方法通常涉及对整个预训练模型的参数进行再训练,以适应特定任务。这虽然有效,但计算成本高,且需要大量的标记数据。模型结构:像BERT或GPT这样的模型通常包含数亿甚至数十亿个参数,构成一个深层次的…

Discuz! X3.4发帖时间修改插件批量操作版

下载地址&#xff1a;Discuz! X3.4发帖时间修改插件批量操作版 发帖时间与回复时间说明 1、使用本插件修改发帖时间&#xff0c;则帖子中的回复楼层的时间会保持同步同间隔修改&#xff0c;所谓同步同间隔就是如果某个回复是在主题发布之后一小时回复的&#xff0c;那么修改之…

智慧园区建设方案(Word)

1. 楼栋管理 2. 物业管理 3. 安防管理 4. 门禁管理 5. 停车管理 6. 能源管理 7. 环保管理 8. 园区生活服务 9. 招商管理 10. 收费中心 11. 园区地图 12. 门户网站 软件整套原件获取&#xff1a;本文末个人名片。