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