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

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

devel/unstructured : updated kernels

File size: 2.2 KB
Line 
1   !--------------------------------------------------------------------------
2   !---------------------------- caldyn_vert_NH ----------------------------------
3   !$OMP DO SCHEDULE(STATIC)
4   DO ij = 1, primal_num
5      l=1
6      w_ij = ( W(l,ij)+.5*W(l+1,ij) )/mass(l,ij)
7      wflux_ij = .5*(wflux(l,ij)+wflux(l+1,ij))
8      W_etadot(l,ij) = wflux_ij*w_ij
9      eta_dot(l,ij) = wflux_ij / mass(l,ij)
10      wcov(l,ij) = w_ij*(geopot(l+1,ij)-geopot(l,ij))
11      !DIR$ SIMD
12      DO l = 2, llm-1
13         w_ij = .5*( W(l,ij)+W(l+1,ij) )/mass(l,ij)
14         wflux_ij = .5*(wflux(l,ij)+wflux(l+1,ij))
15         W_etadot(l,ij) = wflux_ij*w_ij
16         eta_dot(l,ij) = wflux_ij / mass(l,ij)
17         wcov(l,ij) = w_ij*(geopot(l+1,ij)-geopot(l,ij))
18      END DO
19      l=llm
20      w_ij = ( .5*W(l,ij)+W(l+1,ij) )/mass(l,ij)
21      wflux_ij = .5*(wflux(l,ij)+wflux(l+1,ij))
22      W_etadot(l,ij) = wflux_ij*w_ij
23      eta_dot(l,ij) = wflux_ij / mass(l,ij)
24      wcov(l,ij) = w_ij*(geopot(l+1,ij)-geopot(l,ij))
25   END DO
26   !$OMP END DO
27   ! add NH term to du
28   !$OMP DO SCHEDULE(STATIC)
29   DO edge = 1, edge_num
30      ij_left = left(edge)
31      ij_right = right(edge)
32      !DIR$ SIMD
33      DO l = 1, llm
34         du(l,edge) = du(l,edge) - .5*(wcov(l,ij_left)+wcov(l,ij_right))*1.*(eta_dot(l,ij_right)-eta_dot(l,ij_left))
35      END DO
36   END DO
37   !$OMP END DO
38   ! add NH terms to dW, dPhi
39   ! FIXME : TODO top and bottom
40   !$OMP DO SCHEDULE(STATIC)
41   DO ij = 1, primal_num
42      !DIR$ SIMD
43      DO l = 2, llm
44         dPhi(l,ij)=dPhi(l,ij)-wflux(l,ij)*(geopot(l+1,ij)-geopot(l-1,ij))/(mass(l-1,ij)+mass(l,ij))
45      END DO
46   END DO
47   !$OMP END DO
48   ! We need a barrier here because we compute W_etadot above and do a vertical difference below
49   !$OMP BARRIER
50   !$OMP DO SCHEDULE(STATIC)
51   DO ij = 1, primal_num
52      l=1
53      dW(l,ij) = dW(l,ij) - W_etadot(l,ij)
54      !DIR$ SIMD
55      DO l = 2, llm
56         dW(l,ij) = dW(l,ij) + W_etadot(l-1,ij) - W_etadot(l,ij)
57      END DO
58      l=llm+1
59      dW(l,ij) = dW(l,ij) + W_etadot(l-1,ij)
60   END DO
61   !$OMP END DO
62   !---------------------------- caldyn_vert_NH ----------------------------------
63   !--------------------------------------------------------------------------
Note: See TracBrowser for help on using the repository browser.