From c78d6fb1a3ee08deb28e4b6d38933e34ded1c914 Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Thu, 7 Apr 2022 14:05:37 +0200 Subject: [PATCH] Philippe 07/04/2022: rewrite types for stations --- src/LIB/SURCOUCHE/src/mode_io_tools_nc4.f90 | 4 +- src/LIB/SURCOUCHE/src/mode_io_write_nc4.f90 | 4 +- src/MNH/ini_stationn.f90 | 69 ++--- src/MNH/ini_surfstationn.f90 | 212 +++++++------- src/MNH/modd_stationn.f90 | 29 +- src/MNH/modd_type_station.f90 | 122 ++++---- src/MNH/station_reader.f90 | 71 ++--- src/MNH/stationn.f90 | 206 +++++++------- src/MNH/write_stationn.f90 | 295 ++++++++++---------- 9 files changed, 480 insertions(+), 532 deletions(-) diff --git a/src/LIB/SURCOUCHE/src/mode_io_tools_nc4.f90 b/src/LIB/SURCOUCHE/src/mode_io_tools_nc4.f90 index 22fa1c5db..465f3bf2f 100644 --- a/src/LIB/SURCOUCHE/src/mode_io_tools_nc4.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io_tools_nc4.f90 @@ -282,7 +282,7 @@ use modd_profiler_n, only: numbprofiler, tprofiler use modd_radiations_n, only: nlwb_mnh, nswb_mnh use modd_series, only: lseries use modd_series_n, only: nsnbstept -use modd_station_n, only: numbstat, tstation +use modd_station_n, only: numbstat, tstations_time TYPE(TFILEDATA),INTENT(INOUT) :: TPFILE CHARACTER(LEN=*),OPTIONAL,INTENT(IN) :: HPROGRAM_ORIG !To emulate a file coming from this program @@ -429,7 +429,7 @@ if ( tpfile%ctype == 'MNHDIACHRONIC' ) then !Dimension for the number of station times if ( numbstat > 0 ) then - istation = Nint ( ( xseglen - dyn_model(1)%xtstep ) / tstation%step ) + 1 + istation = Nint ( ( xseglen - dyn_model(1)%xtstep ) / tstations_time%xtstep ) + 1 call IO_Add_dim_nc4( tpfile, NMNHDIM_STATION_TIME, 'time_station', istation ) end if diff --git a/src/LIB/SURCOUCHE/src/mode_io_write_nc4.f90 b/src/LIB/SURCOUCHE/src/mode_io_write_nc4.f90 index ead87ec69..0900e7163 100644 --- a/src/LIB/SURCOUCHE/src/mode_io_write_nc4.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io_write_nc4.f90 @@ -1459,7 +1459,7 @@ use modd_parameters, only: jphext, JPVEXT use modd_profiler_n, only: numbprofiler, tprofiler use modd_series, only: lseries use modd_series_n, only: nsnbstept, tpsdates -use modd_station_n, only: numbstat, tstation +use modd_station_n, only: numbstat, tstations_time use modd_time, only: tdtseg use modd_time_n, only: tdtcur use modd_type_date, only: date_time @@ -1841,7 +1841,7 @@ if ( tpfile%lmaster ) then !Coordinates for the number of station times if ( numbstat > 0 ) & - call Write_time_coord( tpfile%tncdims%tdims(NMNHDIM_STATION_TIME), 'time axis for stations', tstation%tpdates ) + call Write_time_coord( tpfile%tncdims%tdims(NMNHDIM_STATION_TIME), 'time axis for stations', tstations_time%tpdates ) !Dimension for the number of series times if ( lseries .and. nsnbstept > 0 ) then diff --git a/src/MNH/ini_stationn.f90 b/src/MNH/ini_stationn.f90 index 8bfe8866f..8e675165b 100644 --- a/src/MNH/ini_stationn.f90 +++ b/src/MNH/ini_stationn.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 2002-2021 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2002-2022 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. @@ -59,9 +59,9 @@ !! MODIFICATIONS !! ------------- !! Original 15/01/2002 -!! Modification: 02/2021 (E.Jezequel) Read stations from CVS file -!! -!! -------------------------------------------------------------------------- +! E. Jezequel 02/2021: read stations from CVS file +! P. Wautelet 07/04/2022: rewrite types for stations +! -------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ @@ -86,59 +86,40 @@ IMPLICIT NONE INTEGER :: JI ! !---------------------------------------------------------------------------- -! -!* 1. Nameliste -! --------- - IF (CFILE_STAT=="NO_INPUT_CSV") THEN +! +!* 1. Namelist +! -------- NUMBSTAT = NNUMB_STAT IF (NUMBSTAT > 0) THEN - ALLOCATE (TSTATION%LAT(NUMBSTAT)) - ALLOCATE (TSTATION%LON(NUMBSTAT)) - ALLOCATE (TSTATION%X(NUMBSTAT)) - ALLOCATE (TSTATION%Y(NUMBSTAT)) - ALLOCATE (TSTATION%Z(NUMBSTAT)) - ALLOCATE (TSTATION%K(NUMBSTAT)) - ALLOCATE (TSTATION%NAME(NUMBSTAT)) - ALLOCATE (TSTATION%TYPE(NUMBSTAT)) - ! - TSTATION%LON = XUNDEF - TSTATION%LAT = XUNDEF - TSTATION%Z = XUNDEF - TSTATION%K = XUNDEF - TSTATION%X = XUNDEF - TSTATION%Y = XUNDEF - TSTATION%NAME = " " - TSTATION%TYPE = " " - ! - TSTATION%STEP = XSTEP_STAT - ! + ALLOCATE( TSTATIONS(NUMBSTAT) ) + IF (LCARTESIAN) THEN DO JI=1,NUMBSTAT - TSTATION%X(JI)= XX_STAT(JI) - TSTATION%Y(JI)= XY_STAT(JI) - TSTATION%Z(JI)= XZ_STAT(JI) - TSTATION%NAME(JI)= CNAME_STAT(JI) - TSTATION%TYPE(JI)= CTYPE_STAT(JI) + TSTATIONS(JI)%XX = XX_STAT(JI) + TSTATIONS(JI)%XY = XY_STAT(JI) + TSTATIONS(JI)%XZ = XZ_STAT(JI) + TSTATIONS(JI)%CNAME = CNAME_STAT(JI) + TSTATIONS(JI)%CTYPE = CTYPE_STAT(JI) END DO ELSE DO JI=1,NUMBSTAT - TSTATION%LAT(JI)= XLAT_STAT(JI) - TSTATION%LON(JI)= XLON_STAT(JI) - TSTATION%Z(JI)= XZ_STAT(JI) - TSTATION%NAME(JI)= CNAME_STAT(JI) - TSTATION%TYPE(JI)= CTYPE_STAT(JI) + TSTATIONS(JI)%XLAT = XLAT_STAT(JI) + TSTATIONS(JI)%XLON = XLON_STAT(JI) + TSTATIONS(JI)%XZ = XZ_STAT(JI) + TSTATIONS(JI)%CNAME = CNAME_STAT(JI) + TSTATIONS(JI)%CTYPE = CTYPE_STAT(JI) END DO - ENDIF - ENDIF + END IF + END IF ELSE ! !* 2. CSV DATA ! - CALL READ_CSV_STATION(CFILE_STAT,TSTATION,LCARTESIAN) - TSTATION%STEP = XSTEP_STAT -END IF + CALL READ_CSV_STATION( CFILE_STAT, TSTATIONS, LCARTESIAN ) +END IF + +TSTATIONS_TIME%XTSTEP = XSTEP_STAT -! END SUBROUTINE INI_STATION_n diff --git a/src/MNH/ini_surfstationn.f90 b/src/MNH/ini_surfstationn.f90 index 5b79bb289..013c342be 100644 --- a/src/MNH/ini_surfstationn.f90 +++ b/src/MNH/ini_surfstationn.f90 @@ -63,13 +63,14 @@ END MODULE MODI_INI_SURFSTATION_n !! !! MODIFICATIONS !! ------------- -!! P. Tulet 15/01/2002 -!! A. Lemonsu 19/11/2002 +! P. Tulet 15/01/2002 +! A. Lemonsu 19/11/2002 ! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O ! P. Wautelet 13/09/2019: budget: simplify and modernize date/time management ! R. Schoetter 11/2019: work for cartesian coordinates + parallel. ! E.Jezequel 02/2021: read stations from CVS file -!! -------------------------------------------------------------------------- +! P. Wautelet 07/04/2022: rewrite types for stations +! -------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ @@ -80,7 +81,6 @@ USE MODD_DIM_n USE MODD_DYN_n USE MODD_GRID USE MODD_GRID_n -USE MODD_LUNIT_n, ONLY: TLUOUT USE MODD_NESTING USE MODD_PARAMETERS USE MODD_SHADOWS_n @@ -115,23 +115,20 @@ INTEGER, INTENT(IN) :: KMI ! MODEL NUMBER ! 0.2 declaration of local variables ! INTEGER :: ISTORE ! number of storage instants -INTEGER :: ILUOUT ! logical unit INTEGER :: IIU_ll,IJU_ll,IRESP ! !---------------------------------------------------------------------------- -ILUOUT = TLUOUT%NLU -!---------------------------------------------------------------------------- ! !* 1. Default values ! -------------- ! -CALL DEFAULT_STATION_n(TSTATION) +CALL DEFAULT_STATION_n() ! ! !* 3. Stations initialization ! ----------------------- ! -CALL INI_STATION_n +CALL INI_STATION_n() LSTATION = (NUMBSTAT>0) ! !---------------------------------------------------------------------------- @@ -140,135 +137,122 @@ LSTATION = (NUMBSTAT>0) ! ----------------------------- ! IF(NUMBSTAT>0) THEN - CALL ALLOCATE_STATION_n(TSTATION,KMI) - IF (.NOT. LCARTESIAN) CALL INI_INTERP_STATION_n(TSTATION) + CALL ALLOCATE_STATION_n() + IF (.NOT. LCARTESIAN) CALL INI_INTERP_STATION_n() ENDIF !---------------------------------------------------------------------------- ! CONTAINS ! !---------------------------------------------------------------------------- -SUBROUTINE DEFAULT_STATION_n(TSTATION) -! -TYPE(STATION), INTENT(INOUT) :: TSTATION +SUBROUTINE DEFAULT_STATION_n() + +USE MODD_DYN_N, ONLY: XTSTEP ! NUMBSTAT = 0 -! -TSTATION%T_CUR = XUNDEF -TSTATION%N_CUR = 0 -TSTATION%STEP = XTSTEP +TSTATIONS_TIME%XTSTEP = XTSTEP ! END SUBROUTINE DEFAULT_STATION_n !---------------------------------------------------------------------------- !---------------------------------------------------------------------------- -SUBROUTINE ALLOCATE_STATION_n(TSTATION,KMI) -! -TYPE(STATION), INTENT(INOUT) :: TSTATION ! -INTEGER, INTENT(IN) :: KMI ! Model Index -! -if ( tstation%step < xtstep ) then - call Print_msg( NVERB_ERROR, 'GEN', 'INI_SURFSTATION_n', 'TSTATION%STEP smaller than XTSTEP' ) - tstation%step = xtstep +SUBROUTINE ALLOCATE_STATION_n() + +INTEGER :: JI + +if ( tstations_time%xtstep < xtstep ) then + call Print_msg( NVERB_WARNING, 'GEN', 'INI_SURFSTATION_n', 'Timestep for stations was smaller than model timestep' ) + tstations_time%xtstep = xtstep end if -ISTORE = NINT ( ( PSEGLEN - DYN_MODEL(1)%XTSTEP ) / TSTATION%STEP ) + 1 +ISTORE = NINT ( ( PSEGLEN - DYN_MODEL(1)%XTSTEP ) / TSTATIONS_TIME%XTSTEP ) + 1 + +allocate( tstations_time%tpdates(istore) ) + +DO JI = 1, NUMBSTAT + ALLOCATE(TSTATIONS(JI)%XZON (ISTORE)) + ALLOCATE(TSTATIONS(JI)%XMER (ISTORE)) + ALLOCATE(TSTATIONS(JI)%XW (ISTORE)) + ALLOCATE(TSTATIONS(JI)%XP (ISTORE)) + IF (OUSETKE) THEN + ALLOCATE(TSTATIONS(JI)%XTKE (ISTORE)) + ELSE + ALLOCATE(TSTATIONS(JI)%XTKE (0)) + END IF + ALLOCATE(TSTATIONS(JI)%XTH (ISTORE)) + ALLOCATE(TSTATIONS(JI)%XR (ISTORE,KRR)) + ALLOCATE(TSTATIONS(JI)%XSV (ISTORE,KSV)) + ALLOCATE(TSTATIONS(JI)%XTSRAD (ISTORE)) + ALLOCATE(TSTATIONS(JI)%XT2M (ISTORE)) + ALLOCATE(TSTATIONS(JI)%XQ2M (ISTORE)) + ALLOCATE(TSTATIONS(JI)%XHU2M (ISTORE)) + ALLOCATE(TSTATIONS(JI)%XZON10M(ISTORE)) + ALLOCATE(TSTATIONS(JI)%XMER10M(ISTORE)) + ALLOCATE(TSTATIONS(JI)%XRN (ISTORE)) + ALLOCATE(TSTATIONS(JI)%XH (ISTORE)) + ALLOCATE(TSTATIONS(JI)%XLE (ISTORE)) + ALLOCATE(TSTATIONS(JI)%XLEI (ISTORE)) + ALLOCATE(TSTATIONS(JI)%XGFLUX (ISTORE)) + ALLOCATE(TSTATIONS(JI)%XSWD (ISTORE)) + ALLOCATE(TSTATIONS(JI)%XSWU (ISTORE)) + ALLOCATE(TSTATIONS(JI)%XLWD (ISTORE)) + ALLOCATE(TSTATIONS(JI)%XLWU (ISTORE)) + ALLOCATE(TSTATIONS(JI)%XSWDIR (ISTORE)) + ALLOCATE(TSTATIONS(JI)%XSWDIFF(ISTORE)) + ALLOCATE(TSTATIONS(JI)%XDSTAOD(ISTORE)) + ALLOCATE(TSTATIONS(JI)%XSFCO2 (ISTORE)) + + TSTATIONS(JI)%XZON(:) = XUNDEF + TSTATIONS(JI)%XMER(:) = XUNDEF + TSTATIONS(JI)%XW(:) = XUNDEF + TSTATIONS(JI)%XP(:) = XUNDEF + TSTATIONS(JI)%XTKE(:) = XUNDEF + TSTATIONS(JI)%XTH(:) = XUNDEF + TSTATIONS(JI)%XR(:,:) = XUNDEF + TSTATIONS(JI)%XSV(:,:) = XUNDEF + TSTATIONS(JI)%XTSRAD(:) = XUNDEF + TSTATIONS(JI)%XT2M(:) = XUNDEF + TSTATIONS(JI)%XQ2M(:) = XUNDEF + TSTATIONS(JI)%XHU2M(:) = XUNDEF + TSTATIONS(JI)%XZON10M(:) = XUNDEF + TSTATIONS(JI)%XMER10M(:) = XUNDEF + TSTATIONS(JI)%XRN(:) = XUNDEF + TSTATIONS(JI)%XH(:) = XUNDEF + TSTATIONS(JI)%XLE(:) = XUNDEF + TSTATIONS(JI)%XLEI(:) = XUNDEF + TSTATIONS(JI)%XGFLUX(:) = XUNDEF + TSTATIONS(JI)%XSWD(:) = XUNDEF + TSTATIONS(JI)%XSWU(:) = XUNDEF + TSTATIONS(JI)%XLWD(:) = XUNDEF + TSTATIONS(JI)%XLWU(:) = XUNDEF + TSTATIONS(JI)%XSWDIR(:) = XUNDEF + TSTATIONS(JI)%XSWDIFF(:) = XUNDEF + TSTATIONS(JI)%XDSTAOD(:) = XUNDEF + TSTATIONS(JI)%XSFCO2(:) = XUNDEF +END DO -allocate( tstation%tpdates( istore ) ) -ALLOCATE(TSTATION%ERROR (NUMBSTAT)) -!ALLOCATE(TSTATION%X (NUMBSTAT)) -!ALLOCATE(TSTATION%Y (NUMBSTAT)) -ALLOCATE(TSTATION%SV (ISTORE,NUMBSTAT,KSV)) -ALLOCATE(TSTATION%TSRAD (ISTORE,NUMBSTAT)) -ALLOCATE(TSTATION%ZS (NUMBSTAT)) -ALLOCATE(TSTATION%ZON (ISTORE,NUMBSTAT)) -ALLOCATE(TSTATION%MER (ISTORE,NUMBSTAT)) -ALLOCATE(TSTATION%W (ISTORE,NUMBSTAT)) -ALLOCATE(TSTATION%P (ISTORE,NUMBSTAT)) -ALLOCATE(TSTATION%TH (ISTORE,NUMBSTAT)) -ALLOCATE(TSTATION%R (ISTORE,NUMBSTAT,KRR)) -IF (OUSETKE) THEN - ALLOCATE(TSTATION%TKE (ISTORE,NUMBSTAT)) -ELSE - ALLOCATE(TSTATION%TKE (0,0)) -END IF -ALLOCATE(TSTATION%T2M (ISTORE,NUMBSTAT)) -ALLOCATE(TSTATION%Q2M (ISTORE,NUMBSTAT)) -ALLOCATE(TSTATION%HU2M (ISTORE,NUMBSTAT)) -ALLOCATE(TSTATION%ZON10M (ISTORE,NUMBSTAT)) -ALLOCATE(TSTATION%MER10M (ISTORE,NUMBSTAT)) -ALLOCATE(TSTATION%RN (ISTORE,NUMBSTAT)) -ALLOCATE(TSTATION%H (ISTORE,NUMBSTAT)) -ALLOCATE(TSTATION%LE (ISTORE,NUMBSTAT)) -ALLOCATE(TSTATION%GFLUX (ISTORE,NUMBSTAT)) -ALLOCATE(TSTATION%LEI (ISTORE,NUMBSTAT)) -ALLOCATE(TSTATION%SWD (ISTORE,NUMBSTAT)) -ALLOCATE(TSTATION%SWU (ISTORE,NUMBSTAT)) -ALLOCATE(TSTATION%SWDIR (ISTORE,NUMBSTAT)) -ALLOCATE(TSTATION%SWDIFF (ISTORE,NUMBSTAT)) -ALLOCATE(TSTATION%LWD (ISTORE,NUMBSTAT)) -ALLOCATE(TSTATION%LWU (ISTORE,NUMBSTAT)) -ALLOCATE(TSTATION%DSTAOD (ISTORE,NUMBSTAT)) -ALLOCATE(TSTATION%SFCO2 (ISTORE,NUMBSTAT)) -! -TSTATION%ERROR = .FALSE. -TSTATION%ZON = XUNDEF -TSTATION%MER = XUNDEF -TSTATION%W = XUNDEF -TSTATION%P = XUNDEF -TSTATION%TH = XUNDEF -TSTATION%R = XUNDEF -TSTATION%SV = XUNDEF -TSTATION%TKE = XUNDEF -TSTATION%TSRAD = XUNDEF -TSTATION%ZS = XUNDEF -TSTATION%T2M = XUNDEF -TSTATION%Q2M = XUNDEF -TSTATION%HU2M = XUNDEF -TSTATION%ZON10M = XUNDEF -TSTATION%MER10M = XUNDEF -TSTATION%RN = XUNDEF -TSTATION%H = XUNDEF -TSTATION%LE = XUNDEF -TSTATION%GFLUX = XUNDEF -TSTATION%LEI = XUNDEF -TSTATION%SWD = XUNDEF -TSTATION%SWU = XUNDEF -TSTATION%SWDIR = XUNDEF -TSTATION%SWDIFF = XUNDEF -TSTATION%LWD = XUNDEF -TSTATION%LWU = XUNDEF -TSTATION%DSTAOD = XUNDEF -TSTATION%SFCO2 = XUNDEF -! END SUBROUTINE ALLOCATE_STATION_n !---------------------------------------------------------------------------- !---------------------------------------------------------------------------- -SUBROUTINE INI_INTERP_STATION_n(TSTATION) +SUBROUTINE INI_INTERP_STATION_n() ! -TYPE(STATION), INTENT(INOUT) :: TSTATION ! -INTEGER :: JII ! -INTEGER :: IIU, IJU ! +INTEGER :: JII +INTEGER :: IIU, IJU ! -IF ( ALL(TSTATION%LAT(:)/=XUNDEF) .AND. ALL(TSTATION%LON(:)/=XUNDEF) ) THEN - DO JII=1,NUMBSTAT +IF ( ALL(TSTATIONS(:)%XLAT /= XUNDEF) .AND. ALL(TSTATIONS(:)%XLON /= XUNDEF) ) THEN + DO JII = 1, NUMBSTAT CALL GET_DIM_EXT_ll ('B',IIU,IJU) CALL SM_XYHAT(PLATOR,PLONOR, & - TSTATION%LAT(JII), TSTATION%LON(JII), & - TSTATION%X(JII), TSTATION%Y(JII) ) - ENDDO + TSTATIONS(JII)%XLAT, TSTATIONS(JII)%XLON, & + TSTATIONS(JII)%XX, TSTATIONS(JII)%XY ) + END DO ELSE -! - WRITE(ILUOUT,*) 'Error in station position ' - WRITE(ILUOUT,*) 'either LATitude or LONgitude segment' - WRITE(ILUOUT,*) 'or I and J segment' - WRITE(ILUOUT,*) 'definition is not complete.' -!callabortstop - CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_SURFSTATION_n','') + CMNHMSG(1) = 'Error in station position' + CMNHMSG(1) = 'either LATitude or LONgitude segment' + CMNHMSG(1) = 'or I and J segment' + CMNHMSG(1) = 'definition is not complete.' + CALL PRINT_MSG( NVERB_FATAL, 'GEN', 'INI_SURFSTATION_n' ) END IF -! -TSTATION%STEP = MAX ( PTSTEP, TSTATION%STEP ) -! -! + END SUBROUTINE INI_INTERP_STATION_n !---------------------------------------------------------------------------- !---------------------------------------------------------------------------- diff --git a/src/MNH/modd_stationn.f90 b/src/MNH/modd_stationn.f90 index fe16b7697..ff5351dee 100644 --- a/src/MNH/modd_stationn.f90 +++ b/src/MNH/modd_stationn.f90 @@ -1,13 +1,8 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2002-2022 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- -!--------------- special set of characters for RCS information -!----------------------------------------------------------------- -! $Source$ $Revision$ -! MASDEV4_7 modd 2006/05/18 13:07:25 -!----------------------------------------------------------------- ! ############################ MODULE MODD_STATION_n ! ############################ @@ -34,14 +29,16 @@ !! MODIFICATIONS !! ------------- !! Original 15/01/02 +! P. Wautelet 07/04/2022: rewrite types for stations !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! ! -USE MODD_TYPE_STATION USE MODD_PARAMETERS, ONLY: JPMODELMAX +USE MODD_TYPE_STATION + IMPLICIT NONE TYPE STATION_t @@ -52,7 +49,8 @@ TYPE STATION_t INTEGER :: NUMBSTAT ! number of stations LOGICAL :: LSTATLAT ! positioning in lat/lon ! - TYPE(STATION) :: TSTATION ! characteristics and records of a station + TYPE(TSTATIONTIME) :: TSTATIONS_TIME + TYPE(TSTATIONDATA), DIMENSION(:), POINTER :: TSTATIONS ! characteristics and records of the stations ! END TYPE STATION_t @@ -61,7 +59,8 @@ TYPE(STATION_t), DIMENSION(JPMODELMAX), TARGET, SAVE :: STATION_MODEL LOGICAL, POINTER :: LSTATION=>NULL() INTEGER, POINTER :: NUMBSTAT=>NULL() LOGICAL, POINTER :: LSTATLAT=>NULL() -TYPE(STATION), POINTER :: TSTATION=>NULL() +TYPE(TSTATIONTIME), POINTER :: TSTATIONS_TIME => NULL() +TYPE(TSTATIONDATA), DIMENSION(:), POINTER :: TSTATIONS => NULL() CONTAINS @@ -69,12 +68,14 @@ SUBROUTINE STATION_GOTO_MODEL(KFROM, KTO) INTEGER, INTENT(IN) :: KFROM, KTO ! ! Save current state for allocated arrays +STATION_MODEL(KFROM)%TSTATIONS => TSTATIONS ! ! Current model is set to model KTO -LSTATION=>STATION_MODEL(KTO)%LSTATION -NUMBSTAT=>STATION_MODEL(KTO)%NUMBSTAT -LSTATLAT=>STATION_MODEL(KTO)%LSTATLAT -TSTATION=>STATION_MODEL(KTO)%TSTATION +LSTATION => STATION_MODEL(KTO)%LSTATION +NUMBSTAT => STATION_MODEL(KTO)%NUMBSTAT +LSTATLAT => STATION_MODEL(KTO)%LSTATLAT +TSTATIONS_TIME => STATION_MODEL(KTO)%TSTATIONS_TIME +TSTATIONS => STATION_MODEL(KTO)%TSTATIONS END SUBROUTINE STATION_GOTO_MODEL diff --git a/src/MNH/modd_type_station.f90 b/src/MNH/modd_type_station.f90 index 3456ac2d2..b929d28d4 100644 --- a/src/MNH/modd_type_station.f90 +++ b/src/MNH/modd_type_station.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 2002-2019 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2002-2022 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. @@ -30,74 +30,72 @@ !! ------------- !! Original 15/01/02 ! P. Wautelet 13/09/2019: budget: simplify and modernize date/time management +! P. Wautelet 07/04/2022: rewrite types for stations !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! -! -use modd_type_date, only: date_time +use modd_type_date, only: date_time +use modd_parameters, only: NUNDEF, XUNDEF implicit none -TYPE STATION -! -! -!* general information -! -! -!* storage monitoring -! -REAL :: T_CUR ! current time since last storage -INTEGER :: N_CUR ! current step of storage -REAL :: STEP ! storage time step -! -!* data records -! -CHARACTER(LEN=8),DIMENSION(:), POINTER :: NAME=>NULL() ! station name -CHARACTER(LEN=8),DIMENSION(:), POINTER :: TYPE=>NULL() ! station type -type(date_time), dimension(:), pointer :: tpdates => NULL() ! dates(n) (n: recording instants) -LOGICAL, DIMENSION(:), POINTER :: ERROR=>NULL() ! -REAL, DIMENSION(:), POINTER :: X=>NULL() ! X(n) -REAL, DIMENSION(:), POINTER :: Y=>NULL() ! Y(n) -REAL, DIMENSION(:), POINTER :: Z=>NULL() ! Z(n) -REAL, DIMENSION(:), POINTER :: LON=>NULL() ! longitude(n) -REAL, DIMENSION(:), POINTER :: LAT=>NULL() ! latitude (n) -REAL, DIMENSION(:,:), POINTER :: ZON=>NULL() ! zonal wind(n) -REAL, DIMENSION(:,:), POINTER :: MER=>NULL() ! meridian wind(n) -REAL, DIMENSION(:,:), POINTER :: W=>NULL() ! w(n) (air vertical speed) -REAL, DIMENSION(:,:), POINTER :: P=>NULL() ! p(n) -REAL, DIMENSION(:,:), POINTER :: TKE=>NULL() ! tke(n) -REAL, DIMENSION(:,:), POINTER :: TH=>NULL() ! th(n) -REAL, DIMENSION(:,:,:), POINTER :: R=>NULL() ! r*(n) -REAL, DIMENSION(:,:,:), POINTER :: SV=>NULL() ! Sv*(n) -REAL, DIMENSION(:), POINTER :: ZS=>NULL() ! zs(n) -REAL, DIMENSION(:,:), POINTER :: TSRAD=>NULL() ! Ts(n) -! -REAL, DIMENSION(:,:), POINTER :: T2M=>NULL() ! -REAL, DIMENSION(:,:), POINTER :: Q2M=>NULL() ! -REAL, DIMENSION(:,:), POINTER :: HU2M=>NULL() ! -REAL, DIMENSION(:,:), POINTER :: ZON10M=>NULL() ! -REAL, DIMENSION(:,:), POINTER :: MER10M=>NULL() ! -REAL, DIMENSION(:,:), POINTER :: RN=>NULL() ! -REAL, DIMENSION(:,:), POINTER :: H=>NULL() ! -REAL, DIMENSION(:,:), POINTER :: LE=>NULL() ! -REAL, DIMENSION(:,:), POINTER :: LEI=>NULL() ! -REAL, DIMENSION(:,:), POINTER :: GFLUX=>NULL() ! -REAL, DIMENSION(:,:), POINTER :: SWD=>NULL() ! -REAL, DIMENSION(:,:), POINTER :: SWU=>NULL() ! -REAL, DIMENSION(:,:), POINTER :: LWD=>NULL() ! -REAL, DIMENSION(:,:), POINTER :: LWU=>NULL() ! -REAL, DIMENSION(:,:), POINTER :: SWDIR=>NULL() ! -REAL, DIMENSION(:,:), POINTER :: SWDIFF=>NULL() ! -REAL, DIMENSION(:,:), POINTER :: DSTAOD=>NULL() ! Dust Aerosol Optical Depth -REAL, DIMENSION(:,:), POINTER :: SFCO2=>NULL() ! CO2 surface flux -! -INTEGER, DIMENSION(:), POINTER :: K=>NULL() ! Model level for altitude - ! comparisons -INTEGER, DIMENSION(:), POINTER :: I=>NULL() ! i index (n) -INTEGER, DIMENSION(:), POINTER :: J=>NULL() ! j index (n) +private + +public :: TSTATIONTIME, TSTATIONDATA + +TYPE TSTATIONTIME + REAL :: XTIME_CUR = XUNDEF ! current time since last storage + INTEGER :: N_CUR = 0 ! current step of storage + REAL :: XTSTEP = 60. ! storage time step (default reset later by INI_STATION_n) + type(date_time), dimension(:), ALLOCATABLE :: tpdates ! dates(n) (n: recording instants) +END TYPE TSTATIONTIME + +TYPE TSTATIONDATA +! Type to store all the data of 1 station +CHARACTER(LEN=8) :: CNAME = '' ! station name +CHARACTER(LEN=8) :: CTYPE = '' ! station type (currently not used) +LOGICAL :: LERROR = .FALSE. ! + +REAL :: XX = XUNDEF ! X(n) +REAL :: XY = XUNDEF ! Y(n) +REAL :: XZ = XUNDEF ! Z(n) +REAL :: XLON = XUNDEF ! longitude(n) +REAL :: XLAT = XUNDEF ! latitude (n) +REAL :: XZS = XUNDEF ! zs(n) + +INTEGER :: NK = NUNDEF ! Model level for altitude comparisons + +REAL, DIMENSION(:), ALLOCATABLE :: XZON ! zonal wind(n) +REAL, DIMENSION(:), ALLOCATABLE :: XMER ! meridian wind(n) +REAL, DIMENSION(:), ALLOCATABLE :: XW ! w(n) (air vertical speed) +REAL, DIMENSION(:), ALLOCATABLE :: XP ! p(n) +REAL, DIMENSION(:), ALLOCATABLE :: XTKE ! tke(n) +REAL, DIMENSION(:), ALLOCATABLE :: XTH ! th(n) +REAL, DIMENSION(:,:), ALLOCATABLE :: XR ! r*(n) +REAL, DIMENSION(:,:), ALLOCATABLE :: XSV ! Sv*(n) +REAL, DIMENSION(:), ALLOCATABLE :: XTSRAD ! Ts(n) + +REAL, DIMENSION(:), ALLOCATABLE :: XT2M +REAL, DIMENSION(:), ALLOCATABLE :: XQ2M +REAL, DIMENSION(:), ALLOCATABLE :: XHU2M +REAL, DIMENSION(:), ALLOCATABLE :: XZON10M +REAL, DIMENSION(:), ALLOCATABLE :: XMER10M +REAL, DIMENSION(:), ALLOCATABLE :: XRN +REAL, DIMENSION(:), ALLOCATABLE :: XH +REAL, DIMENSION(:), ALLOCATABLE :: XLE +REAL, DIMENSION(:), ALLOCATABLE :: XLEI +REAL, DIMENSION(:), ALLOCATABLE :: XGFLUX +REAL, DIMENSION(:), ALLOCATABLE :: XSWD +REAL, DIMENSION(:), ALLOCATABLE :: XSWU +REAL, DIMENSION(:), ALLOCATABLE :: XLWD +REAL, DIMENSION(:), ALLOCATABLE :: XLWU +REAL, DIMENSION(:), ALLOCATABLE :: XSWDIR +REAL, DIMENSION(:), ALLOCATABLE :: XSWDIFF +REAL, DIMENSION(:), ALLOCATABLE :: XDSTAOD ! Dust Aerosol Optical Depth +REAL, DIMENSION(:), ALLOCATABLE :: XSFCO2 ! CO2 surface flux + +END TYPE TSTATIONDATA -END TYPE STATION -! END MODULE MODD_TYPE_STATION diff --git a/src/MNH/station_reader.f90 b/src/MNH/station_reader.f90 index 0f6b74663..3e7741e8b 100644 --- a/src/MNH/station_reader.f90 +++ b/src/MNH/station_reader.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 2020-2021 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2020-2022 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. @@ -9,11 +9,11 @@ ! INTERFACE ! -SUBROUTINE READ_CSV_STATION(HFILE,TPSTATION,OCARTESIAN) - USE MODD_STATION_n - CHARACTER(LEN=*), INTENT(IN) :: HFILE ! file to read - TYPE(STATION), INTENT(OUT) :: TPSTATION ! stored blade data - LOGICAL, INTENT(IN) :: OCARTESIAN +SUBROUTINE READ_CSV_STATION( HFILE, TPSTATIONS, OCARTESIAN ) +USE MODD_STATION_n +CHARACTER(LEN=*), INTENT(IN) :: HFILE ! file to read +TYPE(TSTATIONDATA), DIMENSION(:), POINTER, INTENT(INOUT) :: TPSTATIONS +LOGICAL, INTENT(IN) :: OCARTESIAN END SUBROUTINE READ_CSV_STATION ! END INTERFACE @@ -21,7 +21,7 @@ END INTERFACE END MODULE MODI_STATION_READER !------------------------------------------------------------------- ! -!!**** *EOL_READER* - +!!**** *READ_CSV_STATION* - !! !! PURPOSE !! ------- @@ -29,16 +29,16 @@ END MODULE MODI_STATION_READER !! !! AUTHOR !! ------ -!! E. Jézéquel *CNRM & IFPEN* +!! E. Jezequel *CNRM & IFPEN* !! !! MODIFICATIONS !! ------------- !! 03/2020 Original -!! -!!--------------------------------------------------------------- +! P. Wautelet 07/04/2022: rewrite types for stations +!--------------------------------------------------------------- ! !######################################################### -SUBROUTINE READ_CSV_STATION(HFILE,TPSTATION,OCARTESIAN) +SUBROUTINE READ_CSV_STATION( HFILE, TPSTATIONS, OCARTESIAN ) USE MODD_ALLSTATION_n USE MODD_STATION_n USE MODD_PARAMETERS @@ -46,15 +46,15 @@ USE MODD_TYPE_STATION USE MODI_INI_SURFSTATION_n ! -CHARACTER(LEN=*), INTENT(IN) :: HFILE ! file to read -TYPE(STATION), INTENT(INOUT) :: TPSTATION ! dummy stored -LOGICAL, INTENT(IN) :: OCARTESIAN +CHARACTER(LEN=*), INTENT(IN) :: HFILE ! file to read +TYPE(TSTATIONDATA), DIMENSION(:), POINTER, INTENT(INOUT) :: TPSTATIONS +LOGICAL, INTENT(IN) :: OCARTESIAN ! -INTEGER :: INBLINE ! Nb of line in csv file +INTEGER :: INBLINE ! Nb of line in csv file ! -CHARACTER(LEN=80) :: YERROR -CHARACTER(LEN=400) :: YSTRING -INTEGER :: ILU ! logical unit of the file +CHARACTER(LEN=80) :: YERROR +CHARACTER(LEN=400) :: YSTRING +INTEGER :: ILU ! logical unit of the file ! ! Open file @@ -76,39 +76,22 @@ END DO YERROR = 'Data not found in file : '//TRIM(HFILE) PRINT*, YERROR ELSE - ! Save number of station + ! Save number of stations NUMBSTAT = INBLINE - 1 - ! - ! Allocation des tableaux - ALLOCATE(TPSTATION%LAT(NUMBSTAT)) - ALLOCATE(TPSTATION%LON(NUMBSTAT)) - ALLOCATE(TPSTATION%X(NUMBSTAT)) - ALLOCATE(TPSTATION%Y(NUMBSTAT)) - ALLOCATE(TPSTATION%Z(NUMBSTAT)) - ALLOCATE(TPSTATION%K(NUMBSTAT)) - !ALLOCATE(TPSTATION%STEP(NUMBSTAT)) - ALLOCATE(TPSTATION%NAME(NUMBSTAT)) -! ALLOCATE(TPSTATION%TYPE(NUMBSTAT)) - TPSTATION%LON = XUNDEF - TPSTATION%LAT = XUNDEF - TPSTATION%Z = XUNDEF - TPSTATION%K = XUNDEF - TPSTATION%X = XUNDEF - TPSTATION%Y = XUNDEF - TPSTATION%NAME = " " -! TPSTATION%TYPE = " " - ! Nouvelle lecture + ALLOCATE( TPSTATIONS(NUMBSTAT) ) + + ! New reading REWIND(ILU) - READ(ILU,FMT='(A400)') YSTRING ! Lecture du header + READ(ILU,FMT='(A400)') YSTRING ! Reading of header ! ! Save the data IF (OCARTESIAN) THEN INBLINE = 1 DO INBLINE=1, NUMBSTAT READ(ILU,FMT='(A400)') YSTRING - READ(YSTRING,*) TPSTATION%NAME(INBLINE), & !TPSTATION%TYPE(INBLINE),& - TPSTATION%X(INBLINE), TPSTATION%Y(INBLINE), TPSTATION%Z(INBLINE)!,& + READ(YSTRING,*) TPSTATIONS(INBLINE)%CNAME, & !TPSTATIONS(INBLINE)%CTYPE,& + TPSTATIONS(INBLINE)%XX, TPSTATIONS(INBLINE)%XY, TPSTATIONS(INBLINE)%XZ END DO REWIND(ILU) CLOSE(ILU) @@ -117,8 +100,8 @@ END DO INBLINE = 1 DO INBLINE=1, NUMBSTAT READ(ILU,FMT='(A400)') YSTRING - READ(YSTRING,*) TPSTATION%NAME(INBLINE), & !TPSTATION%TYPE(INBLINE),& - TPSTATION%LAT(INBLINE), TPSTATION%LON(INBLINE), TPSTATION%Z(INBLINE)!,& + READ(YSTRING,*) TPSTATIONS(INBLINE)%CNAME, & !TPSTATIONS(INBLINE)%CTYPE,& + TPSTATIONS(INBLINE)%XLAT, TPSTATIONS(INBLINE)%XLON, TPSTATIONS(INBLINE)%XZ END DO REWIND(ILU) CLOSE(ILU) diff --git a/src/MNH/stationn.f90 b/src/MNH/stationn.f90 index 4de047e71..92105242e 100644 --- a/src/MNH/stationn.f90 +++ b/src/MNH/stationn.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 2002-2020 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2002-2022 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. @@ -72,14 +72,15 @@ END MODULE MODI_STATION_n !! MODIFICATIONS !! ------------- !! Original 15/02/2002 -!! A. Lemonsu 19/11/2002 -!! P.Aumond 01/07/2011 : Add model levels -!! C.Lac 04/2013 : Correction on the vertical levels -!! C.Lac 04/2013 : Add I/J positioning +! A. Lemonsu 19/11/2002 +! P. Aumond 01/07/2011: add model levels +! C. Lac 04/2013: correction on the vertical levels +! C. Lac 04/2013: add I/J positioning ! P. Wautelet 28/03/2018: replace TEMPORAL_DIST by DATETIME_DISTANCE ! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O ! P. Wautelet 13/09/2019: budget: simplify and modernize date/time management ! R. Schoetter 11/2019: use LCARTESIAN instead of LSTATLAT for multiproc in cartesian +! P. Wautelet 07/04/2022: rewrite types for stations ! ! -------------------------------------------------------------------------- ! @@ -185,27 +186,27 @@ ZYHATM( IJU )=1.5*PYHAT( IJU )-0.5*PYHAT( IJU-1) !* 3.4 instant of storage ! ------------------ ! -IF ( TSTATION%T_CUR == XUNDEF ) TSTATION%T_CUR = TSTATION%STEP - PTSTEP +IF ( TSTATIONS_TIME%XTIME_CUR == XUNDEF ) TSTATIONS_TIME%XTIME_CUR = TSTATIONS_TIME%XTSTEP - PTSTEP ! -TSTATION%T_CUR = TSTATION%T_CUR + PTSTEP +TSTATIONS_TIME%XTIME_CUR = TSTATIONS_TIME%XTIME_CUR + PTSTEP ! -IF ( TSTATION%T_CUR >= TSTATION%STEP - 1.E-10 ) THEN +IF ( TSTATIONS_TIME%XTIME_CUR >= TSTATIONS_TIME%XTSTEP - 1.E-10 ) THEN GSTORE = .TRUE. - TSTATION%T_CUR = TSTATION%T_CUR - TSTATION%STEP - TSTATION%N_CUR = TSTATION%N_CUR + 1 - IN = TSTATION%N_CUR + TSTATIONS_TIME%XTIME_CUR = TSTATIONS_TIME%XTIME_CUR - TSTATIONS_TIME%XTSTEP + TSTATIONS_TIME%N_CUR = TSTATIONS_TIME%N_CUR + 1 + IN = TSTATIONS_TIME%N_CUR ELSE GSTORE = .FALSE. END IF ! IF (GSTORE) THEN #if 0 - tstation%tpdates(in)%date%year = tdtexp%date%year - tstation%tpdates(in)%date%month = tdtexp%date%month - tstation%tpdates(in)%date%day = tdtexp%date%day - tstation%tpdates(in)%xtime = tdtexp%xtime + ( in - 1 ) * tstation%step + tstations_time%tpdates(in)%date%year = tdtexp%date%year + tstations_time%tpdates(in)%date%month = tdtexp%date%month + tstations_time%tpdates(in)%date%day = tdtexp%date%day + tstations_time%tpdates(in)%xtime = tdtexp%xtime + ( in - 1 ) * tstation%step #else - tstation%tpdates(in) = tdtcur + tstations_time%tpdates(in) = tdtcur #endif END IF ! @@ -236,7 +237,6 @@ IF (GSTATFIRSTCALL) THEN ZYCOEF(:) =XUNDEF ZVCOEF(:) =XUNDEF -! DO I=1,NUMBSTAT ! ZTHIS_PROCS(I)=0. @@ -244,21 +244,21 @@ IF (GSTATFIRSTCALL) THEN !* 4.1 X position ! ---------- ! - IU(I)=COUNT( PXHAT (:)<=TSTATION%X(I) ) - II(I)=COUNT( ZXHATM(:)<=TSTATION%X(I) ) + IU(I)=COUNT( PXHAT (:)<=TSTATIONS(I)%XX ) + II(I)=COUNT( ZXHATM(:)<=TSTATIONS(I)%XX ) ! - IF (II(I)<=IIB-1 .AND. LWEST_ll() .AND. .NOT. L1D) TSTATION%ERROR(I)=.TRUE. - IF (II(I)>=IIE .AND. LEAST_ll() .AND. .NOT. L1D) TSTATION%ERROR(I)=.TRUE. + IF (II(I)<=IIB-1 .AND. LWEST_ll() .AND. .NOT. L1D) TSTATIONS(I)%LERROR=.TRUE. + IF (II(I)>=IIE .AND. LEAST_ll() .AND. .NOT. L1D) TSTATIONS(I)%LERROR=.TRUE. ! ! !* 4.2 Y position ! ---------- ! - IV(I)=COUNT( PYHAT (:)<=TSTATION%Y(I) ) - IJ(I)=COUNT( ZYHATM(:)<=TSTATION%Y(I) ) + IV(I)=COUNT( PYHAT (:)<=TSTATIONS(I)%XY ) + IJ(I)=COUNT( ZYHATM(:)<=TSTATIONS(I)%XY ) ! - IF (IJ(I)<=IJB-1 .AND. LSOUTH_ll() .AND. .NOT. L1D) TSTATION%ERROR(I)=.TRUE. - IF (IJ(I)>=IJE .AND. LNORTH_ll() .AND. .NOT. L1D) TSTATION%ERROR(I)=.TRUE. + IF (IJ(I)<=IJB-1 .AND. LSOUTH_ll() .AND. .NOT. L1D) TSTATIONS(I)%LERROR=.TRUE. + IF (IJ(I)>=IJE .AND. LNORTH_ll() .AND. .NOT. L1D) TSTATIONS(I)%LERROR=.TRUE. ! ! !* 4.3 Position of station according to processors @@ -272,7 +272,7 @@ IF (GSTATFIRSTCALL) THEN ! -------------------------------------- ZXCOEF(I) = 0. ZYCOEF(I) = 0. - ZUCOEF(I) = 0. + ZUCOEF(I) = 0. ZVCOEF(I) = 0. IF (ZTHIS_PROCS(I) >0. .AND. .NOT. L1D) THEN !---------------------------------------------------------------------------- @@ -280,14 +280,14 @@ IF (GSTATFIRSTCALL) THEN !* 6.1 Interpolation coefficient for X ! ------------------------------- ! - ZXCOEF(I) = (TSTATION%X(I) - ZXHATM(II(I))) / (ZXHATM(II(I)+1) - ZXHATM(II(I))) + ZXCOEF(I) = (TSTATIONS(I)%XX - ZXHATM(II(I))) / (ZXHATM(II(I)+1) - ZXHATM(II(I))) ! ! ! !* 6.2 Interpolation coefficient for y ! ------------------------------- ! - ZYCOEF(I) = (TSTATION%Y(I) - ZYHATM(IJ(I))) / (ZYHATM(IJ(I)+1) - ZYHATM(IJ(I))) + ZYCOEF(I) = (TSTATIONS(I)%XY - ZYHATM(IJ(I))) / (ZYHATM(IJ(I)+1) - ZYHATM(IJ(I))) ! !------------------------------------------------------------------- ! @@ -297,13 +297,13 @@ IF (GSTATFIRSTCALL) THEN !* 7.1 Interpolation coefficient for X (for U) ! ------------------------------- ! - ZUCOEF(I) = (TSTATION%X(I) - PXHAT(IU(I))) / (PXHAT(IU(I)+1) - PXHAT(IU(I))) + ZUCOEF(I) = (TSTATIONS(I)%XX - PXHAT(IU(I))) / (PXHAT(IU(I)+1) - PXHAT(IU(I))) ! ! !* 7.2 Interpolation coefficient for y (for V) ! ------------------------------- ! - ZVCOEF(I) = (TSTATION%Y(I) - PYHAT(IV(I))) / (PYHAT(IV(I)+1) - PYHAT(IV(I))) + ZVCOEF(I) = (TSTATIONS(I)%XY - PYHAT(IV(I))) / (PYHAT(IV(I)+1) - PYHAT(IV(I))) ! ! @@ -318,70 +318,70 @@ END IF IF (GSTORE) THEN DO I=1,NUMBSTAT ! - IF ((ZTHIS_PROCS(I)==1.).AND.(.NOT. TSTATION%ERROR(I))) THEN - IF (TSTATION%K(I)/= XUNDEF) THEN - J = TSTATION%K(I) - ELSE ! suppose TSTATION%Z(I) /= XUNDEF + IF ((ZTHIS_PROCS(I)==1.).AND.(.NOT. TSTATIONS(I)%LERROR)) THEN + IF (TSTATIONS(I)%NK/= XUNDEF) THEN + J = TSTATIONS(I)%NK + ELSE ! suppose TSTATIONS(I)%XZ /= XUNDEF J=1 DO WHILE ((STATION_INTERP_2D(PZ(:,:,J))-STATION_INTERP_2D(PZ(:,:,2))) & - < TSTATION%Z(I)) + < TSTATIONS(I)%XZ) J = J + 1 END DO - IF (((STATION_INTERP_2D(PZ(:,:,J))-STATION_INTERP_2D(PZ(:,:,2)))-TSTATION%Z(I))>& - (TSTATION%Z(I)-(STATION_INTERP_2D(PZ(:,:,J-1))-STATION_INTERP_2D(PZ(:,:,2))))) THEN + IF (((STATION_INTERP_2D(PZ(:,:,J))-STATION_INTERP_2D(PZ(:,:,2)))-TSTATIONS(I)%XZ)>& + (TSTATIONS(I)%XZ-(STATION_INTERP_2D(PZ(:,:,J-1))-STATION_INTERP_2D(PZ(:,:,2))))) THEN J=J-1 ENDIF END IF ! IF (LCARTESIAN) THEN - TSTATION%ZON (IN,I) = STATION_INTERP_2D_U(PU(:,:,J)) - TSTATION%MER (IN,I) = STATION_INTERP_2D_V(PV(:,:,J)) + TSTATIONS(I)%XZON (IN) = STATION_INTERP_2D_U(PU(:,:,J)) + TSTATIONS(I)%XMER (IN) = STATION_INTERP_2D_V(PV(:,:,J)) ELSE ZU_STAT = STATION_INTERP_2D_U(PU(:,:,J)) ZV_STAT = STATION_INTERP_2D_V(PV(:,:,J)) - ZGAM = (XRPK * (TSTATION%LON(I) - XLON0) - XBETA)*(XPI/180.) - TSTATION%ZON (IN,I) = ZU_STAT * COS(ZGAM) + ZV_STAT * SIN(ZGAM) - TSTATION%MER (IN,I) = - ZU_STAT * SIN(ZGAM) + ZV_STAT * COS(ZGAM) + ZGAM = (XRPK * (TSTATIONS(I)%XLON - XLON0) - XBETA)*(XPI/180.) + TSTATIONS(I)%XZON (IN) = ZU_STAT * COS(ZGAM) + ZV_STAT * SIN(ZGAM) + TSTATIONS(I)%XMER (IN) = - ZU_STAT * SIN(ZGAM) + ZV_STAT * COS(ZGAM) ENDIF - TSTATION%W (IN,I) = STATION_INTERP_2D(PW(:,:,J)) - TSTATION%TH (IN,I) = STATION_INTERP_2D(PTH(:,:,J)) - TSTATION%P (IN,I) = STATION_INTERP_2D(PP(:,:,J)) + TSTATIONS(I)%XW (IN) = STATION_INTERP_2D(PW(:,:,J)) + TSTATIONS(I)%XTH (IN) = STATION_INTERP_2D(PTH(:,:,J)) + TSTATIONS(I)%XP (IN) = STATION_INTERP_2D(PP(:,:,J)) ! DO JSV=1,SIZE(PR,4) - TSTATION%R (IN,I,JSV) = STATION_INTERP_2D(PR(:,:,J,JSV)) + TSTATIONS(I)%XR (IN,JSV) = STATION_INTERP_2D(PR(:,:,J,JSV)) END DO ! DO JSV=1,SIZE(PSV,4) - TSTATION%SV (IN,I,JSV) = STATION_INTERP_2D(PSV(:,:,J,JSV)) + TSTATIONS(I)%XSV (IN,JSV) = STATION_INTERP_2D(PSV(:,:,J,JSV)) END DO ! - IF (SIZE(PTKE)>0) TSTATION%TKE (IN,I) = STATION_INTERP_2D(PTKE(:,:,J)) - IF (SIZE(PTS) >0) TSTATION%TSRAD(IN,I) = STATION_INTERP_2D(PTS) - TSTATION%ZS(I) = STATION_INTERP_2D(PZ(:,:,1+JPVEXT)) + IF (SIZE(PTKE)>0) TSTATIONS(I)%XTKE (IN) = STATION_INTERP_2D(PTKE(:,:,J)) + IF (SIZE(PTS) >0) TSTATIONS(I)%XTSRAD(IN) = STATION_INTERP_2D(PTS) + TSTATIONS(I)%XZS = STATION_INTERP_2D(PZ(:,:,1+JPVEXT)) ! IF (LDIAG_SURFRAD) THEN - TSTATION%ZON10M(IN,I) = STATION_INTERP_2D(XCURRENT_ZON10M) - TSTATION%MER10M(IN,I) = STATION_INTERP_2D(XCURRENT_MER10M) - TSTATION%T2M (IN,I) = STATION_INTERP_2D(XCURRENT_T2M ) - TSTATION%Q2M (IN,I) = STATION_INTERP_2D(XCURRENT_Q2M ) - TSTATION%HU2M (IN,I) = STATION_INTERP_2D(XCURRENT_HU2M ) - TSTATION%RN (IN,I) = STATION_INTERP_2D(XCURRENT_RN ) - TSTATION%H (IN,I) = STATION_INTERP_2D(XCURRENT_H ) - TSTATION%LE (IN,I) = STATION_INTERP_2D(XCURRENT_LE ) - TSTATION%LEI (IN,I) = STATION_INTERP_2D(XCURRENT_LEI ) - TSTATION%GFLUX (IN,I) = STATION_INTERP_2D(XCURRENT_GFLUX ) + TSTATIONS(I)%XZON10M(IN) = STATION_INTERP_2D(XCURRENT_ZON10M) + TSTATIONS(I)%XMER10M(IN) = STATION_INTERP_2D(XCURRENT_MER10M) + TSTATIONS(I)%XT2M (IN) = STATION_INTERP_2D(XCURRENT_T2M ) + TSTATIONS(I)%XQ2M (IN) = STATION_INTERP_2D(XCURRENT_Q2M ) + TSTATIONS(I)%XHU2M (IN) = STATION_INTERP_2D(XCURRENT_HU2M ) + TSTATIONS(I)%XRN (IN) = STATION_INTERP_2D(XCURRENT_RN ) + TSTATIONS(I)%XH (IN) = STATION_INTERP_2D(XCURRENT_H ) + TSTATIONS(I)%XLE (IN) = STATION_INTERP_2D(XCURRENT_LE ) + TSTATIONS(I)%XLEI (IN) = STATION_INTERP_2D(XCURRENT_LEI ) + TSTATIONS(I)%XGFLUX (IN) = STATION_INTERP_2D(XCURRENT_GFLUX ) IF (CRAD /= 'NONE') THEN - TSTATION%SWD (IN,I) = STATION_INTERP_2D(XCURRENT_SWD ) - TSTATION%SWU (IN,I) = STATION_INTERP_2D(XCURRENT_SWU ) - TSTATION%LWD (IN,I) = STATION_INTERP_2D(XCURRENT_LWD ) - TSTATION%LWU (IN,I) = STATION_INTERP_2D(XCURRENT_LWU ) - TSTATION%SWDIR (IN,I) = STATION_INTERP_2D(XCURRENT_SWDIR ) - TSTATION%SWDIFF(IN,I) = STATION_INTERP_2D(XCURRENT_SWDIFF) - TSTATION%DSTAOD(IN,I) = STATION_INTERP_2D(XCURRENT_DSTAOD) + TSTATIONS(I)%XSWD (IN) = STATION_INTERP_2D(XCURRENT_SWD ) + TSTATIONS(I)%XSWU (IN) = STATION_INTERP_2D(XCURRENT_SWU ) + TSTATIONS(I)%XLWD (IN) = STATION_INTERP_2D(XCURRENT_LWD ) + TSTATIONS(I)%XLWU (IN) = STATION_INTERP_2D(XCURRENT_LWU ) + TSTATIONS(I)%XSWDIR (IN) = STATION_INTERP_2D(XCURRENT_SWDIR ) + TSTATIONS(I)%XSWDIFF(IN) = STATION_INTERP_2D(XCURRENT_SWDIFF) + TSTATIONS(I)%XDSTAOD(IN) = STATION_INTERP_2D(XCURRENT_DSTAOD) ENDIF - TSTATION%SFCO2 (IN,I) = STATION_INTERP_2D(XCURRENT_SFCO2 ) + TSTATIONS(I)%XSFCO2 (IN) = STATION_INTERP_2D(XCURRENT_SFCO2 ) ENDIF - + ! END IF ! @@ -393,48 +393,48 @@ IF (GSTORE) THEN !* 11.2 data stored ! ----------- ! - CALL DISTRIBUTE_STATION(TSTATION%X (I)) - CALL DISTRIBUTE_STATION(TSTATION%Y (I)) - CALL DISTRIBUTE_STATION(TSTATION%Z (I)) - CALL DISTRIBUTE_STATION(TSTATION%LON (I)) - CALL DISTRIBUTE_STATION(TSTATION%LAT (I)) - CALL DISTRIBUTE_STATION(TSTATION%ZON (IN,I)) - CALL DISTRIBUTE_STATION(TSTATION%MER (IN,I)) - CALL DISTRIBUTE_STATION(TSTATION%W (IN,I)) - CALL DISTRIBUTE_STATION(TSTATION%P (IN,I)) - CALL DISTRIBUTE_STATION(TSTATION%TH (IN,I)) + CALL DISTRIBUTE_STATION(TSTATIONS(I)%XX ) + CALL DISTRIBUTE_STATION(TSTATIONS(I)%XY ) + CALL DISTRIBUTE_STATION(TSTATIONS(I)%XZ ) + CALL DISTRIBUTE_STATION(TSTATIONS(I)%XLON ) + CALL DISTRIBUTE_STATION(TSTATIONS(I)%XLAT ) + CALL DISTRIBUTE_STATION(TSTATIONS(I)%XZON (IN)) + CALL DISTRIBUTE_STATION(TSTATIONS(I)%XMER (IN)) + CALL DISTRIBUTE_STATION(TSTATIONS(I)%XW (IN)) + CALL DISTRIBUTE_STATION(TSTATIONS(I)%XP (IN)) + CALL DISTRIBUTE_STATION(TSTATIONS(I)%XTH (IN)) DO JSV=1,SIZE(PR,4) - CALL DISTRIBUTE_STATION(TSTATION%R (IN,I,JSV)) + CALL DISTRIBUTE_STATION(TSTATIONS(I)%XR (IN,JSV)) END DO DO JSV=1,SIZE(PSV,4) - CALL DISTRIBUTE_STATION(TSTATION%SV (IN,I,JSV)) + CALL DISTRIBUTE_STATION(TSTATIONS(I)%XSV (IN,JSV)) END DO - IF (SIZE(PTKE)>0) CALL DISTRIBUTE_STATION(TSTATION%TKE (IN,I)) - IF (SIZE(PTS) >0) CALL DISTRIBUTE_STATION(TSTATION%TSRAD(IN,I)) - CALL DISTRIBUTE_STATION(TSTATION%ZS (I)) + IF (SIZE(PTKE)>0) CALL DISTRIBUTE_STATION(TSTATIONS(I)%XTKE (IN)) + IF (SIZE(PTS) >0) CALL DISTRIBUTE_STATION(TSTATIONS(I)%XTSRAD(IN)) + CALL DISTRIBUTE_STATION(TSTATIONS(I)%XZS ) IF (LDIAG_SURFRAD) THEN - CALL DISTRIBUTE_STATION(TSTATION%T2M (IN,I)) - CALL DISTRIBUTE_STATION(TSTATION%Q2M (IN,I)) - CALL DISTRIBUTE_STATION(TSTATION%HU2M (IN,I)) - CALL DISTRIBUTE_STATION(TSTATION%ZON10M (IN,I)) - CALL DISTRIBUTE_STATION(TSTATION%MER10M (IN,I)) - CALL DISTRIBUTE_STATION(TSTATION%RN (IN,I)) - CALL DISTRIBUTE_STATION(TSTATION%H (IN,I)) - CALL DISTRIBUTE_STATION(TSTATION%LE (IN,I)) - CALL DISTRIBUTE_STATION(TSTATION%LEI (IN,I)) - CALL DISTRIBUTE_STATION(TSTATION%GFLUX (IN,I)) + CALL DISTRIBUTE_STATION(TSTATIONS(I)%XT2M (IN)) + CALL DISTRIBUTE_STATION(TSTATIONS(I)%XQ2M (IN)) + CALL DISTRIBUTE_STATION(TSTATIONS(I)%XHU2M (IN)) + CALL DISTRIBUTE_STATION(TSTATIONS(I)%XZON10M (IN)) + CALL DISTRIBUTE_STATION(TSTATIONS(I)%XMER10M (IN)) + CALL DISTRIBUTE_STATION(TSTATIONS(I)%XRN (IN)) + CALL DISTRIBUTE_STATION(TSTATIONS(I)%XH (IN)) + CALL DISTRIBUTE_STATION(TSTATIONS(I)%XLE (IN)) + CALL DISTRIBUTE_STATION(TSTATIONS(I)%XLEI (IN)) + CALL DISTRIBUTE_STATION(TSTATIONS(I)%XGFLUX (IN)) IF (CRAD /= 'NONE') THEN - CALL DISTRIBUTE_STATION(TSTATION%SWD (IN,I)) - CALL DISTRIBUTE_STATION(TSTATION%SWU (IN,I)) - CALL DISTRIBUTE_STATION(TSTATION%LWD (IN,I)) - CALL DISTRIBUTE_STATION(TSTATION%LWU (IN,I)) - CALL DISTRIBUTE_STATION(TSTATION%SWDIR (IN,I)) - CALL DISTRIBUTE_STATION(TSTATION%SWDIFF (IN,I)) - CALL DISTRIBUTE_STATION(TSTATION%DSTAOD (IN,I)) + CALL DISTRIBUTE_STATION(TSTATIONS(I)%XSWD (IN)) + CALL DISTRIBUTE_STATION(TSTATIONS(I)%XSWU (IN)) + CALL DISTRIBUTE_STATION(TSTATIONS(I)%XLWD (IN)) + CALL DISTRIBUTE_STATION(TSTATIONS(I)%XLWU (IN)) + CALL DISTRIBUTE_STATION(TSTATIONS(I)%XSWDIR (IN)) + CALL DISTRIBUTE_STATION(TSTATIONS(I)%XSWDIFF (IN)) + CALL DISTRIBUTE_STATION(TSTATIONS(I)%XDSTAOD (IN)) END IF - CALL DISTRIBUTE_STATION(TSTATION%SFCO2 (IN,I)) + CALL DISTRIBUTE_STATION(TSTATIONS(I)%XSFCO2 (IN)) ENDIF - ! + ENDDO ! END IF diff --git a/src/MNH/write_stationn.f90 b/src/MNH/write_stationn.f90 index 8d6d36ec6..0746c64d2 100644 --- a/src/MNH/write_stationn.f90 +++ b/src/MNH/write_stationn.f90 @@ -56,11 +56,12 @@ END MODULE MODI_WRITE_STATION_n !! MODIFICATIONS !! ------------- !! Original 15/02/2002 -!! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O +! P. Wautelet: 05/2016-04/2018: new data structures and calls for I/O ! P. Wautelet 13/09/2019: budget: simplify and modernize date/time management ! P. Wautelet 09/10/2020: Write_diachro: use new datatype tpfields ! P. Wautelet 03/03/2021: budgets: add tbudiachrometadata type (useful to pass more information to Write_diachro) ! P. Wautelet 04/02/2022: use TSVLIST to manage metadata of scalar variables +! P. Wautelet 07/04/2022: rewrite types for stations ! -------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -75,7 +76,7 @@ USE MODD_NSV, ONLY: tsvlist, nsv, nsv_aer, nsv_aerbeg, nsv_aerend, & nsv_dst, nsv_dstbeg, nsv_dstend, nsv_slt, nsv_sltbeg, nsv_sltend USE MODD_PARAM_n, ONLY: CRAD, CSURF USE MODD_PARAMETERS, ONLY: XUNDEF -USE MODD_STATION_n, only: NUMBSTAT, STATION, TSTATION +USE MODD_STATION_n, only: NUMBSTAT, TSTATIONS ! USE MODE_AERO_PSD USE MODE_DUST_PSD @@ -94,12 +95,11 @@ TYPE(TFILEDATA), INTENT(IN) :: TPDIAFILE ! diachronic file to write ! 0.2 declaration of local variables ! INTEGER :: II ! loop -INTEGER :: K ! loop ! !---------------------------------------------------------------------------- ! -DO II=1,NUMBSTAT -CALL STATION_DIACHRO_n(TSTATION, II) +DO II = 1, NUMBSTAT + CALL STATION_DIACHRO_n( TSTATIONS(II) ) ENDDO ! !---------------------------------------------------------------------------- @@ -111,14 +111,15 @@ CONTAINS !---------------------------------------------------------------------------- ! !---------------------------------------------------------------------------- -SUBROUTINE STATION_DIACHRO_n(TSTATION,II) +SUBROUTINE STATION_DIACHRO_n( TPSTATION ) use modd_budget, only: NLVL_CATEGORY, NLVL_SUBCATEGORY, NLVL_GROUP, NLVL_SHAPE, NLVL_TIMEAVG, NLVL_NORM, NLVL_MASK use modd_field, only: NMNHDIM_STATION_TIME, NMNHDIM_STATION_PROC, NMNHDIM_UNUSED, & tfieldmetadata_base, TYPEREAL +use modd_station_n, only: tstations_time +use modd_type_station, only: tstationdata -TYPE(STATION), INTENT(IN) :: TSTATION -INTEGER, INTENT(IN) :: II +TYPE(TSTATIONDATA), INTENT(IN) :: TPSTATION ! !* 0.2 declaration of local variables for diachro ! @@ -144,13 +145,13 @@ type(tbudiachrometadata) :: tzbudiachro type(tfieldmetadata_base), dimension(:), allocatable :: tzfields ! !---------------------------------------------------------------------------- -IF (TSTATION%X(II)==XUNDEF) RETURN -IF (TSTATION%Y(II)==XUNDEF) RETURN +IF (TPSTATION%XX==XUNDEF) RETURN +IF (TPSTATION%XY==XUNDEF) RETURN ! -IPROC = 8 + SIZE(TSTATION%R,3) + SIZE(TSTATION%SV,3) +IPROC = 8 + SIZE(TPSTATION%XR,2) + SIZE(TPSTATION%XSV,2) -IF (TSTATION%X(II)==XUNDEF) IPROC = IPROC + 2 -IF (SIZE(TSTATION%TKE )>0) IPROC = IPROC + 1 +IF (TPSTATION%XX==XUNDEF) IPROC = IPROC + 2 +IF (SIZE(TPSTATION%XTKE )>0) IPROC = IPROC + 1 IF (LDIAG_SURFRAD) THEN IF(CSURF=="EXTE") IPROC = IPROC + 10 IF(CRAD/="NONE") IPROC = IPROC + 7 @@ -158,17 +159,17 @@ END IF IF (LORILAM) IPROC = IPROC + JPMODE*(3+NSOA+NCARB+NSP) IF (LDUST) IPROC = IPROC + NMODE_DST*3 IF (LSALT) IPROC = IPROC + NMODE_SLT*3 -IF (ANY(TSTATION%TSRAD(:,:)/=XUNDEF)) IPROC = IPROC + 1 -IF (ANY(TSTATION%SFCO2(:,:)/=XUNDEF)) IPROC = IPROC + 1 +IF (ANY(TPSTATION%XTSRAD(:)/=XUNDEF)) IPROC = IPROC + 1 +IF (ANY(TPSTATION%XSFCO2(:)/=XUNDEF)) IPROC = IPROC + 1 ! -ALLOCATE (ZWORK6(1,1,1,SIZE(tstation%tpdates),1,IPROC)) +ALLOCATE (ZWORK6(1,1,1,SIZE(tstations_time%tpdates),1,IPROC)) ALLOCATE (YCOMMENT(IPROC)) ALLOCATE (YTITLE (IPROC)) ALLOCATE (YUNIT (IPROC)) ALLOCATE (IGRID (IPROC)) ! IGRID = 1 -YGROUP = TSTATION%NAME(II) +YGROUP = TPSTATION%CNAME JPROC = 0 ! !---------------------------------------------------------------------------- @@ -177,227 +178,227 @@ JPROC = JPROC + 1 YTITLE (JPROC) = 'ZS' YUNIT (JPROC) = 'm' YCOMMENT (JPROC) = 'Orography' -ZWORK6 (1,1,1,:,1,JPROC) = TSTATION%ZS(II) +ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XZS ! JPROC = JPROC + 1 YTITLE (JPROC) = 'P' YUNIT (JPROC) = 'Pa' -YCOMMENT (JPROC) = 'Pressure' -ZWORK6 (1,1,1,:,1,JPROC) = TSTATION%P(:,II) +YCOMMENT (JPROC) = 'Pressure' +ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XP(:) ! !JPROC = JPROC + 1 !YTITLE (JPROC) = 'Z' !YUNIT (JPROC) = 'm' !YCOMMENT (JPROC) = 'Z Pos' -!ZWORK6 (1,1,1,:,1,JPROC) = TSTATION%Z(II) +!ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XZ ! IF (LCARTESIAN) THEN JPROC = JPROC + 1 YTITLE (JPROC) = 'X' YUNIT (JPROC) = 'm' YCOMMENT (JPROC) = 'X Pos' - ZWORK6 (1,1,1,:,1,JPROC) = TSTATION%X(II) + ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XX ! JPROC = JPROC + 1 YTITLE (JPROC) = 'Y' YUNIT (JPROC) = 'm' YCOMMENT (JPROC) = 'Y Pos' - ZWORK6 (1,1,1,:,1,JPROC) = TSTATION%Y(II) + ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XY ! JPROC = JPROC + 1 YTITLE (JPROC) = 'U' YUNIT (JPROC) = 'm s-1' YCOMMENT (JPROC) = 'Axial velocity' - ZWORK6 (1,1,1,:,1,JPROC) = TSTATION%ZON(:,II) + ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XZON(:) ! JPROC = JPROC + 1 YTITLE (JPROC) = 'V' YUNIT (JPROC) = 'm s-1' YCOMMENT (JPROC) = 'Transversal velocity' - ZWORK6 (1,1,1,:,1,JPROC) = TSTATION%MER(:,II) + ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XMER(:) ELSE JPROC = JPROC + 1 YTITLE (JPROC) = 'LON' YUNIT (JPROC) = 'degree' YCOMMENT (JPROC) = 'Longitude' - ZWORK6 (1,1,1,:,1,JPROC) = TSTATION%LON(II) + ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XLON ! JPROC = JPROC + 1 YTITLE (JPROC) = 'LAT' YUNIT (JPROC) = 'degree' YCOMMENT (JPROC) = 'Latitude' - ZWORK6 (1,1,1,:,1,JPROC) = TSTATION%LAT(II) + ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XLAT ! JPROC = JPROC + 1 YTITLE (JPROC) = 'ZON_WIND' YUNIT (JPROC) = 'm s-1' YCOMMENT (JPROC) = 'Zonal wind' - ZWORK6 (1,1,1,:,1,JPROC) = TSTATION%ZON(:,II) + ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XZON(:) ! JPROC = JPROC + 1 YTITLE (JPROC) = 'MER_WIND' YUNIT (JPROC) = 'm s-1' YCOMMENT (JPROC) = 'Meridional wind' - ZWORK6 (1,1,1,:,1,JPROC) = TSTATION%MER(:,II) + ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XMER(:) ENDIF ! JPROC = JPROC + 1 YTITLE (JPROC) = 'W' YUNIT (JPROC) = 'm s-1' -YCOMMENT (JPROC) = 'Air vertical speed' -ZWORK6 (1,1,1,:,1,JPROC) = TSTATION%W(:,II) +YCOMMENT (JPROC) = 'Air vertical speed' +ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XW(:) ! JPROC = JPROC + 1 YTITLE (JPROC) = 'Th' YUNIT (JPROC) = 'K' -YCOMMENT (JPROC) = 'Potential temperature' -ZWORK6 (1,1,1,:,1,JPROC) = TSTATION%TH(:,II) +YCOMMENT (JPROC) = 'Potential temperature' +ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XTH(:) ! IF (LDIAG_SURFRAD) THEN IF (CSURF=="EXTE") THEN JPROC = JPROC + 1 YTITLE (JPROC) = 'T2m' YUNIT (JPROC) = 'K' - YCOMMENT (JPROC) = '2-m temperature' - ZWORK6 (1,1,1,:,1,JPROC) = TSTATION%T2M(:,II) + YCOMMENT (JPROC) = '2-m temperature' + ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XT2M(:) ! JPROC = JPROC + 1 YTITLE (JPROC) = 'Q2m' YUNIT (JPROC) = 'kg kg-1' - YCOMMENT (JPROC) = '2-m humidity' - ZWORK6 (1,1,1,:,1,JPROC) = TSTATION%Q2M(:,II) + YCOMMENT (JPROC) = '2-m humidity' + ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XQ2M(:) ! JPROC = JPROC + 1 YTITLE (JPROC) = 'HU2m' YUNIT (JPROC) = 'percent' - YCOMMENT (JPROC) = '2-m relative humidity' - ZWORK6 (1,1,1,:,1,JPROC) = TSTATION%HU2M(:,II) + YCOMMENT (JPROC) = '2-m relative humidity' + ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XHU2M(:) ! JPROC = JPROC + 1 YTITLE (JPROC) = 'zon10m' YUNIT (JPROC) = 'm s-1' - YCOMMENT (JPROC) = '10-m zonal wind' - ZWORK6 (1,1,1,:,1,JPROC) = TSTATION%ZON10M(:,II) - ! + YCOMMENT (JPROC) = '10-m zonal wind' + ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XZON10M(:) + ! JPROC = JPROC + 1 YTITLE (JPROC) = 'mer10m' YUNIT (JPROC) = 'm s-1' - YCOMMENT (JPROC) = '10-m meridian wind' - ZWORK6 (1,1,1,:,1,JPROC) = TSTATION%MER10M(:,II) + YCOMMENT (JPROC) = '10-m meridian wind' + ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XMER10M(:) ! JPROC = JPROC + 1 - YTITLE (JPROC) = 'RN' + YTITLE (JPROC) = 'RN' YUNIT (JPROC) = 'W m-2' - YCOMMENT (JPROC) = 'Net radiation' - ZWORK6 (1,1,1,:,1,JPROC) = TSTATION%RN(:,II) + YCOMMENT (JPROC) = 'Net radiation' + ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XRN(:) ! JPROC = JPROC + 1 - YTITLE (JPROC) = 'H' + YTITLE (JPROC) = 'H' YUNIT (JPROC) = 'W m-2' YCOMMENT (JPROC) = 'Sensible heat flux' - ZWORK6 (1,1,1,:,1,JPROC) = TSTATION%H(:,II) - ! + ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XH(:) + ! JPROC = JPROC + 1 - YTITLE (JPROC) = 'LE' + YTITLE (JPROC) = 'LE' YUNIT (JPROC) = 'W m-2' - YCOMMENT (JPROC) = 'Total Latent heat flux' - ZWORK6 (1,1,1,:,1,JPROC) = TSTATION%LE(:,II) + YCOMMENT (JPROC) = 'Total Latent heat flux' + ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XLE(:) ! JPROC = JPROC + 1 - YTITLE (JPROC) = 'G' + YTITLE (JPROC) = 'G' YUNIT (JPROC) = 'W m-2' - YCOMMENT (JPROC) = 'Storage heat flux' - ZWORK6 (1,1,1,:,1,JPROC) = TSTATION%GFLUX(:,II) + YCOMMENT (JPROC) = 'Storage heat flux' + ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XGFLUX(:) ! JPROC = JPROC + 1 - YTITLE (JPROC) = 'LEI' + YTITLE (JPROC) = 'LEI' YUNIT (JPROC) = 'W m-2' - YCOMMENT (JPROC) = 'Solid Latent heat flux' - ZWORK6 (1,1,1,:,1,JPROC) = TSTATION%LEI(:,II) + YCOMMENT (JPROC) = 'Solid Latent heat flux' + ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XLEI(:) END IF IF (CRAD /= 'NONE') THEN JPROC = JPROC + 1 - YTITLE (JPROC) = 'SWD' + YTITLE (JPROC) = 'SWD' YUNIT (JPROC) = 'W m-2' - YCOMMENT (JPROC) = 'Downward short-wave radiation' - ZWORK6 (1,1,1,:,1,JPROC) = TSTATION%SWD(:,II) - ! + YCOMMENT (JPROC) = 'Downward short-wave radiation' + ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XSWD(:) + ! JPROC = JPROC + 1 - YTITLE (JPROC) = 'SWU' + YTITLE (JPROC) = 'SWU' YUNIT (JPROC) = 'W m-2' - YCOMMENT (JPROC) = 'Upward short-wave radiation' - ZWORK6 (1,1,1,:,1,JPROC) = TSTATION%SWU(:,II) - ! + YCOMMENT (JPROC) = 'Upward short-wave radiation' + ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XSWU(:) + ! JPROC = JPROC + 1 - YTITLE (JPROC) = 'LWD' + YTITLE (JPROC) = 'LWD' YUNIT (JPROC) = 'W m-2' YCOMMENT (JPROC) = 'Downward long-wave radiation' - ZWORK6 (1,1,1,:,1,JPROC) = TSTATION%LWD(:,II) - ! + ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XLWD(:) + ! JPROC = JPROC + 1 - YTITLE (JPROC) = 'LWU' + YTITLE (JPROC) = 'LWU' YUNIT (JPROC) = 'W m-2' YCOMMENT (JPROC) = 'Upward long-wave radiation' - ZWORK6 (1,1,1,:,1,JPROC) = TSTATION%LWU(:,II) + ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XLWU(:) JPROC = JPROC + 1 ! - YTITLE (JPROC) = 'SWDIR' + YTITLE (JPROC) = 'SWDIR' YUNIT (JPROC) = 'W m-2' - YCOMMENT (JPROC) = 'Downward direct short-wave radiation' - ZWORK6 (1,1,1,:,1,JPROC) = TSTATION%SWDIR(:,II) + YCOMMENT (JPROC) = 'Downward direct short-wave radiation' + ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XSWDIR(:) ! JPROC = JPROC + 1 - YTITLE (JPROC) = 'SWDIFF' + YTITLE (JPROC) = 'SWDIFF' YUNIT (JPROC) = 'W m-2' - YCOMMENT (JPROC) = 'Downward diffuse short-wave radiation' - ZWORK6 (1,1,1,:,1,JPROC) = TSTATION%SWDIFF(:,II) - ! + YCOMMENT (JPROC) = 'Downward diffuse short-wave radiation' + ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XSWDIFF(:) + ! JPROC = JPROC + 1 - YTITLE (JPROC) = 'DSTAOD' + YTITLE (JPROC) = 'DSTAOD' YUNIT (JPROC) = 'm' YCOMMENT (JPROC) = 'Dust aerosol optical depth' - ZWORK6 (1,1,1,:,1,JPROC) = TSTATION%DSTAOD(:,II) + ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XDSTAOD(:) ! END IF ENDIF ! -DO JRR=1,SIZE(TSTATION%R,3) +DO JRR=1,SIZE(TPSTATION%XR,2) JPROC = JPROC+1 YUNIT (JPROC) = 'kg kg-1' - ZWORK6 (1,1,1,:,1,JPROC) = TSTATION%R(:,II,JRR) + ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XR(:,JRR) IF (JRR==1) THEN YTITLE (JPROC) = 'Rv' - YCOMMENT (JPROC) = 'Water vapor mixing ratio' + YCOMMENT (JPROC) = 'Water vapor mixing ratio' ELSE IF (JRR==2) THEN YTITLE (JPROC) = 'Rc' - YCOMMENT (JPROC) = 'Liquid cloud water mixing ratio' + YCOMMENT (JPROC) = 'Liquid cloud water mixing ratio' ELSE IF (JRR==3) THEN YTITLE (JPROC) = 'Rr' - YCOMMENT (JPROC) = 'Rain water mixing ratio' + YCOMMENT (JPROC) = 'Rain water mixing ratio' ELSE IF (JRR==4) THEN YTITLE (JPROC) = 'Ri' - YCOMMENT (JPROC) = 'Ice cloud water mixing ratio' + YCOMMENT (JPROC) = 'Ice cloud water mixing ratio' ELSE IF (JRR==5) THEN YTITLE (JPROC) = 'Rs' - YCOMMENT (JPROC) = 'Snow mixing ratio' + YCOMMENT (JPROC) = 'Snow mixing ratio' ELSE IF (JRR==6) THEN YTITLE (JPROC) = 'Rg' - YCOMMENT (JPROC) = 'Graupel mixing ratio' + YCOMMENT (JPROC) = 'Graupel mixing ratio' ELSE IF (JRR==7) THEN YTITLE (JPROC) = 'Rh' - YCOMMENT (JPROC) = 'Hail mixing ratio' + YCOMMENT (JPROC) = 'Hail mixing ratio' END IF END DO ! -IF (SIZE(TSTATION%TKE,1)>0) THEN +IF (SIZE(TPSTATION%XTKE,1)>0) THEN JPROC = JPROC+1 YTITLE (JPROC) = 'Tke' YUNIT (JPROC) = 'm2 s-2' YCOMMENT (JPROC) = 'Turbulent kinetic energy' - ZWORK6 (1,1,1,:,1,JPROC) = TSTATION%TKE(:,II) + ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XTKE(:) END IF ! -IF (SIZE(TSTATION%SV,3)>=1) THEN +IF (SIZE(TPSTATION%XSV,2)>=1) THEN ! Scalar variables DO JSV = 1, NSV JPROC = JPROC + 1 @@ -405,33 +406,33 @@ IF (SIZE(TSTATION%SV,3)>=1) THEN YCOMMENT(JPROC) = '' IF ( TRIM( TSVLIST(JSV)%CUNITS ) == 'ppv' ) THEN YUNIT(JPROC) = 'ppb' - ZWORK6(1,1,1,:,1,JPROC) = TSTATION%SV(:,II,JSV) * 1.e9 !*1e9 for conversion ppv->ppb + ZWORK6(1,1,1,:,1,JPROC) = TPSTATION%XSV(:,JSV) * 1.e9 !*1e9 for conversion ppv->ppb ELSE YUNIT(JPROC) = TRIM( TSVLIST(JSV)%CUNITS ) - ZWORK6(1,1,1,:,1,JPROC) = TSTATION%SV(:,II,JSV) + ZWORK6(1,1,1,:,1,JPROC) = TPSTATION%XSV(:,JSV) END IF END DO - IF ((LORILAM).AND. .NOT.(ANY(TSTATION%P(:,II) == 0.))) THEN - ALLOCATE (ZSV(1,1,SIZE(tstation%tpdates),NSV_AER)) - ALLOCATE (ZRHO(1,1,SIZE(tstation%tpdates))) - ALLOCATE (ZN0(1,1,SIZE(tstation%tpdates),JPMODE)) - ALLOCATE (ZRG(1,1,SIZE(tstation%tpdates),JPMODE)) - ALLOCATE (ZSIG(1,1,SIZE(tstation%tpdates),JPMODE)) - ALLOCATE (ZPTOTA(1,1,SIZE(tstation%tpdates),NSP+NCARB+NSOA,JPMODE)) - ZSV(1,1,:,1:NSV_AER) = TSTATION%SV(:,II,NSV_AERBEG:NSV_AEREND) - IF (SIZE(TSTATION%R,3) >0) THEN + IF ((LORILAM).AND. .NOT.(ANY(TPSTATION%XP(:) == 0.))) THEN + ALLOCATE (ZSV(1,1,SIZE(tstations_time%tpdates),NSV_AER)) + ALLOCATE (ZRHO(1,1,SIZE(tstations_time%tpdates))) + ALLOCATE (ZN0(1,1,SIZE(tstations_time%tpdates),JPMODE)) + ALLOCATE (ZRG(1,1,SIZE(tstations_time%tpdates),JPMODE)) + ALLOCATE (ZSIG(1,1,SIZE(tstations_time%tpdates),JPMODE)) + ALLOCATE (ZPTOTA(1,1,SIZE(tstations_time%tpdates),NSP+NCARB+NSOA,JPMODE)) + ZSV(1,1,:,1:NSV_AER) = TPSTATION%XSV(:,NSV_AERBEG:NSV_AEREND) + IF (SIZE(TPSTATION%XR,2) >0) THEN ZRHO(1,1,:) = 0. - DO JRR=1,SIZE(TSTATION%R,3) - ZRHO(1,1,:) = ZRHO(1,1,:) + TSTATION%R(:,II,JRR) + DO JRR=1,SIZE(TPSTATION%XR,2) + ZRHO(1,1,:) = ZRHO(1,1,:) + TPSTATION%XR(:,JRR) ENDDO - ZRHO(1,1,:) = TSTATION%TH(:,II) * ( 1. + XRV/XRD*TSTATION%R(:,II,1) ) & + ZRHO(1,1,:) = TPSTATION%XTH(:) * ( 1. + XRV/XRD*TPSTATION%XR(:,1) ) & / ( 1. + ZRHO(1,1,:) ) ELSE - ZRHO(1,1,:) = TSTATION%TH(:,II) + ZRHO(1,1,:) = TPSTATION%XTH(:) ENDIF - ZRHO(1,1,:) = TSTATION%P(:,II) / & - (XRD *ZRHO(1,1,:) *((TSTATION%P(:,II)/XP00)**(XRD/XCPD)) ) + ZRHO(1,1,:) = TPSTATION%XP(:) / & + (XRD *ZRHO(1,1,:) *((TPSTATION%XP(:)/XP00)**(XRD/XCPD)) ) CALL PPP2AERO(ZSV,ZRHO, PSIG3D=ZSIG, PRG3D=ZRG, PN3D=ZN0,PCTOTA=ZPTOTA) @@ -552,25 +553,25 @@ IF (SIZE(TSTATION%SV,3)>=1) THEN DEALLOCATE (ZN0,ZRG,ZSIG) END IF - IF ((LDUST).AND. .NOT.(ANY(TSTATION%P(:,II) == 0.))) THEN - ALLOCATE (ZSV(1,1,SIZE(tstation%tpdates),NSV_DST)) - ALLOCATE (ZRHO(1,1,SIZE(tstation%tpdates))) - ALLOCATE (ZN0(1,1,SIZE(tstation%tpdates),NMODE_DST)) - ALLOCATE (ZRG(1,1,SIZE(tstation%tpdates),NMODE_DST)) - ALLOCATE (ZSIG(1,1,SIZE(tstation%tpdates),NMODE_DST)) - ZSV(1,1,:,1:NSV_DST) = TSTATION%SV(:,II,NSV_DSTBEG:NSV_DSTEND) - IF (SIZE(TSTATION%R,3) >0) THEN + IF ((LDUST).AND. .NOT.(ANY(TPSTATION%XP(:) == 0.))) THEN + ALLOCATE (ZSV(1,1,SIZE(tstations_time%tpdates),NSV_DST)) + ALLOCATE (ZRHO(1,1,SIZE(tstations_time%tpdates))) + ALLOCATE (ZN0(1,1,SIZE(tstations_time%tpdates),NMODE_DST)) + ALLOCATE (ZRG(1,1,SIZE(tstations_time%tpdates),NMODE_DST)) + ALLOCATE (ZSIG(1,1,SIZE(tstations_time%tpdates),NMODE_DST)) + ZSV(1,1,:,1:NSV_DST) = TPSTATION%XSV(:,NSV_DSTBEG:NSV_DSTEND) + IF (SIZE(TPSTATION%XR,2) >0) THEN ZRHO(1,1,:) = 0. - DO JRR=1,SIZE(TSTATION%R,3) - ZRHO(1,1,:) = ZRHO(1,1,:) + TSTATION%R(:,II,JRR) + DO JRR=1,SIZE(TPSTATION%XR,2) + ZRHO(1,1,:) = ZRHO(1,1,:) + TPSTATION%XR(:,JRR) ENDDO - ZRHO(1,1,:) = TSTATION%TH(:,II) * ( 1. + XRV/XRD*TSTATION%R(:,II,1) ) & + ZRHO(1,1,:) = TPSTATION%XTH(:) * ( 1. + XRV/XRD*TPSTATION%XR(:,1) ) & / ( 1. + ZRHO(1,1,:) ) ELSE - ZRHO(1,1,:) = TSTATION%TH(:,II) + ZRHO(1,1,:) = TPSTATION%XTH(:) ENDIF - ZRHO(1,1,:) = TSTATION%P(:,II) / & - (XRD *ZRHO(1,1,:) *((TSTATION%P(:,II)/XP00)**(XRD/XCPD)) ) + ZRHO(1,1,:) = TPSTATION%XP(:) / & + (XRD *ZRHO(1,1,:) *((TPSTATION%XP(:)/XP00)**(XRD/XCPD)) ) CALL PPP2DUST(ZSV,ZRHO, PSIG3D=ZSIG, PRG3D=ZRG, PN3D=ZN0) DO JSV=1,NMODE_DST ! mean radius @@ -596,25 +597,25 @@ IF (SIZE(TSTATION%SV,3)>=1) THEN DEALLOCATE (ZN0,ZRG,ZSIG) END IF - IF ((LSALT).AND. .NOT.(ANY(TSTATION%P(:,II) == 0.))) THEN - ALLOCATE (ZSV(1,1,SIZE(tstation%tpdates),NSV_SLT)) - ALLOCATE (ZRHO(1,1,SIZE(tstation%tpdates))) - ALLOCATE (ZN0(1,1,SIZE(tstation%tpdates),NMODE_SLT)) - ALLOCATE (ZRG(1,1,SIZE(tstation%tpdates),NMODE_SLT)) - ALLOCATE (ZSIG(1,1,SIZE(tstation%tpdates),NMODE_SLT)) - ZSV(1,1,:,1:NSV_SLT) = TSTATION%SV(:,II,NSV_SLTBEG:NSV_SLTEND) - IF (SIZE(TSTATION%R,3) >0) THEN + IF ((LSALT).AND. .NOT.(ANY(TPSTATION%XP(:) == 0.))) THEN + ALLOCATE (ZSV(1,1,SIZE(tstations_time%tpdates),NSV_SLT)) + ALLOCATE (ZRHO(1,1,SIZE(tstations_time%tpdates))) + ALLOCATE (ZN0(1,1,SIZE(tstations_time%tpdates),NMODE_SLT)) + ALLOCATE (ZRG(1,1,SIZE(tstations_time%tpdates),NMODE_SLT)) + ALLOCATE (ZSIG(1,1,SIZE(tstations_time%tpdates),NMODE_SLT)) + ZSV(1,1,:,1:NSV_SLT) = TPSTATION%XSV(:,NSV_SLTBEG:NSV_SLTEND) + IF (SIZE(TPSTATION%XR,2) >0) THEN ZRHO(1,1,:) = 0. - DO JRR=1,SIZE(TSTATION%R,3) - ZRHO(1,1,:) = ZRHO(1,1,:) + TSTATION%R(:,II,JRR) + DO JRR=1,SIZE(TPSTATION%XR,2) + ZRHO(1,1,:) = ZRHO(1,1,:) + TPSTATION%XR(:,JRR) ENDDO - ZRHO(1,1,:) = TSTATION%TH(:,II) * ( 1. + XRV/XRD*TSTATION%R(:,II,1) ) & - / ( 1. + ZRHO(1,1,:) ) + ZRHO(1,1,:) = TPSTATION%XTH(:) * ( 1. + XRV/XRD*TPSTATION%XR(:,1) ) & + / ( 1. + ZRHO(1,1,:) ) ELSE - ZRHO(1,1,:) = TSTATION%TH(:,II) + ZRHO(1,1,:) = TPSTATION%XTH(:) ENDIF - ZRHO(1,1,:) = TSTATION%P(:,II) / & - (XRD *ZRHO(1,1,:) *((TSTATION%P(:,II)/XP00)**(XRD/XCPD)) ) + ZRHO(1,1,:) = TPSTATION%XP(:) / & + (XRD *ZRHO(1,1,:) *((TPSTATION%XP(:)/XP00)**(XRD/XCPD)) ) CALL PPP2SALT(ZSV,ZRHO, PSIG3D=ZSIG, PRG3D=ZRG, PN3D=ZN0) DO JSV=1,NMODE_SLT ! mean radius @@ -636,31 +637,31 @@ IF (SIZE(TSTATION%SV,3)>=1) THEN WRITE(YCOMMENT(JPROC),'(A13,I1)')'N0 DUST MODE ',JSV ZWORK6 (1,1,1,:,1,JPROC) = ZN0(1,1,:,JSV) ENDDO - DEALLOCATE (ZSV,ZRHO) - DEALLOCATE (ZN0,ZRG,ZSIG) + DEALLOCATE (ZSV,ZRHO) + DEALLOCATE (ZN0,ZRG,ZSIG) END IF END IF -IF (ANY(TSTATION%TSRAD(:,:)/=XUNDEF)) THEN +IF (ANY(TPSTATION%XTSRAD(:)/=XUNDEF)) THEN JPROC = JPROC+1 YTITLE (JPROC) = 'Tsrad' YUNIT (JPROC) = 'K' YCOMMENT (JPROC) = 'Radiative Surface Temperature' - ZWORK6 (1,1,1,:,1,JPROC) = TSTATION%TSRAD(:,II) + ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XTSRAD(:) END IF ! -IF (ANY(TSTATION%SFCO2(:,:)/=XUNDEF)) THEN +IF (ANY(TPSTATION%XSFCO2(:)/=XUNDEF)) THEN JPROC = JPROC+1 YTITLE (JPROC) = 'SFCO2' YUNIT (JPROC) = 'mg m-2 s-1' YCOMMENT (JPROC) = 'CO2 Surface Flux' - ZWORK6 (1,1,1,:,1,JPROC) = TSTATION%SFCO2(:,II) + ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XSFCO2(:) END IF ! !---------------------------------------------------------------------------- ! ! -ALLOCATE (ZW6(1,1,1,SIZE(tstation%tpdates),1,JPROC)) +ALLOCATE (ZW6(1,1,1,SIZE(tstations_time%tpdates),1,JPROC)) ZW6 = ZWORK6(:,:,:,:,:,:JPROC) DEALLOCATE(ZWORK6) ! @@ -727,7 +728,7 @@ tzbudiachro%njh = 1 tzbudiachro%nkl = 1 tzbudiachro%nkh = 1 -call Write_diachro( tpdiafile, tzbudiachro, tzfields, tstation%tpdates, zw6 ) +call Write_diachro( tpdiafile, tzbudiachro, tzfields, tstations_time%tpdates, zw6 ) deallocate( tzfields ) -- GitLab