找回密码
 注册
查看: 1489|回复: 4

急,grid motion程序老是负网格问题,不能动,在线等,求大神

[复制链接]
发表于 2017-6-13 11:05:12 | 显示全部楼层 |阅读模式
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、负网格后,你看看网格是哪成负网格了,再调调
发表于 2017-6-13 11:05:13 | 显示全部楼层
负网格有很多原因,我最近也在做grid motion,不到两个步长就负网格了,可以试下以下的方法:1、变形的方程幅值调小,先从很微小的小变形开始;2、加密变形面上的网格,要很密才可以做大变形,我师兄是这么做的,可行;3、调网格变形参数,建议每个参数都仔细斟酌下;4、时间步长调小;5、负网格后,你看看网格是哪成负网格了,再调调
回复

使用道具 举报

发表于 2017-6-17 18:34:59 | 显示全部楼层
本帖最后由 maisui2016 于 2017-6-17 18:43 编辑


回复

使用道具 举报

发表于 2017-6-28 14:31:56 | 显示全部楼层
哇塞,咱俩做的差不多吧,我也在做水翼,我做的是水翼的柔性变形
回复

使用道具 举报

 楼主| 发表于 2017-7-29 15:29:07 | 显示全部楼层
qwfy628 发表于 2017-6-28 14:31
哇塞,咱俩做的差不多吧,我也在做水翼,我做的是水翼的柔性变形

你好,能加下qq么,互相帮助一下,331294247
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表