diff --git a/src/MNH/mode_les_diachro.f90 b/src/MNH/mode_les_diachro.f90 index 815f3f0732e6616ad9108e8f8669cdfc070dda77..fcb44dc35e3f7c2701b68ea0a4a9fef31f228fdf 100644 --- a/src/MNH/mode_les_diachro.f90 +++ b/src/MNH/mode_les_diachro.f90 @@ -24,11 +24,9 @@ implicit none private -public :: Les_diachro, Les_diachro_2pt, LES_DIACHRO_MASKS, Les_diachro_spec, & - LES_DIACHRO_SURF, LES_DIACHRO_SURF_SV, LES_DIACHRO_SV, LES_DIACHRO_SV_MASKS +public :: Les_diachro, Les_diachro_2pt, Les_diachro_spec interface Les_diachro - module procedure LES_DIACHRO_old module procedure Les_diachro_1D, Les_diachro_2D, Les_diachro_3D, Les_diachro_4D end interface @@ -653,186 +651,6 @@ end if end function Les_time_avg_1pt -!######################################################## -subroutine Les_diachro_gen(tpdiafile, hgroup, hcomment, hunit, pfield, havg, htitle, osurf, osv ) -!######################################################## - -use modd_field, only: NMNHDIM_UNKNOWN, tfield_metadata_base, TYPEREAL -use modd_io, only: tfiledata -use modd_les, only: nles_current_iinf, nles_current_isup, nles_current_jinf, nles_current_jsup, nles_current_times, & - nles_k, nles_levels, xles_current_z, xles_temp_mean_start, xles_temp_mean_end -use modd_parameters, only: XUNDEF -use modd_type_date, only: date_time - -use mode_write_diachro, only: Write_diachro - -implicit none -! -!* 0.1 Declarations of arguments -! -type(tfiledata), intent(in) :: tpdiafile ! File to write -character(len=*), intent(in) :: hgroup ! Group title -character(len=*), dimension(:), intent(in) :: hcomment ! Comment string -character(len=*), intent(in) :: hunit ! Physical unit -real, dimension(:,:,:,:), intent(in) :: pfield ! Data array -character(len=1), intent(in) :: havg ! Flag to compute avg. -character(len=*), dimension(:), optional, intent(in) :: htitle ! Title -logical, optional, intent(in) :: osurf ! Flag to know if pfield is a surface variable -logical, optional, intent(in) :: osv ! Flag for scalar variables -! -!* 0.2 Declaration of local variables for diachro -! -character(len=10) :: ygroup ! Group title -character(len=100), dimension(:), allocatable :: ycomment ! Comment string -character(len=100), dimension(:), allocatable :: ytitle ! Title -character(len=100), dimension(:), allocatable :: yunit ! Physical unit -integer :: iresp ! Return code -integer :: iles_k ! Number of vertical levels -integer :: iil, iih, ijl, ijh, ikl, ikh ! Cartesian area relatively to the - ! entire domain -integer :: jk ! Vertical loop counter -integer :: jp ! Process loop counter -integer :: jsv ! Scalar loop counter -integer, dimension(:), allocatable :: igrid ! Grid indicator -logical :: gavg ! Flag to compute time averagings -logical :: gnorm ! Flag to compute normalizations -logical :: gsurf ! Flag for surface variables -logical :: gsv ! Flag for scalar variables -real, dimension(:,:,:), allocatable :: ztrajx ! Localization of the temporal -real, dimension(:,:,:), allocatable :: ztrajy ! series in x,y and z. remark: -real, dimension(:,:,:), allocatable :: ztrajz ! x and y are not used for LES -real, dimension(size(pfield,1),size(pfield,2),size(pfield,3),size(pfield,4)) & - :: zfield ! Normalized field -real, dimension(:,:,:,:,:,:), allocatable :: zwork6 ! Contains physical field -type(date_time), dimension(:), allocatable :: tzdates -type(tfield_metadata_base), dimension(:), allocatable :: tzfields -!------------------------------------------------------------------------------ - -if ( present( osurf ) .and. present ( htitle ) ) then - call Print_msg( NVERB_ERROR, 'BUD', 'LES_DIACHRO_gen', & - 'unexpected: osurf and htitle simultaneously present (not yet validated)' ) -end if - -if ( present( osurf ) ) then - gsurf = osurf -else - gsurf = .false. -end if - -if ( present( osv ) ) then - gsv = osv -else - gsv = .false. -end if - -if ( gsurf ) then - iles_k = 1 -else - iles_k = nles_k -end if - -gavg = ( havg == 'A' .or. havg == 'H' ) -gnorm = ( havg == 'E' .or. havg == 'H' ) - -if ( gavg .and. ( xles_temp_mean_start == XUNDEF .or. xles_temp_mean_end == XUNDEF ) ) return - -if ( gnorm ) then - if ( gsurf) then - return - else - call Les_norm_4d( hunit, pfield, zfield, gsv ) - end if -else - zfield(:, :, :, :) = pfield(:, :, :, :) -end if - -! Initialization of diachro variables for les (z,t) profiles -allocate( ztrajx( 1, 1, size( pfield, 4 ) ) ) -allocate( ztrajy( 1, 1, size( pfield, 4 ) ) ) -allocate( ztrajz( iles_k, 1, size( pfield, 4 ) ) ) -allocate( zwork6( 1, 1, iles_k, nles_current_times, size( pfield, 4 ), size( pfield, 3 ) ) ) -allocate( igrid ( size( pfield, 3 ) ) ) -allocate( ycomment( size( pfield, 3 ) ) ) -allocate( ytitle ( size( pfield, 3 ) ) ) -allocate( yunit ( size( pfield, 3 ) ) ) -allocate( tzdates( nles_current_times ) ) - -iil = nles_current_iinf -iih = nles_current_isup -ijl = nles_current_jinf -ijh = nles_current_jsup -ikl = nles_levels(1) -ikh = nles_levels(iles_k) - -ztrajx(:, :, :) = ( iil + iih ) / 2 -ztrajy(:, :, :) = ( ijl + ijh ) / 2 -do jk = 1, iles_k - ztrajz(jk, :, :) = xles_current_z(jk) -end do - -igrid(:) = 1 -ycomment(:) = hcomment(:) -yunit(:) = hunit(:) -ygroup = hgroup - -tzdates(:) = xles_dates(:) - -! Normalization of vertical dimension -if ( gnorm ) then - if ( hunit(1:1) /= ' ') yunit = '1' - call Les_z_norm( gavg, ztrajz, zfield(:,:,:,:) ) -end if - -do jsv = 1, size( pfield, 4 ) - do jp = 1, size( pfield, 3 ) - zwork6(1, 1, :, :, jsv, jp) = zfield (:, :, jp, jsv) - end do -end do - -! Time average -iresp = 0 -if ( gavg ) call Les_time_avg( zwork6, tzdates, iresp ) - -if ( havg /= ' ' ) ygroup = havg // '_' // ygroup -if ( present( htitle ) ) then - ytitle(:) = ygroup // htitle(:) -else - if ( gsurf ) then - ytitle(:) = hgroup - else - ytitle(:) = ygroup - end if -end if - -! Write the profile -if ( iresp==0 .and. ( gsurf .or. any( zwork6 /= XUNDEF ) ) ) then - allocate( tzfields( Size( pfield, 3 ) ) ) - - tzfields(:)%cmnhname = ytitle(:) - tzfields(:)%cstdname = '' - tzfields(:)%clongname = ytitle(:) - tzfields(:)%cunits = yunit(:) - tzfields(:)%ccomment = ycomment(:) - tzfields(:)%ngrid = igrid - tzfields(:)%ntype = TYPEREAL - tzfields(:)%ndims = 6 - do jp = 1, Size( tzfields ) - tzfields(jp)%ndimlist(:) = NMNHDIM_UNKNOWN - end do - - call Write_diachro( tpdiafile, tzfields, ygroup, "SSOL", tzdates, & - zwork6, & - oicp = .false., ojcp = .false., okcp = .false., & - kil = iil, kih = iih, kjl = ijl, kjh = ijh, kkl = ikl, kkh = ikh, & - ptrajx = ztrajx, ptrajy = ztrajy, ptrajz = ztrajz ) - - deallocate( tzfields ) -end if - -!------------------------------------------------------------------------------- -end subroutine Les_diachro_gen -!------------------------------------------------------------------------------ - !####################################################################### subroutine Les_diachro_1D( tpdiafile, tpfield, odoavg, odonorm, pfield ) !####################################################################### @@ -1220,142 +1038,6 @@ end subroutine Les_diachro_common_intern end subroutine Les_diachro_common !------------------------------------------------------------------------------ -!######################################################## -SUBROUTINE LES_DIACHRO_old(TPDIAFILE,HGROUP,HCOMMENT,HUNIT,PFIELD,HAVG) -!######################################################## - -IMPLICIT NONE -! -!* 0.1 declarations of arguments -! -TYPE(TFILEDATA), INTENT(IN) :: TPDIAFILE! file to write -CHARACTER(LEN=*), INTENT(IN) :: HGROUP ! group title -CHARACTER(LEN=*), INTENT(IN) :: HCOMMENT ! comment string -CHARACTER(LEN=*), INTENT(IN) :: HUNIT ! physical unit -REAL, DIMENSION(:,:), INTENT(IN) :: PFIELD -CHARACTER(LEN=1), INTENT(IN) :: HAVG ! flag to compute avg. - -call Les_diachro_gen( tpdiafile, hgroup, [ hcomment ], hunit, & - reshape( pfield, [ size( pfield, 1), size( pfield, 2), 1, 1 ] ), havg ) - -!------------------------------------------------------------------------------- -END SUBROUTINE LES_DIACHRO_old -!------------------------------------------------------------------------------- - -!########################################################### -SUBROUTINE LES_DIACHRO_SV(TPDIAFILE,HGROUP,HCOMMENT,HUNIT,PFIELD,HAVG) -!########################################################### - -IMPLICIT NONE -! -!* 0.1 declarations of arguments -! -TYPE(TFILEDATA), INTENT(IN) :: TPDIAFILE! file to write -CHARACTER(LEN=*), INTENT(IN) :: HGROUP ! group title -CHARACTER(LEN=*), INTENT(IN) :: HCOMMENT ! comment string -CHARACTER(LEN=*), INTENT(IN) :: HUNIT ! physical unit -REAL, DIMENSION(:,:,:), INTENT(IN) :: PFIELD -CHARACTER(LEN=1), INTENT(IN) :: HAVG ! flag to compute avg. - -call Les_diachro_gen( tpdiafile, hgroup, [ hcomment ], hunit, & - reshape( pfield, [ size( pfield, 1 ), size( pfield, 2 ), 1, size( pfield, 3 ) ] ), & - havg, osv = .true. ) - -!------------------------------------------------------------------------------- -END SUBROUTINE LES_DIACHRO_SV -!------------------------------------------------------------------------------- - -!##################################################################### -SUBROUTINE LES_DIACHRO_MASKS(TPDIAFILE,HGROUP,HTITLE,HCOMMENT,HUNIT,PFIELD,HAVG) -!##################################################################### - -IMPLICIT NONE -! -!* 0.1 declarations of arguments -! -TYPE(TFILEDATA), INTENT(IN) :: TPDIAFILE! file to write -CHARACTER(LEN=*), INTENT(IN) :: HGROUP ! group title -CHARACTER(LEN=*), DIMENSION(:), INTENT(IN) :: HTITLE ! title -CHARACTER(LEN=*), DIMENSION(:), INTENT(IN) :: HCOMMENT ! comment string -CHARACTER(LEN=*), INTENT(IN) :: HUNIT ! physical unit -REAL, DIMENSION(:,:,:), INTENT(IN) :: PFIELD -CHARACTER(LEN=1), INTENT(IN) :: HAVG ! flag to compute avg. - -call Les_diachro_gen( tpdiafile, hgroup, hcomment, hunit, & - reshape( pfield, [ size( pfield, 1 ), size( pfield, 2 ), size( pfield, 3 ), 1 ] ), & - havg, htitle = htitle ) - -!------------------------------------------------------------------------------- -END SUBROUTINE LES_DIACHRO_MASKS -!------------------------------------------------------------------------------- - -!######################################################################## -SUBROUTINE LES_DIACHRO_SV_MASKS(TPDIAFILE,HGROUP,HTITLE,HCOMMENT,HUNIT,PFIELD,HAVG) -!######################################################################## - -IMPLICIT NONE -! -!* 0.1 declarations of arguments -! -TYPE(TFILEDATA), INTENT(IN) :: TPDIAFILE! file to write -CHARACTER(LEN=*), INTENT(IN) :: HGROUP ! group title -CHARACTER(LEN=*), DIMENSION(:), INTENT(IN) :: HTITLE ! title -CHARACTER(LEN=*), DIMENSION(:), INTENT(IN) :: HCOMMENT ! comment string -CHARACTER(LEN=*), INTENT(IN) :: HUNIT ! physical unit -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PFIELD -CHARACTER(LEN=1), INTENT(IN) :: HAVG ! flag to compute avg. - -call Les_diachro_gen( tpdiafile, hgroup, hcomment, hunit, pfield, & - havg, htitle = htitle, osv = .true.) - -!------------------------------------------------------------------------------- -END SUBROUTINE LES_DIACHRO_SV_MASKS -!------------------------------------------------------------------------------- - -!############################################################# -SUBROUTINE LES_DIACHRO_SURF(TPDIAFILE,HGROUP,HCOMMENT,HUNIT,PFIELD,HAVG) -!############################################################# - -IMPLICIT NONE -! -!* 0.1 declarations of arguments -! -TYPE(TFILEDATA), INTENT(IN) :: TPDIAFILE! file to write -CHARACTER(LEN=*), INTENT(IN) :: HGROUP ! group title -CHARACTER(LEN=*), INTENT(IN) :: HCOMMENT ! comment string -CHARACTER(LEN=*), INTENT(IN) :: HUNIT ! physical unit -REAL, DIMENSION(:), INTENT(IN) :: PFIELD -CHARACTER(LEN=1), INTENT(IN) :: HAVG ! flag to compute avg. - -call Les_diachro_gen( tpdiafile, hgroup, [ hcomment ], hunit, & - reshape( pfield, [ 1, size( pfield, 1 ), 1, 1 ] ), havg, osurf = .true. ) - -!------------------------------------------------------------------------------- -END SUBROUTINE LES_DIACHRO_SURF -!------------------------------------------------------------------------------- -!################################################################ -SUBROUTINE LES_DIACHRO_SURF_SV(TPDIAFILE,HGROUP,HCOMMENT,HUNIT,PFIELD,HAVG) -!################################################################ - -IMPLICIT NONE -! -!* 0.1 declarations of arguments -! -TYPE(TFILEDATA), INTENT(IN) :: TPDIAFILE! file to write -CHARACTER(LEN=*), INTENT(IN) :: HGROUP ! group title -CHARACTER(LEN=*), INTENT(IN) :: HCOMMENT ! comment string -CHARACTER(LEN=*), INTENT(IN) :: HUNIT ! physical unit -REAL, DIMENSION(:,:), INTENT(IN) :: PFIELD -CHARACTER(LEN=1), INTENT(IN) :: HAVG ! flag to compute avg. - -call Les_diachro_gen( tpdiafile, hgroup, [ hcomment ], hunit, & - reshape( pfield, [ 1, size( pfield, 1 ), 1, size( pfield, 2 ) ] ), & - havg, osurf = .true., osv = .true. ) - -!------------------------------------------------------------------------------- -END SUBROUTINE LES_DIACHRO_SURF_SV -!------------------------------------------------------------------------------- - !############################################################################ subroutine Les_diachro_2pt( tpdiafile, tpfieldx, tpfieldy, pfieldx, pfieldy ) !############################################################################