[843] | 1 | MODULE compute_caldyn_kv_mod |
---|
| 2 | USE grid_param, ONLY : llm |
---|
| 3 | IMPLICIT NONE |
---|
| 4 | PRIVATE |
---|
| 5 | |
---|
| 6 | PUBLIC :: compute_caldyn_kv |
---|
| 7 | |
---|
| 8 | CONTAINS |
---|
| 9 | |
---|
| 10 | SUBROUTINE compute_caldyn_kv(ue, Kv) |
---|
| 11 | USE icosa |
---|
| 12 | USE omp_para, ONLY : ll_begin, ll_end |
---|
| 13 | REAL(rstd),INTENT(IN) :: ue(3*iim*jjm,llm) |
---|
| 14 | REAL(rstd),INTENT(OUT) :: Kv(2*iim*jjm,llm) |
---|
| 15 | REAL(rstd) :: ue2(3*iim*jjm), dem2(3*iim*jjm), r2_Av(2*iim*jjm), rad2 |
---|
| 16 | INTEGER :: ij,l, u_up, u_down |
---|
| 17 | |
---|
| 18 | u_up = t_lup + u_right |
---|
| 19 | u_down = t_rdown + u_left |
---|
| 20 | |
---|
| 21 | rad2=radius**2 |
---|
| 22 | |
---|
| 23 | !DIR$ SIMD |
---|
| 24 | DO ij=ij_begin_ext,ij_end_ext |
---|
| 25 | dem2(ij+u_right) = de(ij+u_right)**(-2) |
---|
| 26 | dem2(ij+u_lup) = de(ij+u_lup)**(-2) |
---|
| 27 | dem2(ij+u_ldown) = de(ij+u_ldown)**(-2) |
---|
| 28 | r2_Av(ij+z_up) = rad2*(1./Av(ij+z_up)) |
---|
| 29 | r2_Av(ij+z_down) = rad2*(1./Av(ij+z_down)) |
---|
| 30 | END DO |
---|
| 31 | |
---|
| 32 | DO l=ll_begin,ll_end |
---|
| 33 | ! compute squared normal component from 1-form |
---|
| 34 | !DIR$ SIMD |
---|
| 35 | DO ij=ij_begin_ext,ij_end_ext |
---|
| 36 | ue2(ij+u_right) = dem2(ij+u_right)* (ue(ij+u_right,l)**2) |
---|
| 37 | ue2(ij+u_lup) = dem2(ij+u_lup) * (ue(ij+u_lup,l)**2) |
---|
| 38 | ue2(ij+u_ldown) = dem2(ij+u_ldown)* (ue(ij+u_ldown,l)**2) |
---|
| 39 | END DO |
---|
| 40 | ! average squared normal component to vertices |
---|
| 41 | !DIR$ SIMD |
---|
| 42 | DO ij=ij_begin_ext,ij_end_ext |
---|
| 43 | Kv(ij+z_up,l) = r2_Av(ij+z_up)*( & |
---|
| 44 | S1(ij,vup)*ue2(ij+u_rup) + & |
---|
| 45 | S2(ij,vup)*ue2(ij+u_lup) + & |
---|
| 46 | S2(ij+t_lup,vrdown)*ue2(ij+u_up)) |
---|
| 47 | |
---|
| 48 | Kv(ij+z_down,l) = r2_Av(ij+z_down)*( & |
---|
| 49 | S1(ij,vdown)*ue2(ij+u_ldown) + & |
---|
| 50 | S2(ij,vdown)*ue2(ij+u_rdown) + & |
---|
| 51 | S2(ij+t_rdown,vlup)*ue2(ij+u_down) ) |
---|
| 52 | ENDDO |
---|
| 53 | ENDDO |
---|
| 54 | END SUBROUTINE compute_caldyn_kv |
---|
| 55 | |
---|
| 56 | END MODULE compute_caldyn_kv_mod |
---|