MoDeNa  1.0
Software framework facilitating sequential multi-scale modelling
PDA.H
1 
13 void PDA(double *, double *, double *, int &);
15 
16 void PDA(double *we, double *vi, double *mom, int &n)
17 {
18 
19  int i,j;
20  double p[2*n + 1][2*n + 1];
21 
22  for (i = 0; i < 2*n+1; i++)
23  {
24  for (j = 0; j < 2*n+1; j++)
25  {
26  p[i][j] = 0.0;
27  }
28  }
29 
30  double norm_mom[2*n];
31 
32  for (i = 0; i < 2*n; i++)
33  {
34  norm_mom[i] = mom[i]/(max(mom[0],1.0e-10));
35  }
36 
37  p[0][0] = 1.0;
38  p[0][1] = 1.0;
39 
40  for (i = 1; i < 2*n; i++)
41  {
42  p[i][1] = Foam::pow(-1,double (i))*norm_mom[i];
43  }
44 
45  for (j = 2; j < 2*n+1; j++)
46  {
47  for(i = 0; i < 2*n+2-j; i++)
48  {
49  p[i][j] = p[0][j-1]*p[i+1][j-2] - p[0][j-2]*p[i+1][j-1];
50  }
51  }
52 
53 
54  double zeta[2*n];
55  for (i = 0; i < 2*n; i++)
56  {
57  zeta[i] = 0.0;
58  }
59 
60  for (i = 1; i < 2*n; i++)
61  {
62  if (p[0][i]*p[0][i-1] > 0)
63  {
64  zeta[i] = p[0][i+1]/(p[0][i]*p[0][i-1]);
65  }
66  else
67  {
68  zeta[i] = 0.0;
69  }
70  }
71 
72  double aa[n];
73  double bb[n-1], cc[n-1];
74 
75  for (i = 0; i < n-1; i++)
76  {
77  bb[i] = cc[i] = 0.0;
78  }
79 
80  for (i = 1; i <= n; i++)
81  {
82  aa[i-1] = zeta[2*i - 1] + zeta[2*i - 2];
83  }
84 
85  for (i = 1; i <= n-1; i++)
86  {
87  bb[i - 1] = zeta[2*i]*zeta[2*i - 1];
88  }
89 
90  for (i = 1; i <= n-1; i++)
91  {
92  cc[i - 1] = Foam::sqrt(fabs(bb[i - 1]));
93  }
94 
95 
96  double evec[n][n];
97  for (i = 0; i < n; i++)
98  {
99  for (j = 0; j < n; j++)
100  {
101  evec[i][j] = 0.0;
102  }
103  }
104 
105  double work[2*n-2];
106  int info;
107  char choice='I';
108 
109  dsteqr_(choice,&n,aa,cc,&evec[0][0],&n,work,&info);
110 
111  for (i = 0; i < n; i++)
112  {
113  vi[i] = aa[i];
114 
115  if (vi[i] < 0.0)
116  {
117  vi[i] = 0.0;
118  }
119  }
120 
121  for (j = 0; j < n; j++)
122  {
123  we[j] = mom[0]*Foam::pow(evec[j][0],2);
124 
125  if (we[j] < 0)
126  {
127  we[j] = 0.0;
128  }
129  }
130 }
131 ///@endcond
void PDA(double *, double *, double *, int &)
Definition: pda.h:13