Changeset 876 for codes/icosagcm/devel/Python/src/kernels_caldyn_NH.jin
- Timestamp:
- 05/28/19 22:44:58 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/devel/Python/src/kernels_caldyn_NH.jin
r821 r876 250 250 END_BLOCK 251 251 252 KERNEL(caldyn_slow_NH)253 FORALL_CELLS_EXT('1', 'llm+1')254 ON_PRIMAL255 CST_IF(IS_INNER_INTERFACE, w_il(CELL) = 2.*W(CELL)/(rhodz(KDOWN(CELL))+rhodz(KUP(CELL))) )256 CST_IF(IS_BOTTOM_LEVEL, w_il(CELL) = 2.*W(CELL)/rhodz(KUP(CELL)) )257 CST_IF(IS_TOP_INTERFACE, w_il(CELL) = 2.*W(CELL)/rhodz(KDOWN(CELL)) )258 END_BLOCK259 END_BLOCK260 FORALL_CELLS_EXT('1', 'llm+1')261 ON_EDGES262 ! compute DePhi, v_el, G_el, F_el263 ! v_el, W2_el and therefore G_el incorporate metric factor le_de264 ! while DePhil, W_el and F_el do not265 W_el = .5*( W(CELL2)+W(CELL1) )266 DePhil(EDGE) = SIGN*(Phi(CELL2)-Phi(CELL1))267 F_el(EDGE) = DePhil(EDGE)*W_el268 W2_el = .5*LE_DE * ( W(CELL1)*w_il(CELL1) + W(CELL2)*w_il(CELL2) )269 v_el(EDGE) = .5*LE_DE*(u(KUP(EDGE))+u(KDOWN(EDGE))) ! checked270 G_el(EDGE) = v_el(EDGE)*W_el - DePhil(EDGE)*W2_el271 END_BLOCK272 END_BLOCK273 274 FORALL_CELLS_EXT('1', 'llm+1')275 ! compute GradPhi2, dPhi, dW276 ON_PRIMAL277 gPhi2=0.278 dP=0.279 divG=0280 FORALL_EDGES281 gPhi2 = gPhi2 + LE_DE*DePhil(EDGE)**2282 dP = dP + LE_DE*DePhil(EDGE)*v_el(EDGE)283 divG = divG + SIGN*G_el(EDGE) ! -div(G_el), G_el already has le_de284 END_BLOCK285 gradPhi2(CELL) = 1./(2.*AI) * gPhi2286 dPhi(CELL) = gradPhi2(CELL)*w_il(CELL) - 1./(2.*AI)*dP287 dW(CELL) = (-1./AI)*divG288 END_BLOCK289 END_BLOCK290 291 ! We need a barrier here because we compute gradPhi2, F_el and w_il above and do a vertical average below292 BARRIER293 294 FORALL_CELLS_EXT()295 ! Compute berni at scalar points296 ON_PRIMAL297 u2=0.298 FORALL_EDGES299 u2 = u2 + LE_DE*u(EDGE)**2300 END_BLOCK301 berni(CELL) = 1./(4.*AI) * u2 - .25*( gradPhi2(CELL)*w_il(CELL)**2 + gradPhi2(UP(CELL))*w_il(UP(CELL))**2 )302 END_BLOCK303 END_BLOCK304 305 FORALL_CELLS_EXT()306 ON_EDGES307 ! Compute mass flux and grad(berni)308 uu = .5*(rhodz(CELL1)+rhodz(CELL2))*u(EDGE) - .5*( F_el(EDGE)+F_el(UP(EDGE)) )309 hflux(EDGE) = LE_DE*uu310 du(EDGE) = SIGN*(berni(CELL1)-berni(CELL2))311 END_BLOCK312 END_BLOCK313 314 END_BLOCK
Note: See TracChangeset
for help on using the changeset viewer.