Changeset 583


Ignore:
Timestamp:
10/13/17 21:21:27 (7 years ago)
Author:
dubos
Message:

devel : accumulate tracer fluxes over time for diagnostics

Location:
codes/icosagcm/devel/src
Files:
1 added
4 edited

Legend:

Unmodified
Added
Removed
  • codes/icosagcm/devel/src/icosa_init.f90

    r533 r583  
    11MODULE icosa_init_mod 
    2  
    3  
    42 
    53CONTAINS 
     
    2220  USE restart_mod 
    2321  USE etat0_mod 
     22  USE diagflux_mod 
    2423  IMPLICIT NONE 
    2524   
     
    5554    CALL init_timeloop 
    5655    CALL init_physics 
    57     
     56 
     57    CALL init_diagflux 
    5858    CALL timeloop 
    5959    CALL switch_omp_no_distrib_level 
  • codes/icosagcm/devel/src/kernels/advect_horiz.k90

    r582 r583  
    1919         END IF 
    2020         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) 
    2122         IF(ne_lup*hfluxt(ij+u_lup,l)>0.) THEN 
    2223            qe = qi(ij,l) 
     
    3132         END IF 
    3233         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) 
    3335         IF(ne_ldown*hfluxt(ij+u_ldown,l)>0.) THEN 
    3436            qe = qi(ij,l) 
     
    4345         END IF 
    4446         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) 
    4548      END DO 
    4649   END DO 
  • codes/icosagcm/devel/src/transport/advect.F90

    r582 r583  
    425425  ! Horizontal transport (S. Dubey, T. Dubos) 
    426426  ! 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) 
    428428    USE trace 
    429429    USE omp_para 
    430430    IMPLICIT NONE 
    431     LOGICAL, INTENT(IN)       :: update_mass 
     431    LOGICAL, INTENT(IN)       :: update_mass, diagflux_on 
    432432    REAL(rstd), INTENT(IN)    :: gradq3d(iim*jjm,llm,3)  
    433433    REAL(rstd), INTENT(IN)    :: hfluxt(3*iim*jjm,llm) ! mass flux 
     
    435435    REAL(rstd), INTENT(INOUT) :: mass(iim*jjm,llm) 
    436436    REAL(rstd), INTENT(INOUT) :: qi(iim*jjm,llm) 
     437    REAL(rstd), INTENT(INOUT) :: qfluxt(3*iim*jjm,llm) ! time-integrated tracer flux 
    437438 
    438439    REAL(rstd) :: dq,dmass,qe,ed(3), newmass 
  • codes/icosagcm/devel/src/transport/advect_tracer.f90

    r533 r583  
    11MODULE advect_tracer_mod 
    22  USE icosa 
     3  USE advect_mod 
    34  IMPLICIT NONE 
    45  PRIVATE 
     
    2526 
    2627  SUBROUTINE init_advect_tracer 
    27     USE advect_mod 
    2828    USE omp_para 
    2929    REAL(rstd),POINTER :: tangent(:,:) 
     
    5454  END SUBROUTINE init_advect_tracer 
    5555 
    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) 
    5857    USE mpipara 
    5958    USE trace 
    6059    USE write_field_mod 
    6160    USE tracer_mod 
    62     IMPLICIT NONE 
    63      
     61    LOGICAL, INTENT(IN) :: diagflux_on 
    6462    TYPE(t_field),POINTER :: f_hfluxt(:)   ! time-integrated horizontal mass flux 
    6563    TYPE(t_field),POINTER :: f_wfluxt(:)   ! time-integrated vertical mass flux 
     
    6765    TYPE(t_field),POINTER :: f_q(:)        ! tracer 
    6866    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 
    6968 
    7069    REAL(rstd),POINTER :: q(:,:,:), normal(:,:), tangent(:,:), sqrt_leng(:), gradq3d(:,:,:), cc(:,:,:) 
    71     REAL(rstd),POINTER :: hfluxt(:,:), wfluxt(:,:) 
     70    REAL(rstd),POINTER :: hfluxt(:,:), wfluxt(:,:), qfluxt(:,:,:) 
    7271    REAL(rstd),POINTER :: rhodz(:,:), u(:,:)  
    7372! temporary shared variable for vlz 
     
    170169          rhodz   = f_rhodz(ind) 
    171170          hfluxt  = f_hfluxt(ind)  
     171          qfluxt  = f_qfluxt(ind)  
    172172          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)) 
    174174        END DO 
    175175      ENDIF 
     
    214214    USE trace 
    215215    USE omp_para 
    216     IMPLICIT NONE 
    217216    LOGICAL, INTENT(IN)       :: update_mass 
    218217    REAL(rstd), INTENT(IN)    :: fac, wfluxt(iim*jjm,llm+1) ! vertical mass flux 
Note: See TracChangeset for help on using the changeset viewer.