|
1 | | -function Jacobianvp = jvp(psi, u, L, RdnL, PdnL, Ddx, Ddy, Re, Ro) |
| 1 | +function jvp = jvp(psi, u, L, RdnL, PdnL, Ddx, Ddy, Re, Ro) |
2 | 2 |
|
3 | | -% supporting multiple mat-vecs at the same time |
4 | | -N = size(u, 2); |
5 | | -psi = repmat(psi, 1, N); |
| 3 | +[nx, ny] = size(L12); |
6 | 4 |
|
7 | | -dpsix = Ddx*psi; |
8 | | -dpsiy = Ddy*psi; |
| 5 | +psi = reshape(psi, nx, ny); |
| 6 | +u = reshape(u, nx, ny); |
9 | 7 |
|
10 | | -q = -L*psi; |
11 | | -dqx = Ddx*q; |
12 | | -dqy = Ddy*q; |
| 8 | +% Calculate the vorticity |
| 9 | +q = -(Lx*psi + psi*Ly); |
13 | 10 |
|
14 | | -nLu = -L*u; |
15 | | -Ddxu = Ddx*u; |
16 | | -Ddyu = Ddy*u; |
| 11 | +dpsix = Dx*psi; |
| 12 | +dpsiy = psi*DyT; |
17 | 13 |
|
18 | | -DdxnLu = Ddx*nLu; |
19 | | -DdynLu = Ddy*nLu; |
| 14 | +dqx = Dx*q; |
| 15 | +dqy = q*DyT; |
20 | 16 |
|
21 | | -% Arakawa approximation |
22 | | -dJpsi1u = dpsix.*DdynLu + dqy.*Ddxu ... |
23 | | - - dpsiy.*DdxnLu - dqx.*Ddyu; |
| 17 | +nLu = -(Lx*u + u*Ly); |
| 18 | +Dxu = Dx*u; |
| 19 | +Dyu = u*DyT; |
| 20 | + |
| 21 | +DxnLu = Dx*nLu; |
| 22 | +DynLu = nLu*DyT; |
24 | 23 |
|
25 | | -dJpsi2u = Ddx*(psi.*DdynLu) + Ddx*(dqy.*u) ... |
26 | | - - Ddy*(psi.*DdxnLu) - Ddy*(dqx.*u); |
| 24 | +% Arakawa approximation |
| 25 | +dJpsi1u = dpsix.*DynLu + dqy.*Dxu ... |
| 26 | + - dpsiy.*DxnLu - dqx.*Dyu; |
27 | 27 |
|
28 | | -dJpsi3u = Ddy*(dpsix.*nLu) + Ddy*(q.*Ddxu) ... |
29 | | - - Ddx*(dpsiy.*nLu) - Ddx*(q.*Ddyu); |
| 28 | +dJpsi2u = Dx*(psi.*DynLu) + Dx*(dqy.*u) ... |
| 29 | + - (psi.*DxnLu)*DyT - (dqx.*u)*DyT; |
30 | 30 |
|
| 31 | +dJpsi3u = (dpsix.*nLu)*DyT + (q.*Dxu)*DyT ... |
| 32 | + - Dx*(dpsiy.*nLu) - Dx*(q.*Dyu); |
31 | 33 |
|
32 | 34 | dJpsiu = -(dJpsi1u + dJpsi2u + dJpsi3u)/3; |
33 | 35 |
|
| 36 | +ddqtpsivp = -dJpsiu + (1/Ro)*Dxu; |
34 | 37 |
|
35 | | -ddqtpsivp = -dJpsiu + (1/Ro)*Ddxu + (1/Re)*(L*(nLu)); |
| 38 | +% solve the sylvester equation |
| 39 | +nLidqtmq = P1*(L12.*(P1*ddqtpsivp*P2))*P2; |
36 | 40 |
|
37 | | -Jacobianvp = PdnL*(RdnL\(RdnL'\(PdnL'*ddqtpsivp))); |
| 41 | +% solve into stream form of the Jacobian vp |
| 42 | +jvp = reshape(nLidqtmq - (1/Re)*(nLu), nx*ny, 1); |
38 | 43 |
|
39 | 44 | end |
0 commit comments