[580] | 1 | !-------------------------------------------------------------------------- |
---|
| 2 | !---------------------------- caldyn_vert_NH ---------------------------------- |
---|
| 3 | IF (ll_begin==1) THEN |
---|
| 4 | !DIR$ SIMD |
---|
| 5 | DO ij=ij_begin_ext, ij_end_ext |
---|
| 6 | w_ij = ( W(ij,1)+.5*W(ij,1 +1) )/mass(ij,1) |
---|
| 7 | wflux_ij = .5*(wflux(ij,1)+wflux(ij,1 +1)) |
---|
| 8 | W_etadot(ij,1) = wflux_ij*w_ij |
---|
| 9 | eta_dot(ij,1) = wflux_ij / mass(ij,1) |
---|
| 10 | wcov(ij,1) = w_ij*(geopot(ij,1 +1)-geopot(ij,1)) |
---|
| 11 | END DO |
---|
| 12 | END IF |
---|
| 13 | DO l = ll_beginp1, ll_endm1 |
---|
| 14 | !DIR$ SIMD |
---|
| 15 | DO ij=ij_begin_ext, ij_end_ext |
---|
| 16 | w_ij = .5*( W(ij,l)+W(ij,l+1) )/mass(ij,l) |
---|
| 17 | wflux_ij = .5*(wflux(ij,l)+wflux(ij,l+1)) |
---|
| 18 | W_etadot(ij,l) = wflux_ij*w_ij |
---|
| 19 | eta_dot(ij,l) = wflux_ij / mass(ij,l) |
---|
| 20 | wcov(ij,l) = w_ij*(geopot(ij,l+1)-geopot(ij,l)) |
---|
| 21 | END DO |
---|
| 22 | END DO |
---|
| 23 | IF(ll_end==llm) THEN |
---|
| 24 | !DIR$ SIMD |
---|
| 25 | DO ij=ij_begin_ext, ij_end_ext |
---|
| 26 | w_ij = ( .5*W(ij,llm)+W(ij,llm+1) )/mass(ij,llm) |
---|
| 27 | wflux_ij = .5*(wflux(ij,llm)+wflux(ij,llm+1)) |
---|
| 28 | W_etadot(ij,llm) = wflux_ij*w_ij |
---|
| 29 | eta_dot(ij,llm) = wflux_ij / mass(ij,llm) |
---|
| 30 | wcov(ij,llm) = w_ij*(geopot(ij,llm+1)-geopot(ij,llm)) |
---|
| 31 | END DO |
---|
| 32 | END IF |
---|
| 33 | ! add NH term to du |
---|
| 34 | DO l = ll_begin, ll_end |
---|
| 35 | !DIR$ SIMD |
---|
| 36 | DO ij=ij_begin, ij_end |
---|
| 37 | du(ij+u_right,l) = du(ij+u_right,l) - .5*(wcov(ij,l)+wcov(ij+t_right,l))*ne_right*(eta_dot(ij+t_right,l)-eta_dot(ij,l)) |
---|
| 38 | du(ij+u_lup,l) = du(ij+u_lup,l) - .5*(wcov(ij,l)+wcov(ij+t_lup,l))*ne_lup*(eta_dot(ij+t_lup,l)-eta_dot(ij,l)) |
---|
| 39 | du(ij+u_ldown,l) = du(ij+u_ldown,l) - .5*(wcov(ij,l)+wcov(ij+t_ldown,l))*ne_ldown*(eta_dot(ij+t_ldown,l)-eta_dot(ij,l)) |
---|
| 40 | END DO |
---|
| 41 | END DO |
---|
| 42 | ! add NH terms to dW, dPhi |
---|
| 43 | ! FIXME : TODO top and bottom |
---|
| 44 | DO l = ll_beginp1, ll_end |
---|
| 45 | !DIR$ SIMD |
---|
| 46 | DO ij=ij_begin, ij_end |
---|
| 47 | dPhi(ij,l)=dPhi(ij,l)-wflux(ij,l)*(geopot(ij,l+1)-geopot(ij,l-1))/(mass(ij,l-1)+mass(ij,l)) |
---|
| 48 | END DO |
---|
| 49 | END DO |
---|
| 50 | ! We need a barrier here because we compute W_etadot above and do a vertical difference below |
---|
| 51 | !$OMP BARRIER |
---|
| 52 | IF (ll_begin==1) THEN |
---|
| 53 | !DIR$ SIMD |
---|
| 54 | DO ij=ij_begin, ij_end |
---|
| 55 | dW(ij,1) = dW(ij,1) - W_etadot(ij,1) |
---|
| 56 | END DO |
---|
| 57 | END IF |
---|
| 58 | DO l = ll_beginp1, ll_end |
---|
| 59 | !DIR$ SIMD |
---|
| 60 | DO ij=ij_begin, ij_end |
---|
| 61 | dW(ij,l) = dW(ij,l) + W_etadot(ij,l-1) - W_etadot(ij,l) |
---|
| 62 | END DO |
---|
| 63 | END DO |
---|
| 64 | IF(ll_endp1==llm+1) THEN |
---|
| 65 | !DIR$ SIMD |
---|
| 66 | DO ij=ij_begin, ij_end |
---|
| 67 | dW(ij,llm+1) = dW(ij,llm+1) + W_etadot(ij,llm+1 -1) |
---|
| 68 | END DO |
---|
| 69 | END IF |
---|
| 70 | !---------------------------- caldyn_vert_NH ---------------------------------- |
---|
| 71 | !-------------------------------------------------------------------------- |
---|