source: codes/icosagcm/devel/src/kernels_unst/caldyn_slow_hydro.k90 @ 913

Last change on this file since 913 was 658, checked in by dubos, 7 years ago

devel/unstructured : updated kernels

File size: 3.7 KB
Line 
1   !--------------------------------------------------------------------------
2   !---------------------------- caldyn_slow_hydro ----------------------------------
3   !$OMP DO SCHEDULE(STATIC)
4   DO edge = 1, edge_num
5      ij_left = left(edge)
6      ij_right = right(edge)
7      !DIR$ SIMD
8      DO l = 1, llm
9         uu = .5*(rhodz(l,ij_left)+rhodz(l,ij_right))*u(l,edge)
10         hflux(l,edge) = uu*le_de(edge)
11      END DO
12   END DO
13   !$OMP END DO
14   !$OMP DO SCHEDULE(STATIC)
15   DO ij = 1, primal_num
16      ! this VLOOP iterates over primal cell edges
17      SELECT CASE(primal_deg(ij))
18      CASE(4)
19         edge1 = primal_edge(1,ij)
20         edge2 = primal_edge(2,ij)
21         edge3 = primal_edge(3,ij)
22         edge4 = primal_edge(4,ij)
23         le_de1 = le_de(edge1)
24         le_de2 = le_de(edge2)
25         le_de3 = le_de(edge3)
26         le_de4 = le_de(edge4)
27         !DIR$ SIMD
28         DO l = 1, llm
29            ke=0.d0
30            ke = ke + le_de1*u(l,edge1)**2
31            ke = ke + le_de2*u(l,edge2)**2
32            ke = ke + le_de3*u(l,edge3)**2
33            ke = ke + le_de4*u(l,edge4)**2
34            BERNI(l,ij)=ke*(.25/Ai(ij))
35         END DO
36      CASE(5)
37         edge1 = primal_edge(1,ij)
38         edge2 = primal_edge(2,ij)
39         edge3 = primal_edge(3,ij)
40         edge4 = primal_edge(4,ij)
41         edge5 = primal_edge(5,ij)
42         le_de1 = le_de(edge1)
43         le_de2 = le_de(edge2)
44         le_de3 = le_de(edge3)
45         le_de4 = le_de(edge4)
46         le_de5 = le_de(edge5)
47         !DIR$ SIMD
48         DO l = 1, llm
49            ke=0.d0
50            ke = ke + le_de1*u(l,edge1)**2
51            ke = ke + le_de2*u(l,edge2)**2
52            ke = ke + le_de3*u(l,edge3)**2
53            ke = ke + le_de4*u(l,edge4)**2
54            ke = ke + le_de5*u(l,edge5)**2
55            BERNI(l,ij)=ke*(.25/Ai(ij))
56         END DO
57      CASE(6)
58         edge1 = primal_edge(1,ij)
59         edge2 = primal_edge(2,ij)
60         edge3 = primal_edge(3,ij)
61         edge4 = primal_edge(4,ij)
62         edge5 = primal_edge(5,ij)
63         edge6 = primal_edge(6,ij)
64         le_de1 = le_de(edge1)
65         le_de2 = le_de(edge2)
66         le_de3 = le_de(edge3)
67         le_de4 = le_de(edge4)
68         le_de5 = le_de(edge5)
69         le_de6 = le_de(edge6)
70         !DIR$ SIMD
71         DO l = 1, llm
72            ke=0.d0
73            ke = ke + le_de1*u(l,edge1)**2
74            ke = ke + le_de2*u(l,edge2)**2
75            ke = ke + le_de3*u(l,edge3)**2
76            ke = ke + le_de4*u(l,edge4)**2
77            ke = ke + le_de5*u(l,edge5)**2
78            ke = ke + le_de6*u(l,edge6)**2
79            BERNI(l,ij)=ke*(.25/Ai(ij))
80         END DO
81      CASE DEFAULT
82         !DIR$ SIMD
83         DO l = 1, llm
84            ke=0.d0
85            DO iedge = 1, primal_deg(ij)
86               edge = primal_edge(iedge,ij)
87               ke = ke + le_de(edge)*u(l,edge)**2
88            END DO
89            BERNI(l,ij)=ke*(.25/Ai(ij))
90         END DO
91      END SELECT
92   END DO
93   !$OMP END DO
94   IF(zero) THEN
95      !$OMP DO SCHEDULE(STATIC)
96      DO edge = 1, edge_num
97         ij_left = left(edge)
98         ij_right = right(edge)
99         !DIR$ SIMD
100         DO l = 1, llm
101            du(l,edge) = 1.*(berni(l,ij_left)-berni(l,ij_right)) ! minus gradient
102         END DO
103      END DO
104      !$OMP END DO
105   ELSE
106      !$OMP DO SCHEDULE(STATIC)
107      DO edge = 1, edge_num
108         ij_left = left(edge)
109         ij_right = right(edge)
110         !DIR$ SIMD
111         DO l = 1, llm
112            du(l,edge) = du(l,edge) + 1.*(berni(l,ij_left)-berni(l,ij_right)) ! minus gradient
113         END DO
114      END DO
115      !$OMP END DO
116   END IF
117   !---------------------------- caldyn_slow_hydro ----------------------------------
118   !--------------------------------------------------------------------------
Note: See TracBrowser for help on using the repository browser.