From 5f2e2a6e28a7e030ca11e486a22a72a2590a59a7 Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Mon, 12 Dec 2022 17:09:14 +0100 Subject: [PATCH] Philippe 12/12/2022: flyers: use arrays of pointers to flyers instead of arrays of flyers Useful to allow transfer of flyers between processses (to be developed) --- src/LIB/SURCOUCHE/src/mode_io_write_nc4.f90 | 4 +- src/MNH/aircraft_balloon.f90 | 4 +- src/MNH/ini_aircraft.f90 | 36 +++++----- src/MNH/ini_aircraft_balloon.f90 | 8 +-- src/MNH/ini_balloon.f90 | 74 +++++++++++---------- src/MNH/modd_aircraft_balloon.f90 | 13 +++- src/MNH/write_aircraft_balloon.f90 | 4 +- src/MNH/write_balloonn.f90 | 2 +- 8 files changed, 81 insertions(+), 64 deletions(-) diff --git a/src/LIB/SURCOUCHE/src/mode_io_write_nc4.f90 b/src/LIB/SURCOUCHE/src/mode_io_write_nc4.f90 index 54c01012f..b9c92d64b 100644 --- a/src/LIB/SURCOUCHE/src/mode_io_write_nc4.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io_write_nc4.f90 @@ -1862,11 +1862,11 @@ if ( tpfile%lmaster ) then if ( lflyer ) then do ji = 1, nballoons - call Write_flyer_time_coord( tballoons(ji) ) + call Write_flyer_time_coord( tballoons(ji)%tballoon ) end do do ji = 1, naircrafts - call Write_flyer_time_coord( taircrafts(ji) ) + call Write_flyer_time_coord( taircrafts(ji)%taircraft ) end do end if diff --git a/src/MNH/aircraft_balloon.f90 b/src/MNH/aircraft_balloon.f90 index a43f04c53..5028e0d9f 100644 --- a/src/MNH/aircraft_balloon.f90 +++ b/src/MNH/aircraft_balloon.f90 @@ -140,13 +140,13 @@ ALLOCATE(XSVW_FLUX(SIZE(PSV,1),SIZE(PSV,2),SIZE(PSV,3),SIZE(PSV,4))) DO JI = 1, NBALLOONS CALL AIRCRAFT_BALLOON_EVOL( PTSTEP, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & - TBALLOONS(JI), PSEA ) + TBALLOONS(JI)%TBALLOON, PSEA ) END DO ! DO JI = 1, NAIRCRAFTS CALL AIRCRAFT_BALLOON_EVOL( PTSTEP, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & - TAIRCRAFTS(JI), PSEA ) + TAIRCRAFTS(JI)%TAIRCRAFT, PSEA ) END DO ! !---------------------------------------------------------------------------- diff --git a/src/MNH/ini_aircraft.f90 b/src/MNH/ini_aircraft.f90 index d0f456f1a..b968be84d 100644 --- a/src/MNH/ini_aircraft.f90 +++ b/src/MNH/ini_aircraft.f90 @@ -113,12 +113,16 @@ USE MODN_AIRCRAFTS IMPLICIT NONE INTEGER :: JI +TYPE(TAIRCRAFTDATA), POINTER :: TZAIRCRAFT ALLOCATE( TAIRCRAFTS(NAIRCRAFTS) ) !Treat aircraft data read in namelist DO JI = 1, NAIRCRAFTS - TAIRCRAFTS(JI)%NID = JI + ALLOCATE( TAIRCRAFTS(JI)%TAIRCRAFT ) + TZAIRCRAFT => TAIRCRAFTS(JI)%TAIRCRAFT + + TZAIRCRAFT%NID = JI IF ( CTITLE(JI) == '' ) THEN WRITE( CTITLE(JI), FMT = '( A, I3.3) ') TRIM( CTYPE(JI) ), JI @@ -127,7 +131,7 @@ DO JI = 1, NAIRCRAFTS CMNHMSG(2) = 'title set to ' // TRIM( CTITLE(JI) ) CALL PRINT_MSG( NVERB_INFO, 'GEN', 'INI_AIRCRAFT' ) END IF - TAIRCRAFTS(JI)%CTITLE = CTITLE(JI) + TZAIRCRAFT%CTITLE = CTITLE(JI) IF ( CMODEL(JI) == 'FIX' ) THEN IF ( NMODEL(JI) < 1 .OR. NMODEL(JI) > NMODEL_NEST ) THEN @@ -150,15 +154,15 @@ DO JI = 1, NAIRCRAFTS CMODEL(JI) = 'FIX' NMODEL(JI) = 1 END IF - TAIRCRAFTS(JI)%CMODEL = CMODEL(JI) - TAIRCRAFTS(JI)%NMODEL = NMODEL(JI) + TZAIRCRAFT%CMODEL = CMODEL(JI) + TZAIRCRAFT%NMODEL = NMODEL(JI) - TAIRCRAFTS(JI)%CTYPE = CTYPE(JI) + TZAIRCRAFT%CTYPE = CTYPE(JI) IF ( .NOT. TLAUNCH(JI)%CHECK( TRIM( CTITLE(JI) ) ) ) & CALL PRINT_MSG( NVERB_ERROR, 'GEN', 'INI_AIRCRAFT', & 'problem with TLAUNCH (not set or incorrect values) for aircraft ' // TRIM( CTITLE(JI) ) ) - TAIRCRAFTS(JI)%TLAUNCH = TLAUNCH(JI) + TZAIRCRAFT%TLAUNCH = TLAUNCH(JI) IF ( XTSTEP(JI) == XNEGUNDEF ) THEN CALL PRINT_MSG( NVERB_INFO, 'GEN', 'INI_AIRCRAFT', & @@ -168,31 +172,31 @@ DO JI = 1, NAIRCRAFTS CALL PRINT_MSG( NVERB_ERROR, 'GEN', 'INI_AIRCRAFT', 'invalid data storage frequency for aircraft ' // TRIM( CTITLE(JI) ) ) XTSTEP(JI) = 60. END IF - TAIRCRAFTS(JI)%TFLYER_TIME%XTSTEP = XTSTEP(JI) + TZAIRCRAFT%TFLYER_TIME%XTSTEP = XTSTEP(JI) IF ( NPOS(JI) < 2 ) THEN CALL PRINT_MSG( NVERB_ERROR, 'GEN', 'INI_AIRCRAFT', 'NPOS should be at least 2 for aircraft ' // TRIM( CTITLE(JI) ) ) END IF - TAIRCRAFTS(JI)%NPOS = NPOS(JI) + TZAIRCRAFT%NPOS = NPOS(JI) - TAIRCRAFTS(JI)%LALTDEF = LALTDEF(JI) + TZAIRCRAFT%LALTDEF = LALTDEF(JI) IF ( CFILE(JI) == '' ) & CALL PRINT_MSG( NVERB_FATAL, 'GEN', 'INI_AIRCRAFT', 'name of CSV file with trajectory not provided for aircraft ' & // TRIM( CTITLE(JI) ) ) ! Allocate trajectory data - ALLOCATE( TAIRCRAFTS(JI)%XPOSTIME(TAIRCRAFTS(JI)%NPOS) ); TAIRCRAFTS(JI)%XPOSTIME(:) = XNEGUNDEF - ALLOCATE( TAIRCRAFTS(JI)%XPOSLAT (TAIRCRAFTS(JI)%NPOS) ); TAIRCRAFTS(JI)%XPOSLAT(:) = XNEGUNDEF - ALLOCATE( TAIRCRAFTS(JI)%XPOSLON (TAIRCRAFTS(JI)%NPOS) ); TAIRCRAFTS(JI)%XPOSLON(:) = XNEGUNDEF - IF ( TAIRCRAFTS(JI)%LALTDEF ) THEN - ALLOCATE( TAIRCRAFTS(JI)%XPOSP (TAIRCRAFTS(JI)%NPOS) ); TAIRCRAFTS(JI)%XPOSP(:) = XNEGUNDEF + ALLOCATE( TZAIRCRAFT%XPOSTIME(TZAIRCRAFT%NPOS) ); TZAIRCRAFT%XPOSTIME(:) = XNEGUNDEF + ALLOCATE( TZAIRCRAFT%XPOSLAT (TZAIRCRAFT%NPOS) ); TZAIRCRAFT%XPOSLAT(:) = XNEGUNDEF + ALLOCATE( TZAIRCRAFT%XPOSLON (TZAIRCRAFT%NPOS) ); TZAIRCRAFT%XPOSLON(:) = XNEGUNDEF + IF ( TZAIRCRAFT%LALTDEF ) THEN + ALLOCATE( TZAIRCRAFT%XPOSP (TZAIRCRAFT%NPOS) ); TZAIRCRAFT%XPOSP(:) = XNEGUNDEF ELSE - ALLOCATE( TAIRCRAFTS(JI)%XPOSZ (TAIRCRAFTS(JI)%NPOS) ); TAIRCRAFTS(JI)%XPOSZ(:) = XNEGUNDEF + ALLOCATE( TZAIRCRAFT%XPOSZ (TZAIRCRAFT%NPOS) ); TZAIRCRAFT%XPOSZ(:) = XNEGUNDEF END IF ! Read CSV data (trajectory) - CALL AIRCRAFT_CSV_READ( TAIRCRAFTS(JI), CFILE(JI) ) + CALL AIRCRAFT_CSV_READ( TZAIRCRAFT, CFILE(JI) ) END DO diff --git a/src/MNH/ini_aircraft_balloon.f90 b/src/MNH/ini_aircraft_balloon.f90 index 59da978f8..2b9ef0f6c 100644 --- a/src/MNH/ini_aircraft_balloon.f90 +++ b/src/MNH/ini_aircraft_balloon.f90 @@ -138,7 +138,7 @@ ENDIF IF (IMI == 1) CALL INI_BALLOON ! DO JI = 1, NBALLOONS - CALL INI_LAUNCH( JI, TBALLOONS(JI) ) + CALL INI_LAUNCH( JI, TBALLOONS(JI)%TBALLOON ) END DO ! !---------------------------------------------------------------------------- @@ -149,7 +149,7 @@ END DO IF (IMI == 1) CALL INI_AIRCRAFT ! DO JI = 1, NAIRCRAFTS - CALL INI_FLIGHT( JI, TAIRCRAFTS(JI) ) + CALL INI_FLIGHT( JI, TAIRCRAFTS(JI)%TAIRCRAFT ) END DO ! !---------------------------------------------------------------------------- @@ -160,11 +160,11 @@ END DO IF (.NOT. LFLYER) RETURN ! DO JI = 1, NBALLOONS - CALL ALLOCATE_FLYER( TBALLOONS(JI) ) + CALL ALLOCATE_FLYER( TBALLOONS(JI)%TBALLOON ) END DO ! DO JI = 1, NAIRCRAFTS - CALL ALLOCATE_FLYER( TAIRCRAFTS(JI) ) + CALL ALLOCATE_FLYER( TAIRCRAFTS(JI)%TAIRCRAFT ) END DO ! !---------------------------------------------------------------------------- diff --git a/src/MNH/ini_balloon.f90 b/src/MNH/ini_balloon.f90 index 3c3c4d6ae..7e268fb43 100644 --- a/src/MNH/ini_balloon.f90 +++ b/src/MNH/ini_balloon.f90 @@ -117,12 +117,16 @@ USE MODN_BALLOONS IMPLICIT NONE INTEGER :: JI +TYPE(TBALLOONDATA), POINTER :: TZBALLOON ALLOCATE( TBALLOONS(NBALLOONS) ) !Treat balloon data read in namelist DO JI = 1, NBALLOONS - TBALLOONS(JI)%NID = JI + ALLOCATE( TBALLOONS(JI)%TBALLOON ) + TZBALLOON => TBALLOONS(JI)%TBALLOON + + TZBALLOON%NID = JI IF ( CTITLE(JI) == '' ) THEN WRITE( CTITLE(JI), FMT = '( A, I3.3) ') TRIM( CTYPE(JI) ), JI @@ -131,7 +135,7 @@ DO JI = 1, NBALLOONS CMNHMSG(2) = 'title set to ' // TRIM( CTITLE(JI) ) CALL PRINT_MSG( NVERB_INFO, 'GEN', 'INI_BALLOON' ) END IF - TBALLOONS(JI)%CTITLE = CTITLE(JI) + TZBALLOON%CTITLE = CTITLE(JI) IF ( CMODEL(JI) == 'FIX' ) THEN IF ( NMODEL(JI) < 1 .OR. NMODEL(JI) > NMODEL_NEST ) THEN @@ -155,23 +159,23 @@ DO JI = 1, NBALLOONS CMODEL(JI) = 'FIX' NMODEL(JI) = 1 END IF - TBALLOONS(JI)%CMODEL = CMODEL(JI) - TBALLOONS(JI)%NMODEL = NMODEL(JI) + TZBALLOON%CMODEL = CMODEL(JI) + TZBALLOON%NMODEL = NMODEL(JI) - TBALLOONS(JI)%CTYPE = CTYPE(JI) + TZBALLOON%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) + TZBALLOON%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) + TZBALLOON%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) + TZBALLOON%XLONLAUNCH = XLONLAUNCH(JI) IF ( XTSTEP(JI) == XNEGUNDEF ) THEN CALL PRINT_MSG( NVERB_INFO, 'GEN', 'INI_BALLOON', & @@ -181,7 +185,7 @@ DO JI = 1, NBALLOONS 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) + TZBALLOON%TFLYER_TIME%XTSTEP = XTSTEP(JI) SELECT CASE ( CTYPE(JI) ) CASE ( 'CVBALL' ) @@ -193,15 +197,15 @@ DO JI = 1, NBALLOONS 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) + TZBALLOON%XALTLAUNCH = XALTLAUNCH(JI) + TZBALLOON%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) + TZBALLOON%XWASCENT = XWASCENT(JI) IF ( XAERODRAG(JI) == XNEGUNDEF ) THEN @@ -209,29 +213,29 @@ DO JI = 1, NBALLOONS '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) + TZBALLOON%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) + TZBALLOON%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) + TZBALLOON%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. ) + TZBALLOON%XVOLUME = XVOLUME(JI) + TZBALLOON%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 + TZBALLOON%XDIAMETER = XDIAMETER(JI) + TZBALLOON%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) ) ) @@ -245,15 +249,15 @@ DO JI = 1, NBALLOONS 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) + TZBALLOON%XALTLAUNCH = XALTLAUNCH(JI) + TZBALLOON%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) + TZBALLOON%XWASCENT = XWASCENT(JI) IF ( XAERODRAG(JI) /= XNEGUNDEF ) THEN @@ -261,49 +265,49 @@ DO JI = 1, NBALLOONS 'aerodynamic drag coefficient is not needed for ISODEN balloon ' // TRIM( CTITLE(JI) ) // ' => ignored' ) XAERODRAG(JI) = XNEGUNDEF END IF - TBALLOONS(JI)%XAERODRAG = XAERODRAG(JI) + TZBALLOON%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) + TZBALLOON%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) + TZBALLOON%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) + TZBALLOON%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) + TZBALLOON%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) + TZBALLOON%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) + TZBALLOON%XWASCENT = XWASCENT(JI) IF ( XPRES(JI) /= XNEGUNDEF ) THEN CALL PRINT_MSG( NVERB_WARNING, 'GEN', 'INI_BALLOON', & @@ -311,7 +315,7 @@ DO JI = 1, NBALLOONS // TRIM( CTITLE(JI) ) // ' => ignored' ) XPRES(JI) = XNEGUNDEF END IF - TBALLOONS(JI)%XAERODRAG = XAERODRAG(JI) + TZBALLOON%XAERODRAG = XAERODRAG(JI) IF ( XAERODRAG(JI) /= XNEGUNDEF ) THEN CALL PRINT_MSG( NVERB_WARNING, 'GEN', 'INI_BALLOON', & @@ -319,7 +323,7 @@ DO JI = 1, NBALLOONS // TRIM( CTITLE(JI) ) // ' => ignored' ) XAERODRAG(JI) = XNEGUNDEF END IF - TBALLOONS(JI)%XAERODRAG = XAERODRAG(JI) + TZBALLOON%XAERODRAG = XAERODRAG(JI) IF ( XINDDRAG(JI) /= XNEGUNDEF ) THEN CALL PRINT_MSG( NVERB_WARNING, 'GEN', 'INI_BALLOON', & @@ -327,28 +331,28 @@ DO JI = 1, NBALLOONS // TRIM( CTITLE(JI) ) // ' => ignored' ) XINDDRAG(JI) = XNEGUNDEF END IF - TBALLOONS(JI)%XINDDRAG = XINDDRAG(JI) + TZBALLOON%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) + TZBALLOON%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) + TZBALLOON%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) + TZBALLOON%XVOLUME = XVOLUME(JI) CASE DEFAULT diff --git a/src/MNH/modd_aircraft_balloon.f90 b/src/MNH/modd_aircraft_balloon.f90 index 167cf8fef..92d1ade55 100644 --- a/src/MNH/modd_aircraft_balloon.f90 +++ b/src/MNH/modd_aircraft_balloon.f90 @@ -178,8 +178,17 @@ END TYPE TBALLOONDATA INTEGER :: NAIRCRAFTS = 0 ! Total number of aircrafts INTEGER :: NBALLOONS = 0 ! Total number of balloons -TYPE(TAIRCRAFTDATA), DIMENSION(:), ALLOCATABLE :: TAIRCRAFTS ! characteristics and records of the aircrafts +TYPE TAIRCRAFT_PTR + TYPE(TAIRCRAFTDATA), POINTER :: TAIRCRAFT => NULL() +END TYPE TAIRCRAFT_PTR + +TYPE TBALLOON_PTR + TYPE(TBALLOONDATA), POINTER :: TBALLOON => NULL() +END TYPE TBALLOON_PTR + +TYPE(TAIRCRAFT_PTR), DIMENSION(:), ALLOCATABLE :: TAIRCRAFTS ! characteristics and records of the aircrafts + +TYPE(TBALLOON_PTR), DIMENSION(:), ALLOCATABLE :: TBALLOONS ! characteristics and records of the balloons -TYPE(TBALLOONDATA), DIMENSION(:), ALLOCATABLE :: TBALLOONS ! characteristics and records of the balloons END MODULE MODD_AIRCRAFT_BALLOON diff --git a/src/MNH/write_aircraft_balloon.f90 b/src/MNH/write_aircraft_balloon.f90 index d03d35acc..943c01bd3 100644 --- a/src/MNH/write_aircraft_balloon.f90 +++ b/src/MNH/write_aircraft_balloon.f90 @@ -98,11 +98,11 @@ INTEGER :: JI !---------------------------------------------------------------------------- ! DO JI = 1, NBALLOONS - CALL FLYER_DIACHRO( TPDIAFILE, TBALLOONS(JI) ) + CALL FLYER_DIACHRO( TPDIAFILE, TBALLOONS(JI)%TBALLOON ) END DO DO JI = 1, NAIRCRAFTS - CALL FLYER_DIACHRO( TPDIAFILE, TAIRCRAFTS(JI) ) + CALL FLYER_DIACHRO( TPDIAFILE, TAIRCRAFTS(JI)%TAIRCRAFT ) END DO ! END SUBROUTINE WRITE_AIRCRAFT_BALLOON diff --git a/src/MNH/write_balloonn.f90 b/src/MNH/write_balloonn.f90 index 974bde880..2b1b55417 100644 --- a/src/MNH/write_balloonn.f90 +++ b/src/MNH/write_balloonn.f90 @@ -73,7 +73,7 @@ TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! File characteristics INTEGER :: JI DO JI = 1, NBALLOONS - IF ( TBALLOONS(JI)%LFLY ) CALL WRITE_BALLOON_POSITION( TPFILE, TBALLOONS(JI) ) + IF ( TBALLOONS(JI)%TBALLOON%LFLY ) CALL WRITE_BALLOON_POSITION( TPFILE, TBALLOONS(JI)%TBALLOON ) END DO END SUBROUTINE WRITE_BALLOON_n -- GitLab