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