<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:宋体;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:"\@宋体";
        panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:宋体;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
        {mso-style-priority:99;
        mso-style-link:"纯文本 Char";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:10.5pt;
        font-family:"Courier New";}
p
        {mso-style-priority:99;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:12.0pt;
        font-family:宋体;}
span.EmailStyle18
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:#1F497D;}
span.Char
        {mso-style-name:"纯文本 Char";
        mso-style-priority:99;
        mso-style-link:纯文本;
        font-family:"Courier New";}
span.EmailStyle21
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=ZH-CN link=blue vlink=purple><div class=WordSection1><p class=MsoPlainText><span lang=EN-US>Hi, Andy Bauer<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US>Thanks for your reply. I just read the blogs and it seems it is possible to use “Programmable Filter” to access data of different timesteps by writing a “RequestUpdateExtentScript” like this:<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US>#----------------------------------------------<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US>RUEScript = '''<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US>info0 = inInfo[0].GetInformationObject(0) # Ask for the next timestep.<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US>info0.Set(vtk.vtkStreamingDemandDrivenPipeline.UPDATE_TIME_STEP(),<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US>{})<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US>info1 = inInfo[1].GetInformationObject(0) # Ask for the next timestep.<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US>info1.Set(vtk.vtkStreamingDemandDrivenPipeline.UPDATE_TIME_STEP(),<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US>{})<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US>return 1<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US>'''<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US>pf.RequestUpdateExtentScript = RUEScript.format(t1,t2) <o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US>#----------------------------------------------<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US>However, I get this error msg on my workstation:<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US>NameError: global name 'inInfo' is not defined<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US>I am using paraview 4.3.1, and the workstation is running on Ubuntu 12.04. I tested the code above in paraview 4.3.1 on windows 8.1 and it still does not works.<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US>And I checked the parameters of “RequestUpdateExtentScript” by:<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US>#----------------------------------------------<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US>print dir()<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US>print locals()<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US>#----------------------------------------------<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US>The result shows that there is no inInfo, but there are “request”, “inputs”, “output”, just like The “Script” of “Programmable filter”. Then I realize that this “Programmable filter” is a proxy to the VTK’s “Programmable filter”. And I cannot access the InformationObject behind the proxy. But I do not know much about the python interface of Proxies.<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US>Now my question is: how can I access vtk Objects directly? Should I use vtk instead of paraview to accomplish my goal?<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US>Di Cheng<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.5pt;font-family:"Calibri",sans-serif;color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.5pt;font-family:"Calibri",sans-serif;color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><b><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri",sans-serif'>From:</span></b><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri",sans-serif'> Andy Bauer [mailto:andy.bauer@kitware.com] <br><b>Sent:</b> Thursday, April 23, 2015 9:26 PM<br><b>To:</b> Di Cheng<br><b>Cc:</b> paraview-developers@paraview.org<br><b>Subject:</b> Re: [Paraview-developers] Is it possible to implement a POD filter in paraview using python?<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><div><div><div><div><p class=MsoNormal style='margin-bottom:12.0pt'><span lang=EN-US>The best way would be to implement this in C++ but it's also doable in Python. <o:p></o:p></span></p></div><p class=MsoNormal style='margin-bottom:12.0pt'><span lang=EN-US>If you want to do it in Python I'd suggest reading through Berk Geveci's blog posts on Python and VTK (<a href="http://www.kitware.com/blog/home/user/53">http://www.kitware.com/blog/home/user/53</a>). The one most relevant is probably <a href="http://www.kitware.com/blog/home/post/783">http://www.kitware.com/blog/home/post/783</a> but the others give good background. <o:p></o:p></span></p></div><p class=MsoNormal><span lang=EN-US>Regards,<o:p></o:p></span></p></div><p class=MsoNormal><span lang=EN-US>Andy<o:p></o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><div><p class=MsoNormal><span lang=EN-US>On Thu, Apr 23, 2015 at 3:55 AM, Di Cheng <<a href="mailto:chengdi@imech.ac.cn" target="_blank">chengdi@imech.ac.cn</a>> wrote:<o:p></o:p></span></p><blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm'><div><div><p style='margin:0cm;margin-bottom:.0001pt;line-height:14.7pt;background:white;vertical-align:baseline'><span lang=EN-US style='font-size:10.5pt;font-family:"Arial",sans-serif;color:#292C33'>Hi, everyone.</span><span lang=EN-US><o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt;line-height:14.7pt;background:white;vertical-align:baseline'><span lang=EN-US style='font-size:10.5pt;font-family:"Arial",sans-serif;color:#292C33'> </span><span lang=EN-US><o:p></o:p></span></p><p style='margin:0cm;margin-bottom:.0001pt;line-height:14.7pt;background:white;vertical-align:baseline'><span lang=EN-US style='font-size:10.5pt;font-family:"Arial",sans-serif;color:#292C33'>I am interested in using proper orthogonal decomposition to analyze unsteady flow field data obtained from CFD in paraview. I tried to implement it using python. But I am not sure if there is a better way to implement the POD algorithm described in chapter 3.2 of<a href="http://web.mit.edu/kwillcox/Public/Web/BTTanMS.pdf" target="_blank"><span style='font-family:"Times New Roman",serif;color:#007DBF;border:none windowtext 1.0pt;padding:0cm'>http://web.mit.edu/kwillcox/Public/Web/BTTanMS.pdf</span></a> </span><span lang=EN-US><o:p></o:p></span></p><p style='margin-bottom:16.8pt;line-height:14.7pt;background:white;vertical-align:baseline;font-stretch:inherit;text-align:start;word-spacing:0px'><span lang=EN-US style='font-size:10.5pt;font-family:"Arial",sans-serif;color:#292C33'>The algorithm can be summarized as: <br>0. get timestepvalues of interest as t_i, i=1..N <br>1. load field P of two timesteps such as as P_i=P(t_i),P_j=P(t_j) <br>2. calculate the correlation R_ij = inner_product(P_i,P_j)/N, the definition of inner product could be integration of P_i*P_j over the volume. <br>3. get the eigen values lambda_i and corresponding right egien vector eV_ii of matrix {R_ij} <br>4. construct the i-th POD basis psi_i = sum(dot(eV_ij,P_j),j=1..N), usually, only the first m bases are used. <br>5. reconstruct Pr_m field using first m POD bases: <br>Pr_m = sum(lambda_i * psi_i, i = 1.. m)</span><span lang=EN-US><o:p></o:p></span></p><p style='margin-bottom:16.8pt;line-height:14.7pt;background:white;vertical-align:baseline'><span lang=EN-US style='font-size:10.5pt;font-family:"Arial",sans-serif;color:#292C33'>6.output the lambda_i, psi_i and Pr_m</span><span lang=EN-US><o:p></o:p></span></p><p style='margin-bottom:16.8pt;line-height:14.7pt;background:white;vertical-align:baseline'><span lang=EN-US style='font-size:10.5pt;font-family:"Arial",sans-serif;color:#292C33'>The algorithm is simple but the problem is to avoid loading the very large 3D dataset of all timesteps into memory. I tried to use “<i>c1.UpdatePipeline(t_1); c2.UpdatePipeline(t_2);” </i> to load two timesteps at one time to avoid this problem. I do not know if this method works.</span><span lang=EN-US><o:p></o:p></span></p><p style='margin-bottom:16.8pt;line-height:14.7pt;background:white;vertical-align:baseline'><span lang=EN-US style='font-size:10.5pt;font-family:"Arial",sans-serif;color:#292C33'>Then I tried to implement the following algorithm using python. A pipeline is used to calculate the inner product via Programmable Filter and Integrate Variables. And I can get the correlation matrix and eigen values and eigen vectors. </span><span lang=EN-US><o:p></o:p></span></p><p style='margin-bottom:16.8pt;line-height:14.7pt;background:white;vertical-align:baseline'><span lang=EN-US style='font-size:10.5pt;font-family:"Arial",sans-serif;color:#292C33'>The final step is the most difficult part in python. I do not know how to implement it in python. I did not implement it yet. I do not want to use Fetch method to collect all data to the master node. But the functionality of python shell seems limited and accessing the cells’ structure is difficult. I want to know how TemporalAverge filter works but I cannot identify where it is in the source code. (I am not familiar with software development using C++).</span><span lang=EN-US><o:p></o:p></span></p><p style='margin-bottom:16.8pt;line-height:14.7pt;background:white;vertical-align:baseline'><span lang=EN-US style='font-size:10.5pt;font-family:"Arial",sans-serif;color:#292C33'>So, could anyone help me to finish it or tell me it is not possible?</span><span lang=EN-US><o:p></o:p></span></p><p style='margin-bottom:16.8pt;line-height:14.7pt;background:white;vertical-align:baseline;font-stretch:inherit;text-align:start;word-spacing:0px'><span lang=EN-US style='font-size:10.5pt;font-family:"Arial",sans-serif;color:#292C33'>Thanks</span><span lang=EN-US><o:p></o:p></span></p><p style='margin-bottom:16.8pt;line-height:14.7pt;background:white;vertical-align:baseline'><span lang=EN-US style='font-size:10.5pt;font-family:"Arial",sans-serif;color:#292C33'>p.s. I just posted a Request a New Feature in <a href="http://paraview.uservoice.com/forums/11350-general/suggestions/7671768-proper-orthogonal-decomposition-analysis-filter" target="_blank">http://paraview.uservoice.com/forums/11350-general/suggestions/7671768-proper-orthogonal-decomposition-analysis-filter</a></span><span lang=EN-US><o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white'><span lang=EN-US style='font-size:10.0pt;font-family:"Arial",sans-serif;color:#222222'>Di CHENG (Ph.D. candidate)</span><span lang=EN-US><o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white'><span lang=EN-US style='font-size:10.0pt;font-family:"Arial",sans-serif;color:#222222'>Supersonic Combustion Group</span><span lang=EN-US><o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white'><span lang=EN-US style='font-size:10.0pt;font-family:"Arial",sans-serif;color:#222222'>State Key Laboratory of High Temperature Gas Dynamics</span><span lang=EN-US><o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white'><span lang=EN-US style='font-size:10.0pt;font-family:"Arial",sans-serif;color:#222222'>Institute of Mechanics, Chinese Academy of Sciences<br>ADDRESS: No.15 Beisihuanxi Road, Beijing (100190)<br>P. R. China<br>E-mail: <a href="mailto:chengdi@imech.ac.cn" target="_blank"><span style='color:#222222;background:#FFFFCC'>chengdi@imech.ac.cn</span></a></span><span lang=EN-US><o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white'><span lang=EN-US style='font-size:10.0pt;font-family:"Arial",sans-serif;color:#222222'>Phone: <a href="tel:%2B86-10-82544053" target="_blank"><span style='color:#1155CC'>+86-10-82544053</span></a></span><span lang=EN-US><o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;background:white'><span lang=EN-US style='font-size:10.0pt;font-family:"Arial",sans-serif;color:#222222'>Fax: <a href="tel:%2B86-10-82544034" target="_blank"><span style='color:#1155CC'>+86-10-82544034</span></a></span><span lang=EN-US><o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span lang=EN-US> <o:p></o:p></span></p></div></div><p class=MsoNormal style='margin-bottom:12.0pt'><span lang=EN-US><br>_______________________________________________<br>Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br><br>Visit other Kitware open-source projects at <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br><br>Search the list archives at: <a href="http://markmail.org/search/?q=Paraview-developers" target="_blank">http://markmail.org/search/?q=Paraview-developers</a><br><br>Follow this link to subscribe/unsubscribe:<br><a href="http://public.kitware.com/mailman/listinfo/paraview-developers" target="_blank">http://public.kitware.com/mailman/listinfo/paraview-developers</a><o:p></o:p></span></p></blockquote></div><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p></div></div></body></html>