diff --git a/src/testprogs/rain_ice_old/getdata_rain_ice_old_mod.F90 b/src/testprogs/rain_ice_old/getdata_rain_ice_old_mod.F90
index 69536b52e89cb0bb1e8f5c3917680d7492283db3..e327f692a891ac1a9c8a3338bf6bf921f3ec0695 100644
--- a/src/testprogs/rain_ice_old/getdata_rain_ice_old_mod.F90
+++ b/src/testprogs/rain_ice_old/getdata_rain_ice_old_mod.F90
@@ -1,743 +1,525 @@
 MODULE GETDATA_RAIN_ICE_OLD_MOD
 
 USE OMP_LIB
-USE MODD_RAIN_ICE_PARAM_n, ONLY : RAIN_ICE_PARAMN
-
+USE ARRAYS_MANIP, ONLY: SETUP, REPLICATE, NPROMIZE, INTERPOLATE, SET
 USE ISO_FORTRAN_ENV, ONLY: OUTPUT_UNIT
 
-INTERFACE SET
-  MODULE PROCEDURE SET2
-  MODULE PROCEDURE SET3
-  MODULE PROCEDURE SET4
-  MODULE PROCEDURE SETL
-END INTERFACE
-
-INTERFACE NPROMIZE
-  MODULE PROCEDURE NPROMIZE2
-  MODULE PROCEDURE NPROMIZE3
-  MODULE PROCEDURE NPROMIZE4
-END INTERFACE
-
 CONTAINS
 
-SUBROUTINE GETDATA_RAIN_ICE_OLD(NPROMA, NBLOCKS, NFLEVG, KRR,             &
-                                OSEDIC, OCND2, LKOGAN, LMODICEDEP, OWARM, &
-                                KKA, KKU, KKL, KSPLITR,                   &
-                                PTSTEP, CSEDIM, CSUBG_AUCV_RC,           &
-                                PDZZ_B, PRHODJ_B, PRHODREF_B,             &
-                                PEXNREF_B, PPABSM_B,                      &
-                                PCIT_B, PCIT_OUT_B,                       &
-                                PCLDFR_B,                                 &
-                                PICLDFR_B, PSSIO_B, PSSIU_B, PIFR_B,      &
-                                PTHT_B, PRT_B, PTHS_B, PTHS_OUT_B,        &
-                                PRS_B, PRS_OUT_B,                         &
-                                PSIGS_B, PSEA_B, PTOWN_B,                 &
-                                ZINPRC_B, ZINPRC_OUT_B,                   &
-                                PINPRR_B, PINPRR_OUT_B,                   &
-                                PEVAP_B, PEVAP_OUT_B,                     &
-                                PINPRS_B, PINPRS_OUT_B,                   &
-                                PINPRG_B, PINPRG_OUT_B,                   &
-                                PINPRH_B, PINPRH_OUT_B,                   &
-                                PICENU_B, PKGN_ACON_B, PKGN_SBGR_B,       &
-                                PFPR_B, PFPR_OUT_B, ODMICRO, LDVERBOSE)
-
-  USE IEEE_ARITHMETIC, ONLY : IEEE_SIGNALING_NAN, IEEE_VALUE
-
-  IMPLICIT NONE
-
-
-  INTEGER      :: KLON
-  INTEGER      :: KIDIA
-  INTEGER      :: KLEV
-
-  LOGICAL, INTENT(IN) :: LDVERBOSE
-
-  INTEGER, INTENT(OUT) :: NPROMA, NBLOCKS, NFLEVG, KRR
-  LOGICAL, INTENT(OUT) :: OSEDIC, OCND2, LKOGAN, LMODICEDEP, OWARM
-  INTEGER, INTENT(OUT) :: KKA, KKU, KKL, KSPLITR
-  REAL,    INTENT(OUT) :: PTSTEP
-
-  CHARACTER(LEN=4), INTENT(OUT) :: CSEDIM
-  CHARACTER(LEN=4), INTENT(OUT) :: CSUBG_AUCV_RC
-
-  REAL, ALLOCATABLE, DIMENSION(:,:,:),   INTENT(OUT) :: PDZZ_B
-  REAL, ALLOCATABLE, DIMENSION(:,:,:),   INTENT(OUT) :: PRHODJ_B
-  REAL, ALLOCATABLE, DIMENSION(:,:,:),   INTENT(OUT) :: PRHODREF_B
-  REAL, ALLOCATABLE, DIMENSION(:,:,:),   INTENT(OUT) :: PEXNREF_B
-  REAL, ALLOCATABLE, DIMENSION(:,:,:),   INTENT(OUT) :: PPABSM_B
-  REAL, ALLOCATABLE, DIMENSION(:,:,:),   INTENT(OUT) :: PCIT_B, PCIT_OUT_B
-  REAL, ALLOCATABLE, DIMENSION(:,:,:),   INTENT(OUT) :: PCLDFR_B
-
-  REAL, ALLOCATABLE, DIMENSION(:,:,:),   INTENT(OUT) :: PICLDFR_B
-  REAL, ALLOCATABLE, DIMENSION(:,:,:),   INTENT(OUT) :: PSSIO_B
-  REAL, ALLOCATABLE, DIMENSION(:,:,:),   INTENT(OUT) :: PSSIU_B
-  REAL, ALLOCATABLE, DIMENSION(:,:,:),   INTENT(OUT) :: PIFR_B
-
-  REAL, ALLOCATABLE, DIMENSION(:,:,:),   INTENT(OUT) :: PTHT_B
-  REAL, ALLOCATABLE, DIMENSION(:,:,:,:), INTENT(OUT) :: PRT_B
-  REAL, ALLOCATABLE, DIMENSION(:,:,:),   INTENT(OUT) :: PTHS_B, PTHS_OUT_B
-  REAL, ALLOCATABLE, DIMENSION(:,:,:,:), INTENT(OUT) :: PRS_B,  PRS_OUT_B
-
-  REAL, ALLOCATABLE, DIMENSION(:,:),     INTENT(OUT) :: ZINPRC_B, ZINPRC_OUT_B
-  REAL, ALLOCATABLE, DIMENSION(:,:),     INTENT(OUT) :: PINPRR_B, PINPRR_OUT_B
-  REAL, ALLOCATABLE, DIMENSION(:,:,:),   INTENT(OUT) :: PEVAP_B,  PEVAP_OUT_B
-  REAL, ALLOCATABLE, DIMENSION(:,:),     INTENT(OUT) :: PINPRS_B, PINPRS_OUT_B
-  REAL, ALLOCATABLE, DIMENSION(:,:),     INTENT(OUT) :: PINPRG_B, PINPRG_OUT_B
-  REAL, ALLOCATABLE, DIMENSION(:,:),     INTENT(OUT) :: PINPRH_B, PINPRH_OUT_B
-
-  REAL, ALLOCATABLE, DIMENSION(:,:,:),   INTENT(OUT) :: PSIGS_B
-  REAL, ALLOCATABLE, DIMENSION(:,:),     INTENT(OUT) :: PSEA_B
-  REAL, ALLOCATABLE, DIMENSION(:,:),     INTENT(OUT) :: PTOWN_B
-
-  REAL, ALLOCATABLE, DIMENSION(:,:),     INTENT(OUT) :: PICENU_B
-  REAL, ALLOCATABLE, DIMENSION(:,:),     INTENT(OUT) :: PKGN_ACON_B
-  REAL, ALLOCATABLE, DIMENSION(:,:),     INTENT(OUT) :: PKGN_SBGR_B
-
-  REAL, ALLOCATABLE, DIMENSION(:,:,:,:), INTENT(OUT) :: PFPR_B, PFPR_OUT_B
-
-  LOGICAL, ALLOCATABLE, DIMENSION(:,:,:), INTENT(OUT) :: ODMICRO
-
-
-  REAL, ALLOCATABLE, DIMENSION(:,:,:)   :: PDZZ
-  REAL, ALLOCATABLE, DIMENSION(:,:,:)   :: PRHODJ
-  REAL, ALLOCATABLE, DIMENSION(:,:,:)   :: PRHODREF
-  REAL, ALLOCATABLE, DIMENSION(:,:,:)   :: PEXNREF
-  REAL, ALLOCATABLE, DIMENSION(:,:,:)   :: PPABSM
-  REAL, ALLOCATABLE, DIMENSION(:,:,:)   :: PCIT, PCIT_OUT
-  REAL, ALLOCATABLE, DIMENSION(:,:,:)   :: PCLDFR
-
-  REAL, ALLOCATABLE, DIMENSION(:,:,:)   :: PICLDFR
-  REAL, ALLOCATABLE, DIMENSION(:,:,:)   :: PSSIO
-  REAL, ALLOCATABLE, DIMENSION(:,:,:)   :: PSSIU
-  REAL, ALLOCATABLE, DIMENSION(:,:,:)   :: PIFR
-
-  REAL, ALLOCATABLE, DIMENSION(:,:,:)   :: PTHT
-  REAL, ALLOCATABLE, DIMENSION(:,:,:,:) :: PRT
-  REAL, ALLOCATABLE, DIMENSION(:,:,:)   :: PTHS, PTHS_OUT
-  REAL, ALLOCATABLE, DIMENSION(:,:,:,:) :: PRS,  PRS_OUT
-
-  REAL, ALLOCATABLE, DIMENSION(:,:,:)   :: PSIGS
-  REAL, ALLOCATABLE, DIMENSION(:,:)     :: PSEA
-  REAL, ALLOCATABLE, DIMENSION(:,:)     :: PTOWN
-
-  REAL, ALLOCATABLE, DIMENSION(:,:)     :: PICENU
-  REAL, ALLOCATABLE, DIMENSION(:,:)     :: PKGN_ACON
-  REAL, ALLOCATABLE, DIMENSION(:,:)     :: PKGN_SBGR
-
-  REAL, ALLOCATABLE, DIMENSION(:,:)     :: ZINPRC_OUT
-  REAL, ALLOCATABLE, DIMENSION(:,:)     :: PINPRR_OUT
-  REAL, ALLOCATABLE, DIMENSION(:,:,:)   :: PEVAP_OUT
-  REAL, ALLOCATABLE, DIMENSION(:,:)     :: PINPRS_OUT
-  REAL, ALLOCATABLE, DIMENSION(:,:)     :: PINPRG_OUT
-
-  REAL, ALLOCATABLE, DIMENSION(:,:,:,:) :: PFPR_OUT
-
-  REAL, ALLOCATABLE, DIMENSION(:,:)     :: PINPRH_OUT
-
-  INTEGER :: IFILE, NFILES
-  INTEGER :: NGPTOT, i, j
+SUBROUTINE GETDATA_RAIN_ICE_OLD(NPROMA, NGPBLKS, NFLEVG, KRR,             &
+                              OSEDIC, OCND2, LKOGAN, LMODICEDEP, OWARM, &
+                              KKA, KKU, KKL, KSPLITR,                   &
+                              PTSTEP, CSEDIM, CSUBG_AUCV_RC,           &
+                              PDZZ_B, PRHODJ_B, PRHODREF_B,             &
+                              PEXNREF_B, PPABSM_B,                      &
+                              PCIT_B, PCIT_OUT_B,                       &
+                              PCLDFR_B,                                 &
+                              PICLDFR_B, PSSIO_B, PSSIU_B, PIFR_B,      &
+                              PTHT_B, PRT_B, PTHS_B, PTHS_OUT_B,        &
+                              PRS_B, PRS_OUT_B,                         &
+                              PSIGS_B, PSEA_B, PTOWN_B,                 &
+                              ZINPRC_B, ZINPRC_OUT_B,                   &
+                              PINPRR_B, PINPRR_OUT_B,                   &
+                              PEVAP_B, PEVAP_OUT_B,                     &
+                              PINPRS_B, PINPRS_OUT_B,                   &
+                              PINPRG_B, PINPRG_OUT_B,                   &
+                              PINPRH_B, PINPRH_OUT_B,                   &
+                              PICENU_B, PKGN_ACON_B, PKGN_SBGR_B,       &
+                              PFPR_B, PFPR_OUT_B, ODMICRO, LDVERBOSE)
+
+USE IEEE_ARITHMETIC, ONLY : IEEE_SIGNALING_NAN, IEEE_VALUE
+
+IMPLICIT NONE
+
+INTEGER, PARAMETER :: IFILE = 77
+
+INTEGER      :: KLON
+INTEGER      :: KIDIA
+INTEGER      :: KLEV
+
+LOGICAL, INTENT(IN) :: LDVERBOSE
+
+INTEGER, INTENT(OUT) :: NPROMA, NGPBLKS, NFLEVG, KRR
+LOGICAL, INTENT(OUT) :: OSEDIC, OCND2, LKOGAN, LMODICEDEP, OWARM
+INTEGER, INTENT(OUT) :: KKA, KKU, KKL, KSPLITR
+REAL,    INTENT(OUT) :: PTSTEP
+
+CHARACTER(LEN=4), INTENT(OUT) :: CSEDIM
+CHARACTER(LEN=4), INTENT(OUT) :: CSUBG_AUCV_RC
+
+REAL, ALLOCATABLE, DIMENSION(:,:,:),   INTENT(OUT) :: PDZZ_B
+REAL, ALLOCATABLE, DIMENSION(:,:,:),   INTENT(OUT) :: PRHODJ_B
+REAL, ALLOCATABLE, DIMENSION(:,:,:),   INTENT(OUT) :: PRHODREF_B
+REAL, ALLOCATABLE, DIMENSION(:,:,:),   INTENT(OUT) :: PEXNREF_B
+REAL, ALLOCATABLE, DIMENSION(:,:,:),   INTENT(OUT) :: PPABSM_B
+REAL, ALLOCATABLE, DIMENSION(:,:,:),   INTENT(OUT) :: PCIT_B, PCIT_OUT_B
+REAL, ALLOCATABLE, DIMENSION(:,:,:),   INTENT(OUT) :: PCLDFR_B
+
+REAL, ALLOCATABLE, DIMENSION(:,:,:),   INTENT(OUT) :: PICLDFR_B
+REAL, ALLOCATABLE, DIMENSION(:,:,:),   INTENT(OUT) :: PSSIO_B
+REAL, ALLOCATABLE, DIMENSION(:,:,:),   INTENT(OUT) :: PSSIU_B
+REAL, ALLOCATABLE, DIMENSION(:,:,:),   INTENT(OUT) :: PIFR_B
+
+REAL, ALLOCATABLE, DIMENSION(:,:,:),   INTENT(OUT) :: PTHT_B
+REAL, ALLOCATABLE, DIMENSION(:,:,:,:), INTENT(OUT) :: PRT_B
+REAL, ALLOCATABLE, DIMENSION(:,:,:),   INTENT(OUT) :: PTHS_B, PTHS_OUT_B
+REAL, ALLOCATABLE, DIMENSION(:,:,:,:), INTENT(OUT) :: PRS_B,  PRS_OUT_B
+
+REAL, ALLOCATABLE, DIMENSION(:,:),     INTENT(OUT) :: ZINPRC_B, ZINPRC_OUT_B
+REAL, ALLOCATABLE, DIMENSION(:,:),     INTENT(OUT) :: PINPRR_B, PINPRR_OUT_B
+REAL, ALLOCATABLE, DIMENSION(:,:,:),   INTENT(OUT) :: PEVAP_B,  PEVAP_OUT_B
+REAL, ALLOCATABLE, DIMENSION(:,:),     INTENT(OUT) :: PINPRS_B, PINPRS_OUT_B
+REAL, ALLOCATABLE, DIMENSION(:,:),     INTENT(OUT) :: PINPRG_B, PINPRG_OUT_B
+REAL, ALLOCATABLE, DIMENSION(:,:),     INTENT(OUT) :: PINPRH_B, PINPRH_OUT_B
+
+REAL, ALLOCATABLE, DIMENSION(:,:,:),   INTENT(OUT) :: PSIGS_B
+REAL, ALLOCATABLE, DIMENSION(:,:),     INTENT(OUT) :: PSEA_B
+REAL, ALLOCATABLE, DIMENSION(:,:),     INTENT(OUT) :: PTOWN_B
+
+REAL, ALLOCATABLE, DIMENSION(:,:),     INTENT(OUT) :: PICENU_B
+REAL, ALLOCATABLE, DIMENSION(:,:),     INTENT(OUT) :: PKGN_ACON_B
+REAL, ALLOCATABLE, DIMENSION(:,:),     INTENT(OUT) :: PKGN_SBGR_B
+
+REAL, ALLOCATABLE, DIMENSION(:,:,:,:), INTENT(OUT) :: PFPR_B, PFPR_OUT_B
+
+LOGICAL, ALLOCATABLE, DIMENSION(:,:,:), INTENT(OUT) :: ODMICRO
+
+
+REAL, ALLOCATABLE, DIMENSION(:,:,:)   :: PDZZ
+REAL, ALLOCATABLE, DIMENSION(:,:,:)   :: PRHODJ
+REAL, ALLOCATABLE, DIMENSION(:,:,:)   :: PRHODREF
+REAL, ALLOCATABLE, DIMENSION(:,:,:)   :: PEXNREF
+REAL, ALLOCATABLE, DIMENSION(:,:,:)   :: PPABSM
+REAL, ALLOCATABLE, DIMENSION(:,:,:)   :: PCIT, PCIT_OUT
+REAL, ALLOCATABLE, DIMENSION(:,:,:)   :: PCLDFR
+
+REAL, ALLOCATABLE, DIMENSION(:,:,:)   :: PICLDFR
+REAL, ALLOCATABLE, DIMENSION(:,:,:)   :: PSSIO
+REAL, ALLOCATABLE, DIMENSION(:,:,:)   :: PSSIU
+REAL, ALLOCATABLE, DIMENSION(:,:,:)   :: PIFR
+
+REAL, ALLOCATABLE, DIMENSION(:,:,:)   :: PTHT
+REAL, ALLOCATABLE, DIMENSION(:,:,:,:) :: PRT
+REAL, ALLOCATABLE, DIMENSION(:,:,:)   :: PTHS, PTHS_OUT
+REAL, ALLOCATABLE, DIMENSION(:,:,:,:) :: PRS,  PRS_OUT
+
+REAL, ALLOCATABLE, DIMENSION(:,:,:)   :: PSIGS
+REAL, ALLOCATABLE, DIMENSION(:,:)     :: PSEA
+REAL, ALLOCATABLE, DIMENSION(:,:)     :: PTOWN
+
+REAL, ALLOCATABLE, DIMENSION(:,:)     :: PICENU
+REAL, ALLOCATABLE, DIMENSION(:,:)     :: PKGN_ACON
+REAL, ALLOCATABLE, DIMENSION(:,:)     :: PKGN_SBGR
+
+REAL, ALLOCATABLE, DIMENSION(:,:)     :: ZINPRC_OUT
+REAL, ALLOCATABLE, DIMENSION(:,:)     :: PINPRR_OUT
+REAL, ALLOCATABLE, DIMENSION(:,:,:)   :: PEVAP_OUT
+REAL, ALLOCATABLE, DIMENSION(:,:)     :: PINPRS_OUT
+REAL, ALLOCATABLE, DIMENSION(:,:)     :: PINPRG_OUT
+
+REAL, ALLOCATABLE, DIMENSION(:,:,:,:) :: PFPR_OUT
+
+REAL, ALLOCATABLE, DIMENSION(:,:)     :: PINPRH_OUT
+
+INTEGER :: NGPTOT
+
+INTEGER :: IOFF, IBL
+LOGICAL :: LLEXIST, LSPP
+CHARACTER(LEN=32) :: CLFILE
+
+CALL SETUP()
+
+KRR=6
+NGPTOT = NPROMA * NGPBLKS
+
+IBL = 1
+WRITE (CLFILE, '("data/",I8.8,".dat")') IBL
+OPEN (IFILE, FILE=TRIM(CLFILE), FORM='UNFORMATTED', POSITION='REWIND')
+READ (IFILE) KLON
+READ (IFILE) KLEV
+READ (IFILE) KRR
+CLOSE (IFILE)
+
+IF(LDVERBOSE) THEN
+  WRITE(OUTPUT_UNIT, *) 'KLON:        ', KLON
+  WRITE(OUTPUT_UNIT, *) 'KLEV:        ', KLEV
+  WRITE(OUTPUT_UNIT, *) 'KRR:         ', KRR
+ENDIF
+
+IF (NFLEVG < 0) NFLEVG = KLEV
+
+ALLOCATE (PDZZ_B          (NPROMA, NFLEVG, NGPBLKS))
+ALLOCATE (PRHODJ_B        (NPROMA, NFLEVG, NGPBLKS))
+ALLOCATE (PRHODREF_B      (NPROMA, NFLEVG, NGPBLKS))
+ALLOCATE (PEXNREF_B       (NPROMA, NFLEVG, NGPBLKS))
+ALLOCATE (PPABSM_B        (NPROMA, NFLEVG, NGPBLKS))
+ALLOCATE (PCIT_B          (NPROMA, NFLEVG, NGPBLKS))
+ALLOCATE (PCIT_OUT_B      (NPROMA, NFLEVG, NGPBLKS))
+ALLOCATE (PCLDFR_B        (NPROMA, NFLEVG, NGPBLKS))
+
+ALLOCATE (PICLDFR_B       (NPROMA, NFLEVG, NGPBLKS))
+ALLOCATE (PSSIO_B         (NPROMA, NFLEVG, NGPBLKS))
+ALLOCATE (PSSIU_B         (NPROMA, NFLEVG, NGPBLKS))
+ALLOCATE (PIFR_B          (NPROMA, NFLEVG, NGPBLKS))
+
+ALLOCATE (PTHT_B          (NPROMA, NFLEVG, NGPBLKS))
+ALLOCATE (PRT_B           (NPROMA, NFLEVG, KRR, NGPBLKS))
+ALLOCATE (PTHS_B          (NPROMA, NFLEVG, NGPBLKS))
+ALLOCATE (PTHS_OUT_B      (NPROMA, NFLEVG, NGPBLKS))
+ALLOCATE (PRS_B           (NPROMA, NFLEVG, KRR, NGPBLKS))
+ALLOCATE (PRS_OUT_B       (NPROMA, NFLEVG, KRR, NGPBLKS))
+
+ALLOCATE (ZINPRC_B        (NPROMA, NGPBLKS))
+ALLOCATE (ZINPRC_OUT_B    (NPROMA, NGPBLKS))
+ALLOCATE (PINPRR_B        (NPROMA, NGPBLKS))
+ALLOCATE (PINPRR_OUT_B    (NPROMA, NGPBLKS))
+ALLOCATE (PEVAP_B         (NPROMA, NFLEVG, NGPBLKS))
+ALLOCATE (PEVAP_OUT_B     (NPROMA, NFLEVG, NGPBLKS))
+ALLOCATE (PINPRS_B        (NPROMA, NGPBLKS))
+ALLOCATE (PINPRS_OUT_B    (NPROMA, NGPBLKS))
+ALLOCATE (PINPRG_B        (NPROMA, NGPBLKS))
+ALLOCATE (PINPRG_OUT_B    (NPROMA, NGPBLKS))
+
+ALLOCATE (PSIGS_B         (NPROMA, NFLEVG, NGPBLKS))
+ALLOCATE (PSEA_B          (NPROMA, NGPBLKS))
+ALLOCATE (PTOWN_B         (NPROMA, NGPBLKS))
+
+ALLOCATE (PICENU_B        (NPROMA, NGPBLKS))
+ALLOCATE (PKGN_ACON_B     (NPROMA, NGPBLKS))
+ALLOCATE (PKGN_SBGR_B     (NPROMA, NGPBLKS))
+
+ALLOCATE (PFPR_B          (NPROMA, NFLEVG, KRR, NGPBLKS))
+ALLOCATE (PFPR_OUT_B      (NPROMA, NFLEVG, KRR, NGPBLKS))
+
+IF (KRR .EQ. 7) THEN
+  ALLOCATE (PINPRH_B      (NPROMA, NGPBLKS))
+  ALLOCATE (PINPRH_OUT_B  (NPROMA, NGPBLKS))
+ENDIF
+
+ALLOCATE (ODMICRO      (NPROMA, NFLEVG, NGPBLKS))
+
+CALL SET (PDZZ_B)
+CALL SET (PRHODJ_B)
+CALL SET (PRHODREF_B)
+CALL SET (PEXNREF_B)
+CALL SET (PPABSM_B)
+CALL SET (PCIT_B)
+CALL SET (PCIT_OUT_B)
+CALL SET (PCLDFR_B)
+
+CALL SET (PICLDFR_B)
+CALL SET (PSSIO_B)
+CALL SET (PSSIU_B)
+CALL SET (PIFR_B)
+
+CALL SET (PTHT_B)
+CALL SET (PRT_B)
+CALL SET (PTHS_B)
+CALL SET (PTHS_OUT_B)
+CALL SET (PRS_B)
+CALL SET (PRS_OUT_B)
+
+CALL SET (ZINPRC_B)
+CALL SET (ZINPRC_OUT_B)
+CALL SET (PINPRR_B)
+CALL SET (PINPRR_OUT_B)
+CALL SET (PEVAP_B)
+CALL SET (PEVAP_OUT_B)
+CALL SET (PINPRS_B)
+CALL SET (PINPRS_OUT_B)
+CALL SET (PINPRG_B)
+CALL SET (PINPRG_OUT_B)
+
+CALL SET (PSIGS_B)
+CALL SET (PSEA_B)
+CALL SET (PTOWN_B)
+
+CALL SET (PICENU_B)
+CALL SET (PKGN_ACON_B)
+CALL SET (PKGN_SBGR_B)
+
+CALL SET (PFPR_B)
+CALL SET (PFPR_OUT_B)
+
+IF (KRR .EQ. 7) THEN
+  CALL SET(PINPRH_B)
+  CALL SET(PINPRH_OUT_B)
+ENDIF
+
+!CALL SET (ODMICRO)
+
+IOFF = 0
+IBL = 0
+LLEXIST = .TRUE.
+
+DO WHILE(LLEXIST)
+  IBL = IBL + 1
+  WRITE (CLFILE, '("data/",I8.8,".dat")') IBL
 
-  INTEGER :: IBL, IBLOCK
-  LOGICAL :: LLEXIST, LSPP
-  CHARACTER(LEN=32) :: CLFILE
-  REAL :: ZNAN
+  INQUIRE (FILE=TRIM (CLFILE), EXIST=LLEXIST)
 
-  KRR=6
-  NGPTOT = NPROMA * NBLOCKS
-  IBL = 1
+  IF (LDVERBOSE) PRINT *, TRIM (CLFILE)
 
-  WRITE (CLFILE, '("data/",I8.8,".dat")') IBL
-  OPEN (NEWUNIT=IFILE, FILE=TRIM(CLFILE), FORM='UNFORMATTED', POSITION='REWIND')
+  IF (.NOT. LLEXIST) EXIT
 
+  OPEN (IFILE, FILE=TRIM (CLFILE), FORM='UNFORMATTED', POSITION='REWIND' )
+  
   READ (IFILE) KLON
   READ (IFILE) KLEV
   READ (IFILE) KRR
 
-  CLOSE (IFILE)
+  IF (IBL == 1) THEN
+    ALLOCATE (PDZZ         (NGPTOT, KLEV, 1))
+    ALLOCATE (PRHODJ       (NGPTOT, KLEV, 1))
+    ALLOCATE (PRHODREF     (NGPTOT, KLEV, 1))
+    ALLOCATE (PEXNREF      (NGPTOT, KLEV, 1))
+    ALLOCATE (PPABSM       (NGPTOT, KLEV, 1))
+    ALLOCATE (PCIT         (NGPTOT, KLEV, 1))
+    ALLOCATE (PCLDFR       (NGPTOT, KLEV, 1))
+    
+    ALLOCATE (PICLDFR      (NGPTOT, KLEV, 1))
+    ALLOCATE (PSSIO        (NGPTOT, KLEV, 1))
+    ALLOCATE (PSSIU        (NGPTOT, KLEV, 1))
+    ALLOCATE (PIFR         (NGPTOT, KLEV, 1))
+    
+    ALLOCATE (PTHT         (NGPTOT, KLEV, 1))
+    ALLOCATE (PRT          (NGPTOT, KLEV, KRR, 1))
+    ALLOCATE (PTHS         (NGPTOT, KLEV, 1))
+    ALLOCATE (PRS          (NGPTOT, KLEV, KRR, 1))
+    
+    ALLOCATE (PSIGS        (NGPTOT, KLEV, 1))
+    ALLOCATE (PSEA         (NGPTOT, 1))
+    ALLOCATE (PTOWN        (NGPTOT, 1))
+    
+    ALLOCATE (PICENU       (NGPTOT, 1))
+    ALLOCATE (PKGN_ACON    (NGPTOT, 1))
+    ALLOCATE (PKGN_SBGR    (NGPTOT, 1))
+    
+    ALLOCATE (PCIT_OUT     (NGPTOT, KLEV, 1))
+    ALLOCATE (PTHS_OUT     (NGPTOT, KLEV, 1))
+    ALLOCATE (PRS_OUT      (NGPTOT, KLEV, KRR, 1))
+    ALLOCATE (ZINPRC_OUT   (NGPTOT, 1))
+    ALLOCATE (PINPRR_OUT   (NGPTOT, 1))
+    ALLOCATE (PEVAP_OUT    (NGPTOT, KLEV, 1))
+    ALLOCATE (PINPRS_OUT   (NGPTOT, 1))
+    ALLOCATE (PINPRG_OUT   (NGPTOT, 1))
+    
+    ALLOCATE (PFPR_OUT     (NGPTOT, KLEV, KRR, 1))
+    
+    IF (KRR == 7) THEN
+      ALLOCATE (PINPRH_OUT (NGPTOT, 1))
+    ENDIF
 
-  IF(LDVERBOSE) THEN
-    WRITE(OUTPUT_UNIT, *) 'KLON:        ', KLON
-    WRITE(OUTPUT_UNIT, *) 'KLEV:        ', KLEV
-    WRITE(OUTPUT_UNIT, *) 'KRR:         ', KRR
+    PICENU = 1.d0
+    PKGN_ACON = 10.d0
+    PKGN_SBGR = 1.d0
   ENDIF
 
-  IF (NFLEVG < 0) NFLEVG = KLEV
-
-  ALLOCATE (PDZZ_B          (NPROMA, NFLEVG, NBLOCKS))
-  ALLOCATE (PRHODJ_B        (NPROMA, NFLEVG, NBLOCKS))
-  ALLOCATE (PRHODREF_B      (NPROMA, NFLEVG, NBLOCKS))
-  ALLOCATE (PEXNREF_B       (NPROMA, NFLEVG, NBLOCKS))
-  ALLOCATE (PPABSM_B        (NPROMA, NFLEVG, NBLOCKS))
-  ALLOCATE (PCIT_B          (NPROMA, NFLEVG, NBLOCKS))
-  ALLOCATE (PCIT_OUT_B      (NPROMA, NFLEVG, NBLOCKS))
-  ALLOCATE (PCLDFR_B        (NPROMA, NFLEVG, NBLOCKS))
-
-  ALLOCATE (PICLDFR_B       (NPROMA, NFLEVG, NBLOCKS))
-  ALLOCATE (PSSIO_B         (NPROMA, NFLEVG, NBLOCKS))
-  ALLOCATE (PSSIU_B         (NPROMA, NFLEVG, NBLOCKS))
-  ALLOCATE (PIFR_B          (NPROMA, NFLEVG, NBLOCKS))
-
-  ALLOCATE (PTHT_B          (NPROMA, NFLEVG, NBLOCKS))
-  ALLOCATE (PRT_B           (NPROMA, NFLEVG, KRR, NBLOCKS))
-  ALLOCATE (PTHS_B          (NPROMA, NFLEVG, NBLOCKS))
-  ALLOCATE (PTHS_OUT_B      (NPROMA, NFLEVG, NBLOCKS))
-  ALLOCATE (PRS_B           (NPROMA, NFLEVG, KRR, NBLOCKS))
-  ALLOCATE (PRS_OUT_B       (NPROMA, NFLEVG, KRR, NBLOCKS))
-
-  ALLOCATE (ZINPRC_B        (NPROMA, NBLOCKS))
-  ALLOCATE (ZINPRC_OUT_B    (NPROMA, NBLOCKS))
-  ALLOCATE (PINPRR_B        (NPROMA, NBLOCKS))
-  ALLOCATE (PINPRR_OUT_B    (NPROMA, NBLOCKS))
-  ALLOCATE (PEVAP_B         (NPROMA, NFLEVG, NBLOCKS))
-  ALLOCATE (PEVAP_OUT_B     (NPROMA, NFLEVG, NBLOCKS))
-  ALLOCATE (PINPRS_B        (NPROMA, NBLOCKS))
-  ALLOCATE (PINPRS_OUT_B    (NPROMA, NBLOCKS))
-  ALLOCATE (PINPRG_B        (NPROMA, NBLOCKS))
-  ALLOCATE (PINPRG_OUT_B    (NPROMA, NBLOCKS))
-
-  ALLOCATE (PSIGS_B         (NPROMA, NFLEVG, NBLOCKS))
-  ALLOCATE (PSEA_B          (NPROMA, NBLOCKS))
-  ALLOCATE (PTOWN_B         (NPROMA, NBLOCKS))
-
-  ALLOCATE (PICENU_B        (NPROMA, NBLOCKS))
-  ALLOCATE (PKGN_ACON_B     (NPROMA, NBLOCKS))
-  ALLOCATE (PKGN_SBGR_B     (NPROMA, NBLOCKS))
-
-  ALLOCATE (PFPR_B          (NPROMA, NFLEVG, KRR, NBLOCKS))
-  ALLOCATE (PFPR_OUT_B      (NPROMA, NFLEVG, KRR, NBLOCKS))
-
-  IF (KRR .EQ. 7) THEN
-    ALLOCATE (PINPRH_B      (NPROMA, NBLOCKS))
-    ALLOCATE (PINPRH_OUT_B  (NPROMA, NBLOCKS))
+  IF (IOFF+KLON > NGPTOT) THEN
+    EXIT
   ENDIF
 
-  ALLOCATE (ODMICRO      (NPROMA, NFLEVG, NBLOCKS))
-
-  ZNAN = IEEE_VALUE (ZNAN, IEEE_SIGNALING_NAN)
-
-
-  CALL SET (PDZZ_B)
-  CALL SET (PRHODJ_B)
-  CALL SET (PRHODREF_B)
-  CALL SET (PEXNREF_B)
-  CALL SET (PPABSM_B)
-  CALL SET (PCIT_B)
-  CALL SET (PCIT_OUT_B)
-  CALL SET (PCLDFR_B)
-
-  CALL SET (PICLDFR_B)
-  CALL SET (PSSIO_B)
-  CALL SET (PSSIU_B)
-  CALL SET (PIFR_B)
-
-  CALL SET (PTHT_B)
-  CALL SET (PRT_B)
-  CALL SET (PTHS_B)
-  CALL SET (PTHS_OUT_B)
-  CALL SET (PRS_B)
-  CALL SET (PRS_OUT_B)
-
-  CALL SET (ZINPRC_B)
-  CALL SET (ZINPRC_OUT_B)
-  CALL SET (PINPRR_B)
-  CALL SET (PINPRR_OUT_B)
-  CALL SET (PEVAP_B)
-  CALL SET (PEVAP_OUT_B)
-  CALL SET (PINPRS_B)
-  CALL SET (PINPRS_OUT_B)
-  CALL SET (PINPRG_B)
-  CALL SET (PINPRG_OUT_B)
-
-  CALL SET (PSIGS_B)
-  CALL SET (PSEA_B)
-  CALL SET (PTOWN_B)
-
-  CALL SET (PICENU_B)
-  CALL SET (PKGN_ACON_B)
-  CALL SET (PKGN_SBGR_B)
-
-  CALL SET (PFPR_B)
-  CALL SET (PFPR_OUT_B)
-
-  IF (KRR .EQ. 7) THEN
-    CALL SET(PINPRH_B)
-    CALL SET(PINPRH_OUT_B)
+  READ (IFILE) KKA
+  READ (IFILE) KKU
+  READ (IFILE) KKL
+  READ (IFILE) KSPLITR
+
+  READ (IFILE) OSEDIC
+  READ (IFILE) OCND2
+  READ (IFILE) LKOGAN
+  READ (IFILE) LMODICEDEP
+  READ (IFILE) OWARM
+
+  READ (IFILE) CSEDIM
+  READ (IFILE) CSUBG_AUCV_RC
+
+  READ (IFILE) PTSTEP
+
+  READ (IFILE) PDZZ    (IOFF+1:IOFF+KLON, :, 1)
+  READ (IFILE) PRHODJ  (IOFF+1:IOFF+KLON, :, 1)
+  READ (IFILE) PRHODREF(IOFF+1:IOFF+KLON, :, 1)
+  READ (IFILE) PEXNREF (IOFF+1:IOFF+KLON, :, 1)
+  READ (IFILE) PPABSM  (IOFF+1:IOFF+KLON, :, 1)
+  READ (IFILE) PCIT    (IOFF+1:IOFF+KLON, :, 1)
+  READ (IFILE) PCLDFR  (IOFF+1:IOFF+KLON, :, 1)
+
+  READ (IFILE) PICLDFR (IOFF+1:IOFF+KLON, :, 1)
+  READ (IFILE) PSSIO   (IOFF+1:IOFF+KLON, :, 1)
+  READ (IFILE) PSSIU   (IOFF+1:IOFF+KLON, :, 1)
+  READ (IFILE) PIFR    (IOFF+1:IOFF+KLON, :, 1)
+
+  READ (IFILE) PTHT    (IOFF+1:IOFF+KLON, :, 1)
+  READ (IFILE) PRT     (IOFF+1:IOFF+KLON, :, :, 1)
+  READ (IFILE) PTHS    (IOFF+1:IOFF+KLON, :, 1)
+  READ (IFILE) PRS     (IOFF+1:IOFF+KLON, :, :, 1)
+
+  READ (IFILE) PSIGS   (IOFF+1:IOFF+KLON, :, 1)
+  READ (IFILE) PSEA    (IOFF+1:IOFF+KLON, 1)
+  READ (IFILE) PTOWN   (IOFF+1:IOFF+KLON, 1)
+
+  READ (IFILE) LSPP
+  IF (LSPP) THEN
+    READ (IFILE) PICENU (IOFF+1:IOFF+KLON, 1)
   ENDIF
 
-  CALL SET (ODMICRO)
-
-  IBL = 0
-  NFILES = 0
-  LLEXIST = .TRUE.
-
-  DO WHILE(LLEXIST)
-    WRITE (CLFILE, '("data/",I8.8,".dat")') NFILES + 1
-
-    INQUIRE(FILE=TRIM (CLFILE), EXIST=LLEXIST)
-
-    IF (.NOT. LLEXIST) EXIT
-
-    NFILES = NFILES + 1
-
-  ENDDO
-
-  ALLOCATE (PDZZ         (KLON, KLEV, NFILES))
-  ALLOCATE (PRHODJ       (KLON, KLEV, NFILES))
-  ALLOCATE (PRHODREF     (KLON, KLEV, NFILES))
-  ALLOCATE (PEXNREF      (KLON, KLEV, NFILES))
-  ALLOCATE (PPABSM       (KLON, KLEV, NFILES))
-  ALLOCATE (PCIT         (KLON, KLEV, NFILES))
-  ALLOCATE (PCLDFR       (KLON, KLEV, NFILES))
-
-  ALLOCATE (PICLDFR      (KLON, KLEV, NFILES))
-  ALLOCATE (PSSIO        (KLON, KLEV, NFILES))
-  ALLOCATE (PSSIU        (KLON, KLEV, NFILES))
-  ALLOCATE (PIFR         (KLON, KLEV, NFILES))
-
-  ALLOCATE (PTHT         (KLON, KLEV, NFILES))
-  ALLOCATE (PRT          (KLON, KLEV, KRR, NFILES))
-  ALLOCATE (PTHS         (KLON, KLEV, NFILES))
-  ALLOCATE (PRS          (KLON, KLEV, KRR, NFILES))
-
-  ALLOCATE (PSIGS        (KLON, KLEV, NFILES))
-  ALLOCATE (PSEA         (KLON, NFILES))
-  ALLOCATE (PTOWN        (KLON, NFILES))
-
-  ALLOCATE (PICENU       (KLON, NFILES))
-  ALLOCATE (PKGN_ACON    (KLON, NFILES))
-  ALLOCATE (PKGN_SBGR    (KLON, NFILES))
-
-  ALLOCATE (PCIT_OUT     (KLON, KLEV, NFILES))
-  ALLOCATE (PTHS_OUT     (KLON, KLEV, NFILES))
-  ALLOCATE (PRS_OUT      (KLON, KLEV, KRR, NFILES))
-  ALLOCATE (ZINPRC_OUT   (KLON, NFILES))
-  ALLOCATE (PINPRR_OUT   (KLON, NFILES))
-  ALLOCATE (PEVAP_OUT    (KLON, KLEV, NFILES))
-  ALLOCATE (PINPRS_OUT   (KLON, NFILES))
-  ALLOCATE (PINPRG_OUT   (KLON, NFILES))
-
-  ALLOCATE (PFPR_OUT     (KLON, KLEV, KRR, NFILES))
-
-  IF (KRR == 7) THEN
-    ALLOCATE (PINPRH_OUT (KLON, NFILES))
+  READ (IFILE) LSPP
+  IF (LSPP) THEN
+    READ (IFILE) PKGN_ACON (IOFF+1:IOFF+KLON, 1)
   ENDIF
 
-  PICENU = 1.d0
-  PKGN_ACON = 10.d0
-  PKGN_SBGR = 1.d0
-
-  DO IBL = 1, NFILES
-
-    WRITE (CLFILE, '("data/",I8.8,".dat")') IBL
-
-    IF ((IBL-1)*KLON .GE. NBLOCKS*NPROMA) THEN
-      EXIT
-    ENDIF
-
-    IF (LDVERBOSE) PRINT *, TRIM (CLFILE)
-
-    OPEN(NEWUNIT=IFILE, FILE=TRIM (CLFILE), FORM='UNFORMATTED', POSITION='REWIND')
-
-    READ (IFILE) KLON
-    READ (IFILE) KLEV
-    READ (IFILE) KRR
-
-    READ (IFILE) KKA
-    READ (IFILE) KKU
-    READ (IFILE) KKL
-    READ (IFILE) KSPLITR
-
-    READ (IFILE) OSEDIC
-    READ (IFILE) OCND2
-    READ (IFILE) LKOGAN
-    READ (IFILE) LMODICEDEP
-    READ (IFILE) OWARM
-
-    READ (IFILE) CSEDIM
-    READ (IFILE) CSUBG_AUCV_RC
-
-    READ (IFILE) PTSTEP
-
-    READ (IFILE) PDZZ    (:, :, IBL)
-    READ (IFILE) PRHODJ  (:, :, IBL)
-    READ (IFILE) PRHODREF(:, :, IBL)
-    READ (IFILE) PEXNREF (:, :, IBL)
-    READ (IFILE) PPABSM  (:, :, IBL)
-    READ (IFILE) PCIT    (:, :, IBL)
-    READ (IFILE) PCLDFR  (:, :, IBL)
-
-    READ (IFILE) PICLDFR (:, :, IBL)
-    READ (IFILE) PSSIO   (:, :, IBL)
-    READ (IFILE) PSSIU   (:, :, IBL)
-    READ (IFILE) PIFR    (:, :, IBL)
-
-    READ (IFILE) PTHT    (:, :, IBL)
-    READ (IFILE) PRT     (:, :, :, IBL)
-    READ (IFILE) PTHS    (:, :, IBL)
-    READ (IFILE) PRS     (:, :, :, IBL)
-
-    READ (IFILE) PSIGS   (:, :, IBL)
-    READ (IFILE) PSEA    (:, IBL)
-    READ (IFILE) PTOWN   (:, IBL)
-
-    READ (IFILE) LSPP
-    IF (LSPP) THEN
-      READ (IFILE) PICENU (:, IBL)
-    ENDIF
-
-    READ (IFILE) LSPP
-    IF (LSPP) THEN
-      READ (IFILE) PKGN_ACON (:, IBL)
-    ENDIF
-
-    READ (IFILE) LSPP
-    IF (LSPP) THEN
-      READ (IFILE) PKGN_SBGR (:, IBL)
-    ENDIF
-
-    READ (IFILE) PCIT_OUT     (:, :, IBL)
-    READ (IFILE) PTHS_OUT     (:, :, IBL)
-    READ (IFILE) PRS_OUT      (:, :, :, IBL)
-    READ (IFILE) ZINPRC_OUT   (:, IBL)
-    READ (IFILE) PINPRR_OUT   (:, IBL)
-    READ (IFILE) PEVAP_OUT    (:, :, IBL)
-    READ (IFILE) PINPRS_OUT   (:, IBL)
-    READ (IFILE) PINPRG_OUT   (:, IBL)
-
-    READ (IFILE) PFPR_OUT     (:, :, :, IBL)
-
-    IF (KRR == 7) THEN
-      READ (IFILE) PINPRH_OUT (:, IBL)
-    ENDIF
-
-    CLOSE (IFILE)
-
-  ENDDO
-
-  CALL NPROMIZE(PDZZ,       PDZZ_B)
-  CALL NPROMIZE(PRHODJ,     PRHODJ_B)
-  CALL NPROMIZE(PRHODREF,   PRHODREF_B)
-  CALL NPROMIZE(PEXNREF,    PEXNREF_B)
-  CALL NPROMIZE(PPABSM,     PPABSM_B)
-  CALL NPROMIZE(PCIT,       PCIT_B)
-  CALL NPROMIZE(PCLDFR,     PCLDFR_B)
-
-  CALL NPROMIZE(PICLDFR,    PICLDFR_B)
-  CALL NPROMIZE(PSSIO,      PSSIO_B)  
-  CALL NPROMIZE(PSSIU,      PSSIU_B)  
-  CALL NPROMIZE(PIFR,       PIFR_B)   
-
-  CALL NPROMIZE(PTHT,       PTHT_B)
-  CALL NPROMIZE(PRT,        PRT_B)
-  CALL NPROMIZE(PTHS,       PTHS_B)
-  CALL NPROMIZE(PRS,        PRS_B)
-
-  CALL NPROMIZE(PSIGS,      PSIGS_B)
-  CALL NPROMIZE(PSEA,       PSEA_B)
-  CALL NPROMIZE(PTOWN,      PTOWN_B)
-
-  CALL NPROMIZE(PICENU,     PICENU_B)
-  CALL NPROMIZE(PKGN_ACON,  PKGN_ACON_B)
-  CALL NPROMIZE(PKGN_SBGR,  PKGN_SBGR_B)
-
-  CALL NPROMIZE(PCIT_OUT,   PCIT_OUT_B)
-  CALL NPROMIZE(PTHS_OUT,   PTHS_OUT_B)
-  CALL NPROMIZE(PRS_OUT,    PRS_OUT_B)
-  CALL NPROMIZE(ZINPRC_OUT, ZINPRC_OUT_B)
-  CALL NPROMIZE(PINPRR_OUT, PINPRR_OUT_B)
-  CALL NPROMIZE(PEVAP_OUT,  PEVAP_OUT_B)
-  CALL NPROMIZE(PINPRS_OUT, PINPRS_OUT_B)
-  CALL NPROMIZE(PINPRG_OUT, PINPRG_OUT_B)
-
-  CALL NPROMIZE(PFPR_OUT,   PFPR_OUT_B)
-
-  IF (KRR == 7) THEN
-    CALL NPROMIZE(PINPRH_OUT, PINPRH_OUT_B)
+  READ (IFILE) LSPP
+  IF (LSPP) THEN
+    READ (IFILE) PKGN_SBGR (IOFF+1:IOFF+KLON, 1)
   ENDIF
 
+  READ (IFILE) PCIT_OUT     (IOFF+1:IOFF+KLON, :, 1)
+  READ (IFILE) PTHS_OUT     (IOFF+1:IOFF+KLON, :, 1)
+  READ (IFILE) PRS_OUT      (IOFF+1:IOFF+KLON, :, :, 1)
+  READ (IFILE) ZINPRC_OUT   (IOFF+1:IOFF+KLON, 1)
+  READ (IFILE) PINPRR_OUT   (IOFF+1:IOFF+KLON, 1)
+  READ (IFILE) PEVAP_OUT    (IOFF+1:IOFF+KLON, :, 1)
+  READ (IFILE) PINPRS_OUT   (IOFF+1:IOFF+KLON, 1)
+  READ (IFILE) PINPRG_OUT   (IOFF+1:IOFF+KLON, 1)
 
-END SUBROUTINE GETDATA_RAIN_ICE_OLD
-
-
-SUBROUTINE NPROMIZE2(P_IN, P_OUT)
-
-  IMPLICIT NONE
-
-  REAL, INTENT (IN)  :: P_IN(:,:)
-  REAL, INTENT (OUT) :: P_OUT(:,:)
-
-  INTEGER :: I_OUT, J_OUT, I_IN, J_IN
-
-  INTEGER :: NPROMA, NLON, NBLOCKS
-  INTEGER :: N_GP_IN, N_GP_OUT, INDEX_IN
-
-  NLON    = SIZE(P_IN, 1)
-  NPROMA  = SIZE(P_OUT, 1)
-
-  NBLOCKS = SIZE(P_OUT, 2)
-
-  N_GP_IN = SIZE(P_IN, 1)*SIZE(P_IN, 2)
-
-  DO J_OUT = 1, NBLOCKS
-    DO I_OUT = 1, NPROMA
-
-      N_GP_OUT = (J_OUT-1)*NPROMA + I_OUT
-      INDEX_IN = 1 + MODULO(N_GP_OUT - 1, N_GP_IN)
-
-      J_IN = 1 + (INDEX_IN - 1)/NLON
-      I_IN = INDEX_IN - (J_IN-1)*NLON
-
-      P_OUT(I_OUT, J_OUT) = P_IN(I_IN, J_IN)
-
-    ENDDO
-  ENDDO
-
-END SUBROUTINE NPROMIZE2
-
-
-PURE SUBROUTINE NPROMIZE3(P_IN, P_OUT)
-
-  IMPLICIT NONE
-
-  REAL, INTENT (IN)  :: P_IN(:,:,:)
-  REAL, INTENT (OUT) :: P_OUT(:,:,:)
-
-  INTEGER :: I_OUT, K_OUT, I_IN, K_IN, J
-
-  INTEGER :: NPROMA, NLON, NBLOCKS
-  INTEGER :: N_GP_IN, N_GP_OUT, INDEX_IN
-
-  INTEGER :: JLEVA, JLEVB
-  REAL :: ZWA, ZWB, ZLEV
-
-  NLON    = SIZE(P_IN, 1)
-  NPROMA  = SIZE(P_OUT, 1)
-
-  NBLOCKS = SIZE(P_OUT, 3)
-
-  N_GP_IN = SIZE(P_IN, 1)*SIZE(P_IN, 3)
-
-  IF (SIZE(P_IN, 2) == SIZE(P_OUT, 2)) THEN
-
-    !Just copy the gridpoints if the same number of levels
-    DO K_OUT = 1, NBLOCKS
-      DO J = 1, SIZE(P_OUT, 2)
-        DO I_OUT = 1, NPROMA
-  
-          N_GP_OUT = (K_OUT-1)*NPROMA + I_OUT
-          INDEX_IN = 1 + MODULO(N_GP_OUT - 1, N_GP_IN)
-  
-          K_IN = 1 + (INDEX_IN - 1)/NLON
-          I_IN = INDEX_IN - (K_IN-1)*NLON
-  
-          P_OUT(I_OUT, J, K_OUT) = P_IN(I_IN, J, K_IN)
-  
-        ENDDO
-      ENDDO
-    ENDDO
-
-  ELSE
-
-    !We have to interpolate between level
-    DO K_OUT = 1, NBLOCKS
-      DO J = 1, SIZE(P_OUT, 2)
-
-        ZLEV = 1.0 + REAL(J-1)*REAL(SIZE(P_IN,2)-1)/REAL(SIZE(P_OUT,2)-1)
-        JLEVB = MIN(CEILING(ZLEV), SIZE(P_IN,2))
-        JLEVA = MAX(FLOOR(ZLEV), 1)
-
-        IF (JLEVB == JLEVA) THEN
-          ZWA = 1.
-          ZWB = 0.
-        ELSE
-          ZWA = REAL(JLEVB) - ZLEV
-          ZWB = ZLEV - REAL(JLEVA)
-        ENDIF
-
-        DO I_OUT = 1, NPROMA
-  
-          N_GP_OUT = (K_OUT-1)*NPROMA + I_OUT
-          INDEX_IN = 1 + MODULO(N_GP_OUT - 1, N_GP_IN)
-  
-          K_IN = 1 + (INDEX_IN - 1)/NLON
-          I_IN = INDEX_IN - (K_IN-1)*NLON
-  
-          P_OUT(I_OUT, J, K_OUT) = ZWA*P_IN(I_IN, JLEVA, K_IN) + &
-                                   ZWB*P_IN(I_IN, JLEVB, K_IN)
-  
-        ENDDO
-      ENDDO
-    ENDDO
+  READ (IFILE) PFPR_OUT     (IOFF+1:IOFF+KLON, :, :, 1)
 
+  IF (KRR == 7) THEN
+    READ (IFILE) PINPRH_OUT (IOFF+1:IOFF+KLON, 1)
   ENDIF
 
-END SUBROUTINE NPROMIZE3
-
-
-PURE SUBROUTINE NPROMIZE4(P_IN, P_OUT)
-
-  IMPLICIT NONE
-
-  REAL, INTENT (IN)  :: P_IN(:,:,:,:)
-  REAL, INTENT (OUT) :: P_OUT(:,:,:,:)
-
-  INTEGER :: I_OUT, K_OUT, I_IN, K_IN, J1, J2
-
-  INTEGER :: NPROMA, NLON, NBLOCKS
-  INTEGER :: N_GP_IN, N_GP_OUT, INDEX_IN
-
-  INTEGER :: JLEVA, JLEVB
-  REAL :: ZWA, ZWB, ZLEV
-
-  NLON    = SIZE(P_IN, 1)
-  NPROMA  = SIZE(P_OUT, 1)
-
-  NBLOCKS = SIZE(P_OUT, 4)
+  CLOSE (IFILE)
 
-  N_GP_IN = SIZE(P_IN, 1)*SIZE(P_IN, 4)
+  IOFF = IOFF + KLON
 
-  IF (SIZE(P_IN, 2) == SIZE(P_OUT, 2)) THEN
+ENDDO
 
-    DO K_OUT = 1, NBLOCKS
-      DO J2 = 1, SIZE(P_OUT, 3)
-        DO J1 = 1, SIZE(P_OUT, 2)
-          DO I_OUT = 1, NPROMA
+IF (NFLEVG /= KLEV) THEN
+  CALL INTERPOLATE (NFLEVG, IOFF, PDZZ)
+  CALL INTERPOLATE (NFLEVG, IOFF, PDZZ)
+  CALL INTERPOLATE (NFLEVG, IOFF, PRHODJ)
+  CALL INTERPOLATE (NFLEVG, IOFF, PRHODREF)
+  CALL INTERPOLATE (NFLEVG, IOFF, PEXNREF)
+  CALL INTERPOLATE (NFLEVG, IOFF, PPABSM)
+  CALL INTERPOLATE (NFLEVG, IOFF, PCIT)
+  CALL INTERPOLATE (NFLEVG, IOFF, PCLDFR)
   
-            N_GP_OUT = (K_OUT-1)*NPROMA + I_OUT
-            INDEX_IN = 1 + MODULO(N_GP_OUT - 1, N_GP_IN)
+  CALL INTERPOLATE (NFLEVG, IOFF, PICLDFR)
+  CALL INTERPOLATE (NFLEVG, IOFF, PSSIO)
+  CALL INTERPOLATE (NFLEVG, IOFF, PSSIU)
+  CALL INTERPOLATE (NFLEVG, IOFF, PIFR)
   
-            K_IN = 1 + (INDEX_IN - 1)/NLON
-            I_IN = INDEX_IN - (K_IN-1)*NLON
+  CALL INTERPOLATE (NFLEVG, IOFF, PTHT)
+  CALL INTERPOLATE (NFLEVG, IOFF, PRT)
+  CALL INTERPOLATE (NFLEVG, IOFF, PTHS)
+  CALL INTERPOLATE (NFLEVG, IOFF, PRS)
   
-            P_OUT(I_OUT, J1, J2, K_OUT) = P_IN(I_IN, J1, J2, K_IN)
+  CALL INTERPOLATE (NFLEVG, IOFF, PSIGS)
+!  CALL INTERPOLATE (NFLEVG, IOFF, PSEA)
+!  CALL INTERPOLATE (NFLEVG, IOFF, PTOWN)
   
-          ENDDO
-        ENDDO
-      ENDDO
-    ENDDO
-
-  ELSE
-
-    !We have to interpolate between level
-    DO K_OUT = 1, NBLOCKS
-      DO J2 = 1, SIZE(P_OUT, 3)
-        DO J1 = 1, SIZE(P_OUT, 2)
-
-          ZLEV = 1.0 + REAL(J1-1)*REAL(SIZE(P_IN,2)-1)/REAL(SIZE(P_OUT,2)-1)
-          JLEVB = MIN(CEILING(ZLEV), SIZE(P_IN,2))
-          JLEVA = MAX(FLOOR(ZLEV), 1)
-
-          IF (JLEVB == JLEVA) THEN
-            ZWA = 1.
-            ZWB = 0.
-          ELSE
-            ZWA = REAL(JLEVB) - ZLEV
-            ZWB = ZLEV - REAL(JLEVA)
-          ENDIF
-
-          DO I_OUT = 1, NPROMA
+!  CALL INTERPOLATE (NFLEVG, IOFF, PICENU)
+!  CALL INTERPOLATE (NFLEVG, IOFF, PKGN_ACON)
+!  CALL INTERPOLATE (NFLEVG, IOFF, PKGN_SBGR)
   
-            N_GP_OUT = (K_OUT-1)*NPROMA + I_OUT
-            INDEX_IN = 1 + MODULO(N_GP_OUT - 1, N_GP_IN)
+  CALL INTERPOLATE (NFLEVG, IOFF, PCIT_OUT)
+  CALL INTERPOLATE (NFLEVG, IOFF, PTHS_OUT)
+  CALL INTERPOLATE (NFLEVG, IOFF, PRS_OUT)
+!  CALL INTERPOLATE (NFLEVG, IOFF, ZINPRC_OUT)
+!  CALL INTERPOLATE (NFLEVG, IOFF, PINPRR_OUT)
+  CALL INTERPOLATE (NFLEVG, IOFF, PEVAP_OUT)
+!  CALL INTERPOLATE (NFLEVG, IOFF, PINPRS_OUT)
+!  CALL INTERPOLATE (NFLEVG, IOFF, PINPRG_OUT)
   
-            K_IN = 1 + (INDEX_IN - 1)/NLON
-            I_IN = INDEX_IN - (K_IN-1)*NLON
+  CALL INTERPOLATE (NFLEVG, IOFF, PFPR_OUT)
   
-            P_OUT(I_OUT, J1, J2, K_OUT) = ZWA*P_IN(I_IN, JLEVA, J2, K_IN) + &
-                                          ZWB*P_IN(I_IN, JLEVB, J2, K_IN)
-  
-          ENDDO
-        ENDDO
-      ENDDO
-    ENDDO
-
-  ENDIF
-
-END SUBROUTINE NPROMIZE4
-
-
-SUBROUTINE SET2(P)
-
-  REAL, INTENT(INOUT) :: P (:,:)
-  INTEGER :: IBL, IGPBLKS
-  INTEGER :: NTID, ITID, JBLK1, JBLK2
-
-  IGPBLKS = SIZE (P, 2)
-
-!$OMP PARALLEL PRIVATE (ITID, JBLK1, JBLK2, NTID)
-  NTID = OMP_GET_MAX_THREADS ()
-  ITID = OMP_GET_THREAD_NUM ()
-  JBLK1 = 1 +  (IGPBLKS * (ITID+0)) / NTID
-  JBLK2 =      (IGPBLKS * (ITID+1)) / NTID
-
-  DO IBL = JBLK1, JBLK2
-    P (:,IBL) = ZNAN
-  ENDDO
-!$OMP END PARALLEL
-
-END SUBROUTINE SET2
+!  IF (KRR == 7) THEN
+!    CALL INTERPOLATE (NFLEVG, IOFF, PINPRH_OUT)
+!  ENDIF
+
+ENDIF
+
+CALL REPLICATE (IOFF, PDZZ        (:, :, 1))
+CALL REPLICATE (IOFF, PRHODJ      (:, :, 1))
+CALL REPLICATE (IOFF, PRHODREF    (:, :, 1))
+CALL REPLICATE (IOFF, PEXNREF     (:, :, 1))
+CALL REPLICATE (IOFF, PPABSM      (:, :, 1))
+CALL REPLICATE (IOFF, PCIT        (:, :, 1))
+CALL REPLICATE (IOFF, PCLDFR      (:, :, 1))
+
+CALL REPLICATE (IOFF, PICLDFR     (:, :, 1))
+CALL REPLICATE (IOFF, PSSIO       (:, :, 1))
+CALL REPLICATE (IOFF, PSSIU       (:, :, 1))
+CALL REPLICATE (IOFF, PIFR        (:, :, 1))
+
+CALL REPLICATE (IOFF, PTHT        (:, :, 1))
+CALL REPLICATE (IOFF, PRT         (:, :, :, 1))
+CALL REPLICATE (IOFF, PTHS        (:, :, 1))
+CALL REPLICATE (IOFF, PRS         (:, :, :, 1))
+
+CALL REPLICATE (IOFF, PSIGS       (:, :, 1))
+CALL REPLICATE (IOFF, PSEA        (:, 1))
+CALL REPLICATE (IOFF, PTOWN       (:, 1))
+
+CALL REPLICATE (IOFF, PICENU      (:, 1))
+CALL REPLICATE (IOFF, PKGN_ACON   (:, 1))
+CALL REPLICATE (IOFF, PKGN_SBGR   (:, 1))
+
+CALL REPLICATE (IOFF, PCIT_OUT    (:, :, 1))
+CALL REPLICATE (IOFF, PTHS_OUT    (:, :, 1))
+CALL REPLICATE (IOFF, PRS_OUT     (:, :, :, 1))
+CALL REPLICATE (IOFF, ZINPRC_OUT  (:, 1))
+CALL REPLICATE (IOFF, PINPRR_OUT  (:, 1))
+CALL REPLICATE (IOFF, PEVAP_OUT   (:, :, 1))
+CALL REPLICATE (IOFF, PINPRS_OUT  (:, 1))
+CALL REPLICATE (IOFF, PINPRG_OUT  (:, 1))
+
+CALL REPLICATE (IOFF, PFPR_OUT    (:, :, :, 1))
+
+IF (KRR == 7) THEN
+  CALL REPLICATE (IOFF, PINPRH_OUT      (:, 1))
+ENDIF
+
+CALL NPROMIZE (NPROMA, PDZZ,       PDZZ_B)
+CALL NPROMIZE (NPROMA, PRHODJ,     PRHODJ_B)
+CALL NPROMIZE (NPROMA, PRHODREF,   PRHODREF_B)
+CALL NPROMIZE (NPROMA, PEXNREF,    PEXNREF_B)
+CALL NPROMIZE (NPROMA, PPABSM,     PPABSM_B)
+CALL NPROMIZE (NPROMA, PCIT,       PCIT_B)
+CALL NPROMIZE (NPROMA, PCLDFR,     PCLDFR_B)
+
+CALL NPROMIZE (NPROMA, PICLDFR,    PICLDFR_B)
+CALL NPROMIZE (NPROMA, PSSIO,      PSSIO_B)  
+CALL NPROMIZE (NPROMA, PSSIU,      PSSIU_B)  
+CALL NPROMIZE (NPROMA, PIFR,       PIFR_B)   
+
+CALL NPROMIZE (NPROMA, PTHT,       PTHT_B)
+CALL NPROMIZE (NPROMA, PRT,        PRT_B)
+CALL NPROMIZE (NPROMA, PTHS,       PTHS_B)
+CALL NPROMIZE (NPROMA, PRS,        PRS_B)
+
+CALL NPROMIZE (NPROMA, PSIGS,      PSIGS_B)
+CALL NPROMIZE (NPROMA, PSEA,       PSEA_B)
+CALL NPROMIZE (NPROMA, PTOWN,      PTOWN_B)
+
+CALL NPROMIZE (NPROMA, PICENU,     PICENU_B)
+CALL NPROMIZE (NPROMA, PKGN_ACON,  PKGN_ACON_B)
+CALL NPROMIZE (NPROMA, PKGN_SBGR,  PKGN_SBGR_B)
+
+CALL NPROMIZE (NPROMA, PCIT_OUT,   PCIT_OUT_B)
+CALL NPROMIZE (NPROMA, PTHS_OUT,   PTHS_OUT_B)
+CALL NPROMIZE (NPROMA, PRS_OUT,    PRS_OUT_B)
+CALL NPROMIZE (NPROMA, ZINPRC_OUT, ZINPRC_OUT_B)
+CALL NPROMIZE (NPROMA, PINPRR_OUT, PINPRR_OUT_B)
+CALL NPROMIZE (NPROMA, PEVAP_OUT,  PEVAP_OUT_B)
+CALL NPROMIZE (NPROMA, PINPRS_OUT, PINPRS_OUT_B)
+CALL NPROMIZE (NPROMA, PINPRG_OUT, PINPRG_OUT_B)
+
+CALL NPROMIZE (NPROMA, PFPR_OUT,   PFPR_OUT_B)
+
+IF (KRR == 7) THEN
+  CALL NPROMIZE (NPROMA, PINPRH_OUT, PINPRH_OUT_B)
+ENDIF
 
-SUBROUTINE SET3 (P)
-
-  REAL, INTENT(INOUT) :: P (:,:,:)
-  INTEGER :: IBL, IGPBLKS
-  INTEGER :: NTID, ITID, JBLK1, JBLK2
-
-  IGPBLKS = SIZE (P, 3)
-
-!$OMP PARALLEL PRIVATE (ITID, JBLK1, JBLK2, NTID)
-  NTID = OMP_GET_MAX_THREADS ()
-  ITID = OMP_GET_THREAD_NUM ()
-  JBLK1 = 1 +  (IGPBLKS * (ITID+0)) / NTID
-  JBLK2 =      (IGPBLKS * (ITID+1)) / NTID
-
-  DO IBL = JBLK1, JBLK2
-    P (:,:,IBL) = ZNAN
-  ENDDO
-!$OMP END PARALLEL
-
-END SUBROUTINE SET3
-
-SUBROUTINE SET4 (P)
-
-  REAL, INTENT(INOUT) :: P (:,:,:,:)
-  INTEGER :: IBL, IGPBLKS
-  INTEGER :: NTID, ITID, JBLK1, JBLK2
-
-  IGPBLKS = SIZE (P, 4)
-
-!$OMP PARALLEL PRIVATE (ITID, JBLK1, JBLK2, NTID)
-  NTID = OMP_GET_MAX_THREADS ()
-  ITID = OMP_GET_THREAD_NUM ()
-  JBLK1 = 1 +  (IGPBLKS * (ITID+0)) / NTID
-  JBLK2 =      (IGPBLKS * (ITID+1)) / NTID
-
-  DO IBL = JBLK1, JBLK2
-    P (:,:,:,IBL) = ZNAN
-  ENDDO
-!$OMP END PARALLEL
-
-END SUBROUTINE SET4
-
-SUBROUTINE SETL (P)
-
-  LOGICAL, INTENT(INOUT) :: P (:,:,:)
-  INTEGER :: IBL, IGPBLKS
-  INTEGER :: NTID, ITID, JBLK1, JBLK2
-
-  IGPBLKS = SIZE (P, 3)
-
-!$OMP PARALLEL PRIVATE (ITID, JBLK1, JBLK2, NTID)
-  NTID = OMP_GET_MAX_THREADS ()
-  ITID = OMP_GET_THREAD_NUM ()
-  JBLK1 = 1 +  (IGPBLKS * (ITID+0)) / NTID
-  JBLK2 =      (IGPBLKS * (ITID+1)) / NTID
-
-  DO IBL = JBLK1, JBLK2
-    P (:,:,IBL) = .FALSE.
-  ENDDO
-!$OMP END PARALLEL
-
-END SUBROUTINE SETL
+END SUBROUTINE GETDATA_RAIN_ICE_OLD
 
 END  MODULE