source: codes/icosagcm/devel/src/kernels/caldyn_vert.k90 @ 563

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

devel : added macro-generated code in source tree

File size: 2.3 KB
Line 
1   !--------------------------------------------------------------------------
2   !---------------------------- caldyn_vert ----------------------------------
3   DO l = llm-1,1,-1
4      DO ij=ij_omp_begin,ij_omp_end
5         ! cumulate mass flux convergence from top to bottom
6         convm(ij,l) = convm(ij,l) + convm(ij,l+1)
7      END DO
8   END DO
9   DO ij=ij_omp_begin,ij_omp_end
10      dmass_col(ij) = convm(ij,1)
11   END DO
12   DO l = 2,llm
13      DO ij=ij_omp_begin,ij_omp_end
14         ! Compute vertical mass flux (l=1,llm+1 set to zero at init)
15         wflux(ij,l) = mass_bl(l) * dmass_col(ij) - convm(ij,l)
16      END DO
17   END DO
18   ! make sure wflux is up to date
19   !$OMP BARRIER
20   DO l = ll_beginp1, ll_end
21      !DIR$ SIMD
22      DO ij=ij_begin, ij_end
23         wwuu(ij+u_right,l) = .5*(wflux(ij,l)+wflux(ij+t_right,l))*(u(ij+u_right,l)-u(ij+u_right,l-1))
24         wwuu(ij+u_lup,l) = .5*(wflux(ij,l)+wflux(ij+t_lup,l))*(u(ij+u_lup,l)-u(ij+u_lup,l-1))
25         wwuu(ij+u_ldown,l) = .5*(wflux(ij,l)+wflux(ij+t_ldown,l))*(u(ij+u_ldown,l)-u(ij+u_ldown,l-1))
26      END DO
27   END DO
28   ! make sure wwuu is up to date
29   !$OMP BARRIER
30   DO l = ll_begin, ll_end
31      !DIR$ SIMD
32      DO ij=ij_begin, ij_end
33         convm(ij,l) = mass_dbk(l) * dmass_col(ij) ! FIXME : we shoud prognose mass_col
34         du(ij+u_right,l) = du(ij+u_right,l) - (wwuu(ij+u_right,l)+wwuu(ij+u_right,l+1)) / (rhodz(ij,l)+rhodz(ij+t_right,l))
35         du(ij+u_lup,l) = du(ij+u_lup,l) - (wwuu(ij+u_lup,l)+wwuu(ij+u_lup,l+1)) / (rhodz(ij,l)+rhodz(ij+t_lup,l))
36         du(ij+u_ldown,l) = du(ij+u_ldown,l) - (wwuu(ij+u_ldown,l)+wwuu(ij+u_ldown,l+1)) / (rhodz(ij,l)+rhodz(ij+t_ldown,l))
37      END DO
38   END DO
39   DO iq=1,nqdyn
40      DO l = ll_beginp1, ll_end
41         !DIR$ SIMD
42         DO ij=ij_begin, ij_end
43            dtheta_rhodz(ij,l,iq) = dtheta_rhodz(ij,l,iq) + 0.5*(theta(ij,l,iq)+theta(ij,l-1,iq))*wflux(ij,l)
44         END DO
45      END DO
46      DO l = ll_begin, ll_endm1
47         !DIR$ SIMD
48         DO ij=ij_begin, ij_end
49            dtheta_rhodz(ij,l,iq) = dtheta_rhodz(ij,l,iq) - 0.5*(theta(ij,l,iq)+theta(ij,l+1,iq))*wflux(ij,l+1)
50         END DO
51      END DO
52   END DO
53   !---------------------------- caldyn_vert ----------------------------------
54   !--------------------------------------------------------------------------
Note: See TracBrowser for help on using the repository browser.