diff --git a/src/MNH/mode_les_diachro.f90 b/src/MNH/mode_les_diachro.f90 index f4adb055463d3b7f0d79b7ca496db93699e72e38..94e4511029d0048b0650a57b086f254e2f2a0b90 100644 --- a/src/MNH/mode_les_diachro.f90 +++ b/src/MNH/mode_les_diachro.f90 @@ -7,6 +7,9 @@ !----------------------------------------------------------------- ! $Source$ $Revision$ ! MASDEV4_7 mode 2006/09/13 10:17:42 +! +! Modifications +! G. TANGUY 19/05/2014 : correctoin DATIME in case of time average !----------------------------------------------------------------- !####################### MODULE MODE_LES_DIACHRO @@ -597,15 +600,18 @@ END SUBROUTINE LES_Z_NORM !------------------------------------------------------------------------------ ! !######################################################## -SUBROUTINE LES_TIME_AVG(PTRAJT,PWORK6,KRESP) +SUBROUTINE LES_TIME_AVG(PTRAJT,PWORK6,KRESP,PDATIME_AVG) !######################################################## ! ! this routine computes time averaging ! USE MODD_LES +USE MODI_ADD_FORECAST_TO_DATE +! IMPLICIT NONE ! REAL, DIMENSION(:,:), POINTER :: PTRAJT ! time +REAL, DIMENSION(:,:), POINTER :: PDATIME_AVG ! date REAL, DIMENSION(:,:,:,:,:,:), POINTER :: PWORK6 ! contains physical field INTEGER, INTENT(OUT) :: KRESP ! return code (0 is OK) !------------------------------------------------------------------------------ @@ -621,6 +627,11 @@ INTEGER :: JP ! process loop counter INTEGER :: JSV ! scalar loop counter INTEGER :: JX ! first spatial or spectral coordinate loop counter INTEGER :: JY ! second spatial or spectral coordinate loop counter +REAL, DIMENSION(16) :: ZDATIME_SAVE ! date +INTEGER :: IYEAR,IMONTH,IDAY +REAL :: ZTIME,ZTIME2 +INTEGER :: JDAY +INTEGER :: JJ !------------------------------------------------------------------------------ ! IF ( XLES_TEMP_MEAN_END==XUNDEF & @@ -636,13 +647,29 @@ IF (IAVG<=0) THEN RETURN END IF ! +ZDATIME_SAVE(:)=PDATIME_AVG(:,1) DEALLOCATE(PTRAJT) +DEALLOCATE(PDATIME_AVG) ! ALLOCATE (PTRAJT(IAVG,1)) +ALLOCATE (PDATIME_AVG(16,IAVG)) ALLOCATE (ZWORK6(SIZE(PWORK6,1),SIZE(PWORK6,2),NLES_K,IAVG,SIZE(PWORK6,5),SIZE(PWORK6,6))) ! ZWORK6(:,:,:,:,:,:) = 0. ! +PDATIME_AVG(1,:)=ZDATIME_SAVE(1) +PDATIME_AVG(2,:)=ZDATIME_SAVE(2) +PDATIME_AVG(3,:)=ZDATIME_SAVE(3) +PDATIME_AVG(4,:)=ZDATIME_SAVE(4) +PDATIME_AVG(5,:)=ZDATIME_SAVE(5) +PDATIME_AVG(6,:)=ZDATIME_SAVE(6) +PDATIME_AVG(7,:)=ZDATIME_SAVE(7) +PDATIME_AVG(8,:)=ZDATIME_SAVE(8) +PDATIME_AVG(9,:)=ZDATIME_SAVE(9) +PDATIME_AVG(10,:)=ZDATIME_SAVE(10) +PDATIME_AVG(11,:)=ZDATIME_SAVE(11) +PDATIME_AVG(12,:)=ZDATIME_SAVE(12) +! DO JAVG=1,IAVG ZLES_TEMP_MEAN_START=XLES_TEMP_MEAN_START + (JAVG-1) * XLES_TEMP_MEAN_STEP ZLES_TEMP_MEAN_END =MIN(XLES_TEMP_MEAN_END, ZLES_TEMP_MEAN_START + XLES_TEMP_MEAN_STEP) @@ -676,8 +703,25 @@ DO JAVG=1,IAVG END DO END DO PTRAJT(JAVG,1)=(ZLES_TEMP_MEAN_START+ZLES_TEMP_MEAN_END)/2. + IYEAR=PDATIME_AVG(5,JAVG) + IMONTH=PDATIME_AVG(6,JAVG) + IDAY=PDATIME_AVG(7,JAVG) + ZTIME=PDATIME_AVG(8,JAVG)+PTRAJT(JAVG,1) + JDAY=NINT(ZTIME/86400.) + IF (JDAY .GT. 0) THEN + DO JJ=1,JDAY + ZTIME2=86400. + CALL ADD_FORECAST_TO_DATE(IYEAR,IMONTH,IDAY,ZTIME2) + ZTIME=ZTIME-ZTIME2 + ENDDO + ENDIF + CALL ADD_FORECAST_TO_DATE(IYEAR,IMONTH,IDAY,ZTIME) + PDATIME_AVG(13,JAVG)=IYEAR + PDATIME_AVG(14,JAVG)=IMONTH + PDATIME_AVG(15,JAVG)=IDAY + PDATIME_AVG(16,JAVG)=ZTIME END DO - +! DEALLOCATE(PWORK6) ALLOCATE(PWORK6(SIZE(ZWORK6,1),SIZE(ZWORK6,2),NLES_K,IAVG,SIZE(ZWORK6,5),SIZE(ZWORK6,6))) PWORK6 = ZWORK6 @@ -713,6 +757,7 @@ 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(:,:), POINTER :: ZTRAJT ! time +REAL, DIMENSION(:,:), POINTER :: ZDATIME ! date ! INTEGER, DIMENSION(1) :: IGRID ! grid indicator CHARACTER(LEN= 10) :: YGROUP ! group title @@ -752,6 +797,7 @@ ALLOCATE (ZTRAJZ(NLES_K,1,1)) ! ALLOCATE(ZWORK6(1,1,NLES_K,NLES_CURRENT_TIMES,1,1)) ALLOCATE(ZTRAJT(NLES_CURRENT_TIMES,1)) +ALLOCATE(ZDATIME(16,NLES_CURRENT_TIMES)) ! IIL = NLES_CURRENT_IINF IIH = NLES_CURRENT_ISUP @@ -772,6 +818,7 @@ YGROUP = HGROUP ! ZWORK6(1,1,:,:,1,1) = ZFIELD (:,:) ZTRAJT(:,:) = XLES_CURRENT_TRAJT(:,:) +ZDATIME(:,:)=XLES_CURRENT_DATIME(:,:) ! !* normalization of vertical dimension ! @@ -783,7 +830,7 @@ END IF !* time average ! IRESP = 0 -IF (GAVG) CALL LES_TIME_AVG(ZTRAJT,ZWORK6,IRESP) +IF (GAVG) CALL LES_TIME_AVG(ZTRAJT,ZWORK6,IRESP,ZDATIME) ! IF (HAVG/=' ') YGROUP=HAVG//'_'//YGROUP YTITLE(1) = YGROUP @@ -792,7 +839,7 @@ YTITLE(1) = YGROUP ! ---------------------- ! IF (IRESP==0 .AND. ANY(ZWORK6/=XUNDEF)) & -CALL WRITE_DIACHRO(CCURRENT_FMDIAC,CLUOUT0,YGROUP,"SSOL",IGRID,XLES_CURRENT_DATIME, ZWORK6, & +CALL WRITE_DIACHRO(CCURRENT_FMDIAC,CLUOUT0,YGROUP,"SSOL",IGRID,ZDATIME, ZWORK6, & ZTRAJT,YTITLE,YUNIT,YCOMMENT,.FALSE.,.FALSE.,.FALSE., & IIL,IIH,IJL,IJH,IKL,IKH, & PTRAJX=ZTRAJX,PTRAJY=ZTRAJY,PTRAJZ=ZTRAJZ ) @@ -806,6 +853,7 @@ DEALLOCATE (ZTRAJY) DEALLOCATE (ZTRAJZ) DEALLOCATE (ZTRAJT) DEALLOCATE (ZWORK6) +DEALLOCATE (ZDATIME) ! !------------------------------------------------------------------------------- END SUBROUTINE LES_DIACHRO @@ -835,6 +883,7 @@ 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(:,:), POINTER :: ZTRAJT ! time +REAL, DIMENSION(:,:), POINTER :: ZDATIME ! date ! INTEGER, DIMENSION(1) :: IGRID ! grid indicator CHARACTER(LEN= 10) :: YGROUP ! group title @@ -873,6 +922,7 @@ ALLOCATE (ZTRAJY(1,1,SIZE(PFIELD,3))) ALLOCATE (ZTRAJZ(NLES_K,1,SIZE(PFIELD,3))) ALLOCATE(ZWORK6(1,1,NLES_K,NLES_CURRENT_TIMES,SIZE(PFIELD,3),1)) ALLOCATE(ZTRAJT(NLES_CURRENT_TIMES,1)) +ALLOCATE(ZDATIME(16,NLES_CURRENT_TIMES)) ! IIL = NLES_CURRENT_IINF IIH = NLES_CURRENT_ISUP @@ -893,6 +943,7 @@ YGROUP = HGROUP ! ZWORK6(1,1,:,:,:,1) = ZFIELD (:,:,:) ZTRAJT(:,:) = XLES_CURRENT_TRAJT(:,:) +ZDATIME(:,:)=XLES_CURRENT_DATIME(:,:) ! IF (GNORM) THEN IF (HUNIT(1:1)/=' ') YUNIT='-' @@ -902,7 +953,7 @@ END IF !* time average ! IRESP = 0 -IF (GAVG) CALL LES_TIME_AVG(ZTRAJT,ZWORK6,IRESP) +IF (GAVG) CALL LES_TIME_AVG(ZTRAJT,ZWORK6,IRESP,ZDATIME) ! IF (HAVG/=' ') YGROUP=HAVG//'_'//YGROUP YTITLE(1) = YGROUP @@ -912,7 +963,7 @@ YTITLE(1) = YGROUP ! ! IF (IRESP==0 .AND. ANY(ZWORK6/=XUNDEF)) & -CALL WRITE_DIACHRO(CCURRENT_FMDIAC,CLUOUT0,YGROUP,"SSOL",IGRID,XLES_CURRENT_DATIME, ZWORK6, & +CALL WRITE_DIACHRO(CCURRENT_FMDIAC,CLUOUT0,YGROUP,"SSOL",IGRID,ZDATIME, ZWORK6, & ZTRAJT,YTITLE,YUNIT,YCOMMENT,.FALSE.,.FALSE.,.FALSE., & IIL,IIH,IJL,IJH,IKL,IKH, & PTRAJX=ZTRAJX,PTRAJY=ZTRAJY,PTRAJZ=ZTRAJZ ) @@ -926,6 +977,7 @@ DEALLOCATE (ZTRAJY) DEALLOCATE (ZTRAJZ) DEALLOCATE (ZTRAJT) DEALLOCATE(ZWORK6) +DEALLOCATE(ZDATIME) ! !------------------------------------------------------------------------------- END SUBROUTINE LES_DIACHRO_SV @@ -956,6 +1008,7 @@ 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(:,:), POINTER :: ZTRAJT ! time +REAL, DIMENSION(:,:), POINTER :: ZDATIME ! date ! INTEGER, DIMENSION(SIZE(PFIELD,3)) :: IGRID ! grid indicator CHARACTER(LEN= 10) :: YGROUP ! group title @@ -994,6 +1047,8 @@ ALLOCATE (ZTRAJY(1,1,1)) ALLOCATE (ZTRAJZ(NLES_K,1,1)) ALLOCATE(ZWORK6(1,1,NLES_K,NLES_CURRENT_TIMES,1,SIZE(PFIELD,3))) ALLOCATE(ZTRAJT(NLES_CURRENT_TIMES,1)) +ALLOCATE(ZDATIME(16,NLES_CURRENT_TIMES)) + ! IIL = NLES_CURRENT_IINF IIH = NLES_CURRENT_ISUP @@ -1015,6 +1070,8 @@ YGROUP = HGROUP ! ZWORK6(1,1,:,:,1,:) = ZFIELD (:,:,:) ZTRAJT(:,:) = XLES_CURRENT_TRAJT(:,:) +ZDATIME(:,:)= XLES_CURRENT_DATIME(:,:) + ! IF (GNORM) THEN IF (HUNIT(1:1)/=' ') YUNIT='-' @@ -1025,7 +1082,7 @@ END IF !* time average ! IRESP = 0 -IF (GAVG) CALL LES_TIME_AVG(ZTRAJT,ZWORK6,IRESP) +IF (GAVG) CALL LES_TIME_AVG(ZTRAJT,ZWORK6,IRESP,ZDATIME) ! IF (HAVG/=' ') YGROUP=HAVG//'_'//YGROUP YTITLE (:) = YGROUP//HTITLE(:) @@ -1035,7 +1092,7 @@ YTITLE (:) = YGROUP//HTITLE(:) ! ---------------------- ! IF (IRESP==0 .AND. ANY(ZWORK6/=XUNDEF)) & -CALL WRITE_DIACHRO(CCURRENT_FMDIAC,CLUOUT0,YGROUP,"SSOL",IGRID,XLES_CURRENT_DATIME, ZWORK6, & +CALL WRITE_DIACHRO(CCURRENT_FMDIAC,CLUOUT0,YGROUP,"SSOL",IGRID,ZDATIME, ZWORK6, & ZTRAJT,YTITLE,YUNIT,YCOMMENT,.FALSE.,.FALSE.,.FALSE., & IIL,IIH,IJL,IJH,IKL,IKH, & PTRAJX=ZTRAJX,PTRAJY=ZTRAJY,PTRAJZ=ZTRAJZ ) @@ -1049,6 +1106,7 @@ DEALLOCATE (ZTRAJY) DEALLOCATE (ZTRAJZ) DEALLOCATE (ZTRAJT) DEALLOCATE(ZWORK6) +DEALLOCATE(ZDATIME) ! !------------------------------------------------------------------------------- END SUBROUTINE LES_DIACHRO_MASKS @@ -1079,6 +1137,7 @@ 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(:,:), POINTER :: ZTRAJT ! time +REAL, DIMENSION(:,:), POINTER :: ZDATIME! date ! INTEGER, DIMENSION(SIZE(PFIELD,3)) :: IGRID ! grid indicator CHARACTER(LEN= 10) :: YGROUP ! group title @@ -1119,6 +1178,7 @@ ALLOCATE (ZTRAJY(1,1,SIZE(PFIELD,4))) ALLOCATE (ZTRAJZ(NLES_K,1,SIZE(PFIELD,4))) ALLOCATE(ZWORK6(1,1,NLES_K,NLES_CURRENT_TIMES,SIZE(PFIELD,4),SIZE(PFIELD,3))) ALLOCATE(ZTRAJT(NLES_CURRENT_TIMES,1)) +ALLOCATE(ZDATIME(16,NLES_CURRENT_TIMES)) ! IIL = NLES_CURRENT_IINF IIH = NLES_CURRENT_ISUP @@ -1144,17 +1204,18 @@ DO JSV=1,SIZE(PFIELD,4) END DO END DO ZTRAJT(:,:) = XLES_CURRENT_TRAJT(:,:) +ZDATIME(:,:)= XLES_CURRENT_DATIME(:,:) ! IF (GNORM) THEN IF (HUNIT(1:1)/=' ') YUNIT='-' CALL LES_Z_NORM(GAVG,ZTRAJZ,ZWORK6) END IF -! +!n ! !* time average ! IRESP = 0 -IF (GAVG) CALL LES_TIME_AVG(ZTRAJT,ZWORK6,IRESP) +IF (GAVG) CALL LES_TIME_AVG(ZTRAJT,ZWORK6,IRESP,ZDATIME) ! IF (HAVG/=' ') YGROUP=HAVG//'_'//YGROUP YTITLE (:) = YGROUP//HTITLE(:) @@ -1164,7 +1225,7 @@ YTITLE (:) = YGROUP//HTITLE(:) ! ! IF (IRESP==0 .AND. ANY(ZWORK6/=XUNDEF)) & -CALL WRITE_DIACHRO(CCURRENT_FMDIAC,CLUOUT0,YGROUP,"SSOL",IGRID,XLES_CURRENT_DATIME, ZWORK6, & +CALL WRITE_DIACHRO(CCURRENT_FMDIAC,CLUOUT0,YGROUP,"SSOL",IGRID,ZDATIME, ZWORK6, & ZTRAJT,YTITLE,YUNIT,YCOMMENT,.FALSE.,.FALSE.,.FALSE., & IIL,IIH,IJL,IJH,IKL,IKH, & PTRAJX=ZTRAJX,PTRAJY=ZTRAJY,PTRAJZ=ZTRAJZ ) @@ -1178,6 +1239,7 @@ DEALLOCATE (ZTRAJY) DEALLOCATE (ZTRAJZ) DEALLOCATE (ZTRAJT) DEALLOCATE(ZWORK6) +DEALLOCATE(ZDATIME) ! !------------------------------------------------------------------------------- END SUBROUTINE LES_DIACHRO_SV_MASKS @@ -1209,6 +1271,7 @@ 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(:,:), POINTER :: ZTRAJT ! time +REAL, DIMENSION(:,:), POINTER :: ZDATIME ! DATE ! INTEGER, DIMENSION(1) :: IGRID ! grid indicator CHARACTER(LEN= 10) :: YGROUP ! group title @@ -1242,6 +1305,7 @@ ALLOCATE (ZTRAJY(1,1,1)) ALLOCATE (ZTRAJZ(1,1,1)) ALLOCATE(ZWORK6(1,1,1,NLES_CURRENT_TIMES,1,1)) ALLOCATE(ZTRAJT(NLES_CURRENT_TIMES,1)) +ALLOCATE(ZDATIME(16,NLES_CURRENT_TIMES)) ! IIL = NLES_CURRENT_IINF IIH = NLES_CURRENT_ISUP @@ -1260,11 +1324,12 @@ YGROUP = HGROUP ! ZWORK6(1,1,1,:,1,1) = PFIELD (:) ZTRAJT(:,:) = XLES_CURRENT_TRAJT(:,:) +ZDATIME(:,:)=XLES_CURRENT_DATIME(:,:) ! !* time average ! IRESP = 0 -IF (GAVG) CALL LES_TIME_AVG(ZTRAJT,ZWORK6,IRESP) +IF (GAVG) CALL LES_TIME_AVG(ZTRAJT,ZWORK6,IRESP,ZDATIME) ! IF (HAVG/=' ') YGROUP=HAVG//'_'//YGROUP YTITLE(1) = HGROUP @@ -1273,7 +1338,7 @@ YTITLE(1) = HGROUP ! ---------------------- ! IF (IRESP==0) & -CALL WRITE_DIACHRO(CCURRENT_FMDIAC,CLUOUT0,YGROUP,"SSOL",IGRID,XLES_CURRENT_DATIME, ZWORK6, & +CALL WRITE_DIACHRO(CCURRENT_FMDIAC,CLUOUT0,YGROUP,"SSOL",IGRID,ZDATIME, ZWORK6, & ZTRAJT,YTITLE,YUNIT,YCOMMENT,.FALSE.,.FALSE.,.FALSE., & IIL,IIH,IJL,IJH,IKL,IKH, & PTRAJX=ZTRAJX,PTRAJY=ZTRAJY,PTRAJZ=ZTRAJZ ) @@ -1287,6 +1352,7 @@ DEALLOCATE (ZTRAJY) DEALLOCATE (ZTRAJZ) DEALLOCATE (ZTRAJT) DEALLOCATE(ZWORK6) +DEALLOCATE(ZDATIME) ! !------------------------------------------------------------------------------- END SUBROUTINE LES_DIACHRO_SURF @@ -1316,7 +1382,7 @@ 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(:,:), POINTER :: ZTRAJT ! time -! +REAL, DIMENSION(:,:), POINTER :: ZDATIME ! date INTEGER, DIMENSION(1) :: IGRID ! grid indicator CHARACTER(LEN= 10) :: YGROUP ! group title CHARACTER(LEN=100), DIMENSION(1) :: YCOMMENT ! comment string @@ -1348,6 +1414,8 @@ ALLOCATE (ZTRAJY(1,1,SIZE(PFIELD,2))) ALLOCATE (ZTRAJZ(1,1,SIZE(PFIELD,2))) ALLOCATE(ZWORK6(1,1,1,NLES_CURRENT_TIMES,SIZE(PFIELD,2),1)) ALLOCATE(ZTRAJT(NLES_CURRENT_TIMES,1)) +ALLOCATE(ZDATIME(16,NLES_CURRENT_TIMES)) + ! IIL = NLES_CURRENT_IINF IIH = NLES_CURRENT_ISUP @@ -1367,12 +1435,13 @@ YGROUP = HGROUP IRESP = 0 ZWORK6(1,1,1,:,:,1) = PFIELD (:,:) ZTRAJT(:,:) = XLES_CURRENT_TRAJT(:,:) +ZDATIME(:,:)=XLES_CURRENT_DATIME(:,:) ! ! !* time average ! -IF (GAVG) CALL LES_TIME_AVG(ZTRAJT,ZWORK6,IRESP) +IF (GAVG) CALL LES_TIME_AVG(ZTRAJT,ZWORK6,IRESP,ZDATIME) ! ! IF (HAVG/=' ') YGROUP=HAVG//'_'//YGROUP @@ -1382,7 +1451,7 @@ YTITLE(1) = HGROUP ! ---------------------- ! IF (IRESP==0) & -CALL WRITE_DIACHRO(CCURRENT_FMDIAC,CLUOUT0,YGROUP,"SSOL",IGRID,XLES_CURRENT_DATIME, ZWORK6, & +CALL WRITE_DIACHRO(CCURRENT_FMDIAC,CLUOUT0,YGROUP,"SSOL",IGRID,ZDATIME, ZWORK6, & ZTRAJT,YTITLE,YUNIT,YCOMMENT,.FALSE.,.FALSE.,.FALSE., & IIL,IIH,IJL,IJH,IKL,IKH, & PTRAJX=ZTRAJX,PTRAJY=ZTRAJY,PTRAJZ=ZTRAJZ ) @@ -1396,6 +1465,7 @@ DEALLOCATE (ZTRAJY) DEALLOCATE (ZTRAJZ) DEALLOCATE (ZTRAJT) DEALLOCATE(ZWORK6) +DEALLOCATE(ZDATIME) ! !------------------------------------------------------------------------------- END SUBROUTINE LES_DIACHRO_SURF_SV @@ -1438,6 +1508,7 @@ INTEGER :: JT ! time counter INTEGER :: JK ! level counter INTEGER :: IRESP ! return code REAL, DIMENSION(:,:),POINTER :: ZTRAJT ! time +REAL, DIMENSION(:,:),POINTER :: ZDATIME ! date ! REAL, DIMENSION(:,:,:,:,:,:), POINTER :: ZWORK6 ! contains physical field @@ -1461,6 +1532,7 @@ IF (GAVG .AND. (XLES_TEMP_MEAN_START==XUNDEF .OR. XLES_TEMP_MEAN_END==XUNDEF)) R ! ALLOCATE(ZWORK6(SIZE(PFIELDX,1),1,NSPECTRA_K,NLES_CURRENT_TIMES,2,1)) ALLOCATE(ZTRAJT(NLES_CURRENT_TIMES,1)) +ALLOCATE(ZDATIME(16,NLES_CURRENT_TIMES)) ! IGRID(:)=1 ! @@ -1487,10 +1559,11 @@ DO JT=1,SIZE(PFIELDX,3) END DO END DO ZTRAJT(:,:) = XLES_CURRENT_TRAJT(:,:) +ZDATIME(:,:)= XLES_CURRENT_DATIME(:,:) !* time average ! IF (GAVG) THEN - CALL LES_TIME_AVG(ZTRAJT,ZWORK6,IRESP) + CALL LES_TIME_AVG(ZTRAJT,ZWORK6,IRESP,ZDATIME) YGROUP = 'T_'//YGROUP END IF ! @@ -1499,18 +1572,20 @@ END IF ! ---------------------- ! IF (IRESP==0) & -CALL WRITE_DIACHRO(CCURRENT_FMDIAC,CLUOUT0,YGROUP,"SPXY",IGRID,XLES_CURRENT_DATIME, ZWORK6, & +CALL WRITE_DIACHRO(CCURRENT_FMDIAC,CLUOUT0,YGROUP,"SPXY",IGRID,ZDATIME, ZWORK6, & ZTRAJT,YTITLE,YUNIT,YCOMMENT,.FALSE.,.FALSE.,.FALSE., & IIL,IIH,IJL,IJH,IKL,IKH ) ! ! DEALLOCATE (ZTRAJT) +DEALLOCATE(ZDATIME) DEALLOCATE(ZWORK6) ! IF (L2D) RETURN ! ALLOCATE(ZWORK6(1,SIZE(PFIELDY,1),NSPECTRA_K,NLES_CURRENT_TIMES,2,1)) ALLOCATE(ZTRAJT(NLES_CURRENT_TIMES,1)) +ALLOCATE(ZDATIME(16,NLES_CURRENT_TIMES)) ! IIL = 1 IIH = 1 @@ -1524,6 +1599,7 @@ DO JT=1,SIZE(PFIELDY,3) END DO END DO ZTRAJT(:,:) = XLES_CURRENT_TRAJT(:,:) +ZDATIME(:,:)= XLES_CURRENT_DATIME(:,:) ! YGROUP = 'CJ_'//HGROUP YTITLE(:) = YGROUP @@ -1534,16 +1610,18 @@ YCOMMENT(:) = " DOMEGAY="//YSTRING//' '//HCOMMENT !* time average ! IF (GAVG) THEN - CALL LES_TIME_AVG(ZTRAJT,ZWORK6,IRESP) + CALL LES_TIME_AVG(ZTRAJT,ZWORK6,IRESP,ZDATIME) YGROUP = 'T_'//YGROUP END IF ! -CALL WRITE_DIACHRO(CCURRENT_FMDIAC,CLUOUT0,YGROUP,"SPXY",IGRID,XLES_CURRENT_DATIME, ZWORK6, & +CALL WRITE_DIACHRO(CCURRENT_FMDIAC,CLUOUT0,YGROUP,"SPXY",IGRID,ZDATIME, ZWORK6, & ZTRAJT,YTITLE,YUNIT,YCOMMENT,.FALSE.,.FALSE.,.FALSE., & IIL,IIH,IJL,IJH,IKL,IKH ) ! DEALLOCATE (ZTRAJT) DEALLOCATE(ZWORK6) +DEALLOCATE(ZDATIME) + ! !------------------------------------------------------------------------------- END SUBROUTINE LES_DIACHRO_2PT @@ -1584,6 +1662,8 @@ INTEGER :: IRESP ! return code ! REAL, DIMENSION(:,:,:,:,:,:), POINTER :: ZWORK6 ! contains physical field REAL, DIMENSION(:,:), POINTER :: ZTRAJT ! time +REAL, DIMENSION(:,:), POINTER :: ZDATIME ! date + ! INTEGER :: IIL, IIH, IJL, IJH, IKL, IKH ! cartesian area relatively to the ! ! entire domain @@ -1610,8 +1690,11 @@ IKH=NSPECTRA_K ! ALLOCATE(ZWORK6(SIZE(PSPECTRAX,1),1,NSPECTRA_K,NLES_CURRENT_TIMES,2,1)) ALLOCATE(ZTRAJT(NLES_CURRENT_TIMES,1)) +ALLOCATE(ZDATIME(16,NLES_CURRENT_TIMES)) + ! ZTRAJT(:,:) = XLES_CURRENT_TRAJT(:,:) +ZDATIME(:,:)= XLES_CURRENT_DATIME(:,:) ! IIL = NLES_CURRENT_IINF IIH = NLES_CURRENT_ISUP @@ -1631,7 +1714,7 @@ WRITE(YSTRING,FMT="(I6.6)") NINT( XLES_CURRENT_DOMEGAX ) YCOMMENT(:) = " DOMEGAX="//YSTRING//' '//HCOMMENT ! ! -CALL WRITE_DIACHRO(CCURRENT_FMDIAC,CLUOUT0,YGROUP,"SPXY",IGRID,XLES_CURRENT_DATIME, ZWORK6, & +CALL WRITE_DIACHRO(CCURRENT_FMDIAC,CLUOUT0,YGROUP,"SPXY",IGRID,ZDATIME, ZWORK6, & ZTRAJT,YTITLE,YUNIT,YCOMMENT,.FALSE.,.FALSE.,.FALSE., & IIL,IIH,IJL,IJH,IKL,IKH ) ! @@ -1639,15 +1722,16 @@ CALL WRITE_DIACHRO(CCURRENT_FMDIAC,CLUOUT0,YGROUP,"SPXY",IGRID,XLES_CURRENT_DATI !* time average ! IRESP=0 -CALL LES_TIME_AVG(ZTRAJT,ZWORK6,IRESP) +CALL LES_TIME_AVG(ZTRAJT,ZWORK6,IRESP,ZDATIME) YGROUP = 'T_'//YGROUP ! IF (IRESP==0) & -CALL WRITE_DIACHRO(CCURRENT_FMDIAC,CLUOUT0,YGROUP,"SPXY",IGRID,XLES_CURRENT_DATIME, ZWORK6, & +CALL WRITE_DIACHRO(CCURRENT_FMDIAC,CLUOUT0,YGROUP,"SPXY",IGRID,ZDATIME, ZWORK6, & ZTRAJT,YTITLE,YUNIT,YCOMMENT,.FALSE.,.FALSE.,.FALSE., & IIL,IIH,IJL,IJH,IKL,IKH ) DEALLOCATE(ZWORK6) DEALLOCATE(ZTRAJT) +DEALLOCATE(ZDATIME) ! !* spectra in Y direction ! @@ -1656,8 +1740,10 @@ IF (L2D) RETURN ! ALLOCATE(ZWORK6(1,SIZE(PSPECTRAY,1),NSPECTRA_K,NLES_CURRENT_TIMES,2,1)) ALLOCATE(ZTRAJT(NLES_CURRENT_TIMES,1)) +ALLOCATE(ZDATIME(16,NLES_CURRENT_TIMES)) ! ZTRAJT(:,:) = XLES_CURRENT_TRAJT(:,:) +ZDATIME(:,:)= XLES_CURRENT_DATIME(:,:) ! IIL = 1 IIH = 1 @@ -1676,23 +1762,24 @@ YTITLE(:) = YGROUP WRITE(YSTRING,FMT="(I6.6)") NINT( XLES_CURRENT_DOMEGAY ) YCOMMENT(:) = " DOMEGAY="//YSTRING//' '//HCOMMENT ! -CALL WRITE_DIACHRO(CCURRENT_FMDIAC,CLUOUT0,YGROUP,"SPXY",IGRID,XLES_CURRENT_DATIME, ZWORK6, & +CALL WRITE_DIACHRO(CCURRENT_FMDIAC,CLUOUT0,YGROUP,"SPXY",IGRID,ZDATIME, ZWORK6, & ZTRAJT,YTITLE,YUNIT,YCOMMENT,.FALSE.,.FALSE.,.FALSE., & IIL,IIH,IJL,IJH,IKL,IKH ) ! ! !* time average ! -CALL LES_TIME_AVG(ZTRAJT,ZWORK6,IRESP) +CALL LES_TIME_AVG(ZTRAJT,ZWORK6,IRESP,ZDATIME) YGROUP = 'T_'//YGROUP ! IF (IRESP==0) & -CALL WRITE_DIACHRO(CCURRENT_FMDIAC,CLUOUT0,YGROUP,"SPXY",IGRID,XLES_CURRENT_DATIME, ZWORK6, & +CALL WRITE_DIACHRO(CCURRENT_FMDIAC,CLUOUT0,YGROUP,"SPXY",IGRID,ZDATIME, ZWORK6, & ZTRAJT,YTITLE,YUNIT,YCOMMENT,.FALSE.,.FALSE.,.FALSE., & IIL,IIH,IJL,IJH,IKL,IKH ) ! DEALLOCATE(ZWORK6) DEALLOCATE(ZTRAJT) +DEALLOCATE(ZDATIME) ! !-------------------------------------------------------------------------------