diff --git a/src/MNH/aircraft_balloon_evol.f90 b/src/MNH/aircraft_balloon_evol.f90 index d7de3a7c12b41bdb79e4587097344f9c04df0c7c..c79631fa0e07aa38c1e42c2e2c6e3bf70ce27821 100644 --- a/src/MNH/aircraft_balloon_evol.f90 +++ b/src/MNH/aircraft_balloon_evol.f90 @@ -455,7 +455,7 @@ IF ( .NOT. TPFLYER%LFLY ) THEN END IF CLASS DEFAULT - CALL PRINT_MSG( NVERB_ERROR, 'GEN', 'AIRCRAFT_BALLOON_EVOL', 'unknown type for TPFLYER' ) + CALL PRINT_MSG( NVERB_ERROR, 'GEN', 'AIRCRAFT_BALLOON_EVOL', 'unknown type for TPFLYER', OLOCAL = .TRUE. ) END SELECT ! @@ -636,7 +636,7 @@ IF ( TPFLYER%LFLY ) THEN ZXCOEF = MAX (0.,MIN(ZXCOEF,1.)) ZYCOEF = (TPFLYER%XY_CUR - ZYHATM(IJ)) / (ZYHATM(IJ+1) - ZYHATM(IJ)) ZYCOEF = MAX (0.,MIN(ZYCOEF,1.)) - IF ( TPFLYER%XALTLAUNCH /= XUNDEF ) THEN + IF ( TPFLYER%XALTLAUNCH /= XNEGUNDEF ) THEN IK00 = MAX ( COUNT (TPFLYER%XALTLAUNCH >= ZZM(1,1,:)), 1) IK01 = MAX ( COUNT (TPFLYER%XALTLAUNCH >= ZZM(1,2,:)), 1) IK10 = MAX ( COUNT (TPFLYER%XALTLAUNCH >= ZZM(2,1,:)), 1) @@ -646,7 +646,7 @@ IF ( TPFLYER%LFLY ) THEN ZZCOEF10 = (TPFLYER%XALTLAUNCH - ZZM(2,1,IK10)) / ( ZZM(2,1,IK10+1) - ZZM(2,1,IK10)) ZZCOEF11 = (TPFLYER%XALTLAUNCH - ZZM(2,2,IK11)) / ( ZZM(2,2,IK11+1) - ZZM(2,2,IK11)) TPFLYER%XRHO = FLYER_INTERP(ZRHO) - ELSE IF ( TPFLYER%XPRES /= XUNDEF ) THEN + ELSE IF ( TPFLYER%XPRES /= XNEGUNDEF ) THEN ZFLYER_EXN = (TPFLYER%XPRES/XP00)**(XRD/XCPD) IK00 = MAX ( COUNT (ZFLYER_EXN <= ZEXN(1,1,:)), 1) IK01 = MAX ( COUNT (ZFLYER_EXN <= ZEXN(1,2,:)), 1) @@ -661,7 +661,7 @@ IF ( TPFLYER%LFLY ) THEN CMNHMSG(1) = 'Error in balloon initial position (balloon ' // TRIM(TPFLYER%CTITLE) // ' )' CMNHMSG(2) = 'neither initial ALTITUDE or PRESsure is given' CMNHMSG(3) = 'Check your INI_BALLOON routine' - CALL PRINT_MSG( NVERB_FATAL, 'GEN', 'AIRCRAFT_BALLOON_EVOL' ) + CALL PRINT_MSG( NVERB_FATAL, 'GEN', 'AIRCRAFT_BALLOON_EVOL', OLOCAL = .TRUE. ) END IF ! !* 5.2.2 Radiosounding balloon @@ -680,7 +680,7 @@ IF ( TPFLYER%LFLY ) THEN ZXCOEF = MAX (0.,MIN(ZXCOEF,1.)) ZYCOEF = (TPFLYER%XY_CUR - ZYHATM(IJ)) / (ZYHATM(IJ+1) - ZYHATM(IJ)) ZYCOEF = MAX (0.,MIN(ZYCOEF,1.)) - IF ( TPFLYER%XALTLAUNCH /= XUNDEF ) THEN + IF ( TPFLYER%XALTLAUNCH /= XNEGUNDEF ) THEN IK00 = MAX ( COUNT (TPFLYER%XALTLAUNCH >= ZZM(1,1,:)), 1) IK01 = MAX ( COUNT (TPFLYER%XALTLAUNCH >= ZZM(1,2,:)), 1) IK10 = MAX ( COUNT (TPFLYER%XALTLAUNCH >= ZZM(2,1,:)), 1) @@ -699,7 +699,7 @@ IF ( TPFLYER%LFLY ) THEN TPFLYER%XRHO = FLYER_INTERP(ZRHO) TPFLYER%XZ_CUR = FLYER_INTERP(ZZM) END IF - ELSE IF ( TPFLYER%XPRES /= XUNDEF ) THEN + ELSE IF ( TPFLYER%XPRES /= XNEGUNDEF ) THEN ZFLYER_EXN = (TPFLYER%XPRES/XP00)**(XRD/XCPD) IK00 = MAX ( COUNT (ZFLYER_EXN <= ZEXN(1,1,:)), 1) IK01 = MAX ( COUNT (ZFLYER_EXN <= ZEXN(1,2,:)), 1) diff --git a/src/MNH/ini_balloon.f90 b/src/MNH/ini_balloon.f90 index f9f2d1cd01111003d7c4c30ca52cbd4b0d52c959..886f3f83e61f10dfa0d8caf1dee4c930e66f6191 100644 --- a/src/MNH/ini_balloon.f90 +++ b/src/MNH/ini_balloon.f90 @@ -18,7 +18,7 @@ !! ------ !! !! For constant volume Balloon, horizontal advection using horizontal wind -!! vertical spped of the balloon calculated using the balloon equation +!! vertical speed of the balloon calculated using the balloon equation !! (Koffi et AL 2000, JAS vol 57 P.2007-2021) !! !! Must be defined (for each balloon): @@ -93,452 +93,259 @@ !! ------------- !! Original 15/05/2000 !! Apr,19, 2001 (G.Jaubert) add CVBALL type and switch in models -! P. Wautelet 06/2022: reorganize flyers +! P. Wautelet 13/07/2022: give balloons characteristics in namelist instead of hardcoded !! -------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! USE MODD_AIRCRAFT_BALLOON -USE MODD_CST +USE MODD_CONF, ONLY: NMODEL_NEST => NMODEL +USE MODD_CST, ONLY: XPI +USE MODD_PARAMETERS, ONLY: XUNDEF USE MODE_MSG +USE MODN_BALLOONS + IMPLICIT NONE -! -! -!* 0.1 declarations of arguments -! -! -!------------------------------------------------------------------------------- -! -! 0.2 declaration of local variables -! + INTEGER :: JI -!---------------------------------------------------------------------------- -NBALLOONS = 0 -ALLOCATE( TBALLOONS(NBALLOONS) ) +ALLOCATE( TBALLOONS (NBALLOONS) ) + +!Treat balloon data read in namelist +DO JI = 1, NBALLOONS + IF ( CTITLE(JI) == '' ) THEN + WRITE( CTITLE(JI), FMT = '( A, I3.3) ') TRIM( CTYPE(JI) ), JI + + WRITE( CMNHMSG(1), FMT = '( A, I4 )' ) 'no title given to balloon number ', JI + CMNHMSG(2) = 'title set to ' // TRIM( CTITLE(JI) ) + CALL PRINT_MSG( NVERB_INFO, 'GEN', 'INI_BALLOON' ) + END IF + TBALLOONS(JI)%CTITLE = CTITLE(JI) + + IF ( CMODEL(JI) == 'FIX' ) THEN + IF ( NMODEL(JI) < 1 .OR. NMODEL(JI) > NMODEL_NEST ) THEN + CMNHMSG(1) = 'invalid NMODEL balloon ' // TRIM( CTITLE(JI) ) + CMNHMSG(2) = 'NMODEL must be between 1 and the last nested model number' + CALL PRINT_MSG( NVERB_ERROR, 'GEN', 'INI_BALLOON' ) + NMODEL(JI) = 1 + END IF + ELSE IF ( CMODEL(JI) == 'MOB' ) THEN + IF ( NMODEL(JI) /= 0 .AND. NMODEL(JI) /= 1 ) THEN + CALL PRINT_MSG( NVERB_WARNING, 'GEN', 'INI_BALLOON', & + 'NMODEL is set to 1 at start for a CMODEL="MOB" balloon (balloon ' // TRIM( CTITLE(JI) ) // ')' ) + END IF + NMODEL(JI) = 1 + ELSE + CMNHMSG(1) = 'invalid CMODEL (' // TRIM( CMODEL(JI) ) // ') for balloon ' // TRIM( CTITLE(JI) ) + CMNHMSG(2) = 'CMODEL must be FIX or MOB (default="FIX")' + CALL PRINT_MSG( NVERB_ERROR, 'GEN', 'INI_BALLOON' ) + CMODEL(JI) = 'FIX' + NMODEL(JI) = 1 + END IF + TBALLOONS(JI)%CMODEL = CMODEL(JI) + TBALLOONS(JI)%NMODEL = NMODEL(JI) + + TBALLOONS(JI)%CTYPE = CTYPE(JI) + + IF ( .NOT. TLAUNCH(JI)%CHECK( TRIM( CTITLE(JI) ) ) ) & + CALL PRINT_MSG( NVERB_ERROR, 'GEN', 'INI_BALLOON', & + 'problem with TLAUNCH (not set or incorrect values) for balloon ' // TRIM( CTITLE(JI) ) ) + TBALLOONS(JI)%TLAUNCH = TLAUNCH(JI) + + IF ( XLATLAUNCH(JI) == XUNDEF ) & + CALL PRINT_MSG( NVERB_ERROR, 'GEN', 'INI_BALLOON', 'XLATLAUNCH not provided for balloon ' // TRIM( CTITLE(JI) ) ) + TBALLOONS(JI)%XLATLAUNCH = XLATLAUNCH(JI) + + IF ( XLONLAUNCH(JI) == XUNDEF ) & + CALL PRINT_MSG( NVERB_ERROR, 'GEN', 'INI_BALLOON', 'XLONLAUNCH not provided for balloon ' // TRIM( CTITLE(JI) ) ) + TBALLOONS(JI)%XLONLAUNCH = XLONLAUNCH(JI) + + IF ( XTSTEP(JI) == XNEGUNDEF ) THEN + CALL PRINT_MSG( NVERB_INFO, 'GEN', 'INI_BALLOON', & + 'data storage frequency not provided for balloon ' // TRIM( CTITLE(JI) ) // ' => set to 60s' ) + XTSTEP(JI) = 60. + ELSE IF ( XTSTEP(JI) <=0. ) THEN + CALL PRINT_MSG( NVERB_ERROR, 'GEN', 'INI_BALLOON', 'invalid data storage frequency for balloon ' // TRIM( CTITLE(JI) ) ) + XTSTEP(JI) = 60. + END IF + TBALLOONS(JI)%TFLYER_TIME%XTSTEP = XTSTEP(JI) + + SELECT CASE ( CTYPE(JI) ) + CASE ( 'CVBALL' ) + IF ( XALTLAUNCH(JI) == XNEGUNDEF .AND. XPRES(JI) == XNEGUNDEF ) THEN + CMNHMSG(1) = 'altitude or pressure at launch not provided for CVBALL balloon ' // TRIM( CTITLE(JI) ) + CMNHMSG(2) = 'altitude with same air density than balloon will be used for the launch position' + CALL PRINT_MSG( NVERB_INFO, 'GEN', 'INI_BALLOON' ) + END IF + IF ( XALTLAUNCH(JI) /= XNEGUNDEF .AND. XPRES(JI) /= XNEGUNDEF ) & + CALL PRINT_MSG( NVERB_ERROR, 'GEN', 'INI_BALLOON', & + 'altitude or pressure at launch (not both) must be provided for ISODEN balloon ' // TRIM( CTITLE(JI) ) ) + TBALLOONS(JI)%XALTLAUNCH = XALTLAUNCH(JI) + TBALLOONS(JI)%XPRES = XPRES(JI) + + IF ( XWASCENT(JI) == XNEGUNDEF ) THEN + CALL PRINT_MSG( NVERB_INFO, 'GEN', 'INI_BALLOON', & + 'initial vertical speed not provided for CVBALL balloon ' // TRIM( CTITLE(JI) ) // ' => set to 0.' ) + XWASCENT(JI) = 0. + END IF + TBALLOONS(JI)%XWASCENT = XWASCENT(JI) + + + IF ( XAERODRAG(JI) == XNEGUNDEF ) THEN + CALL PRINT_MSG( NVERB_INFO, 'GEN', 'INI_BALLOON', & + 'aerodynamic drag coefficient not provided for CVBALL balloon ' // TRIM( CTITLE(JI) ) // ' => set to 0.44' ) + XAERODRAG(JI) = 0.44 + END IF + TBALLOONS(JI)%XAERODRAG = XAERODRAG(JI) + + IF ( XINDDRAG(JI) == XNEGUNDEF ) THEN + CALL PRINT_MSG( NVERB_INFO, 'GEN', 'INI_BALLOON', & + 'induced drag coefficient not provided for CVBALL balloon ' // TRIM( CTITLE(JI) ) // ' => set to 0.014' ) + XINDDRAG(JI) = 0.014 + END IF + TBALLOONS(JI)%XINDDRAG = XINDDRAG(JI) + + IF ( XMASS(JI) == XNEGUNDEF ) & + CALL PRINT_MSG( NVERB_FATAL, 'GEN', 'INI_BALLOON', 'mass not provided for CVBALL balloon ' // TRIM( CTITLE(JI) ) ) + TBALLOONS(JI)%XMASS = XMASS(JI) + + IF ( XDIAMETER(JI) <= 0. .AND. XVOLUME(JI) <= 0. ) & + CALL PRINT_MSG( NVERB_FATAL, 'GEN', 'INI_BALLOON', & + 'diameter or volume not provided for CVBALL balloon ' // TRIM( CTITLE(JI) ) ) + + IF ( XDIAMETER(JI) <= 0. ) THEN + TBALLOONS(JI)%XVOLUME = XVOLUME(JI) + TBALLOONS(JI)%XDIAMETER = ( (3. * XVOLUME(JI) ) / ( 4. * XPI ) ) ** ( 1. / 3. ) + ELSE IF ( XVOLUME(JI) <= 0 ) THEN + TBALLOONS(JI)%XDIAMETER = XDIAMETER(JI) + TBALLOONS(JI)%XVOLUME = XPI / 6 * XDIAMETER(JI)**3 + ELSE + CALL PRINT_MSG( NVERB_ERROR, 'GEN', 'INI_BALLOON', & + 'diameter or volume (not both) must be provided for CVBALL balloon ' // TRIM( CTITLE(JI) ) ) + END IF + + + CASE ( 'ISODEN' ) + IF ( XALTLAUNCH(JI) == XNEGUNDEF .AND. XPRES(JI) == XNEGUNDEF ) & + CALL PRINT_MSG( NVERB_FATAL, 'GEN', 'INI_BALLOON', & + 'altitude or pressure at launch must be provided for ISODEN balloon ' // TRIM( CTITLE(JI) ) ) + IF ( XALTLAUNCH(JI) /= XNEGUNDEF .AND. XPRES(JI) /= XNEGUNDEF ) & + CALL PRINT_MSG( NVERB_ERROR, 'GEN', 'INI_BALLOON', & + 'altitude or pressure at launch (not both) must be provided for ISODEN balloon ' // TRIM( CTITLE(JI) ) ) + TBALLOONS(JI)%XALTLAUNCH = XALTLAUNCH(JI) + TBALLOONS(JI)%XPRES = XPRES(JI) + + IF ( XWASCENT(JI) /= XNEGUNDEF ) THEN + CALL PRINT_MSG( NVERB_WARNING, 'GEN', 'INI_BALLOON', & + 'initial vertical speed is not needed for ISODEN balloon ' // TRIM( CTITLE(JI) ) // ' => ignored' ) + XWASCENT(JI) = XNEGUNDEF + END IF + TBALLOONS(JI)%XWASCENT = XWASCENT(JI) + + + IF ( XAERODRAG(JI) /= XNEGUNDEF ) THEN + CALL PRINT_MSG( NVERB_WARNING, 'GEN', 'INI_BALLOON', & + 'aerodynamic drag coefficient is not needed for ISODEN balloon ' // TRIM( CTITLE(JI) ) // ' => ignored' ) + XAERODRAG(JI) = XNEGUNDEF + END IF + TBALLOONS(JI)%XAERODRAG = XAERODRAG(JI) + + IF ( XINDDRAG(JI) /= XNEGUNDEF ) THEN + CALL PRINT_MSG( NVERB_WARNING, 'GEN', 'INI_BALLOON', & + 'induced drag coefficient is not needed for ISODEN balloon ' // TRIM( CTITLE(JI) ) // ' => ignored' ) + XINDDRAG(JI) = XNEGUNDEF + END IF + TBALLOONS(JI)%XINDDRAG = XINDDRAG(JI) + + IF ( XMASS(JI) /= XNEGUNDEF ) THEN + CALL PRINT_MSG( NVERB_WARNING, 'GEN', 'INI_BALLOON', & + 'mass is not needed for ISODEN balloon ' // TRIM( CTITLE(JI) ) // ' => ignored' ) + XMASS(JI) = XNEGUNDEF + END IF + TBALLOONS(JI)%XMASS = XMASS(JI) + + IF ( XDIAMETER(JI) /= XNEGUNDEF ) THEN + CALL PRINT_MSG( NVERB_WARNING, 'GEN', 'INI_BALLOON', & + 'diameter is not needed for ISODEN balloon ' // TRIM( CTITLE(JI) ) // ' => ignored' ) + XDIAMETER(JI) = XNEGUNDEF + END IF + TBALLOONS(JI)%XDIAMETER = XDIAMETER(JI) + + IF ( XVOLUME(JI) /= XNEGUNDEF ) THEN + CALL PRINT_MSG( NVERB_WARNING, 'GEN', 'INI_BALLOON', & + 'volume is not needed for ISODEN balloon ' // TRIM( CTITLE(JI) ) // ' => ignored' ) + XVOLUME(JI) = XNEGUNDEF + END IF + TBALLOONS(JI)%XVOLUME = XVOLUME(JI) + + + CASE ( 'RADIOS' ) + IF ( XALTLAUNCH(JI) == XNEGUNDEF ) & + CALL PRINT_MSG( NVERB_FATAL, 'GEN', 'INI_BALLOON', & + 'altitude of launch must be provided for radiosounding balloon ' // TRIM( CTITLE(JI) ) ) + TBALLOONS(JI)%XALTLAUNCH = XALTLAUNCH(JI) + + IF ( XWASCENT(JI) == XNEGUNDEF ) THEN + CALL PRINT_MSG( NVERB_INFO, 'GEN', 'INI_BALLOON', & + 'initial vertical speed not provided for balloon ' // TRIM( CTITLE(JI) ) // ' => set to 5.' ) + XWASCENT(JI) = 5. + END IF + TBALLOONS(JI)%XWASCENT = XWASCENT(JI) + + IF ( XPRES(JI) /= XNEGUNDEF ) THEN + CALL PRINT_MSG( NVERB_WARNING, 'GEN', 'INI_BALLOON', & + 'initial pressure is not needed for radiosounding balloon ' & + // TRIM( CTITLE(JI) ) // ' => ignored' ) + XPRES(JI) = XNEGUNDEF + END IF + TBALLOONS(JI)%XAERODRAG = XAERODRAG(JI) + + IF ( XAERODRAG(JI) /= XNEGUNDEF ) THEN + CALL PRINT_MSG( NVERB_WARNING, 'GEN', 'INI_BALLOON', & + 'aerodynamic drag coefficient is not needed for radiosounding balloon ' & + // TRIM( CTITLE(JI) ) // ' => ignored' ) + XAERODRAG(JI) = XNEGUNDEF + END IF + TBALLOONS(JI)%XAERODRAG = XAERODRAG(JI) + + IF ( XINDDRAG(JI) /= XNEGUNDEF ) THEN + CALL PRINT_MSG( NVERB_WARNING, 'GEN', 'INI_BALLOON', & + 'induced drag coefficient is not needed for radiosounding balloon ' & + // TRIM( CTITLE(JI) ) // ' => ignored' ) + XINDDRAG(JI) = XNEGUNDEF + END IF + TBALLOONS(JI)%XINDDRAG = XINDDRAG(JI) + + IF ( XMASS(JI) /= XNEGUNDEF ) THEN + CALL PRINT_MSG( NVERB_WARNING, 'GEN', 'INI_BALLOON', & + 'mass is not needed for radiosounding balloon ' // TRIM( CTITLE(JI) ) // ' => ignored' ) + XMASS(JI) = XNEGUNDEF + END IF + TBALLOONS(JI)%XMASS = XMASS(JI) + + IF ( XDIAMETER(JI) /= XNEGUNDEF ) THEN + CALL PRINT_MSG( NVERB_WARNING, 'GEN', 'INI_BALLOON', & + 'diameter is not needed for radiosounding balloon ' // TRIM( CTITLE(JI) ) // ' => ignored' ) + XDIAMETER(JI) = XNEGUNDEF + END IF + TBALLOONS(JI)%XDIAMETER = XDIAMETER(JI) + + IF ( XVOLUME(JI) /= XNEGUNDEF ) THEN + CALL PRINT_MSG( NVERB_WARNING, 'GEN', 'INI_BALLOON', & + 'volume is not needed for radiosounding balloon ' // TRIM( CTITLE(JI) ) // ' => ignored' ) + XVOLUME(JI) = XNEGUNDEF + END IF + TBALLOONS(JI)%XVOLUME = XVOLUME(JI) + + + CASE DEFAULT + CALL PRINT_MSG( NVERB_FATAL, 'GEN', 'INI_BALLOON', 'invalid balloon type (CTYPE=' & + // TRIM( CTYPE(JI ) ) // ') for balloon ' // TRIM( CTITLE(JI) ) ) + + END SELECT +END DO + +CALL BALLOONS_NML_DEALLOCATE() -IF ( NBALLOONS < 1 ) RETURN -! -!* 1. Balloon number 1 -! ---------------- -#if 0 -! -!* model number -! -TBALLOONS(1)%NMODEL = 0 -TBALLOONS(1)%CMODEL = 'MOB' -! -!* balloon type -! -TBALLOONS(1)%CTYPE = 'CVBALL' -! -!* balloon name -! -TBALLOONS(1)%CTITLE = 'CVB1MOBI' -! -!* launching date and time -! -TBALLOONS(1)%TLAUNCH%nyear = 1999 -TBALLOONS(1)%TLAUNCH%nmonth = 09 -TBALLOONS(1)%TLAUNCH%nday = 19 -TBALLOONS(1)%TLAUNCH%xtime = 32460. -! -!* latitude and longitude of launching site (decimal degree) -! -TBALLOONS(1)%XLATLAUNCH = 45.800 -TBALLOONS(1)%XLONLAUNCH = 8.629 -! -!* altitude of the launching site for 'RADIOS' -!* altitude or pressure of the flight level for 'ISODEN' -! -!TBALLOONS(1)%XALTLAUNCH = 3959. -TBALLOONS(1)%XPRES = 98450. -! -!* time step for data storage (s) -! -TBALLOONS(1)%TFLYER_TIME%XTSTEP = 20. -! -!* ascentional vertical speed of the ballon (in calm air) (for 'RADIOS') -! -TBALLOONS(1)%XWASCENT = 0. -! -!* aerodynamic drag coefficient of the balloon (for 'CVBALL') -!* induced drag coefficient (i.e. air shifted by the balloon) (for 'CVBALL') -!* volume of the balloon (m3) (for 'CVBALL') -!* mass of the balloon (kg) (for 'CVBALL') -! -TBALLOONS(1)%XAERODRAG = 0.44 -TBALLOONS(1)%XINDDRAG = 0.014 -TBALLOONS(1)%XVOLUME = 3.040 -TBALLOONS(1)%XMASS = 2.4516 -TBALLOONS(1)%XDIAMETER = ((3.*TBALLOONS(1)%XVOLUME)/(4.*XPI))**(1./3.) -! -IF ( NBALLOONS < 2 ) RETURN -#else -CALL PRINT_MSG( NVERB_FATAL, 'GEN', 'INI_BALLOON', 'balloon characteristics are commented' ) -#endif -!---------------------------------------------------------------------------- -! -!* 2. Balloon number 2 -! ---------------- -#if 0 -! -!* model number -! -TBALLOONS(2)%NMODEL = 0 -TBALLOONS(2)%MODEL = 'MOB' -! -!* balloon type -! -TBALLOONS(2)%CTYPE = 'CVBALL' -! -!* balloon name -! -TBALLOONS(2)%CTITLE = 'CVB2MOBI' -! -!* launching date and time -! -TBALLOONS(2)%TLAUNCH%nyear = 1999 -TBALLOONS(2)%TLAUNCH%nmonth = 09 -TBALLOONS(2)%TLAUNCH%nday = 19 -TBALLOONS(2)%TLAUNCH%xtime = 39660. -! -!* latitude and longitude of launching site (decimal degree) -! -TBALLOONS(2)%XLATLAUNCH = 45.800 -TBALLOONS(2)%XLONLAUNCH = 8.630 -! -!* altitude of the launching site for 'RADIOS' -!* altitude or pressure of the flight level for 'ISODEN' -! -!TBALLOONS(2)%XALTLAUNCH = 3959. -TBALLOONS(2)%XPRES = 98490. -! -!* time step for data storage (s) -! -TBALLOONS(2)%TFLYER_TIME%XTSTEP = 20. -! -!* ascentional vertical speed of the ballon (in calm air) (for 'RADIOS') -! -TBALLOONS(2)%XWASCENT = 0. -! -!* aerodynamic drag coefficient of the balloon (for 'CVBALL') -!* induced drag coefficient (i.e. air shifted by the balloon) (for 'CVBALL') -!* volume of the balloon (m3) (for 'CVBALL') -!* mass of the balloon (kg) (for 'CVBALL') -! -TBALLOONS(2)%XAERODRAG = 0.44 -TBALLOONS(2)%XINDDRAG = 0.014 -TBALLOONS(2)%XVOLUME = 3.040 -TBALLOONS(2)%XMASS = 2.58087 -TBALLOONS(2)%XDIAMETER = ((3.*TBALLOONS(2)%XVOLUME)/(4.*XPI))**(1./3.) -! -IF ( NBALLOONS < 3 ) RETURN -#else -CALL PRINT_MSG( NVERB_FATAL, 'GEN', 'INI_BALLOON', 'balloon characteristics are commented' ) -#endif -!---------------------------------------------------------------------------- -! -!* 3. Balloon number 3 -! ---------------- -#if 0 -! -!* model number -! -TBALLOONS(3)%NMODEL = 0 -TBALLOONS(3)%CMODEL = 'MOB' -! -!* balloon type -! -TBALLOONS(3)%CTYPE = 'RADIOS' -! -!* balloon name -! -TBALLOONS(3)%CTITLE = 'RSMASE19' -! -!* launching date and time -! -TBALLOONS(3)%TLAUNCH%nyear = 1999 -TBALLOONS(3)%TLAUNCH%nmonth = 09 -TBALLOONS(3)%TLAUNCH%nday = 19 -TBALLOONS(3)%TLAUNCH%xtime = 68400. -! -!* latitude and longitude of launching site (decimal degree) -! -TBALLOONS(3)%XLATLAUNCH = 46.810 -TBALLOONS(3)%XLONLAUNCH = 9.39 -! -!* altitude of the launching site for 'RADIOS' -!* altitude or pressure of the flight level for 'ISODEN' -! -TBALLOONS(3)%XALTLAUNCH = 865. -!TBALLOONS(3)%XPRES = 62360. -! -!* time step for data storage (s) -! -TBALLOONS(3)%TFLYER_TIME%XTSTEP = 20. -! -!* ascentional vertical speed of the ballon (in calm air) (for 'RADIOS') -! -TBALLOONS(3)%XWASCENT = 4.85 -! -!* aerodynamic drag coefficient of the balloon (for 'CVBALL') -!* induced drag coefficient (i.e. air shifted by the balloon) (for 'CVBALL') -!* volume of the balloon (m3) (for 'CVBALL') -!* mass of the balloon (kg) (for 'CVBALL') -! -TBALLOONS(3)%XAERODRAG = 0.44 -TBALLOONS(3)%XINDDRAG = 0.014 -TBALLOONS(3)%XVOLUME = 3.040 -TBALLOONS(3)%XMASS = 2.4516 -TBALLOONS(3)%XDIAMETER = ((3.*TBALLOONS(3)%XVOLUME)/(4.*XPI))**(1./3.) -! -IF ( NBALLOONS < 4 ) RETURN -#else -CALL PRINT_MSG( NVERB_FATAL, 'GEN', 'INI_BALLOON', 'balloon characteristics are commented' ) -#endif -!---------------------------------------------------------------------------- -! -!* 4. Balloon number 4 -! ---------------- -#if 0 -! -!* model number -! -TBALLOONS(4)%NMODEL = 0 -TBALLOONS(4)%CMODEL = 'FIX' -! -!* balloon type -! -TBALLOONS(4)%CTYPE = 'CVBALL' -! -!* balloon name -! -TBALLOONS(4)%CTITLE = 'CVB1ACVB' -! -!* launching date and time -! -TBALLOONS(4)%TLAUNCH%nyear = 1999 -TBALLOONS(4)%TLAUNCH%nmonth = 09 -TBALLOONS(4)%TLAUNCH%nday = 19 -TBALLOONS(4)%TLAUNCH%xtime = 32460. -! -!* latitude and longitude of launching site (decimal degree) -! -TBALLOONS(4)%XLATLAUNCH = 45.922 -TBALLOONS(4)%XLONLAUNCH = 8.646 -! -!* altitude of the launching site for 'RADIOS' -!* altitude or pressure of the flight level for 'ISODEN' -! -TBALLOONS(4)%XALTLAUNCH = 3959. -!TBALLOONS(4)%XPRES = 62360. -! -!* time step for data storage (s) -! -TBALLOONS(4)%TFLYER_TIME%XTSTEP = 20. -! -!* ascentional vertical speed of the ballon (in calm air) (for 'RADIOS') -! -!TBALLOONS(4)%XWASCENT = 2.55 -! -!* aerodynamic drag coefficient of the balloon (for 'CVBALL') -!* induced drag coefficient (i.e. air shifted by the balloon) (for 'CVBALL') -!* volume of the balloon (m3) (for 'CVBALL') -!* mass of the balloon (kg) (for 'CVBALL') -! -TBALLOONS(4)%XAERODRAG = 0.44 -TBALLOONS(4)%XINDDRAG = 0.014 -TBALLOONS(4)%XVOLUME = 3.040 -TBALLOONS(4)%XMASS = 2.4516 -TBALLOONS(4)%XDIAMETER = ((3.*TBALLOONS(4)%XVOLUME)/(4.*XPI))**(1./3.) -! -IF ( NBALLOONS < 5 ) RETURN -#else -CALL PRINT_MSG( NVERB_FATAL, 'GEN', 'INI_BALLOON', 'balloon characteristics are commented' ) -#endif -!---------------------------------------------------------------------------- -! -!* 5. Balloon number 5 -! ---------------- -#if 0 -! -!* model number -! -TBALLOONS(5)%NMODEL = 0 -TBALLOONS(5)%CMODEL = 'FIX' -! -!* balloon type -! -TBALLOONS(5)%CTYPE = 'CVBALL' -! -!* balloon name -! -TBALLOONS(5)%CTITLE = 'CVB1DEPA' -! -!* launching date and time -! -TBALLOONS(5)%TLAUNCH%nyear = 1999 -TBALLOONS(5)%TLAUNCH%nmonth = 09 -TBALLOONS(5)%TLAUNCH%nday = 19 -TBALLOONS(5)%TLAUNCH%xtime = 32435. -! -!* latitude and longitude of launching site (decimal degree) -! -TBALLOONS(5)%XLATLAUNCH = 45.800 -TBALLOONS(5)%XLONLAUNCH = 8.630 -! -!* altitude of the launching site for 'RADIOS' -!* altitude or pressure of the flight level for 'ISODEN' -! -TBALLOONS(5)%XALTLAUNCH = 340. -!TBALLOONS(5)%XPRES = 62360. -! -!* time step for data storage (s) -! -TBALLOONS(5)%TFLYER_TIME%XTSTEP = 20. -! -!* ascentional vertical speed of the ballon (in calm air) (for 'RADIOS') -! -!TBALLOONS(5)%XWASCENT = 2.55 -! -!* aerodynamic drag coefficient of the balloon (for 'CVBALL') -!* induced drag coefficient (i.e. air shifted by the balloon) (for 'CVBALL') -!* volume of the balloon (m3) (for 'CVBALL') -!* mass of the balloon (kg) (for 'CVBALL') -! -TBALLOONS(5)%XAERODRAG = 0.44 -TBALLOONS(5)%XINDDRAG = 0.014 -TBALLOONS(5)%XVOLUME = 3.040 -TBALLOONS(5)%XMASS = 2.4516 -TBALLOONS(5)%XDIAMETER = ((3.*TBALLOONS(5)%XVOLUME)/(4.*XPI))**(1./3.) -! -IF ( NBALLOONS < 6 ) RETURN -#else -CALL PRINT_MSG( NVERB_FATAL, 'GEN', 'INI_BALLOON', 'balloon characteristics are commented' ) -#endif -!---------------------------------------------------------------------------- -! -!* 6. Balloon number 6 -! ---------------- -#if 0 -! -!* model number -! -TBALLOONS(6)%NMODEL = 0 -TBALLOONS(6)%CMODEL = 'FIX' -! -!* balloon type -! -TBALLOONS(6)%CTYPE = 'CVBALL' -! -!* balloon name -! -TBALLOONS(6)%CTITLE = 'CVB1RCVB' -! -!* launching date and time -! -TBALLOONS(6)%TLAUNCH%nyear = 1999 -TBALLOONS(6)%TLAUNCH%nmonth = 09 -TBALLOONS(6)%TLAUNCH%nday = 19 -TBALLOONS(6)%TLAUNCH%xtime = 32460. -! -!* latitude and longitude of launching site (decimal degree) -! -TBALLOONS(6)%XLATLAUNCH = 45.922 -TBALLOONS(6)%XLONLAUNCH = 8.646 -! -!* altitude of the launching site for 'RADIOS' -!* altitude or pressure of the flight level for 'ISODEN' -! -!TBALLOONS(6)%XALTLAUNCH = 3959. -!TBALLOONS(6)%XPRES = 62360. -! -!* time step for data storage (s) -! -TBALLOONS(6)%TFLYER_TIME%XTSTEP = 20. -! -!* ascentional vertical speed of the ballon (in calm air) (for 'RADIOS') -! -!TBALLOONS(6)%XWASCENT = 2.55 -! -!* aerodynamic drag coefficient of the balloon (for 'CVBALL') -!* induced drag coefficient (i.e. air shifted by the balloon) (for 'CVBALL') -!* volume of the balloon (m3) (for 'CVBALL') -!* mass of the balloon (kg) (for 'CVBALL') -! -TBALLOONS(6)%XAERODRAG = 0.44 -TBALLOONS(6)%XINDDRAG = 0.014 -TBALLOONS(6)%XVOLUME = 3.040 -TBALLOONS(6)%XMASS = 2.4516 -TBALLOONS(6)%XDIAMETER = ((3.*TBALLOONS(6)%XVOLUME)/(4.*XPI))**(1./3.) -! -IF ( NBALLOONS < 7 ) RETURN -#else -CALL PRINT_MSG( NVERB_FATAL, 'GEN', 'INI_BALLOON', 'balloon characteristics are commented' ) -#endif -!---------------------------------------------------------------------------- -! -!* 7. Balloon number 7 -! ---------------- -#if 0 -! -!* model number -! -TBALLOONS(7)%NMODEL = 0 -TBALLOONS(7)%CMODEL = 'FIX' -! -!* balloon type -! -TBALLOONS(7)%CTYPE = 'CVBALL' -! -!* balloon name -! -TBALLOONS(7)%CTITLE = 'CVB1PISO' -! -!* launching date and time -! -TBALLOONS(7)%TLAUNCH%nyear = 1999 -TBALLOONS(7)%TLAUNCH%nmonth = 09 -TBALLOONS(7)%TLAUNCH%nday = 19 -TBALLOONS(7)%TLAUNCH%xtime = 32460. -! -!* latitude and longitude of launching site (decimal degree) -! -TBALLOONS(7)%XLATLAUNCH = 45.922 -TBALLOONS(7)%XLONLAUNCH = 8.646 -! -!* altitude of the launching site for 'RADIOS' -!* altitude or pressure of the flight level for 'ISODEN' -! -!TBALLOONS(7)%XALTLAUNCH = 3959. -TBALLOONS(7)%XPRES = 62360. -! -!* time step for data storage (s) -! -TBALLOONS(7)%TFLYER_TIME%XTSTEP = 20. -! -!* ascentional vertical speed of the ballon (in calm air) (for 'RADIOS') -! -!TBALLOONS(7)%XWASCENT = 2.55 -! -!* aerodynamic drag coefficient of the balloon (for 'CVBALL') -!* induced drag coefficient (i.e. air shifted by the balloon) (for 'CVBALL') -!* volume of the balloon (m3) (for 'CVBALL') -!* mass of the balloon (kg) (for 'CVBALL') -! -TBALLOONS(7)%XAERODRAG = 0.44 -TBALLOONS(7)%XINDDRAG = 0.014 -TBALLOONS(7)%XVOLUME = 3.040 -TBALLOONS(7)%XMASS = 2.4516 -TBALLOONS(7)%XDIAMETER = ((3.*TBALLOONS(7)%XVOLUME)/(4.*XPI))**(1./3.) -#else -CALL PRINT_MSG( NVERB_FATAL, 'GEN', 'INI_BALLOON', 'balloon characteristics are commented' ) -#endif -! !---------------------------------------------------------------------------- ! END SUBROUTINE INI_BALLOON diff --git a/src/MNH/modd_aircraft_balloon.f90 b/src/MNH/modd_aircraft_balloon.f90 index a0e6e5070b4e876afb0d8fa135ec1523905c306a..4e71d254d749c1f96434304804dbc4792f3931ca 100644 --- a/src/MNH/modd_aircraft_balloon.f90 +++ b/src/MNH/modd_aircraft_balloon.f90 @@ -41,7 +41,7 @@ ! ------------ ! ! -use modd_parameters, only: XUNDEF +use modd_parameters, only: XNEGUNDEF, XUNDEF USE MODD_TYPE_STATPROF, ONLY: TSTATPROFTIME use modd_type_date, only: date_time @@ -78,10 +78,10 @@ TYPE :: TFLYERDATA ! !* current position of the balloon/aircraft ! - REAL :: XX_CUR = XUNDEF ! current x - REAL :: XY_CUR = XUNDEF ! current y - REAL :: XZ_CUR = XUNDEF ! current z (if 'RADIOS' or 'AIRCRA' and 'ALTDEF' = T) - REAL :: XP_CUR = XUNDEF ! current p (if 'AIRCRA' and 'ALTDEF' = F) + REAL :: XX_CUR = XNEGUNDEF ! current x + REAL :: XY_CUR = XNEGUNDEF ! current y + REAL :: XZ_CUR = XNEGUNDEF ! current z (if 'RADIOS' or 'AIRCRA' and 'ALTDEF' = T) + REAL :: XP_CUR = XNEGUNDEF ! current p (if 'AIRCRA' and 'ALTDEF' = F) ! !* data records ! @@ -150,15 +150,15 @@ TYPE, EXTENDS( TFLYERDATA ) :: TBALLOONDATA REAL :: XLONLAUNCH = XUNDEF ! lontitude of launch REAL :: XXLAUNCH = XUNDEF ! X coordinate of launch REAL :: XYLAUNCH = XUNDEF ! Y coordinate of launch - REAL :: XALTLAUNCH = XUNDEF ! altitude of launch (if 'RADIOS' or 'ISODEN' or 'CVBALL') - REAL :: XWASCENT = 5. ! ascent vertical speed, m/s (if 'RADIOS') - REAL :: XRHO = XUNDEF ! density of launch (if 'ISODEN') - REAL :: XPRES = XUNDEF ! pressure of launch (if 'ISODEN') - REAL :: XDIAMETER = XUNDEF ! apparent diameter of the balloon (m) (if 'CVBALL') - REAL :: XAERODRAG = XUNDEF ! aerodynamic drag coefficient of the balloon (if 'CVBALL') - REAL :: XINDDRAG = XUNDEF ! induced drag coefficient (i.e. air shifted by the balloon) (if 'CVBALL') - REAL :: XVOLUME = XUNDEF ! volume of the balloon (m3) (if 'CVBALL') - REAL :: XMASS = XUNDEF ! mass of the balloon (kg) (if 'CVBALL') + REAL :: XALTLAUNCH = XNEGUNDEF ! altitude of launch (if 'RADIOS' or 'ISODEN' or 'CVBALL') + REAL :: XWASCENT = XNEGUNDEF ! ascent vertical speed, m/s (constant if 'RADIOS' or variable if 'CVBALL') + REAL :: XRHO = XNEGUNDEF ! density of launch (if 'ISODEN') + REAL :: XPRES = XNEGUNDEF ! pressure of launch (if 'ISODEN' or 'CVBALL') + REAL :: XDIAMETER = XNEGUNDEF ! apparent diameter of the balloon (m) (if 'CVBALL') + REAL :: XAERODRAG = XNEGUNDEF ! aerodynamic drag coefficient of the balloon (if 'CVBALL') + REAL :: XINDDRAG = XNEGUNDEF ! induced drag coefficient (i.e. air shifted by the balloon) (if 'CVBALL') + REAL :: XVOLUME = XNEGUNDEF ! volume of the balloon (m3) (if 'CVBALL') + REAL :: XMASS = XNEGUNDEF ! mass of the balloon (kg) (if 'CVBALL') END TYPE TBALLOONDATA INTEGER :: NAIRCRAFTS = 0 ! Total number of aircrafts diff --git a/src/MNH/modn_balloons.f90 b/src/MNH/modn_balloons.f90 new file mode 100644 index 0000000000000000000000000000000000000000..f77356c88a006e722ae782e3e8b4330c86238a2a --- /dev/null +++ b/src/MNH/modn_balloons.f90 @@ -0,0 +1,93 @@ +!MNH_LIC Copyright 2022-2022 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence +!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!MNH_LIC for details. version 1. +!----------------------------------------------------------------- +! Author: P. Wautelet 13/07/2022 +! Modifications: +!----------------------------------------------------------------- +!################### +MODULE MODN_BALLOONS +!################### +! +! Namelist with the the characteristics of the balloons +! +USE MODD_AIRCRAFT_BALLOON +USE MODD_TYPE_DATE, ONLY: DATE_TIME + +IMPLICIT NONE + +!Use separated arrays for the different balloon characteristics +!Using directly TBALLOONDATA derived types does not work due to compiler bug (GCC at least from 5.5 to 12.1, see GCC bug 106065) + +CHARACTER(LEN=3), DIMENSION(:), ALLOCATABLE :: CMODEL +INTEGER, DIMENSION(:), ALLOCATABLE :: NMODEL +CHARACTER(LEN=6), DIMENSION(:), ALLOCATABLE :: CTYPE +CHARACTER(LEN=10), DIMENSION(:), ALLOCATABLE :: CTITLE +TYPE(DATE_TIME), DIMENSION(:), ALLOCATABLE :: TLAUNCH +REAL, DIMENSION(:), ALLOCATABLE :: XLATLAUNCH +REAL, DIMENSION(:), ALLOCATABLE :: XLONLAUNCH +!Not needed: XXLAUNCH +!Not needed: XYLAUNCH +REAL, DIMENSION(:), ALLOCATABLE :: XALTLAUNCH +REAL, DIMENSION(:), ALLOCATABLE :: XTSTEP +REAL, DIMENSION(:), ALLOCATABLE :: XWASCENT +!Not used in NML (computed): REAL, DIMENSION(:), ALLOCATABLE :: XRHO +REAL, DIMENSION(:), ALLOCATABLE :: XPRES +REAL, DIMENSION(:), ALLOCATABLE :: XDIAMETER +REAL, DIMENSION(:), ALLOCATABLE :: XAERODRAG +REAL, DIMENSION(:), ALLOCATABLE :: XINDDRAG +REAL, DIMENSION(:), ALLOCATABLE :: XVOLUME +REAL, DIMENSION(:), ALLOCATABLE :: XMASS + +NAMELIST / NAM_BALLOONS / CMODEL, CTITLE, CTYPE, NMODEL, TLAUNCH, & + XLATLAUNCH, XLONLAUNCH, XALTLAUNCH, XTSTEP, XWASCENT, XPRES, & + XDIAMETER, XAERODRAG, XINDDRAG, XVOLUME, XMASS + +CONTAINS + +SUBROUTINE BALLOONS_NML_ALLOCATE( KBALLOONS ) + INTEGER, INTENT(IN) :: KBALLOONS + + !Note: the default values are used/checked in ini_balloon => be careful to ensure coherency + ALLOCATE( CMODEL (KBALLOONS) ); CMODEL(:) = 'FIX' + ALLOCATE( CTITLE (KBALLOONS) ); CTITLE(:) = '' + ALLOCATE( CTYPE (KBALLOONS) ); CTYPE(:) = '' + ALLOCATE( NMODEL (KBALLOONS) ); NMODEL(:) = 0 + ALLOCATE( TLAUNCH(KBALLOONS) ) + ALLOCATE( XLATLAUNCH (KBALLOONS) ); XLATLAUNCH(:) = XUNDEF + ALLOCATE( XLONLAUNCH (KBALLOONS) ); XLONLAUNCH(:) = XUNDEF + ALLOCATE( XALTLAUNCH (KBALLOONS) ); XALTLAUNCH(:) = XNEGUNDEF + ALLOCATE( XTSTEP (KBALLOONS) ); XTSTEP(:) = XNEGUNDEF + ALLOCATE( XWASCENT (KBALLOONS) ); XWASCENT(:) = XNEGUNDEF + ALLOCATE( XPRES (KBALLOONS) ); XPRES(:) = XNEGUNDEF + ALLOCATE( XDIAMETER (KBALLOONS) ); XDIAMETER(:) = XNEGUNDEF + ALLOCATE( XAERODRAG (KBALLOONS) ); XAERODRAG(:) = XNEGUNDEF + ALLOCATE( XINDDRAG (KBALLOONS) ); XINDDRAG(:) = XNEGUNDEF + ALLOCATE( XVOLUME (KBALLOONS) ); XVOLUME(:) = XNEGUNDEF + ALLOCATE( XMASS (KBALLOONS) ); XMASS(:) = XNEGUNDEF +END SUBROUTINE BALLOONS_NML_ALLOCATE + + +SUBROUTINE BALLOONS_NML_DEALLOCATE( ) + !Deallocate namelist arrays + DEALLOCATE( CMODEL ) + DEALLOCATE( CTITLE ) + DEALLOCATE( CTYPE ) + DEALLOCATE( NMODEL ) + DEALLOCATE( TLAUNCH ) + DEALLOCATE( XLATLAUNCH ) + DEALLOCATE( XLONLAUNCH ) + DEALLOCATE( XALTLAUNCH ) + DEALLOCATE( XTSTEP ) + DEALLOCATE( XWASCENT ) + DEALLOCATE( XPRES ) + DEALLOCATE( XDIAMETER ) + DEALLOCATE( XAERODRAG ) + DEALLOCATE( XINDDRAG ) + DEALLOCATE( XVOLUME ) + DEALLOCATE( XMASS ) +END SUBROUTINE BALLOONS_NML_DEALLOCATE + + +END MODULE MODN_BALLOONS diff --git a/src/MNH/modn_flyers.f90 b/src/MNH/modn_flyers.f90 new file mode 100644 index 0000000000000000000000000000000000000000..0c8b6e3e2e3fc054affceee3e872dcf618953495 --- /dev/null +++ b/src/MNH/modn_flyers.f90 @@ -0,0 +1,21 @@ +!MNH_LIC Copyright 2022-2022 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence +!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!MNH_LIC for details. version 1. +!----------------------------------------------------------------- +! Author: P. Wautelet 13/07/2022 +! Modifications: +!----------------------------------------------------------------- +!################# +MODULE MODN_FLYERS +!################# +! +! Namelist to prepare the aircrafts and balloon namelists (dynamic allocation) +! +USE MODD_AIRCRAFT_BALLOON, ONLY: NAIRCRAFTS, NBALLOONS + +IMPLICIT NONE + +NAMELIST / NAM_FLYERS / NAIRCRAFTS, NBALLOONS + +END MODULE MODN_FLYERS diff --git a/src/MNH/read_exsegn.f90 b/src/MNH/read_exsegn.f90 index 243ed7665f477fca9e6e1fb33c15d122027600f3..a3303a5fead852cc87083e3836346fc343f685ed 100644 --- a/src/MNH/read_exsegn.f90 +++ b/src/MNH/read_exsegn.f90 @@ -304,10 +304,12 @@ END MODULE MODI_READ_EXSEG_n ! S. Riette 11/05/2021: HighLow cloud ! P. Wautelet 27/04/2022: add namelist for profilers ! P. Wautelet 24/06/2022: remove check on CSTORAGE_TYPE for restart of ForeFire variables +! P. Wautelet 13/07/2022: add namelist for flyers and balloons !------------------------------------------------------------------------------ ! !* 0. DECLARATIONS ! ------------ +USE MODD_AIRCRAFT_BALLOON, ONLY: NAIRCRAFTS, NBALLOONS USE MODD_BLOWSNOW USE MODD_BUDGET USE MODD_CH_AEROSOL @@ -342,6 +344,7 @@ USE MODI_TEST_NAM_VAR USE MODN_2D_FRC USE MODN_ADV_n ! The final filling of these modules for the model n is USE MODN_BACKUP +USE MODN_BALLOONS, ONLY: BALLOONS_NML_ALLOCATE, NAM_BALLOONS USE MODN_BLANK_n USE MODN_BLOWSNOW USE MODN_BLOWSNOW_n @@ -363,6 +366,7 @@ USE MODN_ELEC USE MODN_EOL USE MODN_EOL_ADNR USE MODN_EOL_ALM +USE MODN_FLYERS #ifdef MNH_FOREFIRE USE MODN_FOREFIRE #endif @@ -844,6 +848,14 @@ IF (KMI == 1) THEN IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_BLOWSNOW) CALL POSNAM(ILUSEG,'NAM_VISC',GFOUND,ILUOUT) IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_VISC) + + CALL POSNAM(ILUSEG,'NAM_FLYERS',GFOUND,ILUOUT) + IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_FLYERS) + IF ( NBALLOONS > 0 ) THEN + CALL BALLOONS_NML_ALLOCATE( NBALLOONS ) + CALL POSNAM(ILUSEG,'NAM_BALLOONS',GFOUND,ILUOUT) + IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_BALLOONS) + END IF END IF ! !------------------------------------------------------------------------------- diff --git a/src/MNH/write_desfmn.f90 b/src/MNH/write_desfmn.f90 index c88c912d493c7f6989b3f115d7e49a0a72413078..046b0bd1e2d49fec9ffaa630145e28a3bdcb6a4e 100644 --- a/src/MNH/write_desfmn.f90 +++ b/src/MNH/write_desfmn.f90 @@ -147,6 +147,7 @@ END MODULE MODI_WRITE_DESFM_n !! Modification F.Auguste 02/2021 add IBM !! E.Jezequel 02/2021 add stations read from CSV file ! P. Wautelet 27/04/2022: add namelist for profilers +! P. Wautelet 13/07/2022: add namelist for flyers and balloons !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -163,6 +164,7 @@ USE MODD_STATION_n, ONLY: LSTATION USE MODE_MSG ! USE MODN_BACKUP +USE MODN_BALLOONS USE MODN_CONF USE MODN_DYN USE MODN_NESTING @@ -211,6 +213,7 @@ USE MODN_IBM_PARAM_n USE MODN_RECYCL_PARAM_n USE MODN_PROFILER_n USE MODN_STATION_n +USE MODN_FLYERS ! IMPLICIT NONE ! @@ -451,6 +454,8 @@ IF(CELEC /= 'NONE') WRITE(UNIT=ILUSEG,NML=NAM_ELEC) IF(LSERIES) WRITE(UNIT=ILUSEG,NML=NAM_SERIES) IF(NMODEL_CLOUD/=NUNDEF) WRITE(UNIT=ILUSEG,NML=NAM_TURB_CLOUD) IF(CTURB /= 'NONE') WRITE(UNIT=ILUSEG,NML=NAM_TURB) +WRITE(UNIT=ILUSEG,NML=NAM_FLYERS) +!Not possible (for the moment): arrays have been deallocated after ini_balloon: WRITE(UNIT=ILUSEG,NML=NAM_BALLOONS) ! ! !