twoPhaseEulerFoam 全解读之二(转)

news2024/11/13 22:30:46

twoPhaseEulerFoam 全解读之二(转)

本系列将对OpenFOAM-2.1.1 中的 twoPhaseEulerFoam 求解器进行完全解读,共分三部分:方程推导,代码解读,补充说明。本篇对 twoPhaseEulerFoam 中的 UEqn.H 和 pEqn.H 中的代码进行详细地的解读。

代码解读

UEqn

前一篇导出了分散相的动量守恒方程
( 1 + α b ρ b ρ a C v m ) ( ∂ U a ∂ t + U a ⋅ ∇ U a ) − ∇ ⋅ [ ν e f f ∇ U a ] + ∇ ⋅ [ R c , a ] + ∇ ( α a ) α a ⋅ [ − ν e f f ∇ U a + R c , a ] = − α b ρ a K U a − α b ρ a { C l ( α b ρ b + α a ρ a ) U r × ( ∇ × U ) − C v m ρ b [ ∂ U b ∂ t + U b ⋅ ∇ U b ] } − ∇ p ρ a + g + α b ρ a K U b \begin{aligned} &(1+\frac{\alpha_b \rho_b}{\rho_a} C_{vm})(\frac{\partial U_a}{\partial t} + U_a\cdot \nabla U_a ) -\nabla \cdot \left[ \nu_{eff} \nabla U_a \right ] + \nabla \cdot \left[ R_{c,a}\right] + \frac{\nabla(\alpha_a)}{\alpha_a} \cdot \left[ -\nu_{eff}\nabla U_a + R_{c,a}\right] \\ = & -\frac{\alpha_b}{\rho_a} K U_a - \frac{\alpha_b}{\rho_a} \left\{ {C_l (\alpha_b \rho_b + \alpha_a \rho_a) U_r \times (\nabla \times U) - C_{vm}\rho_b\left[ {\frac{\partial U_b}{\partial t} + U_b \cdot \nabla U_b }\right] } \right\} -\frac{\nabla p}{\rho_a} + g + \frac{\alpha_b}{\rho_a} K U_b \end{aligned} =(1+ρaαbρbCvm)(tUa+UaUa)[νeffUa]+[Rc,a]+αa(αa)[νeffUa+Rc,a]ρaαbKUaρaαb{Cl(αbρb+αaρa)Ur×(×U)Cvmρb[tUb+UbUb]}ρap+g+ρaαbKUb
这一篇分析twoPhaseEulerFoam求解器是怎么来对动量方程进行离散的,以及,如果通过构建压力方程来对速度进行修正以保证两相的连续性。

注意上述动量方程中,有两项还需要处理一下:
U a ⋅ ∇ U a = ∇ ⋅ ( U a U a ) − U a ( ∇ ⋅ U a ) U_a \cdot \nabla U_a=\nabla\cdot(U_aU_a)-U_a(\nabla\cdot U_a) UaUa=(UaUa)Ua(Ua)

∇ ( α a ) α a ⋅ [ − ν e f f ∇ U a ] = ∇ ⋅ [ − ν e f f ( ∇ α a ) α a U a ] − U a ( ∇ ⋅ ( − ν e f f ∇ α a α a ) ) \frac{\nabla(\alpha_a)}{\alpha_a}\cdot\left[-\nu_{eff} \nabla U_a\right] = \nabla \cdot\left[ -\nu_{eff}\frac{(\nabla \alpha_a)}{\alpha_a} U_a \right]-U_a\left(\nabla\cdot(-\nu_{eff}\frac{\nabla \alpha_a}{\alpha_a}) \right) αa(αa)[νeffUa]=[νeffαa(αa)Ua]Ua((νeffαaαa))
转化前后的形式从数学上来等价的,但是在有限体积离散过程中,转化前的 U a ⋅ ∇ U a U_a \cdot \nabla U_a UaUa ∇ ( α a ) α a ⋅ [ − ν e f f ∇ U a ] \frac{\nabla(\alpha_a)}{\alpha_a}\cdot\left[-\nu_{eff} \nabla U_a\right] αa(αa)[νeffUa] 对于 U a U_a Ua来说是非守恒的,转化后的形式是守恒的(参考这篇文献,注意这样转化后,动量方程空间上是守恒的,但时间上仍是不守恒的,这个帖子也有一些有价值的信息)。

这样转化以后,得到的动量方程就跟twoPhaseEulerFoam里的定义是一模一样了:

在这里插入图片描述

下面将动量方程的每一项与twoPhaseEulerFoam的UEqn.H的代码一一对应。

(scalar(1) + Cvm*rhob*beta/rhoa)*
            (
                fvm::ddt(Ua)
              + fvm::div(phia, Ua, "div(phia,Ua)")
              - fvm::Sp(fvc::div(phia), Ua)
            )

fvm::ddt(Ua)对应 ∂ U a ∂ t \frac{\partial U_a}{\partial t} tUa,phia定义为fvc::interpolate(Ua) & mesh.Sf(),于是fvm::div(phia, Ua, “div(phia,Ua)”) 和 fvm::Sp(fvc::div(phia), Ua) 便分别对应 ∇ ⋅ ( U a U a ) \nabla\cdot(U_aU_a) (UaUa) U a ( ∇ ⋅ U a ) U_a(\nabla\cdot U_a) Ua(Ua)了 [ 注一 ]。

- fvm::laplacian(nuEffa, Ua)
+ fvc::div(Rca)
+ fvm::div(phiRa, Ua, "div(phia,Ua)")
- fvm::Sp(fvc::div(phiRa), Ua)

fvm::laplacian(nuEffa, Ua)对应 ∇ ⋅ [ ν e f f ∇ U a ] \nabla \cdot \left[ \nu_{eff} \nabla U_a \right ] [νeffUa],fvc::div(Rca)对应 ∇ ⋅ [ R c , a ] \nabla \cdot \left[ R_{c,a}\right] [Rc,a]
phiRa的定义是

-fvc::interpolate(nuEffa)*mesh.magSf()*fvc::snGrad(alpha)
            /fvc::interpolate(alpha + scalar(0.001))

相当于 − ν e f f ∇ α a α a -\nu_{eff}\frac{\nabla \alpha_a}{\alpha_a} νeffαaαa [ 注二 ]。
于是 fvm::div(phiRa, Ua, “div(phia,Ua)”) 和 fvm::Sp(fvc::div(phiRa), Ua) 便分别对应 $\nabla \cdot\left[ -\nu_{eff} \frac{(\nabla \alpha_a)}{\alpha_a}(\nabla U_a)\right] $ 和 U a ( ∇ ⋅ ( − ν e f f ∇ α a α a ) ) U_a\left(\nabla\cdot(-\nu_{eff}\frac{\nabla \alpha_a}{\alpha_a}) \right) Ua((νeffαaαa))

(fvc::grad(alpha)/(fvc::average(alpha) + scalar(0.001)) & Rca)

对应 ∇ ( α a ) α a ⋅ [ R c , a ] \frac{\nabla(\alpha_a)}{\alpha_a} \cdot \left[ R_{c,a}\right] αa(αa)[Rc,a],其中&运算符已重载为计算矢量与张量的点乘积 [ 注三 ]。

 ==
//  g                          // Buoyancy term transfered to p-equation
- fvm::Sp(beta/rhoa*K, Ua)
//+ beta/rhoa*K*Ub             // Explicit drag transfered to p-equation
- beta/rhoa*(liftCoeff - Cvm*rhob*DDtUb)
        );

fvm::Sp(beta/rhoaK, Ua)对应 α b ρ a K U a \frac{\alpha_b}{\rho_a} K U_a ρaαbKUa,beta/rhoa(liftCoeff - CvmrhobDDtUb) 对应
α b ρ a { C l ( α b ρ b + α a ρ a ) U r × ( ∇ × U ) − C v m ρ b [ ∂ U b ∂ t + U b ⋅ ∇ U b ] } \frac{\alpha_b}{\rho_a} \left\{ {C_l (\alpha_b \rho_b + \alpha_a \rho_a) U_r \times (\nabla \times U) - C_{vm}\rho_b\left[ {\frac{\partial U_b}{\partial t} + U_b \cdot \nabla U_b }\right] } \right\} ρaαb{Cl(αbρb+αaρa)Ur×(×U)Cvmρb[tUb+UbUb]}
其中变量liftCoeff定义为

volVectorField liftCoeff(Cl*(beta*rhob + alpha*rhoa)*(Ur ^ fvc::curl(U)));

DDtUb定义为

DDtUb =
        fvc::ddt(Ub)
      + fvc::div(phib, Ub)
      - fvc::div(phib)*Ub;

重力 g g g 以及曳力的显式项 $\frac{\alpha_b}{\rho_a} K U_b $ 如注释所述,将会在 pEqn 中考虑,压力梯度项 ∇ p ρ a \frac{\nabla p}{\rho_a} ρap 则将在 pEqn 中用来约束两相的连续性。
至此动量方程的每一项都与UEqn.H的代码对应起来了。


pEqn

压力方程的作用是修正两相速度 U a U_a Ua U b U_b Ub以使速度满足连续性方程。将两相的连续性方程加起来,得到总体的连续性方程如下 [ 注四 ]:
在这里插入图片描述

由于 α a + α b = 1 \alpha_a+\alpha_b=1 αa+αb=1,于是两相连续性方程等价于
∇ ⋅ ( α a U a + α b U b ) = 0 \nabla \cdot (\alpha_a U_a+\alpha_b U_b) = 0 (αaUa+αbUb)=0

再来看压力方程是如何构建起来的。
完整的动量方程离散后,可以写作如下的统一形式:
a p , a U p , a = H ( U a ) − ∇ p ρ a + α b ρ a K U b + g a_{p,a}U_{p,a}=H(U_a)-\frac{\nabla p}{\rho_a}+\frac{\alpha_b}{\rho_a} K U_b +g ap,aUp,a=H(Ua)ρap+ρaαbKUb+g

a p , b U p , b = H ( U b ) − ∇ p ρ b + α a ρ b K U a + g a_{p,b}U_{p,b}=H(U_b)-\frac{\nabla p}{\rho_b}+\frac{\alpha_a}{\rho_b} K U_a +g ap,bUp,b=H(Ub)ρbp+ρbαaKUa+g
其中 H ( U a ) H(U_a) H(Ua) H ( U b ) H(U_b) H(Ub) 包含了动量方程中除 压力梯度项,显式曳力项以及重力项以后所有项的贡献。
由此离散方程可以得到 U a U_a Ua U b U_b Ub 的表达式如下:
U a = 1 a p , a H ( U a ) − ∇ p a p , a ρ a + α b a p , a ρ a K U b + 1 a p , a g U_{a}=\frac{1}{a_{p,a}}H(U_a)-\frac{\nabla p}{a_{p,a}\rho_a}+\frac{\alpha_b}{ a_{p,a} \rho_a} K U_b +\frac{1}{a_{p,a}} g Ua=ap,a1H(Ua)ap,aρap+ap,aρaαbKUb+ap,a1g

U b = 1 a p , b H ( U b ) − ∇ p a p , b ρ b + α a a p , b ρ b K U a + 1 a p , b g U_{b}=\frac{1}{a_{p,b}}H(U_b)-\frac{\nabla p}{a_{p,b}\rho_b}+\frac{\alpha_a}{ a_{p,b} \rho_b} K U_a +\frac{1}{a_{p,b}} g Ub=ap,b1H(Ub)ap,bρbp+ap,bρbαaKUa+ap,b1g

如果此 U a U_a Ua U b U_b Ub 是方程组的解,那么它们必须满足整体的连续性方程,即

在这里插入图片描述
将压力梯度项移到方程的一边,得到
在这里插入图片描述
这便是压力修正方程的原型。
在pEqn.H中,压力方程其实修正的是界面通量,压力方程迭代收敛以后能保证界面通量的连续性。所以,散度表达式需要根据高斯定理写成界面通量之和的形式:
在这里插入图片描述
下标 f _f f 表示该项将要在代码中用界面上的变量来表示,在OpenFOAM中,即surfaceScalarField, S f S_f Sf 表示界面的面积矢量,下面的公式里也是一样。
在这里插入图片描述
以及
∇ ⋅ [ ( α a a p , a ρ a + α b a p , b ρ b ) ∇ p ] = ∑ f ( α a a p , a ρ a + α b a p , b ρ b ) f ( ∇ p ) ⋅ S f \nabla \cdot \left[ (\frac{\alpha_a }{a_{p,a}\rho_a} + \frac{\alpha_b }{a_{p,b}\rho_b}) \nabla p \right ] = \sum_f (\frac{\alpha_a }{a_{p,a}\rho_a} + \frac{\alpha_b }{a_{p,b}\rho_b})_f (\nabla p) \cdot S_f [(ap,aρaαa+ap,bρbαb)p]=f(ap,aρaαa+ap,bρbαb)f(p)Sf
下面是pEqn定义了几个跟界面通量有关的变量:

surfaceScalarField alphaf(fvc::interpolate(alpha));
surfaceScalarField betaf(scalar(1) - alphaf);

volScalarField rUaA(1.0/UaEqn.A());
volScalarField rUbA(1.0/UbEqn.A());

phia == (fvc::interpolate(Ua) & mesh.Sf());
phib == (fvc::interpolate(Ub) & mesh.Sf());

rUaAf = fvc::interpolate(rUaA);
surfaceScalarField rUbAf(fvc::interpolate(rUbA));

Ua = rUaA*UaEqn.H();
Ub = rUbA*UbEqn.H();

surfaceScalarField phiDraga
(
    fvc::interpolate(beta/rhoa*K*rUaA)*phib + rUaAf*(g & mesh.Sf())
);


surfaceScalarField phiDragb
(
    fvc::interpolate(alpha/rhob*K*rUbA)*phia + rUbAf*(g & mesh.Sf())
);


phia = (fvc::interpolate(Ua) & mesh.Sf()) + fvc::ddtPhiCorr(rUaA, Ua, phia) + phiDraga;
phib = (fvc::interpolate(Ub) & mesh.Sf()) + fvc::ddtPhiCorr(rUbA, Ub, phib) + phiDragb;

phi = alphaf*phia + betaf*phib;

surfaceScalarField Dp
(
    "(rho*(1|A(U)))",
    alphaf*rUaAf/rhoa + betaf*rUbAf/rhob
);

phiDraga 和 phiDragb 分别对应 ( α b K a p , a ρ a ) f U b ⋅ S f + ( 1 a p , a ) f g ⋅ S f (\frac{\alpha_b K}{ a_{p,a} \rho_a})_f U_b \cdot S_f +(\frac{1}{a_{p,a}})_f g \cdot S_f (ap,aρaαbK)fUbSf+(ap,a1)fgSf ( α a K a p , b ρ b ) f U a ⋅ S f + ( 1 a p , b ) f g ⋅ S f (\frac{\alpha_a K}{ a_{p,b} \rho_b})_f U_a \cdot S_f +(\frac{1}{a_{p,b}})_f g \cdot S_f (ap,bρbαaK)fUaSf+(ap,b1)fgSf

由于13-14行的定义,28-29行中的 (fvc::interpolate(Ua) & mesh.Sf()) 和 (fvc::interpolate(Ub) & mesh.Sf()) 便分别对应的是 ( 1 a p , a ) f H ( U a ) ⋅ S f (\frac{1}{a_{p,a}})_f H(U_a)\cdot S_f (ap,a1)fH(Ua)Sf ( 1 a p , b ) f H ( U b ) ⋅ S f (\frac{1}{a_{p,b}})_f H(U_b)\cdot S_f (ap,b1)fH(Ub)Sf

有了上面的定义,可以看出31行定义的phi=alphafphia + betafphib便表示了压力方程的左边。

再看33-36行定义的Dp,很显然,表示的是压力方程右边的 ( α a a p , a ρ a + α b a p , b ρ b ) f (\frac{\alpha_a }{a_{p,a}\rho_a} + \frac{\alpha_b }{a_{p,b}\rho_b})_f (ap,aρaαa+ap,bρbαb)f

有了以上的定义,便可以构建用于修正界面通量的压力方程了:

fvScalarMatrix pEqn
  (
     fvm::laplacian(Dp, p) == fvc::div(phi)
  );

如上所述,pEqn收敛以后,得到的就是满足连续性的界面通量了,然后再利用求得的界面通量来修正两相的速度,便得到了满足两相连续性的速度:

Ua += fvc::reconstruct(phiDraga - rUaAf*SfGradp/rhoa);
Ua.correctBoundaryConditions();

Ub += fvc::reconstruct(phiDragb - rUbAf*SfGradp/rhob);
Ub.correctBoundaryConditions();

U = alpha*Ua + beta*Ub;

注意,Ua和Ub为什么是这样来修正呢?回想上面变量定义那个代码段的13-14行,这两行将Ua和Ub分别定义成了 1 a p , a H ( U a ) \frac{1}{a_{p,a}} H(U_a) ap,a1H(Ua) 1 a p , b H ( U b ) \frac{1}{a_{p,b}} H(U_b) ap,b1H(Ub)
回想Ua和Ub的离散方程的统一形式
U a = 1 a p , a H ( U a ) − ∇ p a p , a ρ a + α b a p , a ρ a K U b + 1 a p , a g U_{a}=\frac{1}{a_{p,a}}H(U_a)-\frac{\nabla p}{a_{p,a}\rho_a}+\frac{\alpha_b}{ a_{p,a} \rho_a} K U_b +\frac{1}{a_{p,a}} g Ua=ap,a1H(Ua)ap,aρap+ap,aρaαbKUb+ap,a1g

U b = 1 a p , b H ( U b ) − ∇ p a p , b ρ b + α a a p , b ρ b K U a + 1 a p , b g U_{b}=\frac{1}{a_{p,b}}H(U_b)-\frac{\nabla p}{a_{p,b}\rho_b}+\frac{\alpha_a}{ a_{p,b} \rho_b} K U_a +\frac{1}{a_{p,b}} g Ub=ap,b1H(Ub)ap,bρbp+ap,bρbαaKUa+ap,b1g

会发现13-14行定义的Ua和Ub都少了几项,所以缺了的这几项的贡献需要在速度修正步骤加回来,而Ua+=后面的fvc::reconstruct(phiDraga - rUaAf*SfGradp/rhoa)刚好就对应着Ua缺少的那几项。因为经过压力方程修正以后,界面通量是连续的,所以,将缺失的几项对应的界面通量通过reconstruct函数从界面通量重构从对体中心的速度的贡献,便得到了满足连续性的体中心速度了。对Ub也是同样的。

经过以上步骤,便能得到满足整体连续性的两相速度Ua 和 Ub了。


注释

【注一】:OpenFOAM 里的div函数,字面意义上看起来好像是散度的意思,实际上,div函数执行的是加和运算。举例说,对于fvc::div(phia),phia是surfaceScalarField,其值为(fvc::interpolate(Ua) & mesh.Sf()),即将存储在体中心的Ua插值到每个网格对应的面的面心,然后用面心的速度与该面的面积矢量点乘。从代码中看,fvc::div(phia)对应的是 ∇ ⋅ U a \nabla \cdot U_a Ua,根据高斯定理,也就是 ∑ f ( U a ) f ⋅ S f \sum_f (U_a)_f \cdot S_f f(Ua)fSf,而phia对应着 ( U a ) f ⋅ S f (U_a)_f \cdot S_f (Ua)fSf,所以,fvc::div(phia)实际进行的运算是将包围每个网格的面上的通量加起来。更详细的说明见我的另一篇博文。
【注二】:注意这里的 ∇ α a α a \frac{\nabla \alpha_a}{\alpha_a} αaαa 在代码中的表示方法,详细说明见我的另一篇博文。
【注三】:注意这里的 ∇ α a α a \frac{\nabla \alpha_a}{\alpha_a} αaαa 在代码中的表示方法,以及与上一个 ∇ α a α a \frac{\nabla \alpha_a}{\alpha_a} αaαa 的区别,详细说明见我的另一篇博文。
【注四】:这里说的总体的连续性方程指的是总体体积的守恒,而不是总体质量的守恒,这二者的差异见Henrik Rusche 的 PHD 论文 P112 的说明。


参考资料
  • Henrik Rusche, PHD Thesis, Computational Fluid Dynamics of Dispersed Two-Phase Flows at High Phase Fractions, Imperial College of Science, Technology & Medicine, Department of Mechanical Engineering, 2002
  • https://openfoamwiki.net/index.php/BubbleFoam
  • http://www.cfd-online.com/Forums/openfoam-solving/71141-rewriting-twophaseeulerfoam-conservative-form.html

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

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

相关文章

C# 高级数据处理:深入解析联接 Join 与 GroupJoin 操作的应用与实例演示

文章目录 一、联接概述二、Join 操作符1. Join 操作符的基本用法2. Join 操作符示例 三、GroupJoin 操作符1. GroupJoin 操作符的基本用法2. GroupJoin 操作符示例 总结 在数据处理中,联接(Join)操作是一种非常常见的需求,它允许我…

C语言典型例题30

《C程序设计教程(第四版)——谭浩强》 习题2.7 从银行贷了一笔款d,准备每月还款额为p,月利率为r,计算多少个月能还清。 设d30000元,p6000元,r1%。对求得的月份取小数点后一位,对第二…

【深度学习与NLP】——RNN架构解析

目录 RNN架构解析 1.1 认识RNN模型 学习目标 什么是RNN模型 RNN模型的作用 RNN模型的分类 小节总结 1.2 传统RNN模型 学习目标 传统RNN的内部结构图 小节总结 RNN架构解析 1.1 认识RNN模型 学习目标 了解什么是RNN模型.了解RNN模型的作用.了解RNN模型的分类. 什么…

如何使用Jmeter对HTTP接口进行压力测试?

我们不应该仅仅局限于某一种工具,性能测试能使用的工具非常多,选择适合的就是最好的。笔者已经使用Loadrunner进行多年的项目性能测试实战经验,也算略有小成,任何性能测试(如压力测试、负载测试、疲劳强度测试等&#…

openai gym box space configuration

题意:在OpenAI Gym环境中配置一个“Box”空间 问题背景: I need an observation space ranging from [0,inf) 我需要一个观察空间,其范围是从 [0, ∞)(0到正无穷大) Im new to openai gym, and not sure what the fo…

【算法】最短路径算法思路小结

一、基础:二叉树的遍历->图的遍历 提到搜索算法,就不得不说两个最基础的思想: BFS(Breadth First Search)广度优先搜索 DFS(Depth First Search)深度优先搜索 刚开始是在二叉树遍历中接触这…

为什么企业需要安装加密软件

保护敏感数据: 企业通常拥有大量的敏感数据,如客户信息、财务数据、知识产权等。这些数据如果未经保护而被泄露,可能会对企业造成严重的经济损失和声誉损害。加密软件能够对这些敏感数据进行加密,即使数据被窃取,也无…

AI 时代,网关更能打了?

作者:澄潭、望宸 网关在网络通信中扮演着诸多角色,包括数据转发、协议转化、负载均衡、访问控制和身份验证、安全防护、内容审核,以及服务和 API 颗粒度的管控等,因此常见的网关种类有流量网关、安全网关、微服务网关、API 网关等…

73.游戏分析工具的添加对象与删除对象

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于:易道云信息技术研究院 上一个内容:72.树形列表绑定对应的右键菜单 以它的代码为基础进行修改 删除对象在 CwndRAN 文件中…

猎码安卓APP开发IDE,amix STUDIO中文java,HTML5开发工具

【无爱也能发电】Xili 2024/8/2 10:41:20 猎码安卓APP开发IDE,amix java开发工具 我研发这些只有一小部分理由是为了赚钱,更多是想成就牛逼的技术产品。 目前的产品就够我赚钱的,我持续更新就好了,没必要继续研究。 IDE不赚钱,谁…

【Redis进阶】缓存应用

目录 缓存击穿 概念 缓存击穿的原因 缓存击穿的影响 缓存击穿的应对措施 设置分布式锁 提前更新缓存 请求分级和降级 缓存穿透 概念 缓存穿透的原因 缓存穿透的应对措施 缓存空值 布隆过滤器 限流和黑名单 缓存雪崩 缓存雪崩概念 缓存雪崩的原因 应对措施 缓…

gogs的安装和使用(docker)

1.docker安装gogs 1.1 拉取gogs镜像 docker pull gogs/gogs #也可改为自己需要的版本号 1.2 创建存储目录 mkdir /root/gogs 1.3 运行镜像 docker run --namegogs -d -p 10022:22 -p 13000:3000 -v /root/gogs:/data gogs/gogs 1.3.1 指令解析 --namegogs: 指定名称…

力扣刷题-轮转数组

🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” 首先,我们现在这里提供的是一种特别简单的思路,我们先来看一下这段代码: void rotate(int* nums, int numsSize, int k) {k%numsSize;int n…

深入了解核函数:连接机器学习与统计学的桥梁

引言 在机器学习中,支持向量机(SVM)是一种强大的监督学习模型,特别适合处理分类问题。然而,SVM最初被设计用于线性可分的数据集,现实中的数据往往不是线性可分的。为了解决这一问题,我们引入了…

第十一届MathorCup高校数学建模挑战赛-C题:基于有限差分法的散热机理建模与海底数据中心优化设计

目录 摘 要 1 问题重述 1.1 问题背景 1.2 问题重述 2 问题分析 3 模型假设 4 符号说明 5 我们的工作 6 模型的建立与求解 6.1 建模前的准备 6.2 问题一的建模与求解 6.3 问题二的建模与求解 6.4 问题三的建模与求解 6.5 问题四的建模与解决 7 结果检验及误差分析 8 模型评价 9 …

[Modbus] Modbus协议开发-基本概念(一)

历史 ModBus官网是Modicon(Modicon早年已被施耐德收购)公司为其PLC通讯而开发的一种通讯协议。 概述 通过Modbus协议,控制器之间、或控制器经由网络(如以太网)可以和其它设备之间进行通信。 优点 免费、好用、成熟…

springboot项目搭建集成 redis/跨域/远程请求

目录 一,创建maven项目 1,左上角file > new > maven project 2,next 到 创建 Group id 和 Artifact id​编辑​编辑 二,配置springboot 1,配置pom文件, 2,创建启动类 3&#xff…

五段式S型算法笔记

设定已知:v0 vmax j; 减加速段:tm到tmax 加加速段:0到tm tm:中点时间 vm:中点速度 vmax:最大速度; j加速度的斜率 -j相反加速度的斜率 这个图首先说明&#xff…

大数据面试SQL(六):共同使用ip用户检测问题

文章目录 共同使用ip用户检测问题 一、题目 二、分析 三、SQL实战 四、样例数据参考 共同使用ip用户检测问题 一、题目 现有用户登录日志表,记录了每个用户登录的IP地址,请查询共同使用过3个及以上IP的用户对。 样例数据: 结果数据&…

NSSCTF练习记录:[SWPUCTF 2021 新生赛]jicao

题目: 这段PHP代码的意思是: 对index.php文件进行语法高亮显示,插入flag.php文件,变量id的值为POST传递的值,变量json的值为GET传递的json类型的值。当id值为wllmNB且json中含有键为“x”,值为“wllm”的时…