Changeset 685 for codes/icosagcm/devel/Python/src/kernels_transport.jin
- Timestamp:
- 03/07/18 18:43:51 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/devel/Python/src/kernels_transport.jin
r615 r685 158 158 ! First diagnose geopotential and temperature, column-wise 159 159 BARRIER 160 SEQUENCE_ EXT160 SEQUENCE_C1 161 161 PROLOGUE(llm) 162 162 pk(CELL) = ptop + .5*g*rhodz(CELL) … … 225 225 226 226 END_BLOCK 227 228 KERNEL(remap_eta) 229 ! IN : rhodz, mass_dak, mass_dbk 230 ! TMP : mass_col, cur_lev, new_rhodz_cum 231 ! OUT : rhodz, old_rhodz, eta 232 SEQUENCE_C1 233 PROLOGUE('1') 234 rhodz_cum(CELL)=0. 235 cur_lev(HIDX(CELL))=1 236 eta(CELL)=0. 237 new_rhodz_cum(HIDX(CELL))=0. 238 END_BLOCK 239 BODY('1,llm') 240 rhodz_cum(UP(CELL)) = rhodz_cum(CELL) + rhodz(CELL) 241 END_BLOCK 242 EPILOGUE('llm+1') 243 mass_col(HIDX(CELL)) = rhodz_cum(CELL) 244 END_BLOCK 245 246 BODY('1,llm') 247 old_rhodz(CELL) = rhodz(CELL) 248 rhodz(CELL) = mass_dak(CELL) + mass_col(HIDX(CELL))*mass_dbk(CELL) 249 rhodz_cum_target = new_rhodz_cum(HIDX(CELL)) + rhodz(CELL) 250 DO level = cur_lev(HIDX(CELL)), llm 251 rhodz_cum_levp1 = rhodz_cum(AT_LEVEL(CELL,level+1)) 252 IF(rhodz_cum_target<=rhodz_cum_levp1) EXIT 253 END DO 254 rhodz_cum_lev = rhodz_cum(AT_LEVEL(CELL,level)) 255 ! now rhodz_cum_lev <= rhodz_cum_target <= rhodz_cum_levp1 256 cur_lev(HIDX(CELL)) = level 257 new_rhodz_cum(HIDX(CELL)) = rhodz_cum_target 258 eta(UP(CELL)) = level + (rhodz_cum_target-rhodz_cum_lev)/(rhodz_cum_levp1-rhodz_cum_lev) 259 END_BLOCK 260 END_BLOCK 261 END_BLOCK 262 263 KERNEL(remap_theta) 264 ! IN : thetarhodz, eta 265 ! TMP : thetarhodz_cum, new_thetarhodz_cum 266 ! OUT : thetarhodz 267 SEQUENCE_C1 268 PROLOGUE('1') 269 thetarhodz_cum(CELL)=0. 270 END_BLOCK 271 BODY('1,llm') 272 thetarhodz_cum(UP(CELL)) = thetarhodz_cum(CELL) + thetarhodz(CELL) 273 END_BLOCK 274 275 BODY('1,llm+1') 276 X = eta(CELL) 277 level = FLOOR(X) 278 X = X-level 279 new_thetarhodz_cum(CELL) = thetarhodz_cum(AT_LEVEL(CELL,level))+X*thetarhodz(AT_LEVEL(CELL,level)) 280 END_BLOCK 281 BODY('1,llm') 282 thetarhodz(CELL)) = new_thetarhodz_cum(UP(CELL)) - new_thetarhodz_cum(CELL) 283 END_BLOCK 284 END_BLOCK 285 END_BLOCK 286 287 KERNEL(remap_u) 288 ! IN : u, old_rhodz, rhodz, eta 289 ! TMP : urhodz_cum, new_urhodz_cum 290 ! OUT : u 291 SEQUENCE_E0 292 PROLOGUE('1') 293 urhodz_cum(EDGE)=0. 294 END_BLOCK 295 BODY('1,llm') 296 urhodz(EDGE) = u(EDGE)*(old_rhodz(CELL1)+old_rhodz(CELL2)) 297 urhodz_cum(UP(EDGE)) = urhodz_cum(EDGE) + urhodz(EDGE) 298 END_BLOCK 299 300 BODY('1,llm+1') 301 X = .5*(eta(CELL1)+eta(CELL2)) 302 level = FLOOR(X) 303 X = X-level 304 new_urhodz_cum(EDGE) = urhodz_cum(AT_LEVEL(EDGE,level))+X*urhodz(AT_LEVEL(EDGE,level)) 305 END_BLOCK 306 BODY('1,llm') 307 u(EDGE) = (new_urhodz_cum(UP(EDGE)) - new_urhodz_cum(EDGE)) / (rhodz(CELL1)+rhodz(CELL2)) 308 END_BLOCK 309 END_BLOCK 310 END_BLOCK
Note: See TracChangeset
for help on using the changeset viewer.