Changeset 603


Ignore:
Timestamp:
10/24/17 01:22:08 (7 years ago)
Author:
dubos
Message:

devel : output theta and momentum fluxes

Location:
codes/icosagcm/devel/src
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • codes/icosagcm/devel/src/diagnostics/diagflux.F90

    r601 r603  
    5454       CALL swap_dimensions(ind) 
    5555       ZERO2(f_masst) 
     56       ZERO2(f_ulont) 
     57       ZERO2(f_thetat) 
    5658       ZERO2(f_epot) 
    5759       ZERO2(f_ekin) 
     
    5961       ZERO3(f_qmasst) 
    6062       ZERO2(f_massfluxt) 
     63       ZERO2(f_ulonfluxt) 
     64       ZERO2(f_thetafluxt) 
    6165       ZERO2(f_epotfluxt) 
    6266       ZERO2(f_ekinfluxt) 
     
    165169    ! even if loops are of the _ext variant, we still need halo exchanges before reconstructing fluxes at cell centers 
    166170    ! => loop over interior region 
    167     CALL distrib_level(ij_end-ij_begin+1,ij_omp_begin_ext,ij_omp_end_ext) 
    168     ij_omp_begin_ext = ij_omp_begin_ext+ij_begin-1 
    169     ij_omp_end_ext = ij_omp_end_ext+ij_begin-1 
     171    CALL distrib_level(ij_begin_ext, ij_end_ext, ij_omp_begin_ext,ij_omp_end_ext) 
    170172#include "../kernels/energy_fluxes.k90" 
    171173  END SUBROUTINE compute_diagflux_energy 
  • codes/icosagcm/devel/src/diagnostics/observable.f90

    r600 r603  
    11MODULE observable_mod 
    22  USE icosa 
     3  USE diagflux_mod 
     4  USE output_field_mod 
    35  IMPLICIT NONE 
    46  PRIVATE 
     
    3537    USE disvert_mod 
    3638    USE wind_mod 
    37     USE output_field_mod 
    3839    USE omp_para 
    3940    USE time_mod 
     
    4445    USE theta2theta_rhodz_mod 
    4546    USE omega_mod 
    46     USE diagflux_mod 
    4747    LOGICAL, INTENT(IN) :: init 
    4848    INTEGER :: l 
     
    163163          CALL output_field("massflux_lat",f_buf_ulat) 
    164164 
    165           CALL transfert_request(f_epotfluxt,req_e1_vect)  
    166           CALL flux_centered_lonlat(1./(itau_out*dt) , f_epotfluxt, f_buf_ulon, f_buf_ulat) 
    167           CALL output_field("epot_t", f_epot) 
    168           CALL output_field("epotflux_lon",f_buf_ulon) 
    169           CALL output_field("epotflux_lat",f_buf_ulat) 
    170  
    171           CALL transfert_request(f_ekinfluxt,req_e1_vect)  
    172           CALL flux_centered_lonlat(1./(itau_out*dt) , f_ekinfluxt, f_buf_ulon, f_buf_ulat) 
    173           CALL output_field("ekin_t", f_ekin) 
    174           CALL output_field("ekinflux_lon",f_buf_ulon) 
    175           CALL output_field("ekinflux_lat",f_buf_ulat) 
    176  
    177           CALL transfert_request(f_enthalpyfluxt,req_e1_vect)  
    178           CALL flux_centered_lonlat(1./(itau_out*dt) , f_enthalpyfluxt, f_buf_ulon, f_buf_ulat) 
    179           CALL output_field("enthalpy_t", f_enthalpy) 
    180           CALL output_field("enthalpyflux_lon",f_buf_ulon) 
    181           CALL output_field("enthalpyflux_lat",f_buf_ulat) 
     165          CALL output_energyflux(f_ulont, f_ulonfluxt, "ulon_t", "ulonflux_lon", "ulonflux_lat") 
     166          CALL output_energyflux(f_thetat, f_thetafluxt, "theta_t", "thetaflux_lon", "thetaflux_lat") 
     167          CALL output_energyflux(f_epot, f_epotfluxt, "epot_t", "epotflux_lon", "epotflux_lat") 
     168          CALL output_energyflux(f_ekin, f_ekinfluxt, "ekin_t", "ekinflux_lon", "ekinflux_lat") 
     169          CALL output_energyflux(f_enthalpy, f_enthalpyfluxt, "enthalpy_t", "enthalpyflux_lon", "enthalpyflux_lat") 
    182170 
    183171          CALL qflux_centered_lonlat(1./(itau_out*dt) , f_qfluxt, f_qfluxt_lon, f_qfluxt_lat) 
     
    189177    END IF 
    190178  END SUBROUTINE write_output_fields_basic 
     179 
     180  SUBROUTINE output_energyflux(f_energy, f_flux, name_energy, name_fluxlon, name_fluxlat) 
     181    TYPE(t_field), POINTER :: f_energy(:), f_flux(:) 
     182    CHARACTER(*), INTENT(IN) :: name_energy, name_fluxlon, name_fluxlat 
     183    CALL transfert_request(f_flux,req_e1_vect) 
     184    CALL flux_centered_lonlat(1./(itau_out*dt) , f_flux, f_buf_ulon, f_buf_ulat) 
     185    CALL output_field(name_energy,  f_energy) 
     186    CALL output_field(name_fluxlon, f_buf_ulon) 
     187    CALL output_field(name_fluxlat, f_buf_ulat) 
     188  END SUBROUTINE output_energyflux 
    191189   
    192190 !------------------- Conversion from prognostic to observable variables ------------------ 
  • codes/icosagcm/devel/src/dynamics/caldyn_kernels_base.F90

    r573 r603  
    4343!$OMP BARRIER 
    4444 
    45     CALL distrib_level(ij_end_ext-ij_begin_ext+1,ij_omp_begin_ext,ij_omp_end_ext) 
    46     ij_omp_begin_ext=ij_omp_begin_ext+ij_begin_ext-1 
    47     ij_omp_end_ext=ij_omp_end_ext+ij_begin_ext-1 
     45    CALL distrib_level(ij_begin_ext,ij_end_ext, ij_omp_begin_ext,ij_omp_end_ext) 
    4846 
    4947    Rd = kappa*cpp 
     
    190188    CALL trace_start("compute_caldyn_vert") 
    191189 
    192     CALL distrib_level(ij_end-ij_begin+1,ij_omp_begin,ij_omp_end) 
    193     ij_omp_begin=ij_omp_begin+ij_begin-1 
    194     ij_omp_end=ij_omp_end+ij_begin-1 
     190    CALL distrib_level(ij_begin,ij_end, ij_omp_begin,ij_omp_end) 
    195191 
    196192    !    REAL(rstd) :: wwuu(iim*3*jjm,llm+1) ! tmp var, don't know why but gain 30% on the whole code in opemp 
  • codes/icosagcm/devel/src/dynamics/caldyn_kernels_hevi.F90

    r573 r603  
    122122    INTEGER    :: iter, ij, l, ij_omp_begin_ext, ij_omp_end_ext 
    123123 
    124     CALL distrib_level(ij_end_ext-ij_begin_ext+1,ij_omp_begin_ext,ij_omp_end_ext) 
    125     ij_omp_begin_ext=ij_omp_begin_ext+ij_begin_ext-1 
    126     ij_omp_end_ext=ij_omp_end_ext+ij_begin_ext-1 
     124    CALL distrib_level(ij_begin_ext,ij_end_ext, ij_omp_begin_ext,ij_omp_end_ext) 
    127125 
    128126    IF(dysl) THEN 
  • codes/icosagcm/devel/src/parallel/omp_para.F90

    r533 r603  
    204204  END SUBROUTINE init_omp_para 
    205205 
    206   SUBROUTINE distrib_level(size,lbegin,lend) 
    207   IMPLICIT NONE 
    208     INTEGER,INTENT(IN)  :: size   
     206  SUBROUTINE distrib_level(ibegin,iend, lbegin,lend) 
     207  IMPLICIT NONE 
     208    INTEGER,INTENT(IN)  :: ibegin,iend   
    209209    INTEGER,INTENT(OUT) :: lbegin   
    210210    INTEGER,INTENT(OUT) :: lend   
    211     INTEGER :: div,rest 
    212      
     211    INTEGER :: size,div,rest 
     212    size=iend-ibegin+1 
    213213    div=size/omp_level_size 
    214214    rest=MOD(size,omp_level_size) 
    215215    IF (omp_level_rank<rest) THEN 
    216       lbegin=(div+1)*omp_level_rank+1 
     216      lbegin=(div+1)*omp_level_rank + ibegin 
    217217      lend=lbegin+div 
    218218    ELSE 
    219       lbegin=(div+1)*rest + (omp_level_rank-rest)*div+1 
     219      lbegin=(div+1)*rest + (omp_level_rank-rest)*div + ibegin 
    220220      lend=lbegin+div-1 
    221221    ENDIF 
  • codes/icosagcm/devel/src/parallel/transfert_mpi.f90

    r533 r603  
    12371237 
    12381238          dim3=size(field(ind)%rval3d,2) 
    1239           CALL distrib_level(dim3,lbegin,lend) 
     1239          CALL distrib_level(1,dim3, lbegin,lend) 
    12401240 
    12411241          rval3d=>field(ind)%rval3d 
     
    12951295          IF (.NOT. assigned_domain(ind) ) CYCLE 
    12961296          dim3=size(field(ind)%rval3d,2) 
    1297           CALL distrib_level(dim3,lbegin,lend) 
     1297          CALL distrib_level(1,dim3, lbegin,lend) 
    12981298          rval3d=>field(ind)%rval3d 
    12991299          req=>message%request(ind) 
     
    13491349 
    13501350          dim3=size(field(ind)%rval4d,2) 
    1351           CALL distrib_level(dim3,lbegin,lend) 
     1351          CALL distrib_level(1,dim3, lbegin,lend) 
    13521352          dim4=size(field(ind)%rval4d,3) 
    13531353          rval4d=>field(ind)%rval4d 
     
    14111411           
    14121412          dim3=size(field(ind)%rval4d,2) 
    1413           CALL distrib_level(dim3,lbegin,lend) 
     1413          CALL distrib_level(1,dim3, lbegin,lend) 
    14141414          dim4=size(field(ind)%rval4d,3) 
    14151415          rval4d=>field(ind)%rval4d 
     
    15891589              dim3=size(rval3d,2) 
    15901590     
    1591               CALL distrib_level(dim3,lbegin,lend) 
     1591              CALL distrib_level(1,dim3, lbegin,lend) 
    15921592              offset=recv%offset*dim3 + (lbegin-1)*recv%size 
    15931593              CALL trace_start("copy_from_buffer") 
     
    16371637 
    16381638              dim3=size(rval4d,2) 
    1639               CALL distrib_level(dim3,lbegin,lend) 
     1639              CALL distrib_level(1,dim3, lbegin,lend) 
    16401640              dim4=size(rval4d,3) 
    16411641              CALL trace_start("copy_from_buffer") 
Note: See TracChangeset for help on using the changeset viewer.