source: codes/icosagcm/devel/src/kernels_unst/caldyn_vert.k90 @ 614

Last change on this file since 614 was 614, checked in by dubos, 6 years ago

devel : added unstructured-mesh kernels

File size: 2.1 KB
Line 
1   !--------------------------------------------------------------------------
2   !---------------------------- caldyn_vert ----------------------------------
3   !$OMP DO SCHEDULE(STATIC)
4   DO ij=1,primal_num
5      DO l = llm-1,1,-1
6         ! cumulate mass flux convergence from top to bottom
7         convm(l,ij) = convm(l,ij) + convm(l+1,ij)
8      END DO
9      l=1
10      dmass_col(ij) = convm(l,ij)
11      DO l = 2,llm
12         ! Compute vertical mass flux (l=1,llm+1 set to zero at init)
13         wflux(l,ij) = mass_bl(l,ij) * dmass_col(ij) - convm(l,ij)
14      END DO
15   END DO
16   !$OMP END DO
17   ! make sure wflux is up to date
18   !$OMP BARRIER
19   !$OMP DO SCHEDULE(STATIC)
20   DO edge = 1, edge_num
21      ij_left = left(edge)
22      ij_right = right(edge)
23      DO l = 2, llm
24         wwuu(l,edge) = .5*(wflux(l,ij_left)+wflux(l,ij_right))*(u(l,edge)-u(l-1,edge))
25      END DO
26   END DO
27   !$OMP END DO
28   ! make sure wwuu is up to date
29   !$OMP BARRIER
30   !$OMP DO SCHEDULE(STATIC)
31   DO ij = 1, primal_num
32      DO l = 1, llm
33         convm(l,ij) = mass_dbk(l,ij) * dmass_col(ij) ! FIXME : we shoud prognose mass_col
34      END DO
35   END DO
36   !$OMP END DO
37   !$OMP DO SCHEDULE(STATIC)
38   DO edge = 1, edge_num
39      ij_left = left(edge)
40      ij_right = right(edge)
41      DO l = 1, llm
42         du(l,edge) = du(l,edge) - (wwuu(l,edge)+wwuu(l+1,edge)) / (rhodz(l,ij_left)+rhodz(l,ij_right))
43      END DO
44   END DO
45   !$OMP END DO
46   DO iq=1,nqdyn
47      !$OMP DO SCHEDULE(STATIC)
48      DO ij = 1, primal_num
49         DO l = 2, llm
50            dtheta_rhodz(l,ij,iq) = dtheta_rhodz(l,ij,iq) + 0.5*(theta(l,ij,iq)+theta(l-1,ij,iq))*wflux(l,ij)
51         END DO
52      END DO
53      !$OMP END DO
54      !$OMP DO SCHEDULE(STATIC)
55      DO ij = 1, primal_num
56         DO l = 1, llm-1
57            dtheta_rhodz(l,ij,iq) = dtheta_rhodz(l,ij,iq) - 0.5*(theta(l,ij,iq)+theta(l+1,ij,iq))*wflux(l+1,ij)
58         END DO
59      END DO
60      !$OMP END DO
61   END DO
62   !---------------------------- caldyn_vert ----------------------------------
63   !--------------------------------------------------------------------------
Note: See TracBrowser for help on using the repository browser.