<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=us-ascii"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:\5B8B\4F53;
        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:"\@\5B8B\4F53";
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:inherit;
        panose-1:0 0 0 0 0 0 0 0 0 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        text-align:justify;
        text-justify:inter-ideograph;
        font-size:10.5pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
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:\5B8B\4F53;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.apple-converted-space
        {mso-style-name:apple-converted-space;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
/* Page Definitions */
@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="#0563C1" vlink="#954F72" style='text-justify-trim:punctuation'><div class=WordSection1><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.<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'><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"><span style='font-family:"inherit",serif;color:#007DBF;border:none windowtext 1.0pt;padding:0cm'>http://web.mit.edu/kwillcox/Public/Web/BTTanMS.pdf</span></a> <o:p></o:p></span></p><p style='mso-margin-top-alt:16.8pt;margin-right:0cm;margin-bottom:16.8pt;margin-left:0cm;line-height:14.7pt;background:white;vertical-align:baseline;font-stretch: inherit;box-sizing: border-box;orphans: auto;text-align:start;widows: 1;-webkit-text-stroke-width: 0px;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:<span class=apple-converted-space> </span><br>0. get timestepvalues of interest as t_i, i=1..N<span class=apple-converted-space> </span><br>1. load field P of two timesteps such as as P_i=P(t_i),P_j=P(t_j)<span class=apple-converted-space> </span><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.<span class=apple-converted-space> </span><br>3. get the eigen values lambda_i and corresponding right egien vector eV_ii of matrix {R_ij}<span class=apple-converted-space> </span><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.<span class=apple-converted-space> </span><br>5. reconstruct Pr_m field using first m POD bases:<span class=apple-converted-space> </span><br>Pr_m = sum(lambda_i * psi_i, i = 1.. m)<o:p></o:p></span></p><p style='mso-margin-top-alt:16.8pt;margin-right:0cm;margin-bottom:16.8pt;margin-left:0cm;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<o:p></o:p></span></p><p style='mso-margin-top-alt:16.8pt;margin-right:0cm;margin-bottom:16.8pt;margin-left:0cm;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.<o:p></o:p></span></p><p style='mso-margin-top-alt:16.8pt;margin-right:0cm;margin-bottom:16.8pt;margin-left:0cm;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. <o:p></o:p></span></p><p style='mso-margin-top-alt:16.8pt;margin-right:0cm;margin-bottom:16.8pt;margin-left:0cm;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++).<o:p></o:p></span></p><p style='mso-margin-top-alt:16.8pt;margin-right:0cm;margin-bottom:16.8pt;margin-left:0cm;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?<o:p></o:p></span></p><p style='mso-margin-top-alt:16.8pt;margin-right:0cm;margin-bottom:16.8pt;margin-left:0cm;line-height:14.7pt;background:white;vertical-align:baseline;font-stretch: inherit;box-sizing: border-box;orphans: auto;text-align:start;widows: 1;-webkit-text-stroke-width: 0px;word-spacing:0px'><span lang=EN-US style='font-size:10.5pt;font-family:"Arial",sans-serif;color:#292C33'>Thanks<o:p></o:p></span></p><p style='mso-margin-top-alt:16.8pt;margin-right:0cm;margin-bottom:16.8pt;margin-left:0cm;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 http://paraview.uservoice.com/forums/11350-general/suggestions/7671768-proper-orthogonal-decomposition-analysis-filter<o:p></o:p></span></p><p class=MsoNormal align=left style='text-align:left;background:white'><span lang=EN-US style='font-size:10.0pt;font-family:"Arial",sans-serif;color:#222222'>Di CHENG (Ph.D. candidate)<o:p></o:p></span></p><p class=MsoNormal align=left style='text-align:left;background:white'><span lang=EN-US style='font-size:10.0pt;font-family:"Arial",sans-serif;color:#222222'>Supersonic Combustion Group<o:p></o:p></span></p><p class=MsoNormal align=left style='text-align:left;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<o:p></o:p></span></p><p class=MsoNormal align=left style='text-align:left;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><o:p></o:p></span></p><p class=MsoNormal align=left style='text-align:left;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><o:p></o:p></span></p><p class=MsoNormal align=left style='text-align:left;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><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p></div></body></html>