【OpenFOAM】-olaFlow-算例10-wavemakerTank

news/2024/4/19 5:43:52/文章来源:https://blog.csdn.net/ou_no/article/details/129199260

算例路径: olaFlow\tutorials\wavemakerTank
算例描述: 采用 Flap和Piston两种方式的动网格进行造波
学习目标: 了解 olaDyMFlow 的使用;理解动网格使用和参数设置,理解 dynamicMotionSolverFvMesh 参数设置;理解造波边界运动方式生成
学习体会:
    (1) dynamicMotionSolverFvMesh 根据边界上的压强计算网格运动,反之它也为流体计算提供了反馈。它通过改变该边界上的速度边界条来件指定被定义物体的局部速度。
    (2) 与算例9动边界(网格)消波类似,理解肤浅,逐步理解动网格 !!!

算例快照:
在这里插入图片描述

图1 动网格推板造波水池

在这里插入图片描述

图2 动网格摇板造波水池

文件结构:

.
├── 0.org
│   ├── U
│   ├── alpha.water
│   ├── alpha.water.org
│   ├── p_rgh
│   └── pointDisplacement
├── cleanCase
├── constant
│   ├── dynamicMeshDict
│   ├── flapWaveGen.py
│   ├── g
│   ├── pistonWaveGen.py
│   ├── transportProperties
│   ├── turbulenceProperties
│   └── wavemakerMovementDict
├── runParallelCaseFlap
├── runParallelCasePiston
└── system├── blockMeshDict├── controlDict├── decomposeParDict├── fvSchemes├── fvSolution└── setFieldsDict

算例文件解析:
除以下解析的文件外,其他文件与 baseWaveFlume 一样。
参考 【OpenFOAM】-olaFlow-算例1- baseWaveFlume

【runParallelCasePiston】/【runParallelCaseFlap】

#!/bin/bash
mkdir 0
blockMesh > blockMesh.logrm -fr 0
cp -r 0.org 0setFields > setFields.logcd constant
python pistonWaveGen.py  # 创建推板运动方式
# python flapWaveGen.py  # 创建摇板运动方式
cd ..decomposePar > decomposePar.log
mpirun -np 4 olaDyMFlow -parallel > olaDyMFlow.log # 动网格造波

【0.org\U】

dimensions      [0 1 -1 0 0 0 0];
internalField   uniform (0 0 0);
boundaryField
{inlet{type            movingWallVelocity; // 运动壁面的速度边界条件value           uniform (0 0 0);}outlet{type            waveAbsorption2DVelocity;absorptionDir   180;nPaddles        10;value           uniform (0 0 0);}bottom{type            fixedValue;value           uniform (0 0 0);}"wall."{type            fixedValue;value           uniform (0 0 0);}atmosphere{type            pressureInletOutletVelocity;value           uniform (0 0 0);}
}

【0.org\pointDisplacement】

dimensions      [0 1 0 0 0 0 0];
internalField   uniform (0 0 0);
boundaryField
{inlet  // 与算例9中的动网格消波相似{type            wavemakerMovement;      // 造波机运动边界条件wavemakerDictName wavemakerMovementDict;;  // 造波机运动设置字典value           uniform (0 0 0);}outlet{type            fixedValue;value           uniform (0 0 0);}bottom{type            fixedNormalSlip;   //边界上的法向分量由用户指定;切向分量为滑移条件,即从内部场复制n               (0 0 1);  // 法向方向value           uniform (0 0 0);}"wall."{//type            zeroGradient;type            fixedNormalSlip;    //边界上的法向分量由用户指定;切向分量为滑移条件,即从内部场复制n               (0 1 0); value           uniform (0 0 0);}atmosphere{type            zeroGradient;/*type            fixedNormalSlip;n               (0 0 1);value           uniform (0 0 0);*/}
}

【constant\dynamicMeshDict】
dynamicMotionSolverFvMesh参考 https://openfoamwiki.net/index.php/Parameter_Definitions_-_dynamicMotionSolverFvMesh#inverseDistance

dynamicFvMesh      dynamicMotionSolverFvMesh; 
// 应用于 FSI 领域。这种网格控制几乎专门用于涉及刚体运动的问题。
// 该求解器围绕指定的边界使网格变形,根据边界上的压强计算网格运动,反之它也为流体计算提供了反馈。它通过改变该边界上的速度边界条来件指定被定义物体的局部速度(包括平动和转动)。motionSolverLibs   ("libfvMotionSolvers.so");solver            displacementLaplacian; // 一种 fvMesh 的网格运动求解器,器原理是对运动位移进行单元中心的Laplacian 运算。(Based on solving the cell-centre Laplacian for the motion displacement.)
//参考 https://www.openfoam.com/documentation/guides/latest/api/classFoam_1_1displacementLaplacianFvMotionSolver.htmldisplacementLaplacianCoeffs
{diffusivity inversePointDistance (inlet);//eg. diffusivity    quadratic     inverseDistance      5.0     ( Body );//              [ Distance Type]  [diffusivity model][ Distance] [Patch]// diffusivity: 该参数控制网格运动的分布。假设一种基本情况,即一个动边界和另一组静态边界。网格运动求解器须要找到某种方式来将边界的运动扩散到域中。OpenFOAM 中有如下几种可用的方法。若不确定如何选择,可以省略改参数,程序会使用默认值。// (1) inverseDistance// (2) inverseFaceDistance// (3) inversePointDistance// (4) inverseVolume// (5) uniform// inversePointDistance: }

【constant\wavemakerMovementDict】

#include "wavemakerMovement.txt"  // 读取文件wavemakerMovement.txt

【constant\wavemakerMovement.txt】 for Pistion

// 运行pistonWaveGen.py生成
wavemakerType   Piston;  // 造波版类型
tSmooth         1.5;
genAbs          0;timeSeries 621(
0.0
0.05
0.1
... )paddlePosition 10(
621(
-0.008087650377905872
0.003925783549844903
0.01589620577150058
... )
621( ... ) // 每个paddle的运动
... );paddleEta 10(
621(
0.04987574680586761
0.04997075156666095
0.0495182663162379
... )
621( ... ) ... );

【constant\wavemakerMovement.txt】 for Flap

// 运行flapWaveGen.py生成
wavemakerType   Flap;  // 造波版类型
tSmooth         1.5;
genAbs          0;timeSeries 621(
0.0
0.05
0.1
... )paddleTilt 10(
621(
-2.2802830032546137
1.1073069810089098
4.4751216177835795
... )
621( ... ) // 每个paddle的倾斜程度
... );

【constant\pistonWaveGen.py】

#!/usr/bin/python
import numpy as npdef dispersion(T, h):  # 定义色散方程求解 L0 = 9.81*T**2/(2.*np.pi)L = L0for i in range(0,100):Lnew = L0 * np.tanh(2.*np.pi/L*h)if(abs(Lnew-L)<0.001):L = LnewbreakL = Lnewreturn L## Piston wavemaker data ##
H = 0.1
T = 3.0
h = 0.4
phase0 = 0.
direction = 15.  // 斜向波 15°nPaddles = 10
bLims = [0., 5.]t0 = 0.
tEnd = 31.
dt = 0.05
######################### Calculations
L = dispersion(T, h)
k = 2.*np.pi/L
w = 2.*np.pi/Ttimes = np.linspace(t0, tEnd, round((tEnd-t0)/dt)+1)
coords = np.linspace(bLims[0], bLims[1], nPaddles+1)
coords = coords[:-1] + np.diff(coords)/2.HoS = 4. * np.sinh(k*h)**2. / (np.sinh(2.*k*h) + 2.*k*h)
S = H/HoS# Export
fid = open('wavemakerMovement.txt', 'w')fid.write('wavemakerType   Piston;\n')
fid.write('tSmooth         1.5;\n')
fid.write('genAbs          0;\n\n')fid.write('timeSeries {0}(\n'.format( len(times) ))
for t in times:fid.write('{0}\n'.format(t))
fid.write(');\n\n'.format( len(times) ))fid.write('paddlePosition {0}(\n'.format( nPaddles ))
for i in range(0, nPaddles):fid.write('{0}(\n'.format( len(times) ))for t in times:x = S/2. * np.cos(-w*t + np.pi/2. + phase0 + 2.*np.pi*coords[i]/L*np.sin(direction*np.pi/180.) )fid.write('{0}\n'.format(x))       fid.write(')\n')
fid.write(');\n\n')fid.write('paddleEta {0}(\n'.format( nPaddles ))
for i in range(0, nPaddles):fid.write('{0}(\n'.format( len(times) ))for t in times:x = H/2. * np.cos(-w*t + phase0 + 2.*np.pi*coords[i]/L*np.sin(direction*np.pi/180.) )fid.write('{0}\n'.format(x))       fid.write(')\n')
fid.write(');\n\n')fid.close()

【constant\flapWaveGen.py】

#!/usr/bin/pythonimport numpy as npdef dispersion(T, h):    L0 = 9.81*T**2/(2.*np.pi)L = L0for i in range(0,100):Lnew = L0 * np.tanh(2.*np.pi/L*h)if(abs(Lnew-L)<0.001):L = LnewbreakL = Lnewreturn L## Flap wavemaker data ##
H = 0.1
T = 3.0
h = 0.4
phase0 = 0.
direction = 15.nPaddles = 10
bLims = [0., 5.]t0 = 0.
tEnd = 31.
dt = 0.05
######################### Calculations
L = dispersion(T, h)
k = 2.*np.pi/L
w = 2.*np.pi/Ttimes = np.linspace(t0, tEnd, round((tEnd-t0)/dt)+1)
coords = np.linspace(bLims[0], bLims[1], nPaddles+1)
coords = coords[:-1] + np.diff(coords)/2.HoS = 4. * np.sinh(k*h)/(k*h) * (k*h*np.sinh(k*h) - np.cosh(k*h) + 1.)/(np.sinh(2.*k*h) + 2.*k*h)
S = H/HoS# Export
fid = open('wavemakerMovement.txt', 'w')fid.write('wavemakerType   Flap;\n')
fid.write('tSmooth         1.5;\n')
fid.write('genAbs          0;\n\n')fid.write('timeSeries {0}(\n'.format( len(times) ))
for t in times:fid.write('{0}\n'.format(t))
fid.write(');\n\n'.format( len(times) ))fid.write('paddleTilt {0}(\n'.format( nPaddles ))
for i in range(0, nPaddles):fid.write('{0}(\n'.format( len(times) ))for t in times:x = S/2. * np.cos(-w*t + np.pi/2. + phase0 + 2.*np.pi*coords[i]/L*np.sin(direction*np.pi/180.) )x = np.arctan(x/h)x = x*180./np.pifid.write('{0}\n'.format(x))       fid.write(')\n')
fid.write(');\n')fid.close()

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

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

相关文章

【华为OD机试模拟题】用 C++ 实现 - 环中最长子串(2023.Q1)

最近更新的博客 华为OD机试 - 入栈出栈(C++) | 附带编码思路 【2023】 华为OD机试 - 箱子之形摆放(C++) | 附带编码思路 【2023】 华为OD机试 - 简易内存池 2(C++) | 附带编码思路 【2023】 华为OD机试 - 第 N 个排列(C++) | 附带编码思路 【2023】 华为OD机试 - 考古…

【Linux修炼】14.磁盘结构/文件系统/软硬链接/动静态库

每一个不曾起舞的日子&#xff0c;都是对生命的辜负。 磁盘结构/文件系统/软硬链接/动静态库前言一.磁盘结构1.1 磁盘的物理结构1.2 磁盘的存储结构1.3 磁盘的逻辑结构二.理解文件系统2.1 对IO单位的优化2.2 磁盘分区与分组2.3 分组的管理方法2.4 文件操作三.软硬链接3.1理解硬…

vue手写日历

<template><div class"page">输入月份数字<input v-model"inputVal" type"text"><button click"change">点击</button><ul class"calendar"><li class"header">{{new …

记忆总掉线?这些行为太伤脑!

人体老化过程中&#xff0c;记忆力的衰退不可避免&#xff0c;这种属于“良性”的记忆衰退。但非“良性”的记忆衰退可要重视&#xff0c;很可能是痴呆症的早期征兆。由于各种原因&#xff0c;我们各种熬夜。作息的不规律扰乱大脑神经系统的调节。这种长期慢性损害大脑&#xf…

WebDAV之π-Disk派盘+Cloud Player

Cloud Player 支持WebDAV方式连接π-Disk派盘。 推荐一款云媒体播放器是存储在常见云平台中的内容的通用播放器。 Cloud Player云媒体播放器是存储在常见云平台中的内容的通用播放器,无需将其下载到设备。支持以下云平台:Google Drive、DropBox、One Drive、WebDav等。此外,…

超纯水制备,MB-106UP抛光树脂的技术解析

超纯水&#xff08;Ultrapure water&#xff09;又称UP水&#xff0c;是指电阻率达到18 MΩ*cm&#xff08;25℃&#xff09;的水。这种水中除了水分子外&#xff0c;几乎没有什么杂质&#xff0c;更没有细菌、病毒、含氯二噁英等有机物&#xff0c;当然也没有人体所需的矿物质…

【ArcGIS Pro二次开发】(7):地图(Map)的基本操作

地图是ArcGIS Pro中的基础起点&#xff0c;也是大多数工程的基础。主要用于显示表示空间数据的图层。 一、地图(Map)的基本操作示例 1、获取当前地图 var map MapView.Active.Map; 2、获取一级图层 var lys map.Layers; 用于获取地图中的单一图层&#xff0c;以及图层组…

深入了解Java线程锁(一)

在上一篇《如何保证线程的原子性》中&#xff0c;我们谈到了锁&#xff08;Synchronized&#xff09;&#xff0c; 这次我们就来深入探讨一下Java多线程中的锁。 互斥锁的本质是共享资源。 如上图所示&#xff0c; Thread1访问受保护资源&#xff0c;对其加锁&#xff0c;将…

【GO】k8s 管理系统项目16[前端部分–前端布局]

【GO】k8s 管理系统项目[前端部分–前端布局] 1. 前端布局 2. Layout 2.1 layout src/layout/Layout.vue <template><div class"common-layout"><el-container><el-side width"200">Aside</el-side><el-container>…

CAN总线开发一本全(3) - 微控制器集成的FlexCAN外设

CAN总线开发一本全&#xff08;3&#xff09; - 微控制器集成的FlexCAN外设 苏勇&#xff0c;2023年2月 文章目录CAN总线开发一本全&#xff08;3&#xff09; - 微控制器集成的FlexCAN外设引言硬件外设模块系统概要总线接口单元 - 寄存器清单数据结构 - 消息缓冲区MB初始化过…

React(一):初识React、类组件、jsx的基础语法

React&#xff08;一&#xff09;一、初识React1.简单介绍2.React的三个依赖3.Hello React案例二、类组件1.定义类组件并渲染2.绑定事件函数&#xff08;奇怪的this问题&#xff09;3.数组形式数据的展示&#xff08;电影案例&#xff09;4.计数器案例三、jsx语法详解1.jsx的书…

利用InceptionV3实现图像分类

最近在做一个机审的项目&#xff0c;初步希望实现图像的四分类&#xff0c;即&#xff1a;正常&#xff08;neutral&#xff09;、涉政&#xff08;political&#xff09;、涉黄&#xff08;porn&#xff09;、涉恐&#xff08;terrorism&#xff09;。有朋友给推荐了个github上…

机器学习笔记之近似推断(一)从深度学习角度认识推断

机器学习笔记之近似推断——从深度学习角度认识推断引言推断——基本介绍精确推断难的原因虽然能够表示&#xff0c;但计算代价太大无法直接表示引言 本节是一篇关于推断总结的博客&#xff0c;侧重点在于深度学习模型中的推断任务。 推断——基本介绍 推断(Inference\text{…

Python中实现将内容进行base64编码与解码

一、需求说明需要使用Python实现将内容转为base64编码&#xff0c;解码&#xff0c;方便后续的数据操作。二、base64简介Base64是一种二进制到文本的编码方式【是一种基于 64 个可打印字符来表示二进制数据的表示方法&#xff08;由于 2^664&#xff0c;所以每 6 个比特为一个单…

国产音质好的蓝牙耳机有哪些?国产音质最好的耳机排行

随着时间的推移&#xff0c;真无线蓝牙耳机逐渐占据耳机市场的份额&#xff0c;成为人们日常生活中必备的数码产品之一。蓝牙耳机品牌也多得数不胜数&#xff0c;哪些国产蓝牙耳机音质好&#xff1f;下面&#xff0c;我们从音质出来&#xff0c;来给大家介绍几款国产蓝牙耳机&a…

硬件系统工程师宝典(11)-----去耦电容布局“有讲究”

各位同学大家好&#xff0c;欢迎继续做客电子工程学习圈&#xff0c;今天我们继续来讲这本书&#xff0c;硬件系统工程师宝典。 上篇我们说到在电源完整性分析的目标就是要做到电源的干净、稳定和快速响应&#xff0c;以及针对不同噪声处理的实现方法。今天我们来看看去耦电容…

父传子与子传父步骤

父传子&#xff1a; 问题&#xff1a;父页面中引入子组件 把想要传给子页面的值用在子组件中用 &#xff1a;值“值” (用同一个值好区分)来绑定。 在子页面中用props接收 子组件不能改变父组件传过来的值。&#xff08;传多个页面的时候是&#xff0c;比如父传孙的时候我会…

【2023】华为OD机试真题Java-题目0221-AI处理器组合

AI处理器组合 题目描述 某公司研发了一款高性能AI处理器。每台物理设备具备8颗AI处理器,编号分别为0、1、2、3、4、5、6、7。编号0-3的处理器处于同一个链路中,编号4-7的处理器处于另外一个链路中,不通链路中的处理器不能通信,如下图所示。现给定服务器可用的处理器编号数…

STM32---备份寄存器BKP和 FLASH学习使用

BKP库函数 学习BKP&#xff0c;首先就是知道BKP每一个函数的作用然后如何使用即可 使用备份域的作用只需要操作上面的两个函数即可&#xff0c;其余的都是它的其他功能 BKP简介 备份寄存器是42个16位的寄存器&#xff0c;可用来存储84个字节的用户应用程序数据。他们处在备份…

如何高效管理自己的时间,可以从这几个方向着手

如果你是上班族&#xff0c;天选打工人&#xff0c;你的绝大多数时间都属于老板&#xff0c;能够自己支配的时间其实并不多&#xff0c;所以你可能察觉不到时间管理的重要性。但如果你是自由职业者或者创业者&#xff0c;想要做出点成绩&#xff0c;那你就需要做好时间管理&…