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

Philippe 15/09/2023: flyers: improve printing of trajectories information...

Philippe 15/09/2023: flyers: improve printing of trajectories information (take off, landing, crash and model changes)
parent 3d0bd69b
Branches
Tags
No related merge requests found
...@@ -202,6 +202,11 @@ SELECT TYPE ( TPFLYER ) ...@@ -202,6 +202,11 @@ SELECT TYPE ( TPFLYER )
IF ( TDTCUR >= TPFLYER%TLAUNCH .AND. TDTCUR <= TPFLYER%TLAND ) THEN IF ( TDTCUR >= TPFLYER%TLAUNCH .AND. TDTCUR <= TPFLYER%TLAND ) THEN
TPFLYER%LFLY = .TRUE. TPFLYER%LFLY = .TRUE.
TPFLYER%LTOOKOFF = .TRUE. TPFLYER%LTOOKOFF = .TRUE.
WRITE( CMNHMSG(1), "( 'aircraft ', A, ' takeoff on ', I2, '/', I2, '/', I4, ' at ', F18.12, 's' )" ) &
TRIM( TPFLYER%CNAME ), TDTCUR%NDAY, TDTCUR%NMONTH, TDTCUR%NYEAR, TDTCUR%XTIME
CALL PRINT_MSG( NVERB_INFO, 'GEN', 'AIRCRAFT_BALLOON_EVOL', OLOCAL = .TRUE. )
ELSE
TPFLYER%LFLY = .FALSE.
END IF END IF
END IF END IF
END IF TAKEOFF END IF TAKEOFF
...@@ -253,14 +258,34 @@ SELECT TYPE ( TPFLYER ) ...@@ -253,14 +258,34 @@ SELECT TYPE ( TPFLYER )
IF ( TZNEXT >= TPFLYER%TLAUNCH .AND. TZNEXT <= TPFLYER%TLAND ) THEN IF ( TZNEXT >= TPFLYER%TLAUNCH .AND. TZNEXT <= TPFLYER%TLAND ) THEN
TPFLYER%LFLY = .TRUE. TPFLYER%LFLY = .TRUE.
! Force LTOOKOFF to prevent to do it again (at a next timestep) ! Force LTOOKOFF to prevent to do it again (at a next timestep)
TPFLYER%LTOOKOFF = .TRUE. IF ( .NOT. TPFLYER%LTOOKOFF ) THEN
TPFLYER%LTOOKOFF = .TRUE.
WRITE( CMNHMSG(1), "( 'aircraft ', A, ' will take off at next store on ', &
I2, '/', I2, '/', I4, ' at ', F18.12, 's' )" ) &
TRIM( TPFLYER%CNAME ), TZNEXT%NDAY, TZNEXT%NMONTH, TZNEXT%NYEAR, TZNEXT%XTIME
CALL PRINT_MSG( NVERB_INFO, 'GEN', 'AIRCRAFT_BALLOON_EVOL', OLOCAL = .TRUE. )
END IF
! Compute next position ! Compute next position
CALL AIRCRAFT_COMPUTE_POSITION( TZNEXT, TPFLYER ) CALL AIRCRAFT_COMPUTE_POSITION( TZNEXT, TPFLYER )
! Get rank of the process where the aircraft is and the model number ! Get rank of the process where the aircraft is and the model number
CALL FLYER_GET_RANK_MODEL_ISCRASHED( TPFLYER ) CALL FLYER_GET_RANK_MODEL_ISCRASHED( TPFLYER )
IF ( TPFLYER%LCRASH .AND. TPFLYER%NCRASH == NCRASH_OUT_HORIZ ) THEN
WRITE( CMNHMSG(1), "( 'aircraft ', A, ' crashed on ', I2, '/', I2, '/', I4, ' at ', F18.12, &
's (out of the horizontal boundaries)' )" ) &
TRIM( TPFLYER%CNAME ), TZNEXT%NDAY, TZNEXT%NMONTH, TZNEXT%NYEAR, TZNEXT%XTIME
CALL PRINT_MSG( NVERB_WARNING, 'GEN', 'AIRCRAFT_BALLOON_EVOL', OLOCAL = .TRUE. )
END IF
ELSE ELSE
IF ( TPFLYER%LFLY ) THEN
! Aircraft was in flight and will have landed at next store
WRITE( CMNHMSG(1), "( 'aircraft ', A, ' will have landed at next store on ', &
I2, '/', I2, '/', I4, ' at ', F18.12, 's' )" ) &
TRIM( TPFLYER%CNAME ), TZNEXT%NDAY, TZNEXT%NMONTH, TZNEXT%NYEAR, TZNEXT%XTIME
CALL PRINT_MSG( NVERB_INFO, 'GEN', 'AIRCRAFT_BALLOON_EVOL', OLOCAL = .TRUE. )
END IF
TPFLYER%LFLY = .FALSE. TPFLYER%LFLY = .FALSE.
END IF END IF
END IF END IF
...@@ -281,6 +306,9 @@ SELECT TYPE ( TPFLYER ) ...@@ -281,6 +306,9 @@ SELECT TYPE ( TPFLYER )
TPFLYER%XX_CUR = TPFLYER%XXLAUNCH TPFLYER%XX_CUR = TPFLYER%XXLAUNCH
TPFLYER%XY_CUR = TPFLYER%XYLAUNCH TPFLYER%XY_CUR = TPFLYER%XYLAUNCH
TPFLYER%TPOS_CUR = TDTCUR TPFLYER%TPOS_CUR = TDTCUR
WRITE( CMNHMSG(1), "( 'balloon ', A, ' launched on ', I2, '/', I2, '/', I4, ' at ', F18.12, 's' )" ) &
TRIM( TPFLYER%CNAME ), TDTCUR%NDAY, TDTCUR%NMONTH, TDTCUR%NYEAR, TDTCUR%XTIME
CALL PRINT_MSG( NVERB_INFO, 'GEN', 'AIRCRAFT_BALLOON_EVOL', OLOCAL = .TRUE. )
END IF LAUNCHTIME END IF LAUNCHTIME
END IF LAUNCH END IF LAUNCH
...@@ -316,10 +344,6 @@ SELECT TYPE ( TPFLYER ) ...@@ -316,10 +344,6 @@ SELECT TYPE ( TPFLYER )
CRASH_VERT: IF ( TPFLYER%LCRASH ) THEN CRASH_VERT: IF ( TPFLYER%LCRASH ) THEN
TPFLYER%LFLY = .FALSE. TPFLYER%LFLY = .FALSE.
WRITE( CMNHMSG(1), "( 'Balloon ', A, ' crashed the ', I2, '/', I2, '/', I4, ' at ', F18.12, &
's (too low or too high)' )" ) &
TRIM( TPFLYER%CNAME ), TDTCUR%NDAY, TDTCUR%NMONTH, TDTCUR%NYEAR, TDTCUR%XTIME
CALL PRINT_MSG( NVERB_WARNING, 'GEN', 'AIRCRAFT_BALLOON_EVOL', OLOCAL = .TRUE. )
ELSE CRASH_VERT ELSE CRASH_VERT
!No vertical crash !No vertical crash
...@@ -362,6 +386,9 @@ CLASS(TBALLOONDATA), INTENT(INOUT) :: TPBALLOON ...@@ -362,6 +386,9 @@ CLASS(TBALLOONDATA), INTENT(INOUT) :: TPBALLOON
LOGICAL :: GLOW, GHIGH LOGICAL :: GLOW, GHIGH
GLOW = .FALSE.
GHIGH = .FALSE.
SELECT CASE ( TPBALLOON%CTYPE ) SELECT CASE ( TPBALLOON%CTYPE )
! !
! Iso-density balloon ! Iso-density balloon
...@@ -468,6 +495,8 @@ USE MODD_NESTING, ONLY: NDAD, NDTRATIO ...@@ -468,6 +495,8 @@ USE MODD_NESTING, ONLY: NDAD, NDTRATIO
USE MODD_TIME, only: TDTSEG USE MODD_TIME, only: TDTSEG
USE MODD_TIME_n, ONLY: TDTCUR USE MODD_TIME_n, ONLY: TDTCUR
USE MODE_DATETIME
IMPLICIT NONE IMPLICIT NONE
CLASS(TBALLOONDATA), INTENT(INOUT) :: TPBALLOON CLASS(TBALLOONDATA), INTENT(INOUT) :: TPBALLOON
...@@ -480,6 +509,7 @@ REAL :: ZDIVTMP ...@@ -480,6 +509,7 @@ REAL :: ZDIVTMP
REAL :: ZMAP ! map factor at balloon location REAL :: ZMAP ! map factor at balloon location
REAL :: ZU_BAL ! horizontal wind speed at balloon location (along x) REAL :: ZU_BAL ! horizontal wind speed at balloon location (along x)
REAL :: ZV_BAL ! horizontal wind speed at balloon location (along y) REAL :: ZV_BAL ! horizontal wind speed at balloon location (along y)
TYPE(DATE_TIME) :: TZNEXT ! Time for next position
ZTSTEP = PTSTEP ZTSTEP = PTSTEP
...@@ -505,10 +535,12 @@ IMODEL_OLD = TPBALLOON%NMODEL ...@@ -505,10 +535,12 @@ IMODEL_OLD = TPBALLOON%NMODEL
! Get rank of the process where the balloon is and the model number ! Get rank of the process where the balloon is and the model number
CALL FLYER_GET_RANK_MODEL_ISCRASHED( TPBALLOON ) CALL FLYER_GET_RANK_MODEL_ISCRASHED( TPBALLOON )
IF ( TPBALLOON%LCRASH ) THEN TZNEXT = TDTCUR + ZTSTEP
WRITE( CMNHMSG(1), "( 'Balloon ', A, ' crashed the ', I2, '/', I2, '/', I4, ' at ', F18.12, &
's (out of the horizontal boundaries)' )" ) & IF ( TPBALLOON%LCRASH .AND. TPBALLOON%NCRASH == NCRASH_OUT_HORIZ ) THEN
TRIM( TPBALLOON%CNAME ), TDTCUR%NDAY, TDTCUR%NMONTH, TDTCUR%NYEAR, TDTCUR%XTIME WRITE( CMNHMSG(1), "( 'balloon ', A, ' crashed on ', I2, '/', I2, '/', I4, ' at ', F18.12, &
's (out of the horizontal boundaries)' )" ) &
TRIM( TPBALLOON%CNAME ), TZNEXT%NDAY, TZNEXT%NMONTH, TZNEXT%NYEAR, TZNEXT%XTIME
CALL PRINT_MSG( NVERB_WARNING, 'GEN', 'AIRCRAFT_BALLOON_EVOL', OLOCAL = .TRUE. ) CALL PRINT_MSG( NVERB_WARNING, 'GEN', 'AIRCRAFT_BALLOON_EVOL', OLOCAL = .TRUE. )
END IF END IF
...@@ -516,6 +548,11 @@ IF ( TPBALLOON%NMODEL /= IMODEL_OLD .AND. .NOT. TPBALLOON%LCRASH ) THEN ...@@ -516,6 +548,11 @@ IF ( TPBALLOON%NMODEL /= IMODEL_OLD .AND. .NOT. TPBALLOON%LCRASH ) THEN
! Balloon has changed of model ! Balloon has changed of model
IF ( NDAD(TPBALLOON%NMODEL ) == IMODEL_OLD ) THEN IF ( NDAD(TPBALLOON%NMODEL ) == IMODEL_OLD ) THEN
! Nothing special to do when going to child model ! Nothing special to do when going to child model
WRITE( CMNHMSG(1), "( 'balloon ', A, ': change of model: ', I2, '->', I2, ' going to child' )" ) &
TRIM( TPFLYER%CNAME ), IMODEL_OLD, TPBALLOON%NMODEL
WRITE( CMNHMSG(2), "( 'on ', I2, '/', I2, '/', I4, ' at ', F18.12, 's' )" ) &
TZNEXT%NDAY, TZNEXT%NMONTH, TZNEXT%NYEAR, TZNEXT%XTIME
CALL PRINT_MSG( NVERB_INFO, 'GEN', 'AIRCRAFT_BALLOON_EVOL', OLOCAL = .TRUE. )
ELSE IF ( TPBALLOON%NMODEL == NDAD(IMODEL_OLD) ) THEN ELSE IF ( TPBALLOON%NMODEL == NDAD(IMODEL_OLD) ) THEN
! Balloon go to parent model ! Balloon go to parent model
! Recompute position to be compatible with parent timestep ! Recompute position to be compatible with parent timestep
...@@ -547,15 +584,23 @@ IF ( TPBALLOON%NMODEL /= IMODEL_OLD .AND. .NOT. TPBALLOON%LCRASH ) THEN ...@@ -547,15 +584,23 @@ IF ( TPBALLOON%NMODEL /= IMODEL_OLD .AND. .NOT. TPBALLOON%LCRASH ) THEN
!Remark: by construction here, ISTORE is always > 1 => no risk with ISTORE-1 value !Remark: by construction here, ISTORE is always > 1 => no risk with ISTORE-1 value
TPBALLOON%TFLYER_TIME%TPDATES(ISTORE) = TPBALLOON%TFLYER_TIME%TPDATES(ISTORE-1) + TPBALLOON%TFLYER_TIME%XTSTEP TPBALLOON%TFLYER_TIME%TPDATES(ISTORE) = TPBALLOON%TFLYER_TIME%TPDATES(ISTORE-1) + TPBALLOON%TFLYER_TIME%XTSTEP
WRITE( CMNHMSG(1), "( 'Balloon ', A, ': store skipped at ', I2, '/', I2, '/', I4, ' at ', F18.12, 's' )" ) & WRITE( CMNHMSG(1), "( 'balloon ', A, ': store skipped on ', I2, '/', I2, '/', I4, ' at ', F18.12, 's' )" ) &
TRIM( TPBALLOON%CNAME ), & TRIM( TPBALLOON%CNAME ), &
TPBALLOON%TFLYER_TIME%TPDATES(ISTORE)%NDAY, TPBALLOON%TFLYER_TIME%TPDATES(ISTORE)%NMONTH, & TPBALLOON%TFLYER_TIME%TPDATES(ISTORE)%NDAY, TPBALLOON%TFLYER_TIME%TPDATES(ISTORE)%NMONTH, &
TPBALLOON%TFLYER_TIME%TPDATES(ISTORE)%NYEAR, TPBALLOON%TFLYER_TIME%TPDATES(ISTORE)%XTIME TPBALLOON%TFLYER_TIME%TPDATES(ISTORE)%NYEAR, TPBALLOON%TFLYER_TIME%TPDATES(ISTORE)%XTIME
CMNHMSG(2) = 'due to change of model (child to its parent)' CMNHMSG(2) = 'due to change of model (child to its parent)'
CALL PRINT_MSG( NVERB_WARNING, 'GEN', 'AIRCRAFT_BALLOON_EVOL', OLOCAL = .TRUE. ) CALL PRINT_MSG( NVERB_INFO, 'GEN', 'AIRCRAFT_BALLOON_EVOL', OLOCAL = .TRUE. )
END IF END IF
END IF END IF
TZNEXT = TDTCUR + ZTSTEP
WRITE( CMNHMSG(1), "( 'balloon ', A, ': change of model: ', I2, '->', I2, ' going to parent' )" ) &
TRIM( TPFLYER%CNAME ), IMODEL_OLD, TPBALLOON%NMODEL
WRITE( CMNHMSG(2), "( 'on ', I2, '/', I2, '/', I4, ' at ', F18.12, 's' )" ) &
TZNEXT%NDAY, TZNEXT%NMONTH, TZNEXT%NYEAR, TZNEXT%XTIME
CALL PRINT_MSG( NVERB_INFO, 'GEN', 'AIRCRAFT_BALLOON_EVOL', OLOCAL = .TRUE. )
! Compute new horizontal position ! Compute new horizontal position
TPBALLOON%XX_CUR = TPBALLOON%XX_CUR + ZU_BAL * ZTSTEP * ZMAP TPBALLOON%XX_CUR = TPBALLOON%XX_CUR + ZU_BAL * ZTSTEP * ZMAP
TPBALLOON%XY_CUR = TPBALLOON%XY_CUR + ZV_BAL * ZTSTEP * ZMAP TPBALLOON%XY_CUR = TPBALLOON%XY_CUR + ZV_BAL * ZTSTEP * ZMAP
...@@ -564,10 +609,11 @@ IF ( TPBALLOON%NMODEL /= IMODEL_OLD .AND. .NOT. TPBALLOON%LCRASH ) THEN ...@@ -564,10 +609,11 @@ IF ( TPBALLOON%NMODEL /= IMODEL_OLD .AND. .NOT. TPBALLOON%LCRASH ) THEN
! Model number is now imposed ! Model number is now imposed
IMODEL = TPBALLOON%NMODEL IMODEL = TPBALLOON%NMODEL
CALL FLYER_GET_RANK_MODEL_ISCRASHED( TPBALLOON, KMODEL = IMODEL ) CALL FLYER_GET_RANK_MODEL_ISCRASHED( TPBALLOON, KMODEL = IMODEL )
IF ( TPBALLOON%LCRASH ) THEN
WRITE( CMNHMSG(1), "( 'Balloon ', A, ' crashed the ', I2, '/', I2, '/', I4, ' at ', F18.12, & IF ( TPBALLOON%LCRASH .AND. TPBALLOON%NCRASH == NCRASH_OUT_HORIZ ) THEN
's (out of the horizontal boundaries)' )" ) & WRITE( CMNHMSG(1), "( 'balloon ', A, ' crashed on ', I2, '/', I2, '/', I4, ' at ', F18.12, &
TRIM( TPBALLOON%CNAME ), TDTCUR%NDAY, TDTCUR%NMONTH, TDTCUR%NYEAR, TDTCUR%XTIME 's (out of the horizontal boundaries)' )" ) &
TRIM( TPBALLOON%CNAME ), TZNEXT%NDAY, TZNEXT%NMONTH, TZNEXT%NYEAR, TZNEXT%XTIME
CALL PRINT_MSG( NVERB_WARNING, 'GEN', 'AIRCRAFT_BALLOON_EVOL', OLOCAL = .TRUE. ) CALL PRINT_MSG( NVERB_WARNING, 'GEN', 'AIRCRAFT_BALLOON_EVOL', OLOCAL = .TRUE. )
END IF END IF
ELSE ELSE
...@@ -767,7 +813,7 @@ LOGICAL :: GLOW, GHIGH ...@@ -767,7 +813,7 @@ LOGICAL :: GLOW, GHIGH
! Find indices surrounding the vertical box where the flyer is ! Find indices surrounding the vertical box where the flyer is
SELECT TYPE ( TPFLYER ) SELECT TYPE ( TPFLYER )
CLASS IS ( TAIRCRAFTDATA) CLASS IS ( TAIRCRAFTDATA )
IF ( TPFLYER%LALTDEF ) THEN IF ( TPFLYER%LALTDEF ) THEN
ZFLYER_EXN = (TPFLYER%XP_CUR/XP00)**(XRD/XCPD) ZFLYER_EXN = (TPFLYER%XP_CUR/XP00)**(XRD/XCPD)
CALL TPFLYER%COMPUTE_VERTICAL_INTERP_COEFF( 'MASS', ZFLYER_EXN, ZEXN, GLOW, GHIGH, ODONOLOWCRASH = .TRUE. ) CALL TPFLYER%COMPUTE_VERTICAL_INTERP_COEFF( 'MASS', ZFLYER_EXN, ZEXN, GLOW, GHIGH, ODONOLOWCRASH = .TRUE. )
...@@ -775,7 +821,7 @@ SELECT TYPE ( TPFLYER ) ...@@ -775,7 +821,7 @@ SELECT TYPE ( TPFLYER )
CALL TPFLYER%COMPUTE_VERTICAL_INTERP_COEFF( 'MASS', TPFLYER%XZ_CUR, ZZM, GLOW, GHIGH, ODONOLOWCRASH = .TRUE. ) CALL TPFLYER%COMPUTE_VERTICAL_INTERP_COEFF( 'MASS', TPFLYER%XZ_CUR, ZZM, GLOW, GHIGH, ODONOLOWCRASH = .TRUE. )
END IF END IF
CLASS IS ( TBALLOONDATA) CLASS IS ( TBALLOONDATA )
IF ( TPFLYER%CTYPE == 'ISODEN' ) THEN IF ( TPFLYER%CTYPE == 'ISODEN' ) THEN
CALL TPFLYER%COMPUTE_VERTICAL_INTERP_COEFF( 'MASS', TPFLYER%XRHO, ZRHO, GLOW, GHIGH, ODONOLOWCRASH = .TRUE. ) CALL TPFLYER%COMPUTE_VERTICAL_INTERP_COEFF( 'MASS', TPFLYER%XRHO, ZRHO, GLOW, GHIGH, ODONOLOWCRASH = .TRUE. )
ELSE IF ( TPFLYER%CTYPE == 'RADIOS' .OR. TPFLYER%CTYPE == 'CVBALL' ) THEN ELSE IF ( TPFLYER%CTYPE == 'RADIOS' .OR. TPFLYER%CTYPE == 'CVBALL' ) THEN
...@@ -788,6 +834,16 @@ END SELECT ...@@ -788,6 +834,16 @@ END SELECT
IF ( GHIGH ) THEN IF ( GHIGH ) THEN
TPFLYER%LCRASH = .TRUE. TPFLYER%LCRASH = .TRUE.
TPFLYER%NCRASH = NCRASH_OUT_HIGH TPFLYER%NCRASH = NCRASH_OUT_HIGH
SELECT TYPE ( TPFLYER )
CLASS IS ( TAIRCRAFTDATA )
WRITE( CMNHMSG(1), "( 'aircraft ', A, ' crashed on ', I2, '/', I2, '/', I4, ' at ', F18.12, 's (too high)' )" ) &
TRIM( TPFLYER%CNAME ), TDTCUR%NDAY, TDTCUR%NMONTH, TDTCUR%NYEAR, TDTCUR%XTIME
CLASS IS ( TBALLOONDATA )
WRITE( CMNHMSG(1), "( 'balloon ', A, ' crashed on ', I2, '/', I2, '/', I4, ' at ', F18.12, 's (too high)' )" ) &
TRIM( TPFLYER%CNAME ), TDTCUR%NDAY, TDTCUR%NMONTH, TDTCUR%NYEAR, TDTCUR%XTIME
END SELECT
CALL PRINT_MSG( NVERB_WARNING, 'GEN', 'AIRCRAFT_BALLOON_EVOL', OLOCAL = .TRUE. )
END IF END IF
SELECT TYPE ( TPFLYER ) SELECT TYPE ( TPFLYER )
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment