Skip to content
Snippets Groups Projects
Commit 122d2ddf authored by WAUTELET Philippe's avatar WAUTELET Philippe
Browse files

Philippe 13/07/2022: balloons: give balloons characteristics in namelist instead of hardcoded

parent 2bc23743
No related branches found
No related tags found
No related merge requests found
......@@ -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)
......
This diff is collapsed.
......@@ -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
......
!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
!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
......@@ -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
!
!-------------------------------------------------------------------------------
......
......@@ -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)
!
!
!
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment