Changeset 583
- Timestamp:
- 10/13/17 21:21:27 (7 years ago)
- Location:
- codes/icosagcm/devel/src
- Files:
-
- 1 added
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/devel/src/icosa_init.f90
r533 r583 1 1 MODULE icosa_init_mod 2 3 4 2 5 3 CONTAINS … … 22 20 USE restart_mod 23 21 USE etat0_mod 22 USE diagflux_mod 24 23 IMPLICIT NONE 25 24 … … 55 54 CALL init_timeloop 56 55 CALL init_physics 57 56 57 CALL init_diagflux 58 58 CALL timeloop 59 59 CALL switch_omp_no_distrib_level -
codes/icosagcm/devel/src/kernels/advect_horiz.k90
r582 r583 19 19 END IF 20 20 qflux(ij+u_right,l) = hfluxt(ij+u_right,l)*qe 21 IF(diagflux_on) qfluxt(ij+u_right,l) = qfluxt(ij+u_right,l)+qflux(ij+u_right,l) 21 22 IF(ne_lup*hfluxt(ij+u_lup,l)>0.) THEN 22 23 qe = qi(ij,l) … … 31 32 END IF 32 33 qflux(ij+u_lup,l) = hfluxt(ij+u_lup,l)*qe 34 IF(diagflux_on) qfluxt(ij+u_lup,l) = qfluxt(ij+u_lup,l)+qflux(ij+u_lup,l) 33 35 IF(ne_ldown*hfluxt(ij+u_ldown,l)>0.) THEN 34 36 qe = qi(ij,l) … … 43 45 END IF 44 46 qflux(ij+u_ldown,l) = hfluxt(ij+u_ldown,l)*qe 47 IF(diagflux_on) qfluxt(ij+u_ldown,l) = qfluxt(ij+u_ldown,l)+qflux(ij+u_ldown,l) 45 48 END DO 46 49 END DO -
codes/icosagcm/devel/src/transport/advect.F90
r582 r583 425 425 ! Horizontal transport (S. Dubey, T. Dubos) 426 426 ! Slope-limited van Leer approach with hexagons 427 SUBROUTINE compute_advect_horiz(update_mass, hfluxt,cc,gradq3d, mass,qi)427 SUBROUTINE compute_advect_horiz(update_mass,diagflux_on, hfluxt,cc,gradq3d, mass,qi,qfluxt) 428 428 USE trace 429 429 USE omp_para 430 430 IMPLICIT NONE 431 LOGICAL, INTENT(IN) :: update_mass 431 LOGICAL, INTENT(IN) :: update_mass, diagflux_on 432 432 REAL(rstd), INTENT(IN) :: gradq3d(iim*jjm,llm,3) 433 433 REAL(rstd), INTENT(IN) :: hfluxt(3*iim*jjm,llm) ! mass flux … … 435 435 REAL(rstd), INTENT(INOUT) :: mass(iim*jjm,llm) 436 436 REAL(rstd), INTENT(INOUT) :: qi(iim*jjm,llm) 437 REAL(rstd), INTENT(INOUT) :: qfluxt(3*iim*jjm,llm) ! time-integrated tracer flux 437 438 438 439 REAL(rstd) :: dq,dmass,qe,ed(3), newmass -
codes/icosagcm/devel/src/transport/advect_tracer.f90
r533 r583 1 1 MODULE advect_tracer_mod 2 2 USE icosa 3 USE advect_mod 3 4 IMPLICIT NONE 4 5 PRIVATE … … 25 26 26 27 SUBROUTINE init_advect_tracer 27 USE advect_mod28 28 USE omp_para 29 29 REAL(rstd),POINTER :: tangent(:,:) … … 54 54 END SUBROUTINE init_advect_tracer 55 55 56 SUBROUTINE advect_tracer(f_hfluxt, f_wfluxt,f_u, f_q,f_rhodz) 57 USE advect_mod 56 SUBROUTINE advect_tracer(diagflux_on, f_hfluxt, f_wfluxt,f_u, f_q,f_rhodz,f_qfluxt) 58 57 USE mpipara 59 58 USE trace 60 59 USE write_field_mod 61 60 USE tracer_mod 62 IMPLICIT NONE 63 61 LOGICAL, INTENT(IN) :: diagflux_on 64 62 TYPE(t_field),POINTER :: f_hfluxt(:) ! time-integrated horizontal mass flux 65 63 TYPE(t_field),POINTER :: f_wfluxt(:) ! time-integrated vertical mass flux … … 67 65 TYPE(t_field),POINTER :: f_q(:) ! tracer 68 66 TYPE(t_field),POINTER :: f_rhodz(:) ! mass field at beginning of macro time step 67 TYPE(t_field),POINTER :: f_qfluxt(:) ! time-integrated horizontal tracer flux 69 68 70 69 REAL(rstd),POINTER :: q(:,:,:), normal(:,:), tangent(:,:), sqrt_leng(:), gradq3d(:,:,:), cc(:,:,:) 71 REAL(rstd),POINTER :: hfluxt(:,:), wfluxt(:,:) 70 REAL(rstd),POINTER :: hfluxt(:,:), wfluxt(:,:), qfluxt(:,:,:) 72 71 REAL(rstd),POINTER :: rhodz(:,:), u(:,:) 73 72 ! temporary shared variable for vlz … … 170 169 rhodz = f_rhodz(ind) 171 170 hfluxt = f_hfluxt(ind) 171 qfluxt = f_qfluxt(ind) 172 172 gradq3d = f_gradq3d(ind) 173 CALL compute_advect_horiz(k==nq_last, hfluxt,cc,gradq3d, rhodz,q(:,:,k))173 CALL compute_advect_horiz(k==nq_last,diagflux_on, hfluxt,cc,gradq3d, rhodz,q(:,:,k),qfluxt(:,:,k)) 174 174 END DO 175 175 ENDIF … … 214 214 USE trace 215 215 USE omp_para 216 IMPLICIT NONE217 216 LOGICAL, INTENT(IN) :: update_mass 218 217 REAL(rstd), INTENT(IN) :: fac, wfluxt(iim*jjm,llm+1) ! vertical mass flux
Note: See TracChangeset
for help on using the changeset viewer.