全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1名词解释学习FLUENT UDF编程,必须要从网格拓扑和数据结构(几何数据、求解数据存储的空间)两方面来理解一些重要概念。节点node;面face;单元cell。线 thread:线是一块存储空间,有节点线、面线和单元线三类,存储了存在某种联系的节点组、面组或单元组的信息。定义线的指针 Thread *t;线对应的是网格拓扑里面的zone,例如某边界就是一个zone,显然它对应的存储空间是面线。在多相模型中,还要区分超级线superthread和子线subthread。域 domain:域是比线更大的存储空间,包含了存在某种联系的所有线。定义域的指针 Domain *d;域对应的是网格拓扑里面的domain, 由网格定义的所有节点、面和单元线索的组合。在多相模型中,还要区分超级线superdomain和子线subdomain。总的逻辑关系是,域-线-节点/面/单元,这可以从常用的循环中看出:Domain*domain;Thread*c_thread;cell_tc; /*cell_t 是线索(thread)内单元标识符的*/thread_loop_c(c_thread,domain)/*对域内所有单元线做loop*/ begin_c_loop(c,c_thread) /*对线内所有单元做循环 */ end_c_loop(c,c_thread) 2Multiphase-specific Data Types 多相专用数据类型除了在Data Types in ANSYS FLUENT中呈献的ANSYS FLUENT专用的数据类型,还有一些专用于多相UDF的线(thread)和域(domain)数据结构。当使用多相模型时(Mixture, VOF, or Eulerian),这些数据结构用来存储混合相(mixture of all of the phases)和每个单独相的属性和变量。在多相应用中,最高级别的域是超级域(superdomain)。每一相占据一个子域(subdomain)。第三种域是交互域(interaction domain),被用于相的相互作用机制的定义。如果需要混合态属性或变量(各相的总和),应该用超级域;而如果需要每单相(individual phase)的这些信息,则应该使用子域。在单相模型情况(只有一相),混合相(mixture)的概念用来代表各组分(species ,components)的总和;多相模型的情况,它代表各相的总和。这个区别非常重要,因为FLUENT有能力处理多相多组分分析。这时一个相可能是多个组分的混合。 因为求解信息存储在线thread数据结构中,线必须与超级域或子域联系起来。也就是说,对于每一个在超级域中定义的单元线或面线,在各子域里面都有对应有单元线或面线。有些超级域的线包含的信息与相应的子域里的线共享。超级域内的线称为超级线,mixture-level thread,而与子域联系的线称为子线,phase-level thread. Figure 1.5总结了域和线的体系结构。Figure 1.5 引入了domain_id 和 phase_domain_index的概念。domain_id用于将超级域与子域区分开,超级域(mixture domain)的 domain_id 总是1,第一相对应的子域domain_id 是2,以此类推,同时交互域也有domain_id 。可以使用函数Domain *d=Get_Domain(domain_id)来得到域的指针d。在Phases设置面上,ID显示的就是domain_id。phase_domain_index 用来区分不同单相的线。第一相的phase_domain_index是0,第二相的phase_domain_index 是1。 不同多相模型的数据结构也有不同。比如,在Mixture模型中,只求解混合相的动量方程,而在Eulerian模型中,对每一相都要求解动量方程。如果对它们指定源项,数据结构式不同的。 勾在(hooked to)混合态的UDF函数,求解器为其传递超级域结构;而勾在某一相的函数则获得子域结构输入。DEFINE_ADJUST 和 DEFINE_INIT UDFs 是固定超级域上的。其他类型的函数可以勾在不同的相域。 3Advanced Multiphase Macros 高级多相宏对于大多数多相模型的标准UDF,函数需要的变量(域指针,线指针等)都会由求解器在求解时直接通过参数的方式传递给函数。你所要完成的就是将这些函数勾到你的模型。但是,可能有些复杂函数需要一些没有通过参数直接传递的变量。比如, DEFINE_ADJUST , DEFINE_INIT函数只获得了超级域的变量。如果UDF需要相域(subdomain)的指针,则需要使用本节所述的宏来获取。ON_DEMAND UDF没有获得任何参数传递,因此on demand函数也常常要用到这些宏。 当你在编写多相模型的UDF时,必须要牢记多相模型的数据结构体系。要注意函数获得的参数,函数勾在什么域上(GUI或者固定的)。同样还有注意你使用的多相模型的类型。 3.1 Phase Domain Pointer (DOMAIN_SUB_DOMAIN) 相域(子域)的指针已有超级域指针的情况下,有两种方式获取子域的指针:DOMAIN_SUB_DOMAIN宏或Get_Domain。 intphase_domain_index=0; /*第一相的phase_domain_index是0*/Domain*mixture_domain; /*超级域的指针*/Domain*subdomain=DOMAIN_SUB_DOMAIN(mixture_domain,phase_domain_index);在上面的例子中,要事先获得超级域的指针。如前文所述,某些函数勾在超级域上,求解器就会自动传递超级域指针到UDF。而某些函数则不能显式地得到超级域的指针,则需要用宏Get_Domain(1)来获取。 3.2Phase-Level Thread Pointer (THREAD_SUB_THREAD) 相级线的指针已知超级线的指针,则可以使用THREAD_SUB_THREAD 宏求的其子线的指针。 int phase_domain_index = 0; /*第一相的phase_domain_index是0*/ Thread *mixture_thread; /*超级线的指针*/ Thread *subthread = THREAD_SUB_THREAD(mixture_thread,phase_domain_index); 在上面的例子中,要事先获得超级线的指针。同样,超级线的指针可能通过函数形参获取,或者使用Lookup_Thread 获取。intzone_ID=2; /*通过ZONE ID来求的线*/Thread*thread_name=Lookup_Thread(domain,zone_ID);3.2Phase Thread Pointer Array (THREAD_SUB_THREADS) 子线的指针数组已知超级线的指针,可以使用 THREAD_SUB_THREADS宏求得其所有子线的指针组成的数组。 Thread*mixture_thread;Thread*pt; /*initializept */pt=THREAD_SUB_THREADS(mixture_thread);pti, 数组的一个单元,是phase_domain_index为i的单相对应的子线的指针。例如, C_R(c,pti)可用于返回第i相在单元c的密度。 3.4Mixture Domain Pointer (DOMAIN_SUPER_DOMAIN) 超级域的指针如果已知某子域的指针,可以用DOMAIN_SUPER_DOMAIN 宏求的它的超级域(可以成为父域)的指针。 Domain*subdomain;Domain*mixture_domain=DOMAIN_SUPER_DOMAIN(subdomain);在上面的例子中,要事先获得子域(即相域)的指针。如果UDF勾在某一相域上,相域的指针也可以由求解器自动传递给UDF。在当前版本FLUENT中,DOMAIN_SUPER_DOMAIN 与Get_Domain(1)返回的指针是一样的。但是还是建议在UDF中,尽可能使用DOMAIN_SUPER_DOMAIN,考虑到FLUENT版本的更新,未来可能处理多个超级域。 3.5Mixture Thread Pointer (THREAD_SUPER_THREAD) 超级线的指针如果已知子线的指针,可以用THREAD_SUPER_THREAD宏求超级线的指针。 Thread*subthread;Thread*mixture_thread=THREAD_SUPER_THREAD(subthread);3.6 Domain ID (DOMAIN_ID) 如果已知某一子域的指针,可以用DOMAIN_ID 宏获取该子域的domain_id。 Domain*subdomain;intdomain_id=DOMAIN_ID(subdomain);3.7Phase Domain Index (PHASE_DOMAIN_INDEX) 如果已知某一子域的指针,可以用PHASE_DOMAIN_INDEX宏获取该子域的phase_domain_index。 Domain*subdomain;intphase_domain_index=PHASE_DOMAIN_INDEX(subdomain);4.Multiphase Looping Macros 多相循环宏本节讨论只在多相UDF中应用的循环。4.1Looping Over Phase Domains in Mixture (sub_domain_loop)子域循环该循环对所有子域进行循环,这是一种获取各单相域的指针的方法之一。intphase_domain_index; /*indexofsubdomainpointers */Domain*mixture_domain;Domain*subdomain;sub_domain_loop(subdomain,mixture_domain,phase_domain_index)参数中,subdomain是子域的指针;mixture_domain是超级域的指针。例子:下面UDF分块初始化某一相的体积分数,只在求解开始执行一次。 /* UDFforinitializingphasevolumefraction*/#includeudf.h/*domainpointerthatispassedbyINITfunctionismixturedomain */DEFINE_INIT(my_init_function,mixture_domain) intphase_domain_index; cell_tcell; Thread*cell_thread; Domain*subdomain; realxcND_ND; /*loopoverallsubdomains(phases)inthesuperdomain(mixture)*/ sub_domain_loop(subdomain,mixture_domain,phase_domain_index) /*loopifsecondaryphase */ if(DOMAIN_ID(subdomain)=3) /*loopoverallcellthreadsinthesecondaryphasedomain */ thread_loop_c(cell_thread,subdomain) /*loopoverallcellsinsecondaryphasecellthreads */ begin_c_loop_all(cell,cell_thread) C_CENTROID(xc,cell,cell_thread); if(sqrt(ND_SUM(pow(xc0-0.5,2.), pow(xc1-0.5,2.), pow(xc2-0.5,2.) 0.25) /* setvolumefractionto1forcentroid */ C_VOF(cell,cell_thread)=1.; else /* otherwiseinitializetozero */ C_VOF(cell,cell_thread)=0.; end_c_loop_all(cell,cell_thread) 4.2 Looping Over Phase Threads in Mixture (sub_thread_loop)子线循环已知超级线的指针,对其下面的所有子线进行循环。4.3Looping Over Phase Cell Threads in Mixture (mp_thread_loop_c)已知超级域的指针,对其中的所有单元线(这些是超级线)进行循环,并提供这些单元线的所有子线的指针。Thread*pt;Thread*cell_threads;Domain*mixture_domain;mp_thread_loop_c(cell_threads,mixture_domain,pt)4.4Looping Over Phase Face Threads in Mixture (mp_thread_loop_f
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 山东省滨州市2026届中考物理五模试卷含解析
- 重庆两江新区达标名校2026届中考物理模拟试题含解析
- 2026届吉林省四平市铁西区重点中学中考物理猜题卷含解析
- 重庆市渝北区名校2026届中考物理考前最后一卷含解析
- 中医眼保健护理健康手册
- 胰腺癌患者的艺术疗法
- 2026年天津市育华实验中学中考物理对点突破模拟试卷含解析
- 新生儿肺炎的饮食护理
- 专业护肤师的建议
- 乙肝患者七段锦护理技巧
- 电气仪表施工培训课件
- 2024-2025学年浙江省杭州二中高一(下)期末数学试卷(含解析)
- 鞍山市高校毕业生“三支一扶”计划招募考试试题(含答案)
- 人类辅助生殖管理制度
- 2025年上海市中考语文备考之文学常识汇编
- 锂电行业铜锌镍禁令标准
- 2025年二级风力发电运维值班员职业技能鉴定考试题库(浓缩500题)
- 血液透析不同抗凝剂的应用及护理
- 《铁路信号与通信设备》课件
- 高速铁路信号系统信号机安装方法
- DB43T 876.2-2014 高标准农田建设 第2部分:土地平整
评论
0/150
提交评论