推板造波-不规则波
-
求助各位大佬,我用openfoam9自定义了一个推板造波边界条件的代码,代码中植入了Jonswap谱想要模拟不规则波,代码编译没有问题,设置算例后运行没有问题,在波高监测点得到的波形图像也没有问题,但是得到的波高和我设置的有效波高差距很大,差了一个数量级是什么原因呢,试了好多次都解决不了,有没有大佬懂的,下面是我的代码还有算例设置
code_text ````scalar randomwaveDisplacementPointPatchVectorField:: beita() { return (0.06238/(0.23+0.0336*gama_-0.185*pow((1.9+gama_),-1)))*(1.094-0.01916*log(gama_)); } scalar Foam::randomwaveDisplacementPointPatchVectorField:: k1(scalar x) { scalar k1=x*x/g_; int maxIter =200; scalar tol = 1e-12; for (int iter = 0; iter < maxIter; iter++) { scalar k_new = x*x/g_/ tanh(k1*depth_); if (mag(k_new - k1)<tol) break; k1 = k_new; } return k1; } void Foam:: randomwaveDisplacementPointPatchVectorField::updateCoeffs() { if (updated()) { return; } scalar t = this->db().time().value(); scalar deltaf=(fmax_-fmin_)/n_; vector sumpushU = vector::zero; for (int i=0; i<n_; i++) { scalar f0=fmin_+i*deltaf; scalar f1=fmin_+(i+1)*deltaf; scalar f= (f0+f1)/2; scalar sigma = (f <= f_p) ? 0.07 : 0.09; scalar omega=2*PI*f; scalar k=k1(omega); std::random_device rd; std::mt19937 gen(rd()); std::uniform_real_distribution<> dis(0,2*PI); scalar theta =dis(gen); scalar Sf=beita_*pow(height_,2)*pow(T_p,-4)*pow(f,-5)*exp(-1.25*pow((T_p*f),-4))*pow(gama_,exp(-pow(((f-f_p)/(sigma*f_p)),2)/2)); scalar A = sqrt(2*Sf*deltaf); scalar w = (4*pow(sinh(k*depth_),2)/(2*k*depth_+sinh(2*k*depth_))); vector pushU = vector(((omega * A *cos(omega * t + theta))/w),0,0); sumpushU +=pushU } vector pushU=sumpushU; Field<vector>::operator=(pushU); Info << "Time = " << t; Info << "regular Wave" << "push Vector is" << pushU.component(0); fixedValuePointPatchField::updateCoeffs(); }
code_text
internalField uniform (0 0 0); boundaryField { #includeEtc "caseDicts/setConstraintTypes" left { type randomwaveDisplacement; height 0.08; depth 0.6; T_p 2.0; f_p 0.5; gama 3.3; n 100; fmin 0.1; fmax 10; waveType randomwave; value uniform (0 0 0); } right { type fixedValue; value uniform (0 0 0); } top { type slip; } bottom { type slip; } }