Ignore:
Timestamp:
10/17/17 23:11:14 (7 years ago)
Author:
dubos
Message:

devel : finalize diagnostics of tracer fluxes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • codes/icosagcm/devel/src/transport/advect_tracer.f90

    r583 r592  
    5454  END SUBROUTINE init_advect_tracer 
    5555 
    56   SUBROUTINE advect_tracer(diagflux_on, f_hfluxt, f_wfluxt,f_u, f_q,f_rhodz,f_qfluxt) 
    57     USE mpipara 
     56  SUBROUTINE advect_tracer(f_hfluxt, f_wfluxt,f_u, f_q,f_rhodz,& 
     57       frac, f_masst,f_qmasst,f_massfluxt,f_qfluxt) 
     58    USE omp_para 
    5859    USE trace 
    5960    USE write_field_mod 
    6061    USE tracer_mod 
    61     LOGICAL, INTENT(IN) :: diagflux_on 
    6262    TYPE(t_field),POINTER :: f_hfluxt(:)   ! time-integrated horizontal mass flux 
    6363    TYPE(t_field),POINTER :: f_wfluxt(:)   ! time-integrated vertical mass flux 
     
    6565    TYPE(t_field),POINTER :: f_q(:)        ! tracer 
    6666    TYPE(t_field),POINTER :: f_rhodz(:)    ! mass field at beginning of macro time step 
     67    REAL(rstd), INTENT(in):: frac          ! ratio itau_adv/itau_out or 0. if not diagflux_on 
     68    TYPE(t_field),POINTER :: f_masst(:)    ! time-integrated mass 
     69    TYPE(t_field),POINTER :: f_qmasst(:)   ! time-integrated tracer mass 
     70    TYPE(t_field),POINTER :: f_massfluxt(:)! time-integrated horizontal mass flux 
    6771    TYPE(t_field),POINTER :: f_qfluxt(:)   ! time-integrated horizontal tracer flux 
    6872 
    6973    REAL(rstd),POINTER :: q(:,:,:), normal(:,:), tangent(:,:), sqrt_leng(:), gradq3d(:,:,:), cc(:,:,:) 
    70     REAL(rstd),POINTER :: hfluxt(:,:), wfluxt(:,:), qfluxt(:,:,:) 
     74    REAL(rstd),POINTER :: hfluxt(:,:), wfluxt(:,:), masst(:,:), qmasst(:,:,:), massfluxt(:,:), qfluxt(:,:,:) 
    7175    REAL(rstd),POINTER :: rhodz(:,:), u(:,:)  
    7276! temporary shared variable for vlz 
     
    7680    REAL(rstd),POINTER ::  wq(:,:)           ! time-integrated flux of q 
    7781     
    78      INTEGER :: ind,k, nq_last 
     82    INTEGER :: ind,k, nq_last 
    7983    LOGICAL,SAVE :: first=.TRUE. 
    8084!$OMP THREADPRIVATE(first) 
     
    140144    CALL send_message(f_cc,req_cc) 
    141145 
    142  
    143146    ! horizontal transport - split in two to place transfer of gradq3d 
    144147    DO k = 1, nqtot 
     
    153156          sqrt_leng=f_sqrt_leng(ind) 
    154157          CALL compute_gradq3d(q(:,:,k),sqrt_leng,gradq3d,xyz_i,xyz_v) 
    155  
    156158        END DO 
    157159 
     
    159161        CALL wait_message(req_cc) 
    160162        CALL wait_message(req_gradq3d) 
    161  
    162163 
    163164        DO ind=1,ndomain 
     
    171172          qfluxt  = f_qfluxt(ind)  
    172173          gradq3d = f_gradq3d(ind) 
    173           CALL compute_advect_horiz(k==nq_last,diagflux_on, hfluxt,cc,gradq3d, rhodz,q(:,:,k),qfluxt(:,:,k)) 
     174 
     175          IF(frac>0.) THEN ! accumulate mass, mass flux and tracer mass 
     176             qmasst  = f_qmasst(ind)  
     177             qmasst(:,ll_begin:ll_end,k) = qmasst(:,ll_begin:ll_end,k) + & 
     178                  frac*rhodz(:,ll_begin:ll_end)*q(:,ll_begin:ll_end,k) 
     179             IF(k==nq_last) THEN 
     180                masst  = f_masst(ind) 
     181                massfluxt  = f_massfluxt(ind) 
     182                masst(:,ll_begin:ll_end) = masst(:,ll_begin:ll_end)+frac*rhodz(:,ll_begin:ll_end) 
     183                massfluxt(:,ll_begin:ll_end) = massfluxt(:,ll_begin:ll_end)+hfluxt(:,ll_begin:ll_end) 
     184             END IF 
     185          END IF 
     186          CALL compute_advect_horiz(k==nq_last,frac>0., hfluxt,cc,gradq3d, rhodz, q(:,:,k), qfluxt(:,:,k)) 
    174187        END DO 
     188 
    175189      ENDIF 
    176190    END DO  
Note: See TracChangeset for help on using the changeset viewer.