FLUENT多相模型的数据结构及循环

上传人:仙*** 文档编号:98375703 上传时间:2022-05-29 格式:DOC 页数:6 大小:170KB
返回 下载 相关 举报
FLUENT多相模型的数据结构及循环_第1页
第1页 / 共6页
FLUENT多相模型的数据结构及循环_第2页
第2页 / 共6页
FLUENT多相模型的数据结构及循环_第3页
第3页 / 共6页
点击查看更多>>
资源描述
1名词解释学习FLUENTUD编程,必须要从网格拓扑和数据结构(几何数据、求解数据存储的空间)两方面来理解一些重要概念。节点node;面face;单元cell。Hgure:5id2Multiphase-specificDataTypes多相专用数据类型2Multiphase-specificDataTypes多相专用数据类型simple2Dgrid2Multiphase-specificDataTypes多相专用数据类型2Multiphase-specificDataTypes多相专用数据类型线thread线是一块存储空间,有节点线、面线和单元线三类,存储了存在某种联系的节点组、面组或单元组的信息。定义线的指针Thread*t;线对应的是网格拓扑里面的zone,例如某边界就是一个zone,显然它对应的存储空间是面线。在多相模型中,还要区分超级线superthread和子线subthread。域domain:域是比线更大的存储空间,包含了存在某种联系的所有线。定义域的指针Domain*d;域对应的是网格拓扑里面的domain,由网格定义的所有节点、面和单元线索的组合。在多相模型中,还要区分超级线superdomain和子线subdomain。总的逻辑关系是,域-线-节点/面/单元,这可以从常用的循环中看出:Domain*domain;Thread*c_thread;cell_tc;/*cell_t是线索(thread)内单元标识符的*/threadoop_c(c_thread,domain)/*对域内所有单元线做loop*/begin_c_loop(c,c_thread)/*对线内所有单元做循环*/c_thread)end_c_loop(c,除了在DataTypesinANSYSFLUENT中呈献的ANSYSFLUEN专用的数据类型,还有一些专用于多相UDF的线(thread)和域(domain)数据结构。当使用多相模型时(Mixture,VOF,orEulerian),这些数据结构用来存储混合相(mixtureofallofthephases)和每个单独相的属性和变量。在多相应用中,最高级别的域是超级域(superdomain)。每一相占据一个子域(subdomain)。第三种域是交互域(interactiondomain),被用于相的相互作用机制的定义。如果需要混合态属性或变量(各相的总和),应该用超级域;而如果需要每单相(individualphase)的这些信息,则应该使用子域。在单相模型情况(只有一相),混合相(mixture)的概念用来代表各组分(species,components)的总和;多相模型的情况,它代表各相的总和。这个区别非常重要,因为FLUENT有能力处理多相多组分分析。这时一个相可能是多个组分的混合。因为求解信息存储在线thread数据结构中,线必须与超级域或子域联系起来。也就是说,对于每一个在超级域中定义的单元线或面线,在各子域里面都有对应有单元线或面线。有些超级域的线包含的信息与相应的子域里的线共享。超级域内的线称为超级线,mixture-levelthread,而与子域联系的线称为子线,phase-levelthread.Figure1.5总结了域和线的体系结构。Fiqurf1.5IHflmairiodThre#1(njctirrt&wrchysecondaryphun#donnflin,donuin_id*31hrnd(fi-.g.,mltl屈mij;luie4eveltlireadAuldzans|igiHijfKUMhdomalrlihmotlurtOamftiridMia4n_|sl1priffliiryphoititofMio.Oomfim口2KSConddiyphawdqrrulnldl=4EawdEIcb-ievrCminLmxVifllUe?SduWSofefton5o4rion-niMjato-air-CaitutahjrHcta礼Bb吕W.IlbiarMar%|ITformMzoneidenliftedbyphasBdlismAlni.lndiFigure1.5引入了domain_id和phase_domain_index的概念。domaind用于将超级域与子域区分开,超级域(mixturedomain)的domain_id总是1,第一相对应的子域domain_id是2,以此类推,同时交互域也有domain_id。可以使用函数Domain*d=Get_Domain(domain_id)来得到域的指针d。在Phases设置面上,ID显示的就是domaind。phase_domain_index用来区分不同单相的线。第一相的phase_domain_index是0,第二相的phase_domain_index是1。不同多相模型的数据结构也有不同。比如,在Mixture模型中,只求解混合相的动量方程,而在Eulerian模型中,对每一相都要求解动量方程。如果对它们指定源项,数据结构式不同的。勾在(hookedto)混合态的UDF函数,求解器为其传递超级域结构;而勾在某一相的函数则获得子域结构输入。DEFINE_ADJUST和DEFINE_INITUDFs是固定超级域上的。其他类型的函数可以勾在不同的相域。3AdvaneedMultiphaseMacros高级多相宏对于大多数多相模型的标准UDF函数需要的变量(域指针,线指针等)都会由求解器在求解时直接通过参数的方式传递给函数。你所要完成的就是将这些函数勾到你的模型。但是,可能有些复杂函数需要一些没有通过参数直接传递的变量。比如,DEFINE_ADJUST,DEFINE_INIT函数只获得了超级域的变量。如果UDF需要相域(subdomain)的指针,则需要使用本节所述的宏来获取。ON_DEMANDU没有获得任何参数传递,因此ondemand函数也常常要用到这些宏。当你在编写多相模型的UDF时,必须要牢记多相模型的数据结构体系。要注意函数获得的参数,函数勾在什么域上(GUI或者固定的)。同样还有注意你使用的多相模型的类型。3.1 PhaseDomainPointer(DOMAIN_SUB_DOMAIN)相域(子域)的指针已有超级域指针的情况下,有两种方式获取子域的指针:DOMAIN_SUB_DOMAN或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.2 Phase-LevelThreadPointer(THREAD_SUB_THREAD)相级线的指针已知超级线的指针,则可以使用THREAD_SUB_THREAD求的其子线的指针。intphase_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;/*通过ZONEID来求的线*/Thread*thread_name=Lookup_Thread(domain,zone_ID);3.2 PhaseThreadPointerArray(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.4 MixtureDomainPointer(DOMAIN_SUPER_DOMAIN)超级域的指针如果已知某子域的指针,可以用DOMAIN_SUPER_DOMA宏求的它的超级域(可以成为父域)的指针。Domain*subdomain;Domain*mixture_domain=DOMAIN_SUPER_DOMAIN(subdomain);在上面的例子中,要事先获得子域(即相域)的指针。如果UDF勾在某一相域上,相域的指针也可以由求解器自动传递给UDF在当前版本FLUENT中,DOMAIN_SUPER_DOMANGet_Domain返回的指针是一样的。但是还是建议在UDF中,尽可能使用DOMAIN_SUPER_DOMA考虑到FLUENT版本的更新,未来可能处理多个超级域。3.5 MixtureThreadPointer(THREAD_SUPER_THREAD)超级线的指针如果已知子线的指针,可以用THREAD_SUPER_THREA求超级线的指针。Thread*subthread;Thread*mixture_thread=THREAD_SUPER_THREAD(subthread);3.6 DomainID(DOMAIN_ID)如果已知某一子域的指针,可以用DOMAIN_ID宏获取该子域的domain_id。Domain*subdomain;intdomain_id=DOMAIN_ID(subdomain);3.7 PhaseDomainIndex(PHASE_DOMAIN_INDEX)如果已知某一子域的指针,可以用PHASE_DOMAINNDE宏获取该子域的phase_domain_index。Domain*subdomain;4.MultiphaseLoopingMacros多相循环宏本节讨论只在多相UDF中应用的循环。4.1LoopingOverPhaseDomainsinMixture(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)threads*/*loopoverallcellsinsecondaryphasecellbegin_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*/=1.;elsetozero*/C_VOF(cell,cell_thread)/*otherwiseinitializeC_VOF(cell,cell_thread)=0.;end_c_loop_all(cell,cell_thread)4.2 LoopingOverPhaseThreadsinMixture(sub_thread_loop)子线循环已知超级线的指针,对其下面的所有子线进行循环。4.3 LoopingOverPhaseCellThreadsinMixture(mp_thread_loop_c)已知超级域的指针,对其中的所有单元线(这些是超级线)进行循环,并提供这些单元线的所有子线的指针。Thread*pt;Thread*cell_threads;Domain*mixture_domain;mp_thread_loop_c(cell_threads,mixture_domain,pt)4.4 LoopingOverPhaseFaceThreadsinMixture(mp_thread_loop_f)已知超级域的指针,对其中的所有面线(这些是超级线)进行循环,并提供这些面线的所有子线的指针。Thread*pt;Thread*face_threads;Domain*mixture_domain;mp_thread_loop_f(face_threads,mixture_domain,pt)4.5 实现循环的多种方式在多相模型下,FLUENT提供了一些专门的循环方式。这时,一方面要注意通用的循环(threadoop_c,thread_loop_f,begin/end_c_loop,begin/end_f_loop,)是否还适合新的情况,而另一方面,实现同一循环可能有多种方式。
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!