From 8495c8aa9d9c3a0abe1e888b22af51da33d2e74f Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Thu, 20 Apr 2023 11:25:41 +0200 Subject: [PATCH] Philippe 20/04/2023: allocate and compute surface fields for flyers, aircrafts, balloons and DIAG only when useful --- src/MNH/aircraft_balloon_evol.f90 | 4 +- src/MNH/default_desfmn.f90 | 4 +- src/MNH/end_diag_in_run.f90 | 4 +- src/MNH/ground_paramn.f90 | 317 +++++++++++++------------ src/MNH/ini_diag_in_run.f90 | 111 ++++++--- src/MNH/modd_allprofilern.f90 | 10 +- src/MNH/modd_allstationn.f90 | 10 +- src/MNH/modn_profilern.f90 | 14 +- src/MNH/modn_stationn.f90 | 4 +- src/MNH/profilern.f90 | 7 +- src/MNH/read_desfmn.f90 | 4 +- src/MNH/read_exsegn.f90 | 4 +- src/MNH/stationn.f90 | 4 +- src/MNH/statprof_tools.f90 | 33 +-- src/MNH/write_aircraft_balloon.f90 | 7 +- src/MNH/write_desfmn.f90 | 4 +- src/MNH/write_lfifm1_for_diag_supp.f90 | 2 + src/MNH/write_profilern.f90 | 19 +- src/MNH/write_stationn.f90 | 16 +- 19 files changed, 328 insertions(+), 250 deletions(-) diff --git a/src/MNH/aircraft_balloon_evol.f90 b/src/MNH/aircraft_balloon_evol.f90 index aae1d6092..1d03d38a3 100644 --- a/src/MNH/aircraft_balloon_evol.f90 +++ b/src/MNH/aircraft_balloon_evol.f90 @@ -921,7 +921,7 @@ END SUBROUTINE FLYER_COMPUTE_INTERP_COEFF_HOR_STAGE2 SUBROUTINE FLYER_RECORD_DATA( ) USE MODD_CST, ONLY: XCPD, XLAM_CRAD, XLIGHTSPEED, XP00, XPI, XRD, XRHOLW, XTT -USE MODD_DIAG_IN_RUN, ONLY: LDIAG_IN_RUN, XCURRENT_TKE_DISS +USE MODD_DIAG_IN_RUN, ONLY: XCURRENT_TKE_DISS USE MODD_GRID, ONLY: XBETA, XLON0, XRPK USE MODD_NSV, ONLY: NSV_LIMA_NC, NSV_LIMA_NR, NSV_LIMA_NI USE MODD_PARAMETERS, ONLY: JPVEXT @@ -1349,7 +1349,7 @@ END IF ! end LOOP ICE3 TPFLYER%XWZ (ISTORE,:) = FLYER_INTERPZ(ZWM(:,:,:)) IF (SIZE(PTKE)>0) TPFLYER%XTKE (ISTORE) = FLYER_INTERP(PTKE) IF (SIZE(PTS) >0) TPFLYER%XTSRAD(ISTORE) = FLYER_INTERP_2D(PTS) -IF (LDIAG_IN_RUN) TPFLYER%XTKE_DISS(ISTORE) = FLYER_INTERP(XCURRENT_TKE_DISS) +TPFLYER%XTKE_DISS(ISTORE) = FLYER_INTERP(XCURRENT_TKE_DISS) TPFLYER%XZS(ISTORE) = FLYER_INTERP_2D(PZ(:,:,1+JPVEXT)) TPFLYER%XTHW_FLUX(ISTORE) = FLYER_INTERP(ZTHW_FLUX) TPFLYER%XRCW_FLUX(ISTORE) = FLYER_INTERP(ZRCW_FLUX) diff --git a/src/MNH/default_desfmn.f90 b/src/MNH/default_desfmn.f90 index 0b4de6d6f..6678d6e26 100644 --- a/src/MNH/default_desfmn.f90 +++ b/src/MNH/default_desfmn.f90 @@ -613,7 +613,7 @@ XLAT_PROF(:) = XUNDEF XLON_PROF(:) = XUNDEF CNAME_PROF(:) = '' CFILE_PROF = 'NO_INPUT_CSV' -! LDIAG_SURFRAD = .TRUE. +LDIAG_SURFRAD_PROF = .TRUE. !------------------------------------------------------------------------------ !* 10.f SET DEFAULT VALUES FOR MODD_ALLSTATION_n : ! ---------------------------------- @@ -627,7 +627,7 @@ XLAT_STAT(:) = XUNDEF XLON_STAT(:) = XUNDEF CNAME_STAT(:) = '' CFILE_STAT = 'NO_INPUT_CSV' -LDIAG_SURFRAD = .TRUE. +LDIAG_SURFRAD_STAT = .TRUE. ! !------------------------------------------------------------------------------- ! diff --git a/src/MNH/end_diag_in_run.f90 b/src/MNH/end_diag_in_run.f90 index 6b48ed8a3..2fd13009a 100644 --- a/src/MNH/end_diag_in_run.f90 +++ b/src/MNH/end_diag_in_run.f90 @@ -78,8 +78,8 @@ DEALLOCATE(XCURRENT_LWD )! incoming longwave at the surface DEALLOCATE(XCURRENT_LWU )! outcoming longwave at the surface DEALLOCATE(XCURRENT_SWD )! incoming Shortwave at the surface DEALLOCATE(XCURRENT_SWU )! outcoming Shortwave at the surface -IF(ALLOCATED(XCURRENT_SWDIR)) DEALLOCATE(XCURRENT_SWDIR )! incoming Shortwave direct at the surface -IF(ALLOCATED(XCURRENT_SWDIFF))DEALLOCATE(XCURRENT_SWDIFF)! incoming Shortwave diffuse at the surface +DEALLOCATE(XCURRENT_SWDIR )! incoming Shortwave direct at the surface +DEALLOCATE(XCURRENT_SWDIFF)! incoming Shortwave diffuse at the surface DEALLOCATE(XCURRENT_T2M )! temperature at 2m DEALLOCATE(XCURRENT_Q2M )! humidity at 2m DEALLOCATE(XCURRENT_HU2M )! humidity at 2m diff --git a/src/MNH/ground_paramn.f90 b/src/MNH/ground_paramn.f90 index 449a890f5..37d6dcbb3 100644 --- a/src/MNH/ground_paramn.f90 +++ b/src/MNH/ground_paramn.f90 @@ -127,95 +127,92 @@ END MODULE MODI_GROUND_PARAM_n !* 0. DECLARATIONS ! ------------ ! -! +USE MODD_ALLPROFILER_n, ONLY: LDIAG_SURFRAD_PROF +USE MODD_ALLSTATION_n, ONLY: LDIAG_SURFRAD_STAT +USE MODD_ARGSLIST_ll, ONLY: LIST_ll +USE MODD_BLOWSNOW, ONLY: LBLOWSNOW, NBLOWSNOW_2D, YPBLOWSNOW_2D +USE MODD_BLOWSNOW_n, ONLY: XRSNWCANOS +USE MODD_BUDGET, ONLY: LBUDGET_TH, LBUDGET_RV, NBUDGET_RV, NBUDGET_TH, TBUDGETS +USE MODD_CH_AEROSOL, ONLY: LORILAM +USE MODD_CH_FLX_n, ONLY: XCHFLX +USE MODD_CH_MNHC_n, ONLY: LUSECHEM +USE MODD_CONF, ONLY: CPROGRAM, LCARTESIAN, NHALO +USE MODD_CONF_n, ONLY: NRR +USE MODD_CST, ONLY: XP00, XCPD, XRD, XRV, XRHOLW, XDAY, XPI, XMD, XAVOGADRO +USE MODD_CSTS_DUST, ONLY: XMOLARWEIGHT_DUST +USE MODD_CSTS_SALT, ONLY: XMOLARWEIGHT_SALT +USE MODD_DEEP_CONVECTION_n, ONLY: XPRCONV, XPRSCONV +USE MODD_DIAG_FLAG, ONLY: LCHEMDIAG +USE MODD_DIAG_IN_RUN +USE MODD_DIM_n, ONLY: NKMAX +USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t +USE MODD_DUST, ONLY: LDUST +USE MODD_DYN_n, ONLY: XTSTEP +USE MODD_FIELD_n, ONLY: XUT, XVT, XWT, XTHT, XRT, XPABST, XSVT, XTKET, XZWS, XRTHS, XRRS +USE MODD_FIRE_n, ONLY: XLSPHI, XBMAP, XFMR0, XFMRFA, XFMWF0, XFMR00, XFMIGNITION, XFMFUELTYPE, & + XFIRETAU, XFLUXPARAMH, XFLUXPARAMW, XFIRERW, XFMASE, XFMAWC, XFMWALKIG, & + XFMFLUXHDH, XFMFLUXHDW, XFMHWS, XFMWINDU, XFMWINDV, XFMWINDW, XGRADLSPHIX, & + XGRADLSPHIY, XFIREWIND, XFMGRADOROX, XFMGRADOROY +USE MODD_GRID, ONLY: XLON0, XRPK, XBETA +USE MODD_GRID_n, ONLY: XLON, XZZ, XDIRCOSXW, XDIRCOSYW, XDIRCOSZW, & + XCOSSLOPE, XSINSLOPE, XZS +USE MODD_IO, ONLY: TFILEDATA +USE MODD_LUNIT_n, ONLY: TLUOUT +USE MODD_METRICS_n, ONLY: XDXX, XDYY, XDZZ +USE MODD_MNH_SURFEX_n, ONLY: YSURF_CUR +USE MODD_NSV, ONLY: CSV, NSV, NSV_AERBEG, NSV_AEREND, NSV_CHEMBEG, NSV_CHEMEND, NSV_DSTBEG, NSV_DSTEND, & + NSV_SLTBEG, NSV_SLTEND, NSV_SNWBEG, NSV_SNWEND +USE MODD_PARAM_C2R2, ONLY: LSEDC +USE MODD_PARAMETERS, ONLY: JPVEXT +USE MODD_PARAM_ICE, ONLY: LSEDIC +USE MODD_PARAM_LIMA, ONLY: MSEDC=>LSEDC +USE MODD_PARAM_n, ONLY: CDCONV, CCLOUD, CRAD +USE MODD_PRECIP_n, ONLY: XINPRC, XINPRR, XINPRS, XINPRG, XINPRH +USE MODD_PRECISION, ONLY: MNHTIME +USE MODD_PROFILER_n, ONLY: LPROFILER +USE MODD_RADIATIONS_n, ONLY: XFLALWD, XCCO2, XTSIDER, & + XSW_BANDS, XDIRSRFSWD, XSCAFLASWD, & + XZENITH, XAZIM, XAER, XSWU, XLWU +USE MODD_REF_n, ONLY: XEXNREF, XRHODREF, XRHODJ +USE MODD_SALT, ONLY: LSALT +USE MODD_STATION_n, ONLY: LSTATION +USE MODD_SURF_PAR, ONLY: XUNDEF_SFX => XUNDEF +USE MODD_TIME, ONLY: TDTSEG +USE MODD_TIME_n, ONLY: TDTCUR #ifdef CPLOASIS -USE MODI_GET_HALO -USE MODI_MNH_OASIS_RECV -USE MODI_MNH_OASIS_SEND -USE MODD_SFX_OASIS, ONLY : LOASIS -USE MODD_DYN, ONLY : XSEGLEN -USE MODD_DYN_n, ONLY : DYN_MODEL +USE MODD_SFX_OASIS, ONLY: LOASIS +USE MODD_DYN, ONLY: XSEGLEN +USE MODD_DYN_n, ONLY: DYN_MODEL #endif -! -USE MODD_LUNIT_n, ONLY: TLUOUT -USE MODD_BUDGET, ONLY: LBUDGET_TH, LBUDGET_RV, NBUDGET_RV, NBUDGET_TH,TBUDGETS -USE MODE_BUDGET, ONLY: BUDGET_STORE_INIT, BUDGET_STORE_END -USE MODD_CST, ONLY : XP00, XCPD, XRD, XRV,XRHOLW, XDAY, XPI, XLVTT, XMD, XAVOGADRO -USE MODD_DIMPHYEX, ONLY : DIMPHYEX_t -USE MODD_PARAMETERS, ONLY : JPVEXT -USE MODD_DYN_n, ONLY : XTSTEP -USE MODD_CH_MNHC_n, ONLY : LUSECHEM -USE MODD_FIELD_n, ONLY : XUT, XVT, XWT, XTHT, XRT, XPABST, XSVT, XTKET, XZWS, XRTHS, XRRS -USE MODD_FIRE_n, ONLY : XLSPHI, XBMAP, XFMR0, XFMRFA, XFMWF0, XFMR00, XFMIGNITION, XFMFUELTYPE, & - XFIRETAU, XFLUXPARAMH, XFLUXPARAMW, XFIRERW, XFMASE, XFMAWC, XFMWALKIG, & - XFMFLUXHDH, XFMFLUXHDW, XFMHWS, XFMWINDU, XFMWINDV, XFMWINDW, XGRADLSPHIX, & - XGRADLSPHIY, XFIREWIND, XFMGRADOROX, XFMGRADOROY -USE MODD_METRICS_n, ONLY : XDXX, XDYY, XDZZ -USE MODD_DIM_n, ONLY : NKMAX -USE MODD_GRID_n, ONLY : XLON, XZZ, XDIRCOSXW, XDIRCOSYW, XDIRCOSZW, & - XCOSSLOPE, XSINSLOPE, XZS -USE MODD_REF_n, ONLY : XEXNREF, XRHODREF, XRHODJ -USE MODD_CONF_n, ONLY : NRR -USE MODD_PARAM_n, ONLY : CDCONV,CCLOUD, CRAD -USE MODD_PRECIP_n, ONLY : XINPRC, XINPRR, XINPRS, XINPRG, XINPRH -USE MODD_DEEP_CONVECTION_n, ONLY : XPRCONV, XPRSCONV -USE MODD_CONF, ONLY : LCARTESIAN, CPROGRAM -USE MODD_TIME_n, ONLY : TDTCUR -USE MODD_RADIATIONS_n, ONLY : XFLALWD, XCCO2, XTSIDER, & - XSW_BANDS, XDIRSRFSWD, XSCAFLASWD, & - XZENITH, XAZIM, XAER, XSWU, XLWU -USE MODD_NSV -USE MODD_GRID, ONLY : XLON0, XRPK, XBETA -USE MODD_PARAM_ICE, ONLY : LSEDIC -USE MODD_PARAM_C2R2, ONLY : LSEDC -USE MODD_DIAG_IN_RUN -USE MODD_DUST, ONLY : LDUST -USE MODD_SALT, ONLY : LSALT -USE MODD_BLOWSNOW -USE MODD_BLOWSNOW_n -USE MODD_CH_AEROSOL, ONLY : LORILAM -USE MODD_CSTS_DUST, ONLY : XMOLARWEIGHT_DUST -USE MODD_CSTS_SALT, ONLY : XMOLARWEIGHT_SALT -USE MODD_CH_FLX_n, ONLY : XCHFLX -USE MODD_DIAG_FLAG, ONLY : LCHEMDIAG -USE MODD_SURF_PAR, ONLY: XUNDEF_SFX => XUNDEF -USE MODD_PRECISION, ONLY: MNHTIME -! -USE MODI_NORMAL_INTERPOL -USE MODE_ROTATE_WIND, ONLY: ROTATE_WIND -USE MODI_SHUMAN -USE MODI_MNHGET_SURF_PARAM_n -USE MODI_COUPLING_SURF_ATM_n -USE MODI_DIAG_SURF_ATM_n -USE MODD_MNH_SURFEX_n -! -USE MODE_DATETIME -USE MODE_ll -USE MODD_ARGSLIST_ll, ONLY : LIST_ll #ifdef MNH_FOREFIRE -!** MODULES FOR FOREFIRE **! USE MODD_FOREFIRE USE MODD_FOREFIRE_n -USE MODI_COUPLING_FOREFIRE_n #endif -! -USE MODD_TIME_n -USE MODD_TIME -! -USE MODD_PARAM_LIMA, ONLY : MSEDC=>LSEDC -! -USE MODD_FIRE_n -USE MODD_FIELD + +USE MODE_BUDGET, ONLY: BUDGET_STORE_INIT, BUDGET_STORE_END +USE MODE_DATETIME USE MODE_FIRE_MODEL -USE MODD_CONF, ONLY : NVERB, NHALO -USE MODE_MNH_TIMING, ONLY : SECOND_MNH2 +USE MODE_ll +USE MODE_MNH_TIMING, ONLY: SECOND_MNH2 USE MODE_MSG -USE MODD_IO, ONLY: TFILEDATA +USE MODE_ROTATE_WIND, ONLY: ROTATE_WIND + +USE MODI_COUPLING_SURF_ATM_n +USE MODI_DIAG_SURF_ATM_n +USE MODI_MNHGET_SURF_PARAM_n +USE MODI_NORMAL_INTERPOL +USE MODI_SHUMAN +#ifdef CPLOASIS +USE MODI_GET_HALO +USE MODI_MNH_OASIS_RECV +USE MODI_MNH_OASIS_SEND +#endif +#ifdef MNH_FOREFIRE +USE MODI_COUPLING_FOREFIRE_n +#endif ! IMPLICIT NONE ! -! -! !* 0.1 declarations of arguments ! !* surface fluxes @@ -383,8 +380,9 @@ CHARACTER(LEN=6) :: YJSV CHARACTER(LEN=6), DIMENSION(:), ALLOCATABLE :: YSV_SURF ! name of the scalar variables ! sent to SURFEX ! -REAL :: ZTIMEC -INTEGER :: ILUOUT ! logical unit +LOGICAL :: GSTATPROF_SURF ! TRUE if station or profiler need to write surface or radiation data +REAL :: ZTIMEC +INTEGER :: ILUOUT ! logical unit ! ! Fire model REAL(KIND=MNHTIME), DIMENSION(2) :: ZFIRETIME1, ZFIRETIME2 ! CPU time for Blaze perf profiling @@ -417,6 +415,7 @@ PSCA_ALB = XUNDEF_SFX PEMIS = XUNDEF_SFX PTSRAD = XUNDEF_SFX ! +GSTATPROF_SURF = ( LPROFILER .AND. LDIAG_SURFRAD_PROF ) .OR. ( LSTATION .AND. LDIAG_SURFRAD_STAT ) ! !------------------------------------------------------------------------------- ! @@ -658,11 +657,15 @@ IF (LOASIS) THEN END IF #endif ! -IF (CPROGRAM=='DIAG ' .OR. LDIAG_IN_RUN) THEN - CALL DIAG_SURF_ATM_n(YSURF_CUR,'MESONH') - CALL MNHGET_SURF_PARAM_n( PRN = ZP_RN, PH = ZP_H, PLE = ZP_LE, PLEI = ZP_LEI, & - PGFLUX = ZP_GFLUX, PT2M = ZP_T2M, PQ2M = ZP_Q2M, PHU2M = ZP_HU2M, & - PZON10M = ZP_ZON10M, PMER10M = ZP_MER10M ) +IF ( CPROGRAM == 'DIAG' .OR. GSTATPROF_SURF ) THEN + CALL DIAG_SURF_ATM_n( YSURF_CUR, 'MESONH' ) + IF ( CPROGRAM == 'DIAG' ) THEN + CALL MNHGET_SURF_PARAM_n( PZON10M = ZP_ZON10M, PMER10M = ZP_MER10M ) + ELSE + CALL MNHGET_SURF_PARAM_n( PRN = ZP_RN, PH = ZP_H, PLE = ZP_LE, PLEI = ZP_LEI, & + PGFLUX = ZP_GFLUX, PT2M = ZP_T2M, PQ2M = ZP_Q2M, PHU2M = ZP_HU2M, & + PZON10M = ZP_ZON10M, PMER10M = ZP_MER10M ) + END IF END IF ! ! Transform 1D output fields into 2D: @@ -970,50 +973,58 @@ CALL CLEANLIST_ll(TZFIELDSURF_ll) ! ----------- ! ! -IF (LDIAG_IN_RUN) THEN - ! +IF ( CPROGRAM == 'DIAG' .OR. GSTATPROF_SURF ) THEN XCURRENT_SFCO2(:,:) = ZSFCO2(:,:) - XCURRENT_DSTAOD(:,:)=0.0 - XCURRENT_SLTAOD(:,:)=0.0 - IF (CRAD/='NONE') THEN - XCURRENT_LWD (:,:) = XFLALWD(:,:) - XCURRENT_SWD (:,:) = SUM(XDIRSRFSWD(:,:,:)+XSCAFLASWD(:,:,:),DIM=3) - XCURRENT_LWU (:,:) = XLWU(:,:,IKB) - XCURRENT_SWU (:,:) = XSWU(:,:,IKB) - XCURRENT_SWDIR(:,:) = SUM(XDIRSRFSWD,DIM=3) - XCURRENT_SWDIFF(:,:) = SUM(XSCAFLASWD(:,:,:),DIM=3) - DO JK=IKB,IKE - IKRAD = JK - 1 - DO JJ=IJB,IJE - DO JI=IIB,IIE - XCURRENT_DSTAOD(JI,JJ)=XCURRENT_DSTAOD(JI,JJ)+XAER(JI,JJ,IKRAD,3) - XCURRENT_SLTAOD(JI,JJ)=XCURRENT_SLTAOD(JI,JJ)+XAER(JI,JJ,IKRAD,2) - ENDDO - ENDDO - ENDDO + IF ( CRAD /= 'NONE' ) THEN + XCURRENT_LWD (:,:) = XFLALWD(:,:) + XCURRENT_SWD (:,:) = SUM( XDIRSRFSWD(:,:,:) + XSCAFLASWD(:,:,:), DIM=3 ) + XCURRENT_LWU (:,:) = XLWU(:,:,IKB) + XCURRENT_SWU (:,:) = XSWU(:,:,IKB) + IF ( GSTATPROF_SURF ) THEN + XCURRENT_SWDIR(:,:) = SUM( XDIRSRFSWD(:,:,:), DIM=3 ) + XCURRENT_SWDIFF(:,:) = SUM( XSCAFLASWD(:,:,:), DIM=3 ) + XCURRENT_DSTAOD(:,:) = 0.0 + XCURRENT_SLTAOD(:,:) = 0.0 + DO JK=IKB,IKE + IKRAD = JK - 1 + DO JJ = IJB, IJE + DO JI = IIB, IIE + XCURRENT_DSTAOD(JI,JJ) = XCURRENT_DSTAOD(JI,JJ) + XAER(JI,JJ,IKRAD,3) + XCURRENT_SLTAOD(JI,JJ) = XCURRENT_SLTAOD(JI,JJ) + XAER(JI,JJ,IKRAD,2) + END DO + END DO + END DO + END IF END IF -! + NULLIFY(TZFIELDSURF_ll) - CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_RN, 'GROUND_PARAM_n::XCURRENT_RN' ) - CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_H, 'GROUND_PARAM_n::XCURRENT_H' ) - CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_LE, 'GROUND_PARAM_n::XCURRENT_LE' ) - CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_LEI, 'GROUND_PARAM_n::XCURRENT_LEI' ) - CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_GFLUX, 'GROUND_PARAM_n::XCURRENT_GFLUX' ) - CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_SWD, 'GROUND_PARAM_n::XCURRENT_SWD' ) - CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_SWU, 'GROUND_PARAM_n::XCURRENT_SWU' ) - CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_LWD, 'GROUND_PARAM_n::XCURRENT_LWD' ) - CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_LWU, 'GROUND_PARAM_n::XCURRENT_LWU' ) - CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_SWDIR, 'GROUND_PARAM_n::XCURRENT_SWDIR' ) - CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_SWDIFF, 'GROUND_PARAM_n::XCURRENT_SWDIFF' ) - CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_T2M, 'GROUND_PARAM_n::XCURRENT_T2M' ) - CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_Q2M, 'GROUND_PARAM_n::XCURRENT_Q2M' ) - CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_HU2M, 'GROUND_PARAM_n::XCURRENT_HU2M' ) - CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_ZON10M, 'GROUND_PARAM_n::XCURRENT_ZON10M' ) - CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_MER10M, 'GROUND_PARAM_n::XCURRENT_MER10M' ) - CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_DSTAOD, 'GROUND_PARAM_n::XCURRENT_DSTAOD' ) - CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_SLTAOD, 'GROUND_PARAM_n::XCURRENT_SLTAOD' ) - ! CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_ZWS, 'GROUND_PARAM_n::XCURRENT_ZWS' ) - CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_SFCO2, 'GROUND_PARAM_n::XCURRENT_SFCO2' ) + + CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_SFCO2, 'GROUND_PARAM_n::XCURRENT_SFCO2' ) + IF ( CRAD /= 'NONE' ) THEN + CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_LWD, 'GROUND_PARAM_n::XCURRENT_LWD' ) + CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_SWD, 'GROUND_PARAM_n::XCURRENT_SWD' ) + CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_LWU, 'GROUND_PARAM_n::XCURRENT_LWU' ) + CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_SWU, 'GROUND_PARAM_n::XCURRENT_SWU' ) + IF ( GSTATPROF_SURF ) THEN + CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_SWDIR, 'GROUND_PARAM_n::XCURRENT_SWDIR' ) + CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_SWDIFF, 'GROUND_PARAM_n::XCURRENT_SWDIFF' ) + CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_DSTAOD, 'GROUND_PARAM_n::XCURRENT_DSTAOD' ) + CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_SLTAOD, 'GROUND_PARAM_n::XCURRENT_SLTAOD' ) + END IF + END IF + CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_ZON10M, 'GROUND_PARAM_n::XCURRENT_ZON10M' ) + CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_MER10M, 'GROUND_PARAM_n::XCURRENT_MER10M' ) + IF ( GSTATPROF_SURF ) THEN + CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_RN, 'GROUND_PARAM_n::XCURRENT_RN' ) + CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_H, 'GROUND_PARAM_n::XCURRENT_H' ) + CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_LE, 'GROUND_PARAM_n::XCURRENT_LE' ) + CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_LEI, 'GROUND_PARAM_n::XCURRENT_LEI' ) + CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_GFLUX, 'GROUND_PARAM_n::XCURRENT_GFLUX' ) + CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_T2M, 'GROUND_PARAM_n::XCURRENT_T2M' ) + CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_Q2M, 'GROUND_PARAM_n::XCURRENT_Q2M' ) + CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_HU2M, 'GROUND_PARAM_n::XCURRENT_HU2M' ) + END IF + ! CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_ZWS, 'GROUND_PARAM_n::XCURRENT_ZWS' ) CALL UPDATE_HALO_ll(TZFIELDSURF_ll,IINFO_ll) CALL CLEANLIST_ll(TZFIELDSURF_ll) @@ -1073,16 +1084,20 @@ ALLOCATE(ZP_TSURF (KDIM1D)) ALLOCATE(ZP_Z0 (KDIM1D)) ALLOCATE(ZP_Z0H (KDIM1D)) ALLOCATE(ZP_QSURF (KDIM1D)) -ALLOCATE(ZP_RN (KDIM1D)) -ALLOCATE(ZP_H (KDIM1D)) -ALLOCATE(ZP_LE (KDIM1D)) -ALLOCATE(ZP_LEI (KDIM1D)) -ALLOCATE(ZP_GFLUX (KDIM1D)) -ALLOCATE(ZP_T2M (KDIM1D)) -ALLOCATE(ZP_Q2M (KDIM1D)) -ALLOCATE(ZP_HU2M (KDIM1D)) -ALLOCATE(ZP_ZON10M (KDIM1D)) -ALLOCATE(ZP_MER10M (KDIM1D)) +IF ( GSTATPROF_SURF ) THEN + ALLOCATE(ZP_RN (KDIM1D)) + ALLOCATE(ZP_H (KDIM1D)) + ALLOCATE(ZP_LE (KDIM1D)) + ALLOCATE(ZP_LEI (KDIM1D)) + ALLOCATE(ZP_GFLUX (KDIM1D)) + ALLOCATE(ZP_T2M (KDIM1D)) + ALLOCATE(ZP_Q2M (KDIM1D)) + ALLOCATE(ZP_HU2M (KDIM1D)) +END IF +IF ( CPROGRAM == 'DIAG' .OR. GSTATPROF_SURF ) THEN + ALLOCATE(ZP_ZON10M (KDIM1D)) + ALLOCATE(ZP_MER10M (KDIM1D)) +END IF !* explicit coupling only ALLOCATE(ZP_PEW_A_COEF (KDIM1D)) @@ -1196,7 +1211,7 @@ IF(LBLOWSNOW) THEN END DO END IF ! -IF (LDIAG_IN_RUN) THEN +IF ( GSTATPROF_SURF ) THEN XCURRENT_RN (IIB:IIE,IJB:IJE) = RESHAPE(ZP_RN(:), ISHAPE_2) XCURRENT_H (IIB:IIE,IJB:IJE) = RESHAPE(ZP_H (:), ISHAPE_2) XCURRENT_LE (IIB:IIE,IJB:IJE) = RESHAPE(ZP_LE(:), ISHAPE_2) @@ -1205,10 +1220,12 @@ IF (LDIAG_IN_RUN) THEN XCURRENT_T2M (IIB:IIE,IJB:IJE) = RESHAPE(ZP_T2M(:), ISHAPE_2) XCURRENT_Q2M (IIB:IIE,IJB:IJE) = RESHAPE(ZP_Q2M(:), ISHAPE_2) XCURRENT_HU2M (IIB:IIE,IJB:IJE) = RESHAPE(ZP_HU2M(:), ISHAPE_2) +END IF +IF ( GSTATPROF_SURF .OR. CPROGRAM == 'DIAG' ) THEN XCURRENT_ZON10M (IIB:IIE,IJB:IJE) = RESHAPE(ZP_ZON10M(:), ISHAPE_2) XCURRENT_MER10M (IIB:IIE,IJB:IJE) = RESHAPE(ZP_MER10M(:), ISHAPE_2) ! XCURRENT_ZWS (IIB:IIE,IJB:IJE) = RESHAPE(ZP_ZWS(:), ISHAPE_2) -ENDIF +END IF ! DO JLAYER=1,SIZE(PDIR_ALB,3) PDIR_ALB(IIB:IIE,IJB:IJE,JLAYER) = RESHAPE(ZP_DIR_ALB(:,JLAYER), ISHAPE_2) @@ -1246,16 +1263,20 @@ DEALLOCATE(ZP_TSRAD ) DEALLOCATE(ZP_DIR_ALB ) DEALLOCATE(ZP_SCA_ALB ) DEALLOCATE(ZP_EMIS ) -DEALLOCATE(ZP_RN ) -DEALLOCATE(ZP_H ) -DEALLOCATE(ZP_LE ) -DEALLOCATE(ZP_LEI ) -DEALLOCATE(ZP_GFLUX ) -DEALLOCATE(ZP_T2M ) -DEALLOCATE(ZP_Q2M ) -DEALLOCATE(ZP_HU2M ) -DEALLOCATE(ZP_ZON10M ) -DEALLOCATE(ZP_MER10M ) +IF ( GSTATPROF_SURF ) THEN + DEALLOCATE(ZP_RN ) + DEALLOCATE(ZP_H ) + DEALLOCATE(ZP_LE ) + DEALLOCATE(ZP_LEI ) + DEALLOCATE(ZP_GFLUX ) + DEALLOCATE(ZP_T2M ) + DEALLOCATE(ZP_Q2M ) + DEALLOCATE(ZP_HU2M ) +END IF +IF ( CPROGRAM == 'DIAG' .OR. GSTATPROF_SURF ) THEN + DEALLOCATE(ZP_ZON10M ) + DEALLOCATE(ZP_MER10M ) +END IF DEALLOCATE(ZP_PEW_A_COEF ) DEALLOCATE(ZP_PEW_B_COEF ) diff --git a/src/MNH/ini_diag_in_run.f90 b/src/MNH/ini_diag_in_run.f90 index e3af33fa2..0910a61e6 100644 --- a/src/MNH/ini_diag_in_run.f90 +++ b/src/MNH/ini_diag_in_run.f90 @@ -31,7 +31,7 @@ END MODULE MODI_INI_DIAG_IN_RUN ! ############################################################### ! ! -!!**** *INI_DIAG_IN_RUN* - +!!**** *INI_DIAG_IN_RUN* - !! !! PURPOSE !! ------- @@ -39,7 +39,7 @@ END MODULE MODI_INI_DIAG_IN_RUN ! !!** METHOD !! ------ -!! +!! !! !! EXTERNAL !! -------- @@ -65,10 +65,13 @@ END MODULE MODI_INI_DIAG_IN_RUN !* 0. DECLARATIONS ! ------------ ! -USE MODD_CONF, ONLY : CPROGRAM +USE MODD_ALLPROFILER_n, ONLY: LDIAG_SURFRAD_PROF +USE MODD_ALLSTATION_n, ONLY: LDIAG_SURFRAD_STAT +USE MODD_CONF, ONLY: CPROGRAM USE MODD_DIAG_IN_RUN -USE MODD_PARAMETERS, ONLY : XUNDEF -USE MODD_SURF_PAR, ONLY: XUNDEF_SFX => XUNDEF +USE MODD_PARAMETERS, ONLY: XUNDEF +USE MODD_PARAM_n, ONLY: CRAD +USE MODD_SURF_PAR, ONLY: XUNDEF_SFX => XUNDEF ! IMPLICIT NONE ! @@ -84,36 +87,90 @@ LOGICAL, INTENT(IN) :: OPROFILER! flag for profiler ! !------------------------------------------------------------------------------- ! -IF (OFLYER .OR. OSTATION .OR. OPROFILER .OR. CPROGRAM=='DIAG ') THEN +! LDIAG_IN_RUN is only used for XCURRENT_TKE_DISS (computed in turbulence) +IF ( OFLYER .OR. OPROFILER ) THEN LDIAG_IN_RUN = .TRUE. + ALLOCATE( XCURRENT_TKE_DISS(KIU,KJU,KKU) ) ! Tke dissipation rate + XCURRENT_TKE_DISS = XUNDEF ELSE LDIAG_IN_RUN = .FALSE. + ALLOCATE( XCURRENT_TKE_DISS(0,0,0) ) ! Tke dissipation rate END IF -! -IF (LDIAG_IN_RUN) THEN + +IF ( CPROGRAM == 'DIAG' ) THEN + IF ( CRAD /= 'NONE' ) THEN + ALLOCATE(XCURRENT_LWD (KIU,KJU))! incoming longwave at the surface + ALLOCATE(XCURRENT_LWU (KIU,KJU))! outcoming longwave at the surface + ALLOCATE(XCURRENT_SWD (KIU,KJU))! incoming Shortwave at the surface + ALLOCATE(XCURRENT_SWU (KIU,KJU))! outcoming Shortwave at the surface + ELSE + ALLOCATE(XCURRENT_LWD (0,0))! incoming longwave at the surface + ALLOCATE(XCURRENT_LWU (0,0))! outcoming longwave at the surface + ALLOCATE(XCURRENT_SWD (0,0))! incoming Shortwave at the surface + ALLOCATE(XCURRENT_SWU (0,0))! outcoming Shortwave at the surface + END IF + + ALLOCATE(XCURRENT_ZON10M(KIU,KJU))! zonal wind at 10m + ALLOCATE(XCURRENT_MER10M(KIU,KJU))! meridian wind at 10m + + ALLOCATE(XCURRENT_SFCO2 (KIU,KJU))! CO2 Surface flux + + ALLOCATE(XCURRENT_RN (0,0))! net radiation + ALLOCATE(XCURRENT_H (0,0))! sensible heat flux + ALLOCATE(XCURRENT_LE (0,0))! Total latent heat flux + ALLOCATE(XCURRENT_LEI (0,0))! Solid latent heat flux + ALLOCATE(XCURRENT_GFLUX (0,0))! ground flux + ALLOCATE(XCURRENT_SWDIR (0,0))! incoming Shortwave direct at the surface + ALLOCATE(XCURRENT_SWDIFF(0,0))! incoming Shortwave diffuse at the surface + ALLOCATE(XCURRENT_T2M (0,0))! temperature at 2m + ALLOCATE(XCURRENT_Q2M (0,0))! humidity at 2m + ALLOCATE(XCURRENT_HU2M (0,0))! humidity at 2m + ALLOCATE(XCURRENT_DSTAOD(0,0))! dust aerosol optical depth + ALLOCATE(XCURRENT_SLTAOD(0,0))! Salt aerosol optical depth + ! ALLOCATE(XCURRENT_ZWS(0,0))! Significant height of waves + + XCURRENT_LWD = XUNDEF + XCURRENT_LWU = XUNDEF + XCURRENT_SWD = XUNDEF + XCURRENT_SWU = XUNDEF + + XCURRENT_ZON10M = XUNDEF_SFX + XCURRENT_MER10M = XUNDEF_SFX + + XCURRENT_SFCO2 = XUNDEF_SFX +ELSE IF ( ( OPROFILER .AND. LDIAG_SURFRAD_PROF ) .OR. ( OSTATION .AND. LDIAG_SURFRAD_STAT ) ) THEN ALLOCATE(XCURRENT_RN (KIU,KJU))! net radiation ALLOCATE(XCURRENT_H (KIU,KJU))! sensible heat flux ALLOCATE(XCURRENT_LE (KIU,KJU))! Total latent heat flux - ALLOCATE(XCURRENT_LEI (KIU,KJU))! Solid latent heat flux + ALLOCATE(XCURRENT_LEI (KIU,KJU))! Solid latent heat flux ALLOCATE(XCURRENT_GFLUX (KIU,KJU))! ground flux - ALLOCATE(XCURRENT_LWD (KIU,KJU))! incoming longwave at the surface - ALLOCATE(XCURRENT_LWU (KIU,KJU))! outcoming longwave at the surface - ALLOCATE(XCURRENT_SWD (KIU,KJU))! incoming Shortwave at the surface - ALLOCATE(XCURRENT_SWU (KIU,KJU))! outcoming Shortwave at the surface - ALLOCATE(XCURRENT_SWDIR (KIU,KJU))! incoming Shortwave direct at the surface - ALLOCATE(XCURRENT_SWDIFF(KIU,KJU))! incoming Shortwave diffuse at the surface + IF ( CRAD /= 'NONE' ) THEN + ALLOCATE(XCURRENT_LWD (KIU,KJU))! incoming longwave at the surface + ALLOCATE(XCURRENT_LWU (KIU,KJU))! outcoming longwave at the surface + ALLOCATE(XCURRENT_SWD (KIU,KJU))! incoming Shortwave at the surface + ALLOCATE(XCURRENT_SWU (KIU,KJU))! outcoming Shortwave at the surface + ALLOCATE(XCURRENT_SWDIR (KIU,KJU))! incoming Shortwave direct at the surface + ALLOCATE(XCURRENT_SWDIFF(KIU,KJU))! incoming Shortwave diffuse at the surface + ALLOCATE(XCURRENT_DSTAOD(KIU,KJU))! dust aerosol optical depth + ALLOCATE(XCURRENT_SLTAOD(KIU,KJU))! Salt aerosol optical depth + ELSE + ALLOCATE(XCURRENT_LWD (0,0))! incoming longwave at the surface + ALLOCATE(XCURRENT_LWU (0,0))! outcoming longwave at the surface + ALLOCATE(XCURRENT_SWD (0,0))! incoming Shortwave at the surface + ALLOCATE(XCURRENT_SWU (0,0))! outcoming Shortwave at the surface + ALLOCATE(XCURRENT_SWDIR (0,0))! incoming Shortwave direct at the surface + ALLOCATE(XCURRENT_SWDIFF(0,0))! incoming Shortwave diffuse at the surface + ALLOCATE(XCURRENT_DSTAOD(0,0))! dust aerosol optical depth + ALLOCATE(XCURRENT_SLTAOD(0,0))! Salt aerosol optical depth + END IF ALLOCATE(XCURRENT_T2M (KIU,KJU))! temperature at 2m ALLOCATE(XCURRENT_Q2M (KIU,KJU))! humidity at 2m - ALLOCATE(XCURRENT_HU2M (KIU,KJU))! humidity at 2m + ALLOCATE(XCURRENT_HU2M (KIU,KJU))! humidity at 2m ALLOCATE(XCURRENT_ZON10M(KIU,KJU))! zonal wind at 10m ALLOCATE(XCURRENT_MER10M(KIU,KJU))! meridian wind at 10m - ALLOCATE(XCURRENT_DSTAOD(KIU,KJU))! dust aerosol optical depth ALLOCATE(XCURRENT_SFCO2 (KIU,KJU))! CO2 Surface flux - ALLOCATE(XCURRENT_TKE_DISS(KIU,KJU,KKU)) ! Tke dissipation rate - ALLOCATE(XCURRENT_SLTAOD(KIU,KJU))! Salt aerosol optical depth ! ALLOCATE(XCURRENT_ZWS(KIU,KJU)) ! Significant height of waves - ! - ! + XCURRENT_RN = XUNDEF_SFX XCURRENT_H = XUNDEF_SFX XCURRENT_LE = XUNDEF_SFX @@ -124,38 +181,36 @@ IF (LDIAG_IN_RUN) THEN XCURRENT_SWD = XUNDEF XCURRENT_SWU = XUNDEF XCURRENT_SWDIR = XUNDEF - XCURRENT_SWDIFF= XUNDEF + XCURRENT_SWDIFF= XUNDEF XCURRENT_T2M = XUNDEF_SFX XCURRENT_Q2M = XUNDEF_SFX XCURRENT_HU2M = XUNDEF_SFX XCURRENT_ZON10M= XUNDEF_SFX XCURRENT_MER10M= XUNDEF_SFX XCURRENT_DSTAOD= XUNDEF - XCURRENT_SFCO2 = XUNDEF_SFX - XCURRENT_TKE_DISS = XUNDEF XCURRENT_SLTAOD= XUNDEF + XCURRENT_SFCO2 = XUNDEF_SFX ! XCURRENT_ZWS = XUNDEF_SFX ELSE ALLOCATE(XCURRENT_RN (0,0))! net radiation ALLOCATE(XCURRENT_H (0,0))! sensible heat flux ALLOCATE(XCURRENT_LE (0,0))! Total latent heat flux - ALLOCATE(XCURRENT_LEI (0,0))! Solid latent heat flux + ALLOCATE(XCURRENT_LEI (0,0))! Solid latent heat flux ALLOCATE(XCURRENT_GFLUX (0,0))! ground flux ALLOCATE(XCURRENT_LWD (0,0))! incoming longwave at the surface ALLOCATE(XCURRENT_LWU (0,0))! outcoming longwave at the surface ALLOCATE(XCURRENT_SWD (0,0))! incoming Shortwave at the surface ALLOCATE(XCURRENT_SWU (0,0))! outcoming Shortwave at the surface ALLOCATE(XCURRENT_SWDIR (0,0))! incoming Shortwave direct at the surface - ALLOCATE(XCURRENT_SWDIFF(0,0))! incoming Shortwave diffuse at the surface + ALLOCATE(XCURRENT_SWDIFF(0,0))! incoming Shortwave diffuse at the surface ALLOCATE(XCURRENT_T2M (0,0))! temperature at 2m ALLOCATE(XCURRENT_Q2M (0,0))! humidity at 2m ALLOCATE(XCURRENT_HU2M (0,0))! humidity at 2m ALLOCATE(XCURRENT_ZON10M(0,0))! zonal wind at 10m ALLOCATE(XCURRENT_MER10M(0,0))! meridian wind at 10m ALLOCATE(XCURRENT_DSTAOD(0,0))! dust aerosol optical depth - ALLOCATE(XCURRENT_SFCO2 (0,0))! CO2 Surface flux - ALLOCATE(XCURRENT_TKE_DISS(0,0,0)) ! Tke dissipation rate ALLOCATE(XCURRENT_SLTAOD(0,0))! Salt aerosol optical depth + ALLOCATE(XCURRENT_SFCO2 (0,0))! CO2 Surface flux ! ALLOCATE(XCURRENT_ZWS(0,0))! Significant height of waves END IF ! diff --git a/src/MNH/modd_allprofilern.f90 b/src/MNH/modd_allprofilern.f90 index fd7cd8eb2..176c5560f 100644 --- a/src/MNH/modd_allprofilern.f90 +++ b/src/MNH/modd_allprofilern.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 2021-2022 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2021-2023 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. @@ -44,7 +44,7 @@ IMPLICIT NONE PRIVATE PUBLIC :: NNUMB_PROF, XSTEP_PROF, XX_PROF, XY_PROF, XLAT_PROF, XLON_PROF, XZ_PROF -PUBLIC :: CNAME_PROF, CFILE_PROF !, LDIAG_SURFRAD +PUBLIC :: CNAME_PROF, CFILE_PROF, LDIAG_SURFRAD_PROF PUBLIC :: ALLPROFILER_GOTO_MODEL @@ -58,7 +58,7 @@ TYPE ALLPROFILER_t CHARACTER(LEN=NSTATPROFNAMELGTMAX), DIMENSION(100) :: CNAME_PROF CHARACTER(LEN=NFILENAMELGTMAX) :: CFILE_PROF REAL :: XSTEP_PROF -! LOGICAL :: LDIAG_SURFRAD + LOGICAL :: LDIAG_SURFRAD_PROF ! ! END TYPE ALLPROFILER_t @@ -74,7 +74,7 @@ REAL, DIMENSION(:), POINTER :: XLON_PROF=>NULL() REAL, DIMENSION(:), POINTER :: XZ_PROF=>NULL() CHARACTER (LEN=NSTATPROFNAMELGTMAX),DIMENSION(:), POINTER :: CNAME_PROF=>NULL() CHARACTER (LEN=NFILENAMELGTMAX),POINTER :: CFILE_PROF=>NULL() -!LOGICAL, POINTER :: LDIAG_SURFRAD=>NULL() +LOGICAL, POINTER :: LDIAG_SURFRAD_PROF => NULL() CONTAINS SUBROUTINE ALLPROFILER_GOTO_MODEL(KFROM, KTO) @@ -93,7 +93,7 @@ XLAT_PROF =>ALLPROFILER_MODEL(KTO)%XLAT_PROF XLON_PROF =>ALLPROFILER_MODEL(KTO)%XLON_PROF CNAME_PROF =>ALLPROFILER_MODEL(KTO)%CNAME_PROF CFILE_PROF =>ALLPROFILER_MODEL(KTO)%CFILE_PROF -!LDIAG_SURFRAD =>ALLPROFILER_MODEL(KTO)%LDIAG_SURFRAD +LDIAG_SURFRAD_PROF =>ALLPROFILER_MODEL(KTO)%LDIAG_SURFRAD_PROF END SUBROUTINE ALLPROFILER_GOTO_MODEL END MODULE MODD_ALLPROFILER_n diff --git a/src/MNH/modd_allstationn.f90 b/src/MNH/modd_allstationn.f90 index 4fe0a7be7..463e5a811 100644 --- a/src/MNH/modd_allstationn.f90 +++ b/src/MNH/modd_allstationn.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 2021-2022 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2021-2023 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. @@ -43,7 +43,7 @@ IMPLICIT NONE PRIVATE PUBLIC :: NNUMB_STAT, XSTEP_STAT, XX_STAT, XY_STAT, XLAT_STAT, XLON_STAT, XZ_STAT -PUBLIC :: CNAME_STAT, CFILE_STAT, LDIAG_SURFRAD +PUBLIC :: CNAME_STAT, CFILE_STAT, LDIAG_SURFRAD_STAT PUBLIC :: ALLSTATION_GOTO_MODEL @@ -57,7 +57,7 @@ TYPE ALLSTATION_t CHARACTER(LEN=NSTATPROFNAMELGTMAX), DIMENSION(100) :: CNAME_STAT CHARACTER(LEN=NFILENAMELGTMAX) :: CFILE_STAT REAL :: XSTEP_STAT - LOGICAL :: LDIAG_SURFRAD + LOGICAL :: LDIAG_SURFRAD_STAT ! ! END TYPE ALLSTATION_t @@ -73,7 +73,7 @@ REAL, DIMENSION(:), POINTER :: XLON_STAT=>NULL() REAL, DIMENSION(:), POINTER :: XZ_STAT=>NULL() CHARACTER (LEN=NSTATPROFNAMELGTMAX),DIMENSION(:), POINTER :: CNAME_STAT=>NULL() CHARACTER (LEN=NFILENAMELGTMAX),POINTER :: CFILE_STAT=>NULL() -LOGICAL, POINTER :: LDIAG_SURFRAD=>NULL() +LOGICAL, POINTER :: LDIAG_SURFRAD_STAT=>NULL() CONTAINS SUBROUTINE ALLSTATION_GOTO_MODEL(KFROM, KTO) @@ -92,7 +92,7 @@ XLAT_STAT =>ALLSTATION_MODEL(KTO)%XLAT_STAT XLON_STAT =>ALLSTATION_MODEL(KTO)%XLON_STAT CNAME_STAT =>ALLSTATION_MODEL(KTO)%CNAME_STAT CFILE_STAT =>ALLSTATION_MODEL(KTO)%CFILE_STAT -LDIAG_SURFRAD =>ALLSTATION_MODEL(KTO)%LDIAG_SURFRAD +LDIAG_SURFRAD_STAT =>ALLSTATION_MODEL(KTO)%LDIAG_SURFRAD_STAT END SUBROUTINE ALLSTATION_GOTO_MODEL END MODULE MODD_ALLSTATION_n diff --git a/src/MNH/modn_profilern.f90 b/src/MNH/modn_profilern.f90 index d050fddcf..c5e398416 100644 --- a/src/MNH/modn_profilern.f90 +++ b/src/MNH/modn_profilern.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 2020-2022 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2020-2023 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. @@ -35,8 +35,8 @@ USE MODD_ALLPROFILER_n, ONLY:& XLON_PROF_n =>XLON_PROF ,& XZ_PROF_n =>XZ_PROF ,& CNAME_PROF_n =>CNAME_PROF ,& - CFILE_PROF_n =>CFILE_PROF !,& -! LDIAG_SURFRAD_n =>LDIAG_SURFRAD + CFILE_PROF_n =>CFILE_PROF ,& + LDIAG_SURFRAD_n =>LDIAG_SURFRAD_PROF USE MODD_PARAMETERS, ONLY: NFILENAMELGTMAX, NSTATPROFNAMELGTMAX ! !----------------------------------------------------------------------------- @@ -51,14 +51,14 @@ REAL ,SAVE:: XSTEP_PROF REAL, DIMENSION(100) ,SAVE:: XX_PROF, XY_PROF, XZ_PROF, XLAT_PROF, XLON_PROF CHARACTER (LEN=NSTATPROFNAMELGTMAX), DIMENSION(100),SAVE:: CNAME_PROF CHARACTER (LEN=NFILENAMELGTMAX), SAVE:: CFILE_PROF !filename -! LOGICAL ,SAVE:: LDIAG_SURFRAD +LOGICAL ,SAVE:: LDIAG_SURFRAD NAMELIST /NAM_PROFILERn/ & NNUMB_PROF, XSTEP_PROF, & XX_PROF,XY_PROF,XZ_PROF,& XLON_PROF,XLAT_PROF,& CNAME_PROF,& - CFILE_PROF !,LDIAG_SURFRAD + CFILE_PROF, LDIAG_SURFRAD ! CONTAINS @@ -73,7 +73,7 @@ SUBROUTINE INIT_NAM_PROFILERn XZ_PROF = XZ_PROF_n CNAME_PROF = CNAME_PROF_n CFILE_PROF = CFILE_PROF_n -! LDIAG_SURFRAD= LDIAG_SURFRAD_n + LDIAG_SURFRAD= LDIAG_SURFRAD_n END SUBROUTINE INIT_NAM_PROFILERn SUBROUTINE UPDATE_NAM_PROFILERn @@ -86,6 +86,6 @@ SUBROUTINE UPDATE_NAM_PROFILERn XZ_PROF_n = XZ_PROF CNAME_PROF_n = CNAME_PROF CFILE_PROF_n = CFILE_PROF -! LDIAG_SURFRAD_n= LDIAG_SURFRAD + LDIAG_SURFRAD_n= LDIAG_SURFRAD END SUBROUTINE UPDATE_NAM_PROFILERn END MODULE MODN_PROFILER_n diff --git a/src/MNH/modn_stationn.f90 b/src/MNH/modn_stationn.f90 index 094b3dbb1..5cacedfca 100644 --- a/src/MNH/modn_stationn.f90 +++ b/src/MNH/modn_stationn.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 2020-2022 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2020-2023 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. @@ -35,7 +35,7 @@ USE MODD_ALLSTATION_n, ONLY:& XZ_STAT_n =>XZ_STAT ,& CNAME_STAT_n =>CNAME_STAT ,& CFILE_STAT_n =>CFILE_STAT ,& - LDIAG_SURFRAD_n =>LDIAG_SURFRAD + LDIAG_SURFRAD_n =>LDIAG_SURFRAD_STAT USE MODD_PARAMETERS, ONLY: NFILENAMELGTMAX, NSTATPROFNAMELGTMAX ! !----------------------------------------------------------------------------- diff --git a/src/MNH/profilern.f90 b/src/MNH/profilern.f90 index 2cd83dea0..25c907e90 100644 --- a/src/MNH/profilern.f90 +++ b/src/MNH/profilern.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 2002-2022 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2002-2023 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. @@ -88,6 +88,7 @@ END MODULE MODI_PROFILER_n !* 0. DECLARATIONS ! ------------ ! +USE MODD_ALLPROFILER_n, ONLY: LDIAG_SURFRAD_PROF USE MODD_CST, ONLY: XCPD, XG, XLAM_CRAD, XLIGHTSPEED, XP00, XPI, XRD, XRHOLW, XRV, XTT USE MODD_DIAG_IN_RUN USE MODD_GRID, ONLY: XBETA, XLON0, XRPK @@ -689,7 +690,7 @@ PROFILER: DO JP = 1, NUMBPROFILER_LOC END DO IF (SIZE(PTKE)>0) TPROFILERS(JP)%XTKE (IN,:) = STATPROF_INTERP_3D( TPROFILERS(JP), PTKE ) ! - IF (LDIAG_IN_RUN) THEN + IF ( LDIAG_SURFRAD_PROF ) THEN TPROFILERS(JP)%XT2M (IN) = STATPROF_INTERP_2D( TPROFILERS(JP), XCURRENT_T2M ) TPROFILERS(JP)%XQ2M (IN) = STATPROF_INTERP_2D( TPROFILERS(JP), XCURRENT_Q2M ) TPROFILERS(JP)%XHU2M (IN) = STATPROF_INTERP_2D( TPROFILERS(JP), XCURRENT_HU2M ) @@ -710,9 +711,9 @@ PROFILER: DO JP = 1, NUMBPROFILER_LOC TPROFILERS(JP)%XDSTAOD(IN) = STATPROF_INTERP_2D( TPROFILERS(JP), XCURRENT_DSTAOD ) TPROFILERS(JP)%XSLTAOD(IN) = STATPROF_INTERP_2D( TPROFILERS(JP), XCURRENT_SLTAOD ) END IF - TPROFILERS(JP)%XTKE_DISS(IN,:) = STATPROF_INTERP_3D( TPROFILERS(JP), XCURRENT_TKE_DISS ) TPROFILERS(JP)%XSFCO2 (IN) = STATPROF_INTERP_2D( TPROFILERS(JP), XCURRENT_SFCO2 ) END IF + TPROFILERS(JP)%XTKE_DISS(IN,:) = STATPROF_INTERP_3D( TPROFILERS(JP), XCURRENT_TKE_DISS ) END DO PROFILER ! !---------------------------------------------------------------------------- diff --git a/src/MNH/read_desfmn.f90 b/src/MNH/read_desfmn.f90 index 10c8623f5..ce23cbb2c 100644 --- a/src/MNH/read_desfmn.f90 +++ b/src/MNH/read_desfmn.f90 @@ -266,8 +266,8 @@ USE MODN_LATZ_EDFLX USE MODN_2D_FRC USE MODN_BLOWSNOW_n USE MODN_BLOWSNOW -USE MODN_PROFILER_n -USE MODN_STATION_n +USE MODN_PROFILER_n, LDIAG_SURFRAD_PROF => LDIAG_SURFRAD +USE MODN_STATION_n, LDIAG_SURFRAD_STAT => LDIAG_SURFRAD ! USE MODN_PARAM_LIMA ! USE MODN_FLYERS diff --git a/src/MNH/read_exsegn.f90 b/src/MNH/read_exsegn.f90 index 4beb49197..b633ed2c6 100644 --- a/src/MNH/read_exsegn.f90 +++ b/src/MNH/read_exsegn.f90 @@ -401,12 +401,12 @@ USE MODN_PARAM_MFSHALL_n USE MODN_PARAM_n ! realized in subroutine ini_model n USE MODN_PARAM_RAD_n USE MODN_PASPOL -USE MODN_PROFILER_n +USE MODN_PROFILER_n, LDIAG_SURFRAD_PROF => LDIAG_SURFRAD USE MODN_RECYCL_PARAM_n USE MODN_SALT USE MODN_SERIES USE MODN_SERIES_n -USE MODN_STATION_n +USE MODN_STATION_n, LDIAG_SURFRAD_STAT => LDIAG_SURFRAD USE MODN_TURB USE MODN_TURB_CLOUD USE MODN_TURB_n diff --git a/src/MNH/stationn.f90 b/src/MNH/stationn.f90 index 3b823f7ba..a9a08e66a 100644 --- a/src/MNH/stationn.f90 +++ b/src/MNH/stationn.f90 @@ -82,6 +82,7 @@ END MODULE MODI_STATION_n !* 0. DECLARATIONS ! ------------ ! +USE MODD_ALLSTATION_n, ONLY: LDIAG_SURFRAD_STAT USE MODD_CONF, ONLY: LCARTESIAN USE MODD_CST, ONLY: XPI USE MODD_DIAG_IN_RUN @@ -89,7 +90,6 @@ USE MODD_GRID, ONLY: XBETA, XLON0, XRPK USE MODD_PARAMETERS, ONLY: JPVEXT USE MODD_PARAM_n, ONLY: CRAD USE MODD_STATION_n -USE MODD_ALLSTATION_n, ONLY: LDIAG_SURFRAD ! USE MODE_STATPROF_TOOLS, ONLY: STATPROF_INSTANT, STATPROF_INTERP_2D, STATPROF_INTERP_2D_U, STATPROF_INTERP_2D_V ! @@ -168,7 +168,7 @@ STATION: DO JS = 1,NUMBSTAT_LOC IF ( CRAD /= 'NONE' ) TSTATIONS(JS)%XTSRAD(IN) = STATPROF_INTERP_2D( TSTATIONS(JS), PTS ) TSTATIONS(JS)%XZS = STATPROF_INTERP_2D( TSTATIONS(JS), PZ(:,:,1+JPVEXT)) - IF ( LDIAG_SURFRAD ) THEN + IF ( LDIAG_SURFRAD_STAT ) THEN TSTATIONS(JS)%XZON10M(IN) = STATPROF_INTERP_2D( TSTATIONS(JS), XCURRENT_ZON10M ) TSTATIONS(JS)%XMER10M(IN) = STATPROF_INTERP_2D( TSTATIONS(JS), XCURRENT_MER10M ) TSTATIONS(JS)%XT2M (IN) = STATPROF_INTERP_2D( TSTATIONS(JS), XCURRENT_T2M ) diff --git a/src/MNH/statprof_tools.f90 b/src/MNH/statprof_tools.f90 index c1bb9de5e..f7e0e7596 100644 --- a/src/MNH/statprof_tools.f90 +++ b/src/MNH/statprof_tools.f90 @@ -35,15 +35,14 @@ CONTAINS SUBROUTINE PROFILER_ALLOCATE( TPPROFILER, KSTORE ) ! ################################################ -! USE MODD_ALLSTATION_n, ONLY: LDIAG_SURFRAD - USE MODD_CONF_n, ONLY: NRR - USE MODD_DIAG_IN_RUN, ONLY: LDIAG_IN_RUN - USE MODD_DIM_n, ONLY: NKMAX - USE MODD_NSV, ONLY: NSV - USE MODD_PARAMETERS, ONLY: JPVEXT, XUNDEF - USE MODD_PARAM_n, ONLY: CCLOUD, CRAD, CTURB - USE MODD_RADIATIONS_n, ONLY: NAER - USE MODD_SURF_PAR, ONLY: XUNDEF_SFX => XUNDEF + USE MODD_ALLPROFILER_n, ONLY: LDIAG_SURFRAD_PROF + USE MODD_CONF_n, ONLY: NRR + USE MODD_DIM_n, ONLY: NKMAX + USE MODD_NSV, ONLY: NSV + USE MODD_PARAMETERS, ONLY: JPVEXT, XUNDEF + USE MODD_PARAM_n, ONLY: CCLOUD, CRAD, CTURB + USE MODD_RADIATIONS_n, ONLY: NAER + USE MODD_SURF_PAR, ONLY: XUNDEF_SFX => XUNDEF IMPLICIT NONE @@ -96,7 +95,7 @@ SUBROUTINE PROFILER_ALLOCATE( TPPROFILER, KSTORE ) ALLOCATE( TPPROFILER%XZWD(KSTORE) ) ALLOCATE( TPPROFILER%XZHD(KSTORE) ) -! IF ( LDIAG_IN_RUN ) THEN + IF ( LDIAG_SURFRAD_PROF ) THEN ALLOCATE( TPPROFILER%XT2M (KSTORE) ) ALLOCATE( TPPROFILER%XQ2M (KSTORE) ) ALLOCATE( TPPROFILER%XHU2M (KSTORE) ) @@ -117,10 +116,11 @@ SUBROUTINE PROFILER_ALLOCATE( TPPROFILER, KSTORE ) ALLOCATE( TPPROFILER%XDSTAOD(KSTORE) ) ALLOCATE( TPPROFILER%XSLTAOD(KSTORE) ) END IF - ALLOCATE( TPPROFILER%XTKE_DISS(KSTORE, IKU) ) ALLOCATE( TPPROFILER%XSFCO2 (KSTORE) ) END IF + ALLOCATE( TPPROFILER%XTKE_DISS(KSTORE, IKU) ) + TPPROFILER%XZON (:,:) = XUNDEF TPPROFILER%XMER (:,:) = XUNDEF TPPROFILER%XFF (:,:) = XUNDEF @@ -148,7 +148,7 @@ SUBROUTINE PROFILER_ALLOCATE( TPPROFILER, KSTORE ) TPPROFILER%XZWD(:) = XUNDEF TPPROFILER%XZHD(:) = XUNDEF -! IF ( LDIAG_IN_RUN ) THEN + IF ( LDIAG_SURFRAD_PROF ) THEN TPPROFILER%XT2M (:) = XUNDEF_SFX TPPROFILER%XQ2M (:) = XUNDEF_SFX TPPROFILER%XHU2M (:) = XUNDEF_SFX @@ -169,17 +169,18 @@ SUBROUTINE PROFILER_ALLOCATE( TPPROFILER, KSTORE ) TPPROFILER%XDSTAOD(:) = XUNDEF TPPROFILER%XSLTAOD(:) = XUNDEF END IF - TPPROFILER%XTKE_DISS(:,:) = XUNDEF TPPROFILER%XSFCO2(:) = XUNDEF END IF + TPPROFILER%XTKE_DISS(:,:) = XUNDEF + END SUBROUTINE PROFILER_ALLOCATE ! ############################################## SUBROUTINE STATION_ALLOCATE( TPSTATION, KSTORE ) ! ############################################## - USE MODD_ALLSTATION_n, ONLY: LDIAG_SURFRAD + USE MODD_ALLSTATION_n, ONLY: LDIAG_SURFRAD_STAT USE MODD_CONF_n, ONLY: NRR USE MODD_NSV, ONLY: NSV USE MODD_PARAMETERS, ONLY: XUNDEF @@ -208,7 +209,7 @@ SUBROUTINE STATION_ALLOCATE( TPSTATION, KSTORE ) ELSE ALLOCATE( TPSTATION%XTSRAD(0) ) END IF - IF ( LDIAG_SURFRAD ) THEN + IF ( LDIAG_SURFRAD_STAT ) THEN ALLOCATE( TPSTATION%XT2M (KSTORE) ) ALLOCATE( TPSTATION%XQ2M (KSTORE) ) ALLOCATE( TPSTATION%XHU2M (KSTORE) ) @@ -241,7 +242,7 @@ SUBROUTINE STATION_ALLOCATE( TPSTATION, KSTORE ) TPSTATION%XR(:,:) = XUNDEF TPSTATION%XSV(:,:) = XUNDEF TPSTATION%XTSRAD(:) = XUNDEF - IF ( LDIAG_SURFRAD ) THEN + IF ( LDIAG_SURFRAD_STAT ) THEN TPSTATION%XT2M(:) = XUNDEF_SFX TPSTATION%XQ2M(:) = XUNDEF_SFX TPSTATION%XHU2M(:) = XUNDEF_SFX diff --git a/src/MNH/write_aircraft_balloon.f90 b/src/MNH/write_aircraft_balloon.f90 index 2284be8ea..9c3c5b584 100644 --- a/src/MNH/write_aircraft_balloon.f90 +++ b/src/MNH/write_aircraft_balloon.f90 @@ -203,7 +203,6 @@ USE MODD_AIRCRAFT_BALLOON use modd_budget, only: NLVL_CATEGORY, NLVL_SUBCATEGORY, NLVL_GROUP, NLVL_SHAPE, NLVL_TIMEAVG, NLVL_NORM, NLVL_MASK, & tbudiachrometadata USE MODD_CST, ONLY: XRV -USE MODD_DIAG_IN_RUN, ONLY: LDIAG_IN_RUN use modd_field, only: NMNHDIM_LEVEL, NMNHDIM_FLYER_PROC, NMNHDIM_FLYER_TIME, NMNHDIM_UNUSED, & tfieldmetadata_base, TYPEREAL USE MODD_IO, ONLY: TFILEDATA @@ -268,7 +267,7 @@ IPROCZ = SIZE(TPFLYER%XRTZ,2)+ SIZE(TPFLYER%XRZ,2)+ SIZE(TPFLYER%XRZ,3)+ SIZE(T IF (NSV_LIMA_BEG<=NSV_LIMA_END) IPROCZ= IPROCZ+ SIZE(TPFLYER%XCCZ,2) + SIZE(TPFLYER%XCRZ,2) IF (SIZE(TPFLYER%XTKE )>0) IPROC = IPROC + 1 -IF (LDIAG_IN_RUN) IPROC = IPROC + 1 +IPROC = IPROC + 1 ! TKE_DISS IF (LORILAM) IPROC = IPROC + JPMODE*3 IF (LDUST) IPROC = IPROC + NMODE_DST*3 IF (SIZE(TPFLYER%XTSRAD)>0) IPROC = IPROC + 1 @@ -352,9 +351,7 @@ DO JSV=1,SIZE(TPFLYER%XSVW_FLUX,2) WRITE ( YTITLE, FMT = '( A, I3.3 )' ) 'SV_FLUX', JSV call Add_point( Trim( ytitle ), 'scalar flux', 'SVUNIT m s-1', tpflyer%xsvw_flux(:,jsv) ) END DO -IF (LDIAG_IN_RUN) THEN - call Add_point( 'Tke_Diss', 'TKE dissipation rate', 'm2 s-2', tpflyer%xtke_diss(:) ) -ENDIF +call Add_point( 'Tke_Diss', 'TKE dissipation rate', 'm2 s-2', tpflyer%xtke_diss(:) ) ! IF (SIZE(TPFLYER%XSV,2)>=1) THEN ! Scalar variables diff --git a/src/MNH/write_desfmn.f90 b/src/MNH/write_desfmn.f90 index 4f27769f9..cb4330d88 100644 --- a/src/MNH/write_desfmn.f90 +++ b/src/MNH/write_desfmn.f90 @@ -216,8 +216,8 @@ USE MODN_BLOWSNOW_n USE MODN_BLOWSNOW USE MODN_IBM_PARAM_n USE MODN_RECYCL_PARAM_n -USE MODN_PROFILER_n -USE MODN_STATION_n +USE MODN_PROFILER_n, LDIAG_SURFRAD_PROF => LDIAG_SURFRAD +USE MODN_STATION_n, LDIAG_SURFRAD_STAT => LDIAG_SURFRAD USE MODN_FIRE_n USE MODN_FLYERS ! diff --git a/src/MNH/write_lfifm1_for_diag_supp.f90 b/src/MNH/write_lfifm1_for_diag_supp.f90 index 57a71520c..06eee20bc 100644 --- a/src/MNH/write_lfifm1_for_diag_supp.f90 +++ b/src/MNH/write_lfifm1_for_diag_supp.f90 @@ -909,6 +909,7 @@ IF (CSURF=='EXTE') THEN CALL IO_Field_write(TPFILE,TZFIELD,XCURRENT_SFCO2) END IF ! + IF ( CRAD /= 'NONE' ) THEN IF(ANY(XCURRENT_SWD/=XUNDEF))THEN TZFIELD = TFIELDMETADATA( & CMNHNAME = 'SWD', & @@ -968,6 +969,7 @@ IF (CSURF=='EXTE') THEN LTIMEDEP = .TRUE. ) CALL IO_Field_write(TPFILE,TZFIELD,XCURRENT_LWU) END IF + END IF ! CRAD/='NONE' END IF ! MODIF FP NOV 2012 diff --git a/src/MNH/write_profilern.f90 b/src/MNH/write_profilern.f90 index 94afe59ce..98e73e04c 100644 --- a/src/MNH/write_profilern.f90 +++ b/src/MNH/write_profilern.f90 @@ -51,10 +51,10 @@ SUBROUTINE WRITE_PROFILER_n( TPDIAFILE ) !* 0. DECLARATIONS ! ------------ ! +USE MODD_ALLPROFILER_n, ONLY: LDIAG_SURFRAD_PROF USE MODD_CONF_n, ONLY: NRR USE MODD_DIM_n, ONLY: NKMAX USE MODD_IO, ONLY: ISNPROC, ISP, TFILEDATA -USE MODD_DIAG_IN_RUN, ONLY: LDIAG_IN_RUN USE MODD_MPIF USE MODD_NSV, ONLY: NSV USE MODD_PARAMETERS, ONLY: JPVEXT @@ -146,12 +146,12 @@ IF ( ISNPROC > 1 ) THEN IF ( CTURB == 'TKEL') IPACKSIZE = IPACKSIZE + ISTORE * IKU !Tke term IF ( CCLOUD == 'ICE3' .OR. CCLOUD == 'ICE4' ) IPACKSIZE = IPACKSIZE + ISTORE * IKU !CIZ term IPACKSIZE = IPACKSIZE + 4 * ISTORE - IF ( LDIAG_IN_RUN ) THEN + IF ( LDIAG_SURFRAD_PROF ) THEN IPACKSIZE = IPACKSIZE + ISTORE * 10 - IPACKSIZE = IPACKSIZE + ISTORE * IKU !XTKE_DISS term IF ( CRAD /= 'NONE' ) IPACKSIZE = IPACKSIZE + ISTORE * 8 IPACKSIZE = IPACKSIZE + ISTORE !XSFCO2 term END IF + IPACKSIZE = IPACKSIZE + ISTORE * IKU !XTKE_DISS term ALLOCATE( ZPACK(IPACKSIZE) ) END IF @@ -216,7 +216,7 @@ PROFILER: DO JS = 1, INUMPROF ZPACK(IPOS:IPOS+ISTORE-1) = TPROFILERS(IDX)%XZWD(:); IPOS = IPOS + ISTORE ZPACK(IPOS:IPOS+ISTORE-1) = TPROFILERS(IDX)%XZHD(:); IPOS = IPOS + ISTORE - IF ( LDIAG_IN_RUN ) THEN + IF ( LDIAG_SURFRAD_PROF ) THEN ZPACK(IPOS:IPOS+ISTORE-1) = TPROFILERS(IDX)%XT2M; IPOS = IPOS + ISTORE ZPACK(IPOS:IPOS+ISTORE-1) = TPROFILERS(IDX)%XQ2M; IPOS = IPOS + ISTORE ZPACK(IPOS:IPOS+ISTORE-1) = TPROFILERS(IDX)%XHU2M; IPOS = IPOS + ISTORE @@ -237,10 +237,10 @@ PROFILER: DO JS = 1, INUMPROF ZPACK(IPOS:IPOS+ISTORE-1) = TPROFILERS(IDX)%XDSTAOD; IPOS = IPOS + ISTORE ZPACK(IPOS:IPOS+ISTORE-1) = TPROFILERS(IDX)%XSLTAOD; IPOS = IPOS + ISTORE END IF - ZPACK(IPOS:IPOS+ISTORE*IKU-1) = RESHAPE( TPROFILERS(IDX)%XTKE_DISS(:,:), [ISTORE*IKU] ) ; IPOS = IPOS + ISTORE * IKU ZPACK(IPOS:IPOS+ISTORE-1) = TPROFILERS(IDX)%XSFCO2; IPOS = IPOS + ISTORE END IF + ZPACK(IPOS:IPOS+ISTORE*IKU-1) = RESHAPE( TPROFILERS(IDX)%XTKE_DISS(:,:), [ISTORE*IKU] ) ; IPOS = IPOS + ISTORE * IKU IF ( IPOS-1 /= IPACKSIZE ) & call Print_msg( NVERB_WARNING, 'IO', 'WRITE_PROFILER_n', 'IPOS-1 /= IPACKSIZE (sender side)', OLOCAL = .TRUE. ) @@ -304,7 +304,7 @@ PROFILER: DO JS = 1, INUMPROF TZPROFILER%XZWD(:) = ZPACK(IPOS:IPOS+ISTORE-1) ; IPOS = IPOS + ISTORE TZPROFILER%XZHD(:) = ZPACK(IPOS:IPOS+ISTORE-1) ; IPOS = IPOS + ISTORE - IF ( LDIAG_IN_RUN ) THEN + IF ( LDIAG_SURFRAD_PROF ) THEN TZPROFILER%XT2M = ZPACK(IPOS:IPOS+ISTORE-1) ; IPOS = IPOS + ISTORE TZPROFILER%XQ2M = ZPACK(IPOS:IPOS+ISTORE-1) ; IPOS = IPOS + ISTORE TZPROFILER%XHU2M = ZPACK(IPOS:IPOS+ISTORE-1) ; IPOS = IPOS + ISTORE @@ -325,10 +325,11 @@ PROFILER: DO JS = 1, INUMPROF TZPROFILER%XDSTAOD = ZPACK(IPOS:IPOS+ISTORE-1); IPOS = IPOS + ISTORE TZPROFILER%XSLTAOD = ZPACK(IPOS:IPOS+ISTORE-1); IPOS = IPOS + ISTORE END IF - TZPROFILER%XTKE_DISS(:,:) = RESHAPE( ZPACK(IPOS:IPOS+ISTORE*IKU-1), [ ISTORE, IKU ] ) ; IPOS = IPOS + ISTORE * IKU TZPROFILER%XSFCO2 = ZPACK(IPOS:IPOS+ISTORE-1); IPOS = IPOS + ISTORE END IF + TZPROFILER%XTKE_DISS(:,:) = RESHAPE( ZPACK(IPOS:IPOS+ISTORE*IKU-1), [ ISTORE, IKU ] ) ; IPOS = IPOS + ISTORE * IKU + IF ( IPOS-1 /= IPACKSIZE ) & call Print_msg( NVERB_WARNING, 'IO', 'WRITE_PROFILER_n', 'IPOS-1 /= IPACKSIZE (receiver side)', OLOCAL = .TRUE. ) END IF @@ -346,13 +347,13 @@ END SUBROUTINE WRITE_PROFILER_n SUBROUTINE PROFILER_DIACHRO_n( TPDIAFILE, TPPROFILER ) ! #################################################### +USE MODD_ALLPROFILER_n, ONLY: LDIAG_SURFRAD_PROF use modd_budget, only: NLVL_CATEGORY, NLVL_SUBCATEGORY, NLVL_GROUP, NLVL_SHAPE, NLVL_TIMEAVG, NLVL_NORM, NLVL_MASK, & tbudiachrometadata USE MODD_CH_AEROSOL, ONLY: LORILAM, JPMODE USE MODD_CONF, ONLY: LCARTESIAN USE MODD_CONF_n, ONLY: NRR USE MODD_CST, ONLY: XRV -USE MODD_DIAG_IN_RUN, only: LDIAG_IN_RUN USE MODD_DUST, ONLY: LDUST, NMODE_DST USE MODD_DIM_n, ONLY: NKMAX use modd_field, only: NMNHDIM_LEVEL, NMNHDIM_LEVEL_W, NMNHDIM_PROFILER_TIME, NMNHDIM_PROFILER_PROC, NMNHDIM_UNUSED, & @@ -673,7 +674,7 @@ ALLOCATE ( XWORK6(1, 1, 1, ISTORE, 1, IPROC) ) jproc = 0 -if ( ldiag_in_run ) then +if ( ldiag_surfrad_prof ) then call Add_point( 'T2m', '2-m temperature', 'K', tpprofiler%xt2m ) call Add_point( 'Q2m', '2-m humidity', 'kg kg-1', tpprofiler%xq2m ) call Add_point( 'HU2m', '2-m relative humidity', 'percent', tpprofiler%xhu2m ) diff --git a/src/MNH/write_stationn.f90 b/src/MNH/write_stationn.f90 index 383e9aad2..903380597 100644 --- a/src/MNH/write_stationn.f90 +++ b/src/MNH/write_stationn.f90 @@ -44,7 +44,7 @@ SUBROUTINE WRITE_STATION_n( TPDIAFILE ) !* 0. DECLARATIONS ! ------------ ! -USE MODD_ALLSTATION_n, ONLY: LDIAG_SURFRAD +USE MODD_ALLSTATION_n, ONLY: LDIAG_SURFRAD_STAT USE MODD_CONF_n, ONLY: NRR USE MODD_IO, ONLY: ISNPROC, ISP, TFILEDATA USE MODD_MPIF @@ -130,7 +130,7 @@ IF ( ISNPROC > 1 ) THEN IPACKSIZE = IPACKSIZE + ISTORE * ( 5 + NRR + NSV ) IF ( CTURB == 'TKEL') IPACKSIZE = IPACKSIZE + ISTORE !Tke term IF ( CRAD /= 'NONE' ) IPACKSIZE = IPACKSIZE + ISTORE !XTSRAD term - IF ( LDIAG_SURFRAD ) THEN + IF ( LDIAG_SURFRAD_STAT ) THEN IF ( CSURF == 'EXTE' ) IPACKSIZE = IPACKSIZE + ISTORE * 10 IF ( CRAD /= 'NONE' ) IPACKSIZE = IPACKSIZE + ISTORE * 8 IPACKSIZE = IPACKSIZE + ISTORE !XSFCO2 term @@ -175,7 +175,7 @@ STATION: DO JS = 1, INUMSTAT IF ( CRAD /= 'NONE' ) THEN ZPACK(IPOS:IPOS+ISTORE-1) = TSTATIONS(IDX)%XTSRAD(:); IPOS = IPOS + ISTORE END IF - IF ( LDIAG_SURFRAD ) THEN + IF ( LDIAG_SURFRAD_STAT ) THEN IF ( CSURF == 'EXTE') THEN ZPACK(IPOS:IPOS+ISTORE-1) = TSTATIONS(IDX)%XT2M; IPOS = IPOS + ISTORE ZPACK(IPOS:IPOS+ISTORE-1) = TSTATIONS(IDX)%XQ2M; IPOS = IPOS + ISTORE @@ -239,7 +239,7 @@ STATION: DO JS = 1, INUMSTAT IF ( CRAD /= 'NONE' ) THEN TZSTATION%XTSRAD(:) = ZPACK(IPOS:IPOS+ISTORE-1); IPOS = IPOS + ISTORE END IF - IF ( LDIAG_SURFRAD ) THEN + IF ( LDIAG_SURFRAD_STAT ) THEN IF ( CSURF == 'EXTE' ) THEN TZSTATION%XT2M = ZPACK(IPOS:IPOS+ISTORE-1); IPOS = IPOS + ISTORE TZSTATION%XQ2M = ZPACK(IPOS:IPOS+ISTORE-1); IPOS = IPOS + ISTORE @@ -280,7 +280,7 @@ END SUBROUTINE WRITE_STATION_n SUBROUTINE STATION_DIACHRO_n( TPDIAFILE, TPSTATION ) ! ################################################## -USE MODD_ALLSTATION_n, ONLY: LDIAG_SURFRAD +USE MODD_ALLSTATION_n, ONLY: LDIAG_SURFRAD_STAT use modd_budget, only: NLVL_CATEGORY, NLVL_SUBCATEGORY, NLVL_GROUP, NLVL_SHAPE, NLVL_TIMEAVG, NLVL_NORM, NLVL_MASK, & tbudiachrometadata USE MODD_CONF, ONLY: LCARTESIAN @@ -329,7 +329,7 @@ type(tfieldmetadata_base), dimension(:), allocatable :: tzfields IPROC = 5 + SIZE(TPSTATION%XR,2) + SIZE(TPSTATION%XSV,2) IF ( CTURB == 'TKEL' ) IPROC = IPROC + 1 -IF (LDIAG_SURFRAD) THEN +IF (LDIAG_SURFRAD_STAT) THEN IF(CSURF=="EXTE") IPROC = IPROC + 10 IF(CRAD/="NONE") IPROC = IPROC + 8 IPROC = IPROC + 1 ! XSFCO2 term @@ -365,7 +365,7 @@ end if call Add_point( 'W', 'Air vertical speed', 'm s-1', tpstation%xw(:) ) call Add_point( 'Th', 'Potential temperature', 'K', tpstation%xth(:) ) -if ( ldiag_surfrad ) then +if ( ldiag_surfrad_stat ) then if ( csurf == "EXTE" ) then call Add_point( 'T2m', '2-m temperature', 'K', tpstation%xt2m(:) ) call Add_point( 'Q2m', '2-m humidity', 'kg kg-1', tpstation%xq2m(:) ) @@ -623,7 +623,7 @@ end if if ( crad /= 'NONE' ) call Add_point( 'Tsrad', 'Radiative Surface Temperature', 'K', tpstation%xtsrad(:) ) -if ( ldiag_surfrad ) call Add_point( 'SFCO2', 'CO2 Surface Flux', 'mg m-2 s-1', tpstation%xsfco2(:) ) +if ( ldiag_surfrad_stat ) call Add_point( 'SFCO2', 'CO2 Surface Flux', 'mg m-2 s-1', tpstation%xsfco2(:) ) ! !---------------------------------------------------------------------------- ! -- GitLab