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/diagnostics/diagflux.f90

    r590 r592  
    44  SAVE 
    55   
    6   TYPE(t_field),POINTER :: f_qfluxt(:), f_qfluxt_lon(:), f_qfluxt_lat(:) ! time-integrated flux of scalars and its reconstruction at cell centers 
     6  TYPE(t_field),POINTER :: & 
     7       f_masst(:), f_qmasst(:), & ! time-integrated mass, tracer mass,  
     8       f_massfluxt(:), f_qfluxt(:), & ! mass flux and tracer flux 
     9       f_qfluxt_lon(:), f_qfluxt_lat(:) ! scalar flux reconstructed  cell centers 
    710  LOGICAL :: diagflux_on 
    811  !$OMP THREADPRIVATE(diagflux_on) 
     
    1518    CALL getin("diagflux", diagflux_on) 
    1619    IF(diagflux_on) THEN 
     20       CALL allocate_field(f_masst,  field_t,type_real,llm, name="masst") 
     21       CALL allocate_field(f_qmasst,  field_t,type_real,llm,nqtot, name="qmasst") 
     22       CALL allocate_field(f_massfluxt, field_u,type_real,llm, name="massfluxt") 
    1723       CALL allocate_field(f_qfluxt,  field_u,type_real,llm,nqtot, name="qfluxt") 
    1824       CALL allocate_field(f_qfluxt_lon,  field_t,type_real,llm,nqtot, name="qfluxt_lon") 
     
    2026       CALL zero_qfluxt 
    2127    ELSE 
     28       CALL allocate_field(f_masst,  field_t,type_real,0, name="masst") 
     29       CALL allocate_field(f_qmasst,  field_t,type_real,llm,0, name="qmasst") 
     30       CALL allocate_field(f_massfluxt, field_u,type_real,0, name="massfluxt") 
    2231       CALL allocate_field(f_qfluxt,  field_u,type_real,llm,0, name="qfluxt") 
    2332       CALL allocate_field(f_qfluxt_lon,  field_t,type_real,llm,0, name="qfluxt_lon") 
     
    3039    USE omp_para 
    3140    INTEGER :: ind 
    32     REAL(rstd), POINTER :: qfluxt(:,:,:) 
     41    REAL(rstd), POINTER :: buf2(:,:),buf3(:,:,:) 
    3342    DO ind=1,ndomain 
    3443       IF (.NOT. assigned_domain(ind)) CYCLE 
    3544       CALL swap_dimensions(ind) 
    36        qfluxt=f_qfluxt(ind) 
    37        qfluxt(:,ll_begin:ll_end,:)=0. 
     45       buf2=f_masst(ind) 
     46       buf2(:,ll_begin:ll_end)=0. 
     47       buf2=f_massfluxt(ind) 
     48       buf2(:,ll_begin:ll_end)=0. 
     49       buf3=f_qmasst(ind) 
     50       buf3(:,ll_begin:ll_end,:)=0. 
     51       buf3=f_qfluxt(ind) 
     52       buf3(:,ll_begin:ll_end,:)=0. 
    3853    END DO 
    3954  END SUBROUTINE zero_qfluxt 
    4055 
    41   SUBROUTINE flux_centered_lonlat(scale, f_flux, f_flux_lon, f_flux_lat) 
     56  SUBROUTINE flux_centered_lonlat(scale, f_massflux, f_flux, f_massflux_lon, f_massflux_lat, f_flux_lon, f_flux_lat) 
    4257    REAL(rstd), INTENT(IN) :: scale 
    43     TYPE(t_field),POINTER :: f_flux(:), f_flux_lon(:), f_flux_lat(:) 
    44     REAL(rstd), POINTER :: flux(:,:,:), flux_lon(:,:,:), flux_lat(:,:,:) 
     58    TYPE(t_field),POINTER :: f_flux(:), f_flux_lon(:), f_flux_lat(:), & 
     59         f_massflux(:), f_massflux_lon(:), f_massflux_lat(:) 
     60    REAL(rstd), POINTER :: flux(:,:,:), flux_lon(:,:,:), flux_lat(:,:,:), & 
     61         massflux(:,:), massflux_lon(:,:), massflux_lat(:,:) 
    4562    INTEGER :: ind, itrac 
    4663    DO ind=1,ndomain 
     
    5471          CALL compute_flux_centered_lonlat(scale, flux(:,:,itrac), flux_lon(:,:,itrac), flux_lat(:,:,itrac)) 
    5572       END DO 
     73       massflux=f_massflux(ind) 
     74       massflux_lon=f_massflux_lon(ind) 
     75       massflux_lat=f_massflux_lat(ind) 
     76       CALL compute_flux_centered_lonlat(scale, massflux, massflux_lon, massflux_lat) 
    5677    END DO 
    5778  END SUBROUTINE flux_centered_lonlat 
Note: See TracChangeset for help on using the changeset viewer.