Changeset 590
- Timestamp:
- 10/16/17 20:45:02 (7 years ago)
- Location:
- codes/icosagcm/devel/src
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/devel/src/diagnostics/diagflux.f90
r587 r590 20 20 CALL zero_qfluxt 21 21 ELSE 22 STOP ! FIXME23 22 CALL allocate_field(f_qfluxt, field_u,type_real,llm,0, name="qfluxt") 24 23 CALL allocate_field(f_qfluxt_lon, field_t,type_real,llm,0, name="qfluxt_lon") -
codes/icosagcm/devel/src/transport/advect.F90
r583 r590 442 442 443 443 CALL trace_start("compute_advect_horiz") 444 445 #if 1446 447 444 #include "../kernels/advect_horiz.k90" 448 449 #else450 ! evaluate tracer field at point cc using piecewise linear reconstruction451 ! q(cc)= q0 + gradq.(cc-xyz_i) with xi centroid of hexagon452 ! ne*hfluxt>0 iff outgoing453 DO l = ll_begin,ll_end454 455 !DIR$ SIMD456 DO ij=ij_begin_ext,ij_end_ext457 458 IF (ne(ij,right)*hfluxt(ij+u_right,l)>0) THEN459 ed = cc(ij+u_right,l,:) - xyz_i(ij,:)460 ! qe = qi(ij,l)+sum2(gradq3d(ij,l,:),ed)461 qe = qi(ij,l)+gradq3d(ij,l,1)*ed(1)+gradq3d(ij,l,2)*ed(2)+gradq3d(ij,l,3)*ed(3)462 ELSE463 ed = cc(ij+u_right,l,:) - xyz_i(ij+t_right,:)464 ! qe = qi(ij+t_right,l)+sum2(gradq3d(ij+t_right,l,:),ed)465 qe = qi(ij+t_right,l) + gradq3d(ij+t_right,l,1)*ed(1)+gradq3d(ij+t_right,l,2)*ed(2)+gradq3d(ij+t_right,l,3)*ed(3)466 ENDIF467 qflux(ij+u_right,l) = hfluxt(ij+u_right,l)*qe468 469 IF (ne(ij,lup)*hfluxt(ij+u_lup,l)>0) THEN470 ed = cc(ij+u_lup,l,:) - xyz_i(ij,:)471 ! qe = qi(ij,l)+sum2(gradq3d(ij,l,:),ed)472 qe = qi(ij,l) + gradq3d(ij,l,1)*ed(1)+gradq3d(ij,l,2)*ed(2)+gradq3d(ij,l,3)*ed(3)473 ELSE474 ed = cc(ij+u_lup,l,:) - xyz_i(ij+t_lup,:)475 ! qe = qi(ij+t_lup,l)+sum2(gradq3d(ij+t_lup,l,:),ed)476 qe = qi(ij+t_lup,l) + gradq3d(ij+t_lup,l,1)*ed(1)+gradq3d(ij+t_lup,l,2)*ed(2)+gradq3d(ij+t_lup,l,3)*ed(3)477 ENDIF478 qflux(ij+u_lup,l) = hfluxt(ij+u_lup,l)*qe479 480 IF (ne(ij,ldown)*hfluxt(ij+u_ldown,l)>0) THEN481 ed = cc(ij+u_ldown,l,:) - xyz_i(ij,:)482 ! qe = qi(ij,l)+sum2(gradq3d(ij,l,:),ed)483 qe = qi(ij,l) + gradq3d(ij,l,1)*ed(1)+gradq3d(ij,l,2)*ed(2)+gradq3d(ij,l,3)*ed(3)484 ELSE485 ed = cc(ij+u_ldown,l,:) - xyz_i(ij+t_ldown,:)486 ! qe = qi(ij+t_ldown,l)+sum2(gradq3d(ij+t_ldown,l,:),ed)487 qe = qi(ij+t_ldown,l)+gradq3d(ij+t_ldown,l,1)*ed(1)+gradq3d(ij+t_ldown,l,2)*ed(2)+gradq3d(ij+t_ldown,l,3)*ed(3)488 ENDIF489 qflux(ij+u_ldown,l) = hfluxt(ij+u_ldown,l)*qe490 END DO491 END DO492 493 ! update q and, if update_mass, update mass494 DO l = ll_begin,ll_end495 !DIR$ SIMD496 DO ij=ij_begin,ij_end497 ! sign convention as Ringler et al. (2010) eq. 21498 dmass = hfluxt(ij+u_right,l)*ne(ij,right) &499 + hfluxt(ij+u_lup,l) *ne(ij,lup) &500 + hfluxt(ij+u_ldown,l)*ne(ij,ldown) &501 + hfluxt(ij+u_rup,l) *ne(ij,rup) &502 + hfluxt(ij+u_left,l) *ne(ij,left) &503 + hfluxt(ij+u_rdown,l)*ne(ij,rdown)504 505 dq = qflux(ij+u_right,l) *ne(ij,right) &506 + qflux(ij+u_lup,l) *ne(ij,lup) &507 + qflux(ij+u_ldown,l) *ne(ij,ldown) &508 + qflux(ij+u_rup,l) *ne(ij,rup) &509 + qflux(ij+u_left,l) *ne(ij,left) &510 + qflux(ij+u_rdown,l) *ne(ij,rdown)511 512 513 newmass = mass(ij,l) - dmass/Ai(ij)514 qi(ij,l) = (qi(ij,l)*mass(ij,l) - dq/Ai(ij) ) / newmass515 IF(update_mass) mass(ij,l) = newmass516 517 END DO518 END DO519 #endif520 445 CALL trace_end("compute_advect_horiz") 521 446 CONTAINS
Note: See TracChangeset
for help on using the changeset viewer.