diff --git a/src/LIB/SURCOUCHE/src/fmread_ll.f90 b/src/LIB/SURCOUCHE/src/fmread_ll.f90 index 10c862803697fb325900115f9959c08f3c687512..2efa39b2297cd30d7662e9876f249477af10cba5 100644 --- a/src/LIB/SURCOUCHE/src/fmread_ll.f90 +++ b/src/LIB/SURCOUCHE/src/fmread_ll.f90 @@ -1,6 +1,6 @@ -!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-2019 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. !----------------------------------------------------------------- @@ -18,7 +18,8 @@ MODULE MODE_FMREAD ! J.Escobar : 13/01/2015 : remove comment on BCAST(IRESP in FMREADX2_ll ! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 ! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O -! J.Escobar : 17/07/2018 : reintroduce needed MPI_BARRIER in IO_READ_FIELD_BYFIELD_X3 +! J.Escobar : 17/07/2018 : reintroduce needed MPI_BARRIER in IO_READ_FIELD_BYFIELD_X3 +! P.Wautelet: 29/01/2019 : small bug correction in time measurement in IO_READ_FIELD_BYFIELD_X2 ! USE MODD_IO_ll, ONLY : NVERB_FATAL,NVERB_ERROR,NVERB_WARNING,NVERB_INFO,NVERB_DEBUG,TFILEDATA USE MODD_MPIF @@ -452,9 +453,9 @@ IF (IRESP==0) THEN ELSE CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MPI_FLOAT,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) END IF + CALL SECOND_MNH2(T2) + TIMEZ%T_READ2D_SCAT=TIMEZ%T_READ2D_SCAT + T2 - T1 END IF - CALL SECOND_MNH2(T2) - TIMEZ%T_READ2D_SCAT=TIMEZ%T_READ2D_SCAT + T2 - T1 END IF ! IF (GALLOC) DEALLOCATE (ZFIELDP) diff --git a/src/LIB/SURCOUCHE/src/mode_field.f90 b/src/LIB/SURCOUCHE/src/mode_field.f90 index 8dce892d63c429a17a98a9d3a7cf1cc2546f3949..475b028fed0d3598f843e2e059f64cfa1ba278bd 100644 --- a/src/LIB/SURCOUCHE/src/mode_field.f90 +++ b/src/LIB/SURCOUCHE/src/mode_field.f90 @@ -1,10 +1,12 @@ -!MNH_LIC Copyright 2016-2018 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2016-2019 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. !----------------------------------------------------------------- ! Original version: ! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O +! Modifications: +! Philippe Wautelet: 29/01/2019 : small bug correction (null pointers) in FIELDLIST_GOTO_MODEL if NESPGD or PGD !----------------------------------------------------------------- MODULE MODE_FIELD ! @@ -3806,18 +3808,17 @@ END IF ! ! Initialize some pointers ! +!PW: TODO: check if still necessary as XRHODREFZ and XTHVREFZ are now initialiazed in ini_modeln even for KMI/=1 (29/01/2019) IF (KFROM == KTO) THEN - IF (.NOT.ALLOCATED(XRHODREFZ) .AND. CPROGRAM/='NESPGD' .AND. CPROGRAM/='PGD') THEN - CALL PRINT_MSG(NVERB_FATAL,'GEN','FIELDLIST_GOTO_MODEL','XRHODREFZ not yet allocated') + IF ( CPROGRAM/='NESPGD' .AND. CPROGRAM/='PGD' ) THEN + IF (.NOT.ALLOCATED(XRHODREFZ)) CALL PRINT_MSG(NVERB_FATAL,'GEN','FIELDLIST_GOTO_MODEL','XRHODREFZ not yet allocated') + CALL FIND_FIELD_ID_FROM_MNHNAME('RHOREFZ',IID,IRESP) + TFIELDLIST(IID)%TFIELD_X1D(KFROM)%DATA=>XRHODREFZ + ! + IF (.NOT.ALLOCATED(XTHVREFZ)) CALL PRINT_MSG(NVERB_FATAL,'GEN','FIELDLIST_GOTO_MODEL','XTHVREFZ not yet allocated') + CALL FIND_FIELD_ID_FROM_MNHNAME('THVREFZ',IID,IRESP) + TFIELDLIST(IID)%TFIELD_X1D(KFROM)%DATA=>XTHVREFZ END IF - CALL FIND_FIELD_ID_FROM_MNHNAME('RHOREFZ',IID,IRESP) - TFIELDLIST(IID)%TFIELD_X1D(KFROM)%DATA=>XRHODREFZ - ! - IF (.NOT.ALLOCATED(XTHVREFZ) .AND. CPROGRAM/='NESPGD' .AND. CPROGRAM/='PGD') THEN - CALL PRINT_MSG(NVERB_FATAL,'GEN','FIELDLIST_GOTO_MODEL','XTHVREFZ not yet allocated') - END IF - CALL FIND_FIELD_ID_FROM_MNHNAME('THVREFZ',IID,IRESP) - TFIELDLIST(IID)%TFIELD_X1D(KFROM)%DATA=>XTHVREFZ END IF ! ! diff --git a/src/MNH/ini_micron.f90 b/src/MNH/ini_micron.f90 index 67bce21b6e97a0bdd9850ffe635c5205b4195718..e77c689264c910c005919f36332c2d25f6eaba43 100644 --- a/src/MNH/ini_micron.f90 +++ b/src/MNH/ini_micron.f90 @@ -1,6 +1,6 @@ -!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-2019 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. !----------------------------------------------------------------- ! ######################## @@ -51,6 +51,7 @@ END MODULE MODI_INI_MICRO_n !! Modification 01/2016 (JP Pinty) Add LIMA !! C.LAc 10/2016 Add budget for droplet deposition !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O +!! P.Wautelet 01/2019: bug: add missing allocations !! !! -------------------------------------------------------------------------- ! @@ -220,15 +221,13 @@ IF(LBLOWSNOW) THEN IF(CSNOWSEDIM=='TABC') THEN !Read in look up tables of snow particles properties !No arguments, all look up tables are defined in module -!mode_snowdrift_sedim_lkt - CALL BLOWSNOW_SEDIM_LKT_SET +!mode_snowdrift_sedim_lkt + CALL BLOWSNOW_SEDIM_LKT_SET END IF ELSE ALLOCATE(XSNWSUBL3D(0,0,0)) END IF ! -IF(SIZE(XINPRR) == 0) RETURN -! !* 2b. ALLOCATION for Radiative cooling ! ------------------------------ IF (LACTIT .OR. MACTIT) THEN @@ -236,12 +235,11 @@ IF (LACTIT .OR. MACTIT) THEN ALLOCATE( XRCM(IIU,IJU,IKU) ) XTHM = XTHT XRCM(:,:,:) = XRT(:,:,:,2) - ELSE +ELSE ALLOCATE( XTHM(0,0,0) ) ALLOCATE( XRCM(0,0,0) ) END IF ! -! !* 2.bis ALLOCATE Module MODD_PRECIP_SCAVENGING_n ! ------------------------------ ! @@ -249,16 +247,21 @@ IF ( (CCLOUD=='LIMA') .AND. LSCAV ) THEN ALLOCATE(XINPAP(IIU,IJU)) ALLOCATE(XACPAP(IIU,IJU)) XINPAP(:,:)=0.0 - XACPAP(:,:)=0.0 + XACPAP(:,:)=0.0 +ELSE + ALLOCATE(XINPAP(0,0)) + ALLOCATE(XACPAP(0,0)) END IF ! +IF(SIZE(XINPRR) == 0) RETURN +! !* 3. INITIALIZE MODD_PRECIP_n variables ! ---------------------------------- ! CALL READ_PRECIP_FIELD(TPINIFILE,CLUOUT,CPROGRAM,CCONF, & CGETRCT,CGETRRT,CGETRST,CGETRGT,CGETRHT, & XINPRC,XACPRC,XINDEP,XACDEP,XINPRR,XINPRR3D,XEVAP3D,& - XACPRR,XINPRS,XACPRS,XINPRG,XACPRG, XINPRH,XACPRH ) + XACPRR,XINPRS,XACPRS,XINPRG,XACPRG, XINPRH,XACPRH ) ! ! !* 4. INITIALIZE THE PARAMETERS FOR THE MICROPHYSICS @@ -287,13 +290,13 @@ ELSE IF (CCLOUD == 'C2R2' .OR. CCLOUD == 'C3R5' .OR. CCLOUD == 'KHKO') THEN IF (CCLOUD == 'C3R5') THEN CALL INI_ICE_C1R3(XTSTEP,ZDZMIN,NSPLITG) ! 1/2 spectral cold cloud END IF -ELSE IF (CCLOUD == 'LIMA') THEN - IF (CGETCLOUD /= 'READ') THEN - CALL INIT_AEROSOL_CONCENTRATION(XRHODREF, & - XSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), & - XZZ(:,:,:) ) - END IF - CALL INI_LIMA(XTSTEP,ZDZMIN,NSPLITR, NSPLITG) ! 1/2 spectral warm cloud +ELSE IF (CCLOUD == 'LIMA') THEN + IF (CGETCLOUD /= 'READ') THEN + CALL INIT_AEROSOL_CONCENTRATION(XRHODREF, & + XSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), & + XZZ(:,:,:) ) + END IF + CALL INI_LIMA(XTSTEP,ZDZMIN,NSPLITR, NSPLITG) ! 1/2 spectral warm cloud END IF ! IF (CCLOUD == 'C2R2' .OR. CCLOUD == 'C3R5' .OR. CCLOUD == 'KHKO') THEN @@ -313,9 +316,9 @@ IF (CCLOUD == 'C2R2' .OR. CCLOUD == 'C3R5' .OR. CCLOUD == 'KHKO') THEN ENDIF ! IF (CCLOUD == 'LIMA') THEN - IF (CGETCLOUD/='READ') THEN - CALL SET_CONC_LIMA(CGETCLOUD,XRHODREF,XRT,XSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END)) - END IF + IF (CGETCLOUD/='READ') THEN + CALL SET_CONC_LIMA(CGETCLOUD,XRHODREF,XRT,XSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END)) + END IF END IF ! ! diff --git a/src/MNH/ini_modeln.f90 b/src/MNH/ini_modeln.f90 index ce192d4340326112ec57c0ee19f7d7d1aa9e24da..f8e8ac5c5786f45af518e835099cf8401c971d74 100644 --- a/src/MNH/ini_modeln.f90 +++ b/src/MNH/ini_modeln.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-2019 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. @@ -129,10 +129,10 @@ END MODULE MODI_INI_MODEL_n !! Module MODD_CH_MNHC_n : contains the control parameters for chemistry !! Module MODD_DEEP_CONVECTION_n: contains declaration of the variables of !! the deep convection scheme -!! -!! -!! -!! +!! +!! +!! +!! !! Module MODN_CONF_n : contains declaration of namelist NAM_CONFn and !! uses module MODD_CONF_n (configuration variables) !! Module MODN_LUNIT_n : contains declaration of namelist NAM_LUNITn and @@ -151,7 +151,7 @@ END MODULE MODI_INI_MODEL_n !! REFERENCE !! --------- !! Book2 of documentation (routine INI_MODEL_n) -!! +!! !! !! AUTHOR !! ------ @@ -278,6 +278,7 @@ END MODULE MODI_INI_MODEL_n !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O !! V. Vionnet : 18/07/2017 : add blowing snow scheme !! 01/18 J.Colin Add DRAG +!! P.Wautelet 29/01/2019: bug: add missing zero-size allocations !--------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -331,7 +332,7 @@ USE MODD_DIM_n USE MODD_BUDGET USE MODD_RADIATIONS_n USE MODD_SHADOWS_n -USE MODD_PARAM_RAD_n, ONLY : CLW, CAER, CAOP +USE MODD_PARAM_RAD_n, ONLY : CLW, CAER, CAOP USE MODD_VAR_ll, ONLY : IP ! USE MODD_STAND_ATM, ONLY : XSTROATM, XSMLSATM, XSMLWATM, XSPOSATM, XSPOWATM @@ -692,8 +693,10 @@ IF (LMEAN_FIELD) THEN ALLOCATE(XTHM_MEAN(IIU,IJU,IKU)) ; XTHM_MEAN = 0.0 ALLOCATE(XTEMPM_MEAN(IIU,IJU,IKU)) ; XTEMPM_MEAN = 0.0 IF (CTURB/='NONE') THEN - ALLOCATE(XTKEM_MEAN(IIU,IJU,IKU)) - XTKEM_MEAN = 0.0 + ALLOCATE(XTKEM_MEAN(IIU,IJU,IKU)) + XTKEM_MEAN = 0.0 + ELSE + ALLOCATE(XTKEM_MEAN(0,0,0)) END IF ALLOCATE(XPABSM_MEAN(IIU,IJU,IKU)) ; XPABSM_MEAN = 0.0 ! @@ -710,10 +713,35 @@ IF (LMEAN_FIELD) THEN ALLOCATE(XTHM_MAX(IIU,IJU,IKU)) ; XTHM_MAX = 0.0 ALLOCATE(XTEMPM_MAX(IIU,IJU,IKU)) ; XTEMPM_MAX = 0.0 IF (CTURB/='NONE') THEN - ALLOCATE(XTKEM_MAX(IIU,IJU,IKU)) - XTKEM_MAX = 0.0 + ALLOCATE(XTKEM_MAX(IIU,IJU,IKU)) + XTKEM_MAX = 0.0 + ELSE + ALLOCATE(XTKEM_MAX(0,0,0)) END IF ALLOCATE(XPABSM_MAX(IIU,IJU,IKU)) ; XPABSM_MAX = 0.0 +ELSE + ALLOCATE(XUM_MEAN(0,0,0)) + ALLOCATE(XVM_MEAN(0,0,0)) + ALLOCATE(XWM_MEAN(0,0,0)) + ALLOCATE(XTHM_MEAN(0,0,0)) + ALLOCATE(XTEMPM_MEAN(0,0,0)) + ALLOCATE(XTKEM_MEAN(0,0,0)) + ALLOCATE(XPABSM_MEAN(0,0,0)) +! + ALLOCATE(XU2_MEAN(0,0,0)) + ALLOCATE(XV2_MEAN(0,0,0)) + ALLOCATE(XW2_MEAN(0,0,0)) + ALLOCATE(XTH2_MEAN(0,0,0)) + ALLOCATE(XTEMP2_MEAN(0,0,0)) + ALLOCATE(XPABS2_MEAN(0,0,0)) +! + ALLOCATE(XUM_MAX(0,0,0)) + ALLOCATE(XVM_MAX(0,0,0)) + ALLOCATE(XWM_MAX(0,0,0)) + ALLOCATE(XTHM_MAX(0,0,0)) + ALLOCATE(XTEMPM_MAX(0,0,0)) + ALLOCATE(XTKEM_MAX(0,0,0)) + ALLOCATE(XPABSM_MAX(0,0,0)) END IF ! IF ((CUVW_ADV_SCHEME(1:3)=='CEN') .AND. (CTEMP_SCHEME == 'LEFR') ) THEN @@ -731,6 +759,13 @@ IF ((CUVW_ADV_SCHEME(1:3)=='CEN') .AND. (CTEMP_SCHEME == 'LEFR') ) THEN XDVM = 0.0 XDWM = 0.0 END IF +ELSE + ALLOCATE(XUM(0,0,0)) + ALLOCATE(XVM(0,0,0)) + ALLOCATE(XWM(0,0,0)) + ALLOCATE(XDUM(0,0,0)) + ALLOCATE(XDVM(0,0,0)) + ALLOCATE(XDWM(0,0,0)) END IF ! ALLOCATE(XUT(IIU,IJU,IKU)) ; XUT = 0.0 @@ -760,6 +795,7 @@ IF (CTURB /= 'NONE') THEN ELSE ALLOCATE(XTKET(0,0,0)) ALLOCATE(XRTKES(0,0,0)) + ALLOCATE(XRTKEMS(0,0,0)) ALLOCATE(XWTHVMF(0,0,0)) ALLOCATE(XDYP(0,0,0)) ALLOCATE(XTHP(0,0,0)) @@ -806,9 +842,8 @@ ALLOCATE(XRSVS_CLD(IIU,IJU,IKU,NSV)); XRSVS_CLD = 0.0 IF (LPASPOL) THEN ALLOCATE( XATC(IIU,IJU,IKU,NSV_PP) ) XATC = 0. - ELSE +ELSE ALLOCATE( XATC(0,0,0,0)) - XATC = 0. END IF ! IF(LBLOWSNOW) THEN @@ -856,6 +891,8 @@ ALLOCATE(XDZZ(IIU,IJU,IKU)) ! IF (KMI == 1) THEN ALLOCATE(XRHODREFZ(IKU),XTHVREFZ(IKU)) +ELSE + ALLOCATE(XRHODREFZ(0),XTHVREFZ(0)) END IF ALLOCATE(XRHODREF(IIU,IJU,IKU)) ALLOCATE(XTHVREF(IIU,IJU,IKU)) @@ -891,7 +928,7 @@ CALL GET_DIM_EXT_ll('Y',IIY,IJY) IF (L2D) THEN ALLOCATE(XBFY(IIY,IJY,IKU)) ELSE - ALLOCATE(XBFY(IJY,IIY,IKU)) ! transposition needed by the optimisition of the + ALLOCATE(XBFY(IJY,IIY,IKU)) ! transposition needed by the optimisation of the ! FFT solver END IF CALL GET_DIM_EXT_ll('B',IIU_B,IJU_B) @@ -1070,7 +1107,7 @@ ELSE ! 3D case " change relaxation parameters or number of processors " !callabortstop CALL ABORT - STOP + STOP END IF END IF IF ( CLBCY(1) /= 'CYCL' ) THEN @@ -1082,7 +1119,7 @@ ELSE ! 3D case " change relaxation parameters or number of processors " !callabortstop CALL ABORT - STOP + STOP END IF END IF IF ( LHORELAX_UVWTH ) THEN @@ -1194,6 +1231,23 @@ IF ( KMI > 1 ) THEN ALLOCATE( NKLIN_LBXW(SIZE(XLBXWM,1),SIZE(XLBXWM,2),SIZE(XLBXWM,3))) ALLOCATE(XCOEFLIN_LBYW(SIZE(XLBYWM,1),SIZE(XLBYWM,2),SIZE(XLBYWM,3))) ALLOCATE( NKLIN_LBYW(SIZE(XLBYWM,1),SIZE(XLBYWM,2),SIZE(XLBYWM,3))) +ELSE + ALLOCATE(XCOEFLIN_LBXM(0,0,0)) + ALLOCATE( NKLIN_LBXM(0,0,0)) + ALLOCATE(XCOEFLIN_LBYM(0,0,0)) + ALLOCATE( NKLIN_LBYM(0,0,0)) + ALLOCATE(XCOEFLIN_LBXU(0,0,0)) + ALLOCATE( NKLIN_LBXU(0,0,0)) + ALLOCATE(XCOEFLIN_LBYU(0,0,0)) + ALLOCATE( NKLIN_LBYU(0,0,0)) + ALLOCATE(XCOEFLIN_LBXV(0,0,0)) + ALLOCATE( NKLIN_LBXV(0,0,0)) + ALLOCATE(XCOEFLIN_LBYV(0,0,0)) + ALLOCATE( NKLIN_LBYV(0,0,0)) + ALLOCATE(XCOEFLIN_LBXW(0,0,0)) + ALLOCATE( NKLIN_LBXW(0,0,0)) + ALLOCATE(XCOEFLIN_LBYW(0,0,0)) + ALLOCATE( NKLIN_LBYW(0,0,0)) END IF ! ! allocation of the LS fields for vertical relaxation and numerical diffusion @@ -1257,11 +1311,10 @@ END IF ! Initialization of SW bands NSWB_OLD = 6 ! Number of bands in ECMWF original scheme (from Fouquart et Bonnel (1980)) ! then modified through INI_RADIATIONS_ECMWF but remains equal to 6 practically - IF (CRAD == 'ECRA') THEN - NSWB_MNH = 14 + NSWB_MNH = 14 ELSE - NSWB_MNH = NSWB_OLD + NSWB_MNH = NSWB_OLD END IF NLWB_MNH = 16 ! For XEMIS initialization (should be spectral in the future) @@ -1373,9 +1426,25 @@ IF (CDCONV /= 'NONE' .OR. CSCONV == 'KAFR') THEN ALLOCATE(NCLBASCONV(0,0)) END IF ELSE + ALLOCATE(NCOUNTCONV(0,0)) + ALLOCATE(XDTHCONV(0,0,0)) + ALLOCATE(XDRVCONV(0,0,0)) + ALLOCATE(XDRCCONV(0,0,0)) + ALLOCATE(XDRICONV(0,0,0)) ALLOCATE(XPRCONV(0,0)) ALLOCATE(XPACCONV(0,0)) ALLOCATE(XPRSCONV(0,0)) + ALLOCATE(XIC_RATE(0,0)) + ALLOCATE(XCG_RATE(0,0)) + ALLOCATE(XIC_TOTAL_NUMBER(0,0)) + ALLOCATE(XCG_TOTAL_NUMBER(0,0)) + ALLOCATE(XUMFCONV(0,0,0)) + ALLOCATE(XDMFCONV(0,0,0)) + ALLOCATE(XPRLFLXCONV(0,0,0)) + ALLOCATE(XPRSFLXCONV(0,0,0)) + ALLOCATE(XCAPE(0,0)) + ALLOCATE(NCLTOPCONV(0,0)) + ALLOCATE(NCLBASCONV(0,0)) END IF ! IF ((CDCONV == 'KAFR' .OR. CSCONV == 'KAFR') & @@ -1416,7 +1485,7 @@ IF (KMI == 1) THEN ALLOCATE(XGYTHFRC(IKU,NFRC)) ALLOCATE(XPGROUNDFRC(NFRC)) ALLOCATE(XTENDUFRC(IKU,NFRC)) - ALLOCATE(XTENDVFRC(IKU,NFRC)) + ALLOCATE(XTENDVFRC(IKU,NFRC)) ELSE ALLOCATE(TDTFRC(0)) ALLOCATE(XUFRC(0,0)) @@ -1441,6 +1510,23 @@ IF (KMI == 1) THEN ALLOCATE(XUFRC_PAST(0,0,0)) ALLOCATE(XVFRC_PAST(0,0,0)) END IF +ELSE + ALLOCATE(TDTFRC(0)) + ALLOCATE(XUFRC(0,0)) + ALLOCATE(XVFRC(0,0)) + ALLOCATE(XWFRC(0,0)) + ALLOCATE(XTHFRC(0,0)) + ALLOCATE(XRVFRC(0,0)) + ALLOCATE(XTENDTHFRC(0,0)) + ALLOCATE(XTENDRVFRC(0,0)) + ALLOCATE(XGXTHFRC(0,0)) + ALLOCATE(XGYTHFRC(0,0)) + ALLOCATE(XPGROUNDFRC(0)) + ALLOCATE(XTENDUFRC(0,0)) + ALLOCATE(XTENDVFRC(0,0)) + ALLOCATE(XWTFRC(0,0,0)) + ALLOCATE(XUFRC_PAST(0,0,0)) + ALLOCATE(XVFRC_PAST(0,0,0)) END IF ! ---------------------------------------------------------------------- ! @@ -1471,25 +1557,31 @@ ENDIF !* 4.11 BIS: Eddy fluxes allocation ! IF ( LTH_FLX ) THEN - ALLOCATE(XVTH_FLUX_M(IIU,IJU,IKU)) ; XVTH_FLUX_M = 0. - ALLOCATE(XWTH_FLUX_M(IIU,IJU,IKU)) ; XWTH_FLUX_M = 0. - IF (KMI /= 1) THEN - ALLOCATE(XRTHS_EDDY_FLUX(IIU,IJU,IKU)) - XRTHS_EDDY_FLUX = 0. - ENDIF + ALLOCATE(XVTH_FLUX_M(IIU,IJU,IKU)) ; XVTH_FLUX_M = 0. + ALLOCATE(XWTH_FLUX_M(IIU,IJU,IKU)) ; XWTH_FLUX_M = 0. + IF (KMI /= 1) THEN + ALLOCATE(XRTHS_EDDY_FLUX(IIU,IJU,IKU)) + XRTHS_EDDY_FLUX = 0. + ELSE + ALLOCATE(XRTHS_EDDY_FLUX(0,0,0)) + ENDIF ELSE - ALLOCATE(XVTH_FLUX_M(0,0,0)) ; XVTH_FLUX_M = 0. - ALLOCATE(XWTH_FLUX_M(0,0,0)) ; XWTH_FLUX_M = 0. + ALLOCATE(XVTH_FLUX_M(0,0,0)) + ALLOCATE(XWTH_FLUX_M(0,0,0)) + ALLOCATE(XRTHS_EDDY_FLUX(0,0,0)) END IF ! IF ( LUV_FLX) THEN - ALLOCATE(XVU_FLUX_M(IIU,IJU,IKU)) ; XVU_FLUX_M = 0. - IF (KMI /= 1) THEN - ALLOCATE(XRVS_EDDY_FLUX(IIU,IJU,IKU)) - XRVS_EDDY_FLUX = 0. - ENDIF + ALLOCATE(XVU_FLUX_M(IIU,IJU,IKU)) ; XVU_FLUX_M = 0. + IF (KMI /= 1) THEN + ALLOCATE(XRVS_EDDY_FLUX(IIU,IJU,IKU)) + XRVS_EDDY_FLUX = 0. + ELSE + ALLOCATE(XRVS_EDDY_FLUX(0,0,0)) + ENDIF ELSE - ALLOCATE(XVU_FLUX_M(0,0,0)) ; XVU_FLUX_M = 0. + ALLOCATE(XVU_FLUX_M(0,0,0)) + ALLOCATE(XRVS_EDDY_FLUX(0,0,0)) END IF ! !* 3.11 Module MODD_ICE_CONC_n @@ -1506,6 +1598,11 @@ IF ( CCLOUD == 'KHKO' .OR. CCLOUD == 'C2R2') THEN ALLOCATE(XNACT(IIU,IJU,IKU)) ALLOCATE(XNPRO(IIU,IJU,IKU)) ALLOCATE(XSSPRO(IIU,IJU,IKU)) +ELSE + ALLOCATE(XSUPSAT(0,0,0)) + ALLOCATE(XNACT(0,0,0)) + ALLOCATE(XNPRO(0,0,0)) + ALLOCATE(XSSPRO(0,0,0)) END IF ! !* 3.12 Module MODD_TURB_CLOUD @@ -1532,17 +1629,23 @@ IF (LUSECHAQ.AND.(CPROGRAM == 'DIAG '.OR.CPROGRAM == 'MESONH')) THEN XACPRAQ(:,:,:) = 0. ENDIF ENDIF +IF (.NOT.(ASSOCIATED(XPHC))) ALLOCATE(XPHC(0,0,0)) +IF (.NOT.(ASSOCIATED(XPHR))) ALLOCATE(XPHR(0,0,0)) +IF (.NOT.(ASSOCIATED(XACPHR))) ALLOCATE(XACPHR(0,0)) +IF (.NOT.(ASSOCIATED(XACPRAQ))) ALLOCATE(XACPRAQ(0,0,0)) IF ((LUSECHEM).AND.(CPROGRAM == 'DIAG ')) THEN ALLOCATE(XCHFLX(IIU,IJU,NSV_CHEM)) XCHFLX(:,:,:) = 0. +ELSE + ALLOCATE(XCHFLX(0,0,0)) END IF ! !* 3.14 Module MODD_DRAG ! IF (LDRAG) THEN - ALLOCATE(XDRAG(IIU,IJU)) + ALLOCATE(XDRAG(IIU,IJU)) ELSE - ALLOCATE(XDRAG(0,0)) + ALLOCATE(XDRAG(0,0)) ENDIF ! !------------------------------------------------------------------------------- @@ -1642,14 +1745,10 @@ IF ( LUSECHEM .OR. LCHEMDIAG ) THEN ! IF (LORILAM) THEN CALL CH_AER_MOD_INIT - ELSE - IF (.NOT.(ASSOCIATED(XSOLORG))) ALLOCATE(XSOLORG(0,0,0,0)) - IF (.NOT.(ASSOCIATED(XMI))) ALLOCATE(XMI(0,0,0,0)) ENDIF -ELSE - IF (.NOT.(ASSOCIATED(XMI))) ALLOCATE(XMI(0,0,0,0)) - IF (.NOT.(ASSOCIATED(XSOLORG))) ALLOCATE(XSOLORG(0,0,0,0)) END IF +IF (.NOT.(ASSOCIATED(XMI))) ALLOCATE(XMI(0,0,0,0)) +IF (.NOT.(ASSOCIATED(XSOLORG))) ALLOCATE(XSOLORG(0,0,0,0)) ! IF (CCLOUD=='LIMA') CALL INIT_AEROSOL_PROPERTIES ! @@ -2325,16 +2424,16 @@ CALL INI_AEROSET6 ! Coupling with ForeFire if resolution is low enough !--------------------------------------------------- IF ( LFOREFIRE .AND. 0.5*(XXHAT(2)-XXHAT(1)+XYHAT(2)-XYHAT(1)) < COUPLINGRES ) THEN - FFCOUPLING = .TRUE. + FFCOUPLING = .TRUE. ELSE - FFCOUPLING = .FALSE. + FFCOUPLING = .FALSE. ENDIF ! Initializing the ForeFire variables !------------------------------------ IF ( LFOREFIRE ) THEN - CALL INIT_FOREFIRE_n(KMI, ILUOUT, IP & - , TDTCUR%TDATE%YEAR, TDTCUR%TDATE%MONTH, TDTCUR%TDATE%DAY, TDTCUR%TIME, XTSTEP) + CALL INIT_FOREFIRE_n(KMI, ILUOUT, IP & + , TDTCUR%TDATE%YEAR, TDTCUR%TDATE%MONTH, TDTCUR%TDATE%DAY, TDTCUR%TIME, XTSTEP) END IF #endif @@ -2343,19 +2442,19 @@ END IF !* 30. Total production/Loss for chemical species ! IF (LCHEMDIAG) THEN - CALL CH_INIT_PRODLOSSTOT_n(ILUOUT) - IF (NEQ_PLT>0) THEN - ALLOCATE(XPROD(IIU,IJU,IKU,NEQ_PLT)) - ALLOCATE(XLOSS(IIU,IJU,IKU,NEQ_PLT)) - XPROD=0.0 - XLOSS=0.0 - ELSE - ALLOCATE(XPROD(0,0,0,0)) - ALLOCATE(XLOSS(0,0,0,0)) - END IF + CALL CH_INIT_PRODLOSSTOT_n(ILUOUT) + IF (NEQ_PLT>0) THEN + ALLOCATE(XPROD(IIU,IJU,IKU,NEQ_PLT)) + ALLOCATE(XLOSS(IIU,IJU,IKU,NEQ_PLT)) + XPROD=0.0 + XLOSS=0.0 + ELSE + ALLOCATE(XPROD(0,0,0,0)) + ALLOCATE(XLOSS(0,0,0,0)) + END IF ELSE - ALLOCATE(XPROD(0,0,0,0)) - ALLOCATE(XLOSS(0,0,0,0)) + ALLOCATE(XPROD(0,0,0,0)) + ALLOCATE(XLOSS(0,0,0,0)) END IF ! !------------------------------------------------------------------------------- @@ -2363,24 +2462,24 @@ END IF !* 31. Extended production/loss terms for chemical species ! IF (LCHEMDIAG) THEN - CALL CH_INIT_BUDGET_n(ILUOUT) - IF (NEQ_BUDGET>0) THEN - ALLOCATE(IINDEX(2,NNONZEROTERMS)) - ALLOCATE(IIND(NEQ_BUDGET)) - CALL CH_NONZEROTERMS(KMI,IINDEX,NNONZEROTERMS) - ALLOCATE(XTCHEM(NEQ_BUDGET)) - DO JM=1,NEQ_BUDGET - IIND(JM)=COUNT((IINDEX(1,:))==NSPEC_BUDGET(JM)) - ALLOCATE(XTCHEM(JM)%NB_REAC(IIND(JM))) - ALLOCATE(XTCHEM(JM)%XB_REAC(IIU,IJU,IKU,IIND(JM))) - END DO - DEALLOCATE(IIND) - DEALLOCATE(IINDEX) - ELSE - ALLOCATE(XTCHEM(0)) - END IF + CALL CH_INIT_BUDGET_n(ILUOUT) + IF (NEQ_BUDGET>0) THEN + ALLOCATE(IINDEX(2,NNONZEROTERMS)) + ALLOCATE(IIND(NEQ_BUDGET)) + CALL CH_NONZEROTERMS(KMI,IINDEX,NNONZEROTERMS) + ALLOCATE(XTCHEM(NEQ_BUDGET)) + DO JM=1,NEQ_BUDGET + IIND(JM)=COUNT((IINDEX(1,:))==NSPEC_BUDGET(JM)) + ALLOCATE(XTCHEM(JM)%NB_REAC(IIND(JM))) + ALLOCATE(XTCHEM(JM)%XB_REAC(IIU,IJU,IKU,IIND(JM))) + END DO + DEALLOCATE(IIND) + DEALLOCATE(IINDEX) + ELSE + ALLOCATE(XTCHEM(0)) + END IF ELSE - ALLOCATE(XTCHEM(0)) + ALLOCATE(XTCHEM(0)) END IF END SUBROUTINE INI_MODEL_n diff --git a/src/MNH/read_field.f90 b/src/MNH/read_field.f90 index 10730a3ead87e0d0197687351e0b17f8e5ce34fd..83febd489515473d389367fbe943292b2113b7af 100644 --- a/src/MNH/read_field.f90 +++ b/src/MNH/read_field.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-2019 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. @@ -237,6 +237,7 @@ END MODULE MODI_READ_FIELD !! 09/2017 Q.Rodier add LTEND_UV_FRC !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O !! V. Vionnet 07/17 add blowing snow scheme +!! P. Wautelet 01/2019 corrected intent of PDUM,PDVM,PDWM (OUT->INOUT) !!------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -319,8 +320,8 @@ INTEGER, INTENT(IN) :: KSIZELBY_ll,KSIZELBYV_ll ! for T,U,W and v INTEGER, INTENT(IN) :: KSIZELBYTKE_ll ! for TKE INTEGER, INTENT(IN) :: KSIZELBYR_ll,KSIZELBYSV_ll ! for Rx and SV ! -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PUM,PVM,PWM ! U,V,W at t-dt -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PDUM,PDVM,PDWM ! Difference on U,V,W +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PUM1,PVM,PWM ! U,V,W at t-dt +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PDUM,PDVM,PDWM ! Difference on U,V,W ! between t+dt and t-dt REAL, DIMENSION(:,:), INTENT(OUT) :: PBL_DEPTH ! BL depth REAL, DIMENSION(:,:), INTENT(OUT) :: PSBL_DEPTH ! SBL depth diff --git a/src/MNH/set_perturb.f90 b/src/MNH/set_perturb.f90 index 8bc9b5cd66b420741a89315018d4e5aa0972cf82..866feb3ba267c36d0da94fa470cc5856efb5d973 100644 --- a/src/MNH/set_perturb.f90 +++ b/src/MNH/set_perturb.f90 @@ -273,7 +273,7 @@ SELECT CASE(CPERT_KIND) END DO ! CALL MPPDB_CHECK3D(ZDIST,"SET_PERTURB::ZDIST",PRECISION) - CALL MPPDB_CHECK3D(XTHM,"SET_PERTURB::XTHM",PRECISION) + !CALL MPPDB_CHECK3D(XTHM,"SET_PERTURB::XTHM",PRECISION) ! IF ( LSET_RHU) THEN ZT(:,:,:) = 0.0 @@ -309,7 +309,7 @@ SELECT CASE(CPERT_KIND) END WHERE END IF CALL MPPDB_CHECK3D(XRT(:,:,:,1),"SET_PERTURB::XRT",PRECISION) - CALL MPPDB_CHECK3D(XTHM,"SET_PERTURB::XTHM",PRECISION) + !CALL MPPDB_CHECK3D(XTHM,"SET_PERTURB::XTHM",PRECISION) ! !------------------------------------------------------------------------------- ! diff --git a/src/MNH/write_aircraft_balloon.f90 b/src/MNH/write_aircraft_balloon.f90 index b9cd28388de27506234212a38328f53fd73c7f19..3d021974a57dffa07db073440be563f808af62be 100644 --- a/src/MNH/write_aircraft_balloon.f90 +++ b/src/MNH/write_aircraft_balloon.f90 @@ -1,6 +1,6 @@ -!MNH_LIC Copyright 2000-2018 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2000-2019 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. !----------------------------------------------------------------- ! ########################### @@ -63,9 +63,10 @@ END MODULE MODI_WRITE_AIRCRAFT_BALLOON !! Oct 2016 : G.Delautier LIMA !! August 2016 (M.Leriche) Add mass concentration of aerosol species !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O +!! P. Wautelet 29/01/2019: bug: moved an instruction later (to prevent access to a not allocated array) !! !! -------------------------------------------------------------------------- -! +! !* 0. DECLARATIONS ! ------------ ! @@ -210,12 +211,12 @@ INTEGER :: JLOOP ! !---------------------------------------------------------------------------- ! -IKU = SIZE(TPFLYER%RTZ,2) !number of vertical levels IF (TPFLYER%NMODEL==0) RETURN IF (ALL(TPFLYER%X==XUNDEF)) RETURN IF (COUNT(TPFLYER%X/=XUNDEF)<=1) RETURN IF ( IMI /= TPFLYER%NMODEL ) RETURN ! +IKU = SIZE(TPFLYER%RTZ,2) !number of vertical levels ! IPROC = 20 + SIZE(TPFLYER%R,2) + SIZE(TPFLYER%SV,2) & + 2 + SIZE(TPFLYER%SVW_FLUX,2)