|
10金钱
#include <stdio.h>
#include "udf.h"
#include "mem.h"
#include "dynamesh_tools.h"
#include "math.h"
static real gridx[70001];
static real gridy[70001];
static real gridz[70001];
static int num=0;
DEFINE_GRID_MOTION(pectrolfin,domain,dt,time,dtime)
{
/* # define PI 3.1415926*/
Thread *tf=DT_THREAD(dt);
Thread * thread;
face_t f;
Node *node_p;
int n;
int n_node;
FILE*fp;
FILE*fp1;
static real yi_centroid[3]={0,0,0};
static real Chord=0.22,F_density=998.2,U_flow=2;
static real Pi=3.1415926,freq=0.818182,Y_amplitude=0.22,w_amplitude=1.047198,b=0,e=0.1;
real NV_VEC( origin ),NV_VEC( force ),NV_VEC( moment );
real C_moment;
real C_force;
real x1,y1,z1,x2,y2,z2,x3,y3,z3;
real flc;/*绕z轴旋转角度*/
real hy;
//换成自己
SET_DEFORMING_THREAD_FLAG(THREAD_T0(tf));
begin_f_loop(f,tf)
{
f_node_loop(f,tf,n)
{
node_p=F_NODE(f,tf,n);
if (NODE_POS_NEED_UPDATE(node_p))
{
NODE_POS_UPDATED(node_p);
if (num==1) n_node=n_node+1;
if (num==0)
{
n_node=n_node+1;
gridx[n_node]=NODE_X(node_p);
gridy[n_node]=NODE_Y(node_p);
gridz[n_node]=NODE_Z(node_p);
}
x1=gridx[n_node];
if (gridx[n_node]>0) y1=gridy[n_node]+e*pow(x1*2/(3*Chord),(b+3))*cos(freq*time+Pi/2);/*y方向应该先向上运动*/
else y1=gridy[n_node];
z1=gridz[n_node];
flc=-w_amplitude*sin(2.0*Pi*freq*time);
x2=x1*cos(flc)-y1*sin(flc);
y2=x1*sin(flc)+y1*cos(flc);
z2=z1;
hy=-Y_amplitude*sin(2.0*Pi*freq*time+Pi/2);
x3=x2;
y3=y2+hy;
z3=z2;
/*NODE_X(node_p)=x3;*/
NODE_X(node_p)=x3;
NODE_Y(node_p)=y3;
thread=DT_THREAD(dt);
domain = THREAD_DOMAIN (thread);
yi_centroid[0]=DT_CG(dt)[0];/* 获取形心坐标*/
yi_centroid[1]=DT_CG(dt)[1];/* 获取形心坐标*/
Compute_Force_And_Moment(domain, thread, yi_centroid, force, moment, TRUE);/* 计算水翼总的受力情况*/
C_moment=moment[2]/(0.5*F_density*U_flow*U_flow*Chord*Chord);/* 计算俯仰力矩系数*/
fp=fopen("D:\\moment_coefficient6001.dat", "a+");
fprintf(fp, "%12f%12f",C_moment,time);
fprintf(fp, "\n");
fclose(fp);
C_force=force[2]/(0.5*F_density*U_flow*U_flow*Chord);/* 计算升力系数*/
fp1=fopen("D:\\force_coefficient6001.dat", "a+");
fprintf(fp, "%12f%12f",C_force,time);
fprintf(fp, "\n");
fclose(fp);
}
}
}
end_f_loop(f,tf);
num=1;
}
|
最佳答案
查看完整内容
负网格有很多原因,我最近也在做grid motion,不到两个步长就负网格了,可以试下以下的方法:1、变形的方程幅值调小,先从很微小的小变形开始;2、加密变形面上的网格,要很密才可以做大变形,我师兄是这么做的,可行;3、调网格变形参数,建议每个参数都仔细斟酌下;4、时间步长调小;5、负网格后,你看看网格是哪成负网格了,再调调
|