[615] | 1 | {% macro compute_p_and_Aik() %} |
---|
| 2 | {% set p_and_c2_from_theta=caller %} |
---|
[685] | 3 | SEQUENCE_C1 |
---|
[615] | 4 | BODY('1,llm') |
---|
| 5 | rho_ij = (g*m_ik(CELL))/(Phi_il(UP(CELL))-Phi_il(CELL)) |
---|
| 6 | {{ p_and_c2_from_theta() }} |
---|
| 7 | A_ik(CELL) = c2_mik*(tau/g*rho_ij)**2 |
---|
| 8 | END_BLOCK |
---|
| 9 | END_BLOCK |
---|
| 10 | {%- endmacro %} |
---|
| 11 | |
---|
[659] | 12 | KERNEL(caldyn_mil) |
---|
[615] | 13 | FORALL_CELLS_EXT('1', 'llm+1') |
---|
| 14 | ON_PRIMAL |
---|
| 15 | CST_IF(IS_BOTTOM_LEVEL, m_il(CELL) = .5*rhodz(CELL) ) |
---|
| 16 | CST_IF(IS_INNER_INTERFACE, m_il(CELL) = .5*(rhodz(CELL)+rhodz(DOWN(CELL))) ) |
---|
| 17 | CST_IF(IS_TOP_INTERFACE, m_il(CELL) = .5*rhodz(DOWN(CELL)) ) |
---|
| 18 | END_BLOCK |
---|
| 19 | END_BLOCK |
---|
[659] | 20 | END_BLOCK |
---|
| 21 | |
---|
[615] | 22 | KERNEL(caldyn_vert_NH) |
---|
| 23 | FORALL_CELLS_EXT() |
---|
| 24 | ON_PRIMAL |
---|
| 25 | CST_IF(IS_BOTTOM_LEVEL, w_ij = ( W(CELL)+.5*W(UP(CELL)) )/mass(CELL) ) |
---|
| 26 | CST_IF(IS_INNER_LAYER , w_ij = .5*( W(CELL)+W(UP(CELL)) )/mass(CELL) ) |
---|
| 27 | CST_IF(IS_TOP_LAYER, w_ij = ( .5*W(CELL)+W(UP(CELL)) )/mass(CELL) ) |
---|
| 28 | wflux_ij = .5*(wflux(CELL)+wflux(UP(CELL))) |
---|
| 29 | W_etadot(CELL) = wflux_ij*w_ij |
---|
| 30 | eta_dot(CELL) = wflux_ij / mass(CELL) |
---|
| 31 | wcov(CELL) = w_ij*(geopot(UP(CELL))-geopot(CELL)) |
---|
| 32 | END_BLOCK |
---|
| 33 | END_BLOCK |
---|
| 34 | ! add NH term to du |
---|
| 35 | FORALL_CELLS() |
---|
| 36 | ON_EDGES |
---|
| 37 | du(EDGE) = du(EDGE) - .5*(wcov(CELL1)+wcov(CELL2))*SIGN*(eta_dot(CELL2)-eta_dot(CELL1)) |
---|
| 38 | END_BLOCK |
---|
| 39 | END_BLOCK |
---|
| 40 | ! add NH terms to dW, dPhi |
---|
| 41 | ! FIXME : TODO top and bottom |
---|
| 42 | FORALL_CELLS('2','llm') |
---|
| 43 | ON_PRIMAL |
---|
| 44 | dPhi(CELL)=dPhi(CELL)-wflux(CELL)*(geopot(UP(CELL))-geopot(DOWN(CELL)))/(mass(DOWN(CELL))+mass(CELL)) |
---|
| 45 | END_BLOCK |
---|
| 46 | END_BLOCK |
---|
| 47 | |
---|
| 48 | ! We need a barrier here because we compute W_etadot above and do a vertical difference below |
---|
| 49 | BARRIER |
---|
| 50 | |
---|
| 51 | FORALL_CELLS('1','llm+1') |
---|
| 52 | ON_PRIMAL |
---|
| 53 | CST_IFTHEN(IS_BOTTOM_LEVEL) |
---|
| 54 | dW(CELL) = dW(CELL) - W_etadot(CELL) |
---|
| 55 | CST_ELSEIF(IS_TOP_INTERFACE) |
---|
| 56 | dW(CELL) = dW(CELL) + W_etadot(DOWN(CELL)) |
---|
| 57 | CST_ELSE |
---|
| 58 | dW(CELL) = dW(CELL) + W_etadot(DOWN(CELL)) - W_etadot(CELL) |
---|
| 59 | CST_ENDIF |
---|
| 60 | END_BLOCK |
---|
| 61 | END_BLOCK |
---|
| 62 | END_BLOCK |
---|
| 63 | |
---|