Changeset 624 for codes/icosagcm/devel/src/kernels_unst/caldyn_vert.k90
- Timestamp:
- 12/08/17 15:08:49 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/devel/src/kernels_unst/caldyn_vert.k90
r614 r624 1 1 !-------------------------------------------------------------------------- 2 2 !---------------------------- caldyn_vert ---------------------------------- 3 !$OMP DO SCHEDULE(STATIC)4 DO ij=1,primal_num5 DO l = llm-1,1,-16 ! cumulate mass flux convergence from top to bottom7 convm(l,ij) = convm(l,ij) + convm(l+1,ij)8 END DO9 l=110 dmass_col(ij) = convm(l,ij)11 DO l = 2,llm12 ! 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 DO15 END DO16 !$OMP END DO17 ! make sure wflux is up to date18 !$OMP BARRIER19 !$OMP DO SCHEDULE(STATIC)20 DO edge = 1, edge_num21 ij_left = left(edge)22 ij_right = right(edge)23 DO l = 2, llm24 wwuu(l,edge) = .5*(wflux(l,ij_left)+wflux(l,ij_right))*(u(l,edge)-u(l-1,edge))25 END DO26 END DO27 !$OMP END DO28 ! make sure wwuu is up to date29 !$OMP BARRIER30 !$OMP DO SCHEDULE(STATIC)31 DO ij = 1, primal_num32 DO l = 1, llm33 convm(l,ij) = mass_dbk(l,ij) * dmass_col(ij) ! FIXME : we shoud prognose mass_col34 END DO35 END DO36 !$OMP END DO37 !$OMP DO SCHEDULE(STATIC)38 DO edge = 1, edge_num39 ij_left = left(edge)40 ij_right = right(edge)41 DO l = 1, llm42 du(l,edge) = du(l,edge) - (wwuu(l,edge)+wwuu(l+1,edge)) / (rhodz(l,ij_left)+rhodz(l,ij_right))43 END DO44 END DO45 !$OMP END DO46 3 DO iq=1,nqdyn 47 4 !$OMP DO SCHEDULE(STATIC) … … 60 17 !$OMP END DO 61 18 END DO 19 IF(caldyn_vert_variant == caldyn_vert_cons) THEN 20 ! conservative vertical transport of momentum : (F/m)du/deta = 1/m (d/deta(Fu)-u.dF/deta) 21 !$OMP DO SCHEDULE(STATIC) 22 DO edge = 1, edge_num 23 ij_left = left(edge) 24 ij_right = right(edge) 25 DO l = 2, llm 26 wwuu(l,edge) = .25*(wflux(l,ij_left)+wflux(l,ij_right))*(u(l,edge)+u(l-1,edge)) ! Fu 27 END DO 28 END DO 29 !$OMP END DO 30 ! make sure wwuu is up to date 31 !$OMP BARRIER 32 !$OMP DO SCHEDULE(STATIC) 33 DO edge = 1, edge_num 34 ij_left = left(edge) 35 ij_right = right(edge) 36 DO l = 1, llm 37 dFu_deta = wwuu(l+1,edge)-wwuu(l,edge) ! d/deta (F*u) 38 dF_deta = .5*(wflux(l+1,ij_left)+wflux(l+1,ij_right)-(wflux(l,ij_left)+wflux(l,ij_right))) ! d/deta(F) 39 du(l,edge) = du(l,edge) - (dFu_deta-u(l,edge)*dF_deta) / (.5*(rhodz(l,ij_left)+rhodz(l,ij_right))) ! (F/m)du/deta 40 END DO 41 END DO 42 !$OMP END DO 43 ELSE 44 !$OMP DO SCHEDULE(STATIC) 45 DO edge = 1, edge_num 46 ij_left = left(edge) 47 ij_right = right(edge) 48 DO l = 2, llm 49 wwuu(l,edge) = .5*(wflux(l,ij_left)+wflux(l,ij_right))*(u(l,edge)-u(l-1,edge)) 50 END DO 51 END DO 52 !$OMP END DO 53 ! make sure wwuu is up to date 54 !$OMP BARRIER 55 !$OMP DO SCHEDULE(STATIC) 56 DO edge = 1, edge_num 57 ij_left = left(edge) 58 ij_right = right(edge) 59 DO l = 1, llm 60 du(l,edge) = du(l,edge) - (wwuu(l,edge)+wwuu(l+1,edge)) / (rhodz(l,ij_left)+rhodz(l,ij_right)) 61 END DO 62 END DO 63 !$OMP END DO 64 END IF 62 65 !---------------------------- caldyn_vert ---------------------------------- 63 66 !--------------------------------------------------------------------------
Note: See TracChangeset
for help on using the changeset viewer.