source: codes/icosagcm/devel/src/kernels_unst/compute_vorticity.k90

Last change on this file was 1052, checked in by dubos, 4 years ago

devel : diagnose divergence and vorticity

File size: 2.0 KB
Line 
1   !--------------------------------------------------------------------------
2   !---------------------------- compute_vorticity ----------------------------------
3   !$OMP DO SCHEDULE(STATIC)
4   DO ij = 1, dual_num
5      ! this VLOOP iterates over dual cell edges
6      SELECT CASE(dual_deg(ij))
7      CASE(3)
8         edge1 = dual_edge(1,ij)
9         edge2 = dual_edge(2,ij)
10         edge3 = dual_edge(3,ij)
11         de1 = de(edge1)
12         de2 = de(edge2)
13         de3 = de(edge3)
14         sign1 = dual_ne(1,ij)
15         sign2 = dual_ne(2,ij)
16         sign3 = dual_ne(3,ij)
17         !DIR$ SIMD
18         DO l = 1, llm
19            etav = 0.d0
20            etav = etav + sign1*ue(l,edge1)*de1
21            etav = etav + sign2*ue(l,edge2)*de2
22            etav = etav + sign3*ue(l,edge3)*de3
23            vort(l,ij) = etav / Av(ij)
24         END DO
25      CASE(4)
26         edge1 = dual_edge(1,ij)
27         edge2 = dual_edge(2,ij)
28         edge3 = dual_edge(3,ij)
29         edge4 = dual_edge(4,ij)
30         de1 = de(edge1)
31         de2 = de(edge2)
32         de3 = de(edge3)
33         de4 = de(edge4)
34         sign1 = dual_ne(1,ij)
35         sign2 = dual_ne(2,ij)
36         sign3 = dual_ne(3,ij)
37         sign4 = dual_ne(4,ij)
38         !DIR$ SIMD
39         DO l = 1, llm
40            etav = 0.d0
41            etav = etav + sign1*ue(l,edge1)*de1
42            etav = etav + sign2*ue(l,edge2)*de2
43            etav = etav + sign3*ue(l,edge3)*de3
44            etav = etav + sign4*ue(l,edge4)*de4
45            vort(l,ij) = etav / Av(ij)
46         END DO
47      CASE DEFAULT
48         !DIR$ SIMD
49         DO l = 1, llm
50            etav = 0.d0
51            DO iedge = 1, dual_deg(ij)
52               edge = dual_edge(iedge,ij)
53               etav = etav + dual_ne(iedge,ij)*ue(l,edge)*de(edge)
54            END DO
55            vort(l,ij) = etav / Av(ij)
56         END DO
57      END SELECT
58   END DO
59   !$OMP END DO
60   !---------------------------- compute_vorticity ----------------------------------
61   !--------------------------------------------------------------------------
Note: See TracBrowser for help on using the repository browser.