diff --git a/src/MNH/adv_forcingn.f90 b/src/MNH/adv_forcingn.f90 index 5a824682580112b59bb000187ea54dcb2bc9d01d..71b55df3e4679a7d95c47ee1381916682dee33b5 100644 --- a/src/MNH/adv_forcingn.f90 +++ b/src/MNH/adv_forcingn.f90 @@ -2,6 +2,7 @@ !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. +!----------------------------------------------------------------- ! ##################### MODULE MODI_ADV_FORCING_n ! ##################### @@ -227,8 +228,8 @@ END IF ! !* 3. BUDGET CALLS ! ------------ -IF (LBUDGET_TH) CALL BUDGET (PRTHS,4,'2DADV_BU_RTH') -IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),6,'2DADV_BU_RRV') +IF (LBUDGET_TH) CALL BUDGET (PRTHS,NBUDGET_TH,'2DADV_BU_RTH') +IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),NBUDGET_RV,'2DADV_BU_RRV') !---------------------------------------------------------------------------- ! END SUBROUTINE ADV_FORCING_n diff --git a/src/MNH/advecmet.f90 b/src/MNH/advecmet.f90 index 0297798cf2b673b7a3e69eabf973e45f6394cb59..d375b10821f3dbb3ff858719440b70dc1465d4dc 100644 --- a/src/MNH/advecmet.f90 +++ b/src/MNH/advecmet.f90 @@ -1,13 +1,8 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-2019 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- -!--------------- special set of characters for RCS information -!----------------------------------------------------------------- -! $Source$ $Revision$ -! MASDEV4_7 adiab 2006/05/22 19:02:00 -!----------------------------------------------------------------- ! ####################### MODULE MODI_ADVECMET ! ####################### @@ -174,15 +169,15 @@ IKU=SIZE(XZHAT) ! Thermodynamical variable PRTHS(:,:,:) = PRTHS(:,:,:) & -DXF( PRUCT(:,:,:) * MXM (PTHT(:,:,:)) ) -IF (LBUDGET_TH) CALL BUDGET (PRTHS,4,'ADVX_BU_RTH') +IF (LBUDGET_TH) CALL BUDGET (PRTHS,NBUDGET_TH,'ADVX_BU_RTH') ! PRTHS(:,:,:) = PRTHS(:,:,:) & -DYF( PRVCT(:,:,:) * MYM (PTHT(:,:,:)) ) -IF (LBUDGET_TH) CALL BUDGET (PRTHS,4,'ADVY_BU_RTH') +IF (LBUDGET_TH) CALL BUDGET (PRTHS,NBUDGET_TH,'ADVY_BU_RTH') ! PRTHS(:,:,:) = PRTHS(:,:,:) & -DZF(1,IKU,1, PRWCT(:,:,:) * MZM (1,IKU,1,PTHT(:,:,:)) ) -IF (LBUDGET_TH) CALL BUDGET (PRTHS,4,'ADVZ_BU_RTH') +IF (LBUDGET_TH) CALL BUDGET (PRTHS,NBUDGET_TH,'ADVZ_BU_RTH') ! ! Case with KRR moist variables DO JRR=1,KRR @@ -190,53 +185,53 @@ DO JRR=1,KRR -DXF( PRUCT(:,:,:) * MXM (PRT(:,:,:,JRR)) ) END DO ! -IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),6 ,'ADVX_BU_RRV') -IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),7 ,'ADVX_BU_RRC') -IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3),8 ,'ADVX_BU_RRR') -IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),9 ,'ADVX_BU_RRI') -IF (LBUDGET_RS) CALL BUDGET (PRRS(:,:,:,5),10,'ADVX_BU_RRS') -IF (LBUDGET_RG) CALL BUDGET (PRRS(:,:,:,6),11,'ADVX_BU_RRG') -IF (LBUDGET_RH) CALL BUDGET (PRRS(:,:,:,7),12,'ADVX_BU_RRH') +IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),NBUDGET_RV,'ADVX_BU_RRV') +IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),NBUDGET_RC,'ADVX_BU_RRC') +IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3),NBUDGET_RR,'ADVX_BU_RRR') +IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),NBUDGET_RI,'ADVX_BU_RRI') +IF (LBUDGET_RS) CALL BUDGET (PRRS(:,:,:,5),NBUDGET_RS,'ADVX_BU_RRS') +IF (LBUDGET_RG) CALL BUDGET (PRRS(:,:,:,6),NBUDGET_RG,'ADVX_BU_RRG') +IF (LBUDGET_RH) CALL BUDGET (PRRS(:,:,:,7),NBUDGET_RH,'ADVX_BU_RRH') ! DO JRR=1,KRR PRRS(:,:,:,JRR) = PRRS(:,:,:,JRR) & -DYF( PRVCT(:,:,:) * MYM (PRT(:,:,:,JRR)) ) END DO ! -IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),6 ,'ADVY_BU_RRV') -IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),7 ,'ADVY_BU_RRC') -IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3),8 ,'ADVY_BU_RRR') -IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),9 ,'ADVY_BU_RRI') -IF (LBUDGET_RS) CALL BUDGET (PRRS(:,:,:,5),10,'ADVY_BU_RRS') -IF (LBUDGET_RG) CALL BUDGET (PRRS(:,:,:,6),11,'ADVY_BU_RRG') -IF (LBUDGET_RH) CALL BUDGET (PRRS(:,:,:,7),12,'ADVY_BU_RRH') +IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),NBUDGET_RV,'ADVY_BU_RRV') +IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),NBUDGET_RC,'ADVY_BU_RRC') +IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3),NBUDGET_RR,'ADVY_BU_RRR') +IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),NBUDGET_RI,'ADVY_BU_RRI') +IF (LBUDGET_RS) CALL BUDGET (PRRS(:,:,:,5),NBUDGET_RS,'ADVY_BU_RRS') +IF (LBUDGET_RG) CALL BUDGET (PRRS(:,:,:,6),NBUDGET_RG,'ADVY_BU_RRG') +IF (LBUDGET_RH) CALL BUDGET (PRRS(:,:,:,7),NBUDGET_RH,'ADVY_BU_RRH') ! DO JRR=1,KRR PRRS(:,:,:,JRR) = PRRS(:,:,:,JRR) & -DZF(1,IKU,1, PRWCT(:,:,:) * MZM (1,IKU,1,PRT(:,:,:,JRR)) ) END DO ! -IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),6 ,'ADVZ_BU_RRV') -IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),7 ,'ADVZ_BU_RRC') -IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3),8 ,'ADVZ_BU_RRR') -IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),9 ,'ADVZ_BU_RRI') -IF (LBUDGET_RS) CALL BUDGET (PRRS(:,:,:,5),10,'ADVZ_BU_RRS') -IF (LBUDGET_RG) CALL BUDGET (PRRS(:,:,:,6),11,'ADVZ_BU_RRG') -IF (LBUDGET_RH) CALL BUDGET (PRRS(:,:,:,7),12,'ADVZ_BU_RRH') +IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),NBUDGET_RV,'ADVZ_BU_RRV') +IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),NBUDGET_RC,'ADVZ_BU_RRC') +IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3),NBUDGET_RR,'ADVZ_BU_RRR') +IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),NBUDGET_RI,'ADVZ_BU_RRI') +IF (LBUDGET_RS) CALL BUDGET (PRRS(:,:,:,5),NBUDGET_RS,'ADVZ_BU_RRS') +IF (LBUDGET_RG) CALL BUDGET (PRRS(:,:,:,6),NBUDGET_RG,'ADVZ_BU_RRG') +IF (LBUDGET_RH) CALL BUDGET (PRRS(:,:,:,7),NBUDGET_RH,'ADVZ_BU_RRH') ! ! TKE variable IF (SIZE(PTKET,1) /= 0) THEN PRTKES(:,:,:) = PRTKES(:,:,:) & -DXF( PRUCT(:,:,:) * MXM (PTKET(:,:,:)) ) - IF (LBUDGET_TKE) CALL BUDGET (PRTKES,5,'ADVX_BU_RTKE') + IF (LBUDGET_TKE) CALL BUDGET (PRTKES,NBUDGET_TKE,'ADVX_BU_RTKE') ! PRTKES(:,:,:) = PRTKES(:,:,:) & -DYF( PRVCT(:,:,:) * MYM (PTKET(:,:,:)) ) - IF (LBUDGET_TKE) CALL BUDGET (PRTKES,5,'ADVY_BU_RTKE') + IF (LBUDGET_TKE) CALL BUDGET (PRTKES,NBUDGET_TKE,'ADVY_BU_RTKE') ! PRTKES(:,:,:) = PRTKES(:,:,:) & -DZF(1,IKU,1, PRWCT(:,:,:) * MZM (1,IKU,1,PTKET(:,:,:)) ) - IF (LBUDGET_TKE) CALL BUDGET (PRTKES,5,'ADVZ_BU_RTKE') + IF (LBUDGET_TKE) CALL BUDGET (PRTKES,NBUDGET_TKE,'ADVZ_BU_RTKE') END IF ! ! diff --git a/src/MNH/advecmet_4th.f90 b/src/MNH/advecmet_4th.f90 index b708b8cf0c500a9a1709ed7c1815f20b7ba34bb9..61c463f3016bc5aa32b0fe5dc54ee3b08516552e 100644 --- a/src/MNH/advecmet_4th.f90 +++ b/src/MNH/advecmet_4th.f90 @@ -1,13 +1,8 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2005-2019 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- -!--------------- special set of characters for RCS information -!----------------------------------------------------------------- -! $Source$ $Revision$ -! MASDEV4_7 adiab 2006/05/22 19:00:38 -!----------------------------------------------------------------- ! ############################### MODULE MODI_ADVECMET_4TH ! ############################### @@ -237,15 +232,15 @@ IGRID = 1 ! PRTHS(:,:,:) = PRTHS(:,:,:) & -DXF( PRUCT(:,:,:) * ZMEANX(:,:,:) ) -IF (LBUDGET_TH) CALL BUDGET (PRTHS,4,'ADVX_BU_RTH') +IF (LBUDGET_TH) CALL BUDGET (PRTHS,NBUDGET_TH,'ADVX_BU_RTH') ! PRTHS(:,:,:) = PRTHS(:,:,:) & -DYF( PRVCT(:,:,:) * ZMEANY(:,:,:) ) -IF (LBUDGET_TH) CALL BUDGET (PRTHS,4,'ADVY_BU_RTH') +IF (LBUDGET_TH) CALL BUDGET (PRTHS,NBUDGET_TH,'ADVY_BU_RTH') ! PRTHS(:,:,:) = PRTHS(:,:,:) & -DZF(1,IKU,1, PRWCT(:,:,:) * MZM4(PTHT(:,:,:)) ) -IF (LBUDGET_TH) CALL BUDGET (PRTHS,4,'ADVZ_BU_RTH') +IF (LBUDGET_TH) CALL BUDGET (PRTHS,NBUDGET_TH,'ADVZ_BU_RTH') ! ! Turbulence variables ! @@ -260,15 +255,15 @@ IF ( GTKEALLOC ) THEN ! PRTKES(:,:,:) = PRTKES(:,:,:) & -DXF( PRUCT(:,:,:) * ZMEANX(:,:,:) ) - IF (LBUDGET_TKE) CALL BUDGET (PRTKES,5,'ADVX_BU_RTKE') + IF (LBUDGET_TKE) CALL BUDGET (PRTKES,NBUDGET_TKE,'ADVX_BU_RTKE') ! PRTKES(:,:,:) = PRTKES(:,:,:) & -DYF( PRVCT(:,:,:) * ZMEANY(:,:,:) ) - IF (LBUDGET_TKE) CALL BUDGET (PRTKES,5,'ADVY_BU_RTKE') + IF (LBUDGET_TKE) CALL BUDGET (PRTKES,NBUDGET_TKE,'ADVY_BU_RTKE') ! PRTKES(:,:,:) = PRTKES(:,:,:) & -DZF(1,IKU,1, PRWCT(:,:,:) * MZM4(PTKET(:,:,:)) ) - IF (LBUDGET_TKE) CALL BUDGET (PRTKES,5,'ADVZ_BU_RTKE') + IF (LBUDGET_TKE) CALL BUDGET (PRTKES,NBUDGET_TKE,'ADVZ_BU_RTKE') ENDIF ! ! @@ -285,33 +280,33 @@ DO JRR=1, KRR ! PRRS(:,:,:,JRR) = PRRS(:,:,:,JRR) & -DXF( PRUCT(:,:,:) * ZMEANX(:,:,:) ) - IF (JRR==1 .AND. LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),6 ,'ADVX_BU_RRV') - IF (JRR==2 .AND. LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),7 ,'ADVX_BU_RRC') - IF (JRR==3 .AND. LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3),8 ,'ADVX_BU_RRR') - IF (JRR==4 .AND. LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),9 ,'ADVX_BU_RRI') - IF (JRR==5 .AND. LBUDGET_RS) CALL BUDGET (PRRS(:,:,:,5),10,'ADVX_BU_RRS') - IF (JRR==6 .AND. LBUDGET_RG) CALL BUDGET (PRRS(:,:,:,6),11,'ADVX_BU_RRG') - IF (JRR==7 .AND. LBUDGET_RH) CALL BUDGET (PRRS(:,:,:,7),12,'ADVX_BU_RRH') + IF (JRR==1 .AND. LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),NBUDGET_RV,'ADVX_BU_RRV') + IF (JRR==2 .AND. LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),NBUDGET_RC,'ADVX_BU_RRC') + IF (JRR==3 .AND. LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3),NBUDGET_RR,'ADVX_BU_RRR') + IF (JRR==4 .AND. LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),NBUDGET_RI,'ADVX_BU_RRI') + IF (JRR==5 .AND. LBUDGET_RS) CALL BUDGET (PRRS(:,:,:,5),NBUDGET_RS,'ADVX_BU_RRS') + IF (JRR==6 .AND. LBUDGET_RG) CALL BUDGET (PRRS(:,:,:,6),NBUDGET_RG,'ADVX_BU_RRG') + IF (JRR==7 .AND. LBUDGET_RH) CALL BUDGET (PRRS(:,:,:,7),NBUDGET_RH,'ADVX_BU_RRH') ! PRRS(:,:,:,JRR) = PRRS(:,:,:,JRR) & -DYF( PRVCT(:,:,:) * ZMEANY(:,:,:) ) - IF (JRR==1 .AND. LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),6 ,'ADVY_BU_RRV') - IF (JRR==2 .AND. LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),7 ,'ADVY_BU_RRC') - IF (JRR==3 .AND. LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3),8 ,'ADVY_BU_RRR') - IF (JRR==4 .AND. LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),9 ,'ADVY_BU_RRI') - IF (JRR==5 .AND. LBUDGET_RS) CALL BUDGET (PRRS(:,:,:,5),10,'ADVY_BU_RRS') - IF (JRR==6 .AND. LBUDGET_RG) CALL BUDGET (PRRS(:,:,:,6),11,'ADVY_BU_RRG') - IF (JRR==7 .AND. LBUDGET_RH) CALL BUDGET (PRRS(:,:,:,7),12,'ADVY_BU_RRH') + IF (JRR==1 .AND. LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),NBUDGET_RV,'ADVY_BU_RRV') + IF (JRR==2 .AND. LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),NBUDGET_RC,'ADVY_BU_RRC') + IF (JRR==3 .AND. LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3),NBUDGET_RR,'ADVY_BU_RRR') + IF (JRR==4 .AND. LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),NBUDGET_RI,'ADVY_BU_RRI') + IF (JRR==5 .AND. LBUDGET_RS) CALL BUDGET (PRRS(:,:,:,5),NBUDGET_RS,'ADVY_BU_RRS') + IF (JRR==6 .AND. LBUDGET_RG) CALL BUDGET (PRRS(:,:,:,6),NBUDGET_RG,'ADVY_BU_RRG') + IF (JRR==7 .AND. LBUDGET_RH) CALL BUDGET (PRRS(:,:,:,7),NBUDGET_RH,'ADVY_BU_RRH') ! PRRS(:,:,:,JRR) = PRRS(:,:,:,JRR) & -DZF(1,IKU,1, PRWCT(:,:,:) * MZM4(PRT(:,:,:,JRR)) ) - IF (JRR==1 .AND. LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),6 ,'ADVZ_BU_RRV') - IF (JRR==2 .AND. LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),7 ,'ADVZ_BU_RRC') - IF (JRR==3 .AND. LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3),8 ,'ADVZ_BU_RRR') - IF (JRR==4 .AND. LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),9 ,'ADVZ_BU_RRI') - IF (JRR==5 .AND. LBUDGET_RS) CALL BUDGET (PRRS(:,:,:,5),10,'ADVZ_BU_RRS') - IF (JRR==6 .AND. LBUDGET_RG) CALL BUDGET (PRRS(:,:,:,6),11,'ADVZ_BU_RRG') - IF (JRR==7 .AND. LBUDGET_RH) CALL BUDGET (PRRS(:,:,:,7),12,'ADVZ_BU_RRH') + IF (JRR==1 .AND. LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),NBUDGET_RV,'ADVZ_BU_RRV') + IF (JRR==2 .AND. LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),NBUDGET_RC,'ADVZ_BU_RRC') + IF (JRR==3 .AND. LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3),NBUDGET_RR,'ADVZ_BU_RRR') + IF (JRR==4 .AND. LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),NBUDGET_RI,'ADVZ_BU_RRI') + IF (JRR==5 .AND. LBUDGET_RS) CALL BUDGET (PRRS(:,:,:,5),NBUDGET_RS,'ADVZ_BU_RRS') + IF (JRR==6 .AND. LBUDGET_RG) CALL BUDGET (PRRS(:,:,:,6),NBUDGET_RG,'ADVZ_BU_RRG') + IF (JRR==7 .AND. LBUDGET_RH) CALL BUDGET (PRRS(:,:,:,7),NBUDGET_RH,'ADVZ_BU_RRH') ENDDO ! ! diff --git a/src/MNH/advecscalar.f90 b/src/MNH/advecscalar.f90 index 0377dc0dbb963dd4fe64f4ad2f23769a948ed2e2..4fd1e47a47cca9df67bb2c90e22847292a6c0437 100644 --- a/src/MNH/advecscalar.f90 +++ b/src/MNH/advecscalar.f90 @@ -1,13 +1,8 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-2019 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- -!--------------- special set of characters for RCS information -!----------------------------------------------------------------- -! $Source$ $Revision$ -! MASDEV4_7 adiab 2006/05/18 13:07:25 -!----------------------------------------------------------------- ! ####################### MODULE MODI_ADVECSCALAR ! ####################### @@ -146,7 +141,7 @@ DO JSV=1,KSV END DO IF (LBUDGET_SV) THEN DO JSV=1,KSV - CALL BUDGET (PRSVS(:,:,:,JSV),JSV+12,'ADVX_BU_RSV') + CALL BUDGET (PRSVS(:,:,:,JSV),JSV+NBUDGET_SV1-1,'ADVX_BU_RSV') END DO END IF ! @@ -156,7 +151,7 @@ DO JSV=1,KSV END DO IF (LBUDGET_SV) THEN DO JSV=1,KSV - CALL BUDGET (PRSVS(:,:,:,JSV),JSV+12,'ADVY_BU_RSV') + CALL BUDGET (PRSVS(:,:,:,JSV),JSV+NBUDGET_SV1-1,'ADVY_BU_RSV') END DO END IF ! @@ -166,7 +161,7 @@ DO JSV=1,KSV END DO IF (LBUDGET_SV) THEN DO JSV=1,KSV - CALL BUDGET (PRSVS(:,:,:,JSV),JSV+12,'ADVZ_BU_RSV') + CALL BUDGET (PRSVS(:,:,:,JSV),JSV+NBUDGET_SV1-1,'ADVZ_BU_RSV') END DO END IF ! diff --git a/src/MNH/advecscalar_4th.f90 b/src/MNH/advecscalar_4th.f90 index 1cf233594e2f27e4a1c1527b6e65998167c4b1f9..d41632edb4dc38147c2ec8b4df17bd837bb9d0a4 100644 --- a/src/MNH/advecscalar_4th.f90 +++ b/src/MNH/advecscalar_4th.f90 @@ -1,13 +1,8 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2005-2019 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. !----------------------------------------------------------------- -!--------------- special set of characters for RCS information -!----------------------------------------------------------------- -! $Source$ $Revision$ -! MASDEV4_7 adiab 2006/05/18 13:07:25 -!----------------------------------------------------------------- ! ############################### MODULE MODI_ADVECSCALAR_4TH ! ############################### @@ -193,15 +188,15 @@ DO JSV=1,KSV ! PRSVS(:,:,:,JSV) = PRSVS(:,:,:,JSV) & -DXF( PRUCT(:,:,:) * ZMEANX(:,:,:) ) - IF (LBUDGET_SV) CALL BUDGET (PRSVS(:,:,:,JSV),JSV+12,'ADVX_BU_RSV') + IF (LBUDGET_SV) CALL BUDGET (PRSVS(:,:,:,JSV),JSV+NBUDGET_SV1-1,'ADVX_BU_RSV') ! PRSVS(:,:,:,JSV) = PRSVS(:,:,:,JSV) & -DYF( PRVCT(:,:,:) * ZMEANY(:,:,:) ) - IF (LBUDGET_SV) CALL BUDGET (PRSVS(:,:,:,JSV),JSV+12,'ADVY_BU_RSV') + IF (LBUDGET_SV) CALL BUDGET (PRSVS(:,:,:,JSV),JSV+NBUDGET_SV1-1,'ADVY_BU_RSV') ! PRSVS(:,:,:,JSV) = PRSVS(:,:,:,JSV) & -DZF(1,IKU,1, PRWCT(:,:,:) * MZM4(PSVT(:,:,:,JSV)) ) - IF (LBUDGET_SV) CALL BUDGET (PRSVS(:,:,:,JSV),JSV+12,'ADVZ_BU_RSV') + IF (LBUDGET_SV) CALL BUDGET (PRSVS(:,:,:,JSV),JSV+NBUDGET_SV1-1,'ADVZ_BU_RSV') ENDDO ! !------------------------------------------------------------------------------- diff --git a/src/MNH/advection_metsv.f90 b/src/MNH/advection_metsv.f90 index 50717842638c609e788fa79a38cd902dfe26e9bd..082a3851674ada94473f8f85226d77c26f9cb3f0 100644 --- a/src/MNH/advection_metsv.f90 +++ b/src/MNH/advection_metsv.f90 @@ -656,17 +656,17 @@ END IF !* 5. BUDGETS ! ------- ! -IF (LBUDGET_TH) CALL BUDGET (PRTHS,4,'ADV_BU_RTH') -IF (LBUDGET_TKE) CALL BUDGET (PRTKES,5,'ADV_BU_RTKE') -IF (KRR>=1.AND.LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),6,'ADV_BU_RRV') -IF (KRR>=2.AND.LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),7,'ADV_BU_RRC') -IF (KRR>=3.AND.LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3),8,'ADV_BU_RRR') -IF (KRR>=4.AND.LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),9,'ADV_BU_RRI') -IF (KRR>=5.AND.LBUDGET_RS) CALL BUDGET (PRRS(:,:,:,5),10,'ADV_BU_RRS') -IF (KRR>=6.AND.LBUDGET_RG) CALL BUDGET (PRRS(:,:,:,6),11,'ADV_BU_RRG') -IF (KRR>=7.AND.LBUDGET_RH) CALL BUDGET (PRRS(:,:,:,7),12,'ADV_BU_RRH') +IF ( LBUDGET_TH ) CALL BUDGET( PRTHS, NBUDGET_TH, 'ADV_BU_RTH' ) +IF ( LBUDGET_TKE ) CALL BUDGET( PRTKES, NBUDGET_TKE, 'ADV_BU_RTKE' ) +IF ( KRR >= 1 .AND. LBUDGET_RV ) CALL BUDGET( PRRS(:, :, :, 1 ), NBUDGET_RV, 'ADV_BU_RRV' ) +IF ( KRR >= 2 .AND. LBUDGET_RC ) CALL BUDGET( PRRS(:, :, :, 2 ), NBUDGET_RC, 'ADV_BU_RRC' ) +IF ( KRR >= 3 .AND. LBUDGET_RR ) CALL BUDGET( PRRS(:, :, :, 3 ), NBUDGET_RR, 'ADV_BU_RRR' ) +IF ( KRR >= 4 .AND. LBUDGET_RI ) CALL BUDGET( PRRS(:, :, :, 4 ), NBUDGET_RI, 'ADV_BU_RRI' ) +IF ( KRR >= 5 .AND. LBUDGET_RS ) CALL BUDGET( PRRS(:, :, :, 5 ), NBUDGET_RS, 'ADV_BU_RRS' ) +IF ( KRR >= 6 .AND. LBUDGET_RG ) CALL BUDGET( PRRS(:, :, :, 6 ), NBUDGET_RG, 'ADV_BU_RRG' ) +IF ( KRR >= 7 .AND. LBUDGET_RH ) CALL BUDGET( PRRS(:, :, :, 7 ), NBUDGET_RH, 'ADV_BU_RRH' ) DO JSV=1,KSV - IF (LBUDGET_SV) CALL BUDGET (PRSVS(:,:,:,JSV),JSV+12,'ADV_BU_RSV') + IF ( LBUDGET_SV ) CALL BUDGET (PRSVS(:,:,:,JSV), JSV+NBUDGET_SV1-1, 'ADV_BU_RSV' ) END DO ! IF ((HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2')) THEN @@ -691,9 +691,9 @@ IF ((HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2')) THEN END WHERE END DO ! - IF (LBUDGET_TH) CALL BUDGET (PRTHS(:,:,:) , 4,'NEADV_BU_RTH') - IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1), 6,'NEADV_BU_RRV') - IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2), 7,'NEADV_BU_RRC') + IF (LBUDGET_TH) CALL BUDGET (PRTHS(:,:,:) , NBUDGET_TH,'NEADV_BU_RTH') + IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1), NBUDGET_RV,'NEADV_BU_RRV') + IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2), NBUDGET_RC,'NEADV_BU_RRC') END IF diff --git a/src/MNH/advection_uvw.f90 b/src/MNH/advection_uvw.f90 index cce0919352c2fa42d65f7e1e87c7ed5e32a45ca1..54b6db96a69e35b151758818a5b72593f42bf21c 100644 --- a/src/MNH/advection_uvw.f90 +++ b/src/MNH/advection_uvw.f90 @@ -319,9 +319,9 @@ END DO !* 4. BUDGETS ! ------- ! -IF (LBUDGET_U) CALL BUDGET (PRUS,1,'ADV_BU_RU') -IF (LBUDGET_V) CALL BUDGET (PRVS,2,'ADV_BU_RV') -IF (LBUDGET_W) CALL BUDGET (PRWS,3,'ADV_BU_RW') +IF (LBUDGET_U) CALL BUDGET (PRUS,NBUDGET_U,'ADV_BU_RU') +IF (LBUDGET_V) CALL BUDGET (PRVS,NBUDGET_V,'ADV_BU_RV') +IF (LBUDGET_W) CALL BUDGET (PRWS,NBUDGET_W,'ADV_BU_RW') !------------------------------------------------------------------------------- ! END SUBROUTINE ADVECTION_UVW diff --git a/src/MNH/advection_uvw_cen.f90 b/src/MNH/advection_uvw_cen.f90 index e675af5bfbba6f961acb55c8e8c8a01f364d2e28..ea8051c4eedd464ef8d03526eb473ac923541673 100644 --- a/src/MNH/advection_uvw_cen.f90 +++ b/src/MNH/advection_uvw_cen.f90 @@ -248,9 +248,9 @@ PDUM = ZUS(:,:,:) - PUM(:,:,:) PDVM = ZVS(:,:,:) - PVM(:,:,:) PDWM = ZWS(:,:,:) - PWM(:,:,:) ! -IF (LBUDGET_U) CALL BUDGET (PRUS,1,'ADV_BU_RU') -IF (LBUDGET_V) CALL BUDGET (PRVS,2,'ADV_BU_RV') -IF (LBUDGET_W) CALL BUDGET (PRWS,3,'ADV_BU_RW') +IF (LBUDGET_U) CALL BUDGET (PRUS,NBUDGET_U,'ADV_BU_RU') +IF (LBUDGET_V) CALL BUDGET (PRVS,NBUDGET_V,'ADV_BU_RV') +IF (LBUDGET_W) CALL BUDGET (PRWS,NBUDGET_W,'ADV_BU_RW') ! !------------------------------------------------------------------------------- ! diff --git a/src/MNH/advecuvw.f90 b/src/MNH/advecuvw.f90 index d0f32702bebfbc3090a8e438bd0242811be8f712..c0488bbdad9bd278a3677d179b13d15479dadc83 100644 --- a/src/MNH/advecuvw.f90 +++ b/src/MNH/advecuvw.f90 @@ -1,13 +1,8 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-2019 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. !----------------------------------------------------------------- -!--------------- special set of characters for RCS information -!----------------------------------------------------------------- -! $Source$ $Revision$ -! MASDEV4_7 adiab 2006/05/18 13:07:25 -!----------------------------------------------------------------- ! #################### MODULE MODI_ADVECUVW ! #################### @@ -146,41 +141,41 @@ IKU=SIZE(XZHAT) ! PRUS(:,:,:) = PRUS(:,:,:) & -DXM( MXF(PRUCT(:,:,:))*MXF(PUT(:,:,:)) ) -IF (LBUDGET_U) CALL BUDGET (PRUS,1,'ADVX_BU_RU') +IF (LBUDGET_U) CALL BUDGET (PRUS,NBUDGET_U,'ADVX_BU_RU') ! PRUS(:,:,:) = PRUS(:,:,:) & -DYF( MXM(PRVCT(:,:,:))*MYM(PUT(:,:,:)) ) -IF (LBUDGET_U) CALL BUDGET (PRUS,1,'ADVY_BU_RU') +IF (LBUDGET_U) CALL BUDGET (PRUS,NBUDGET_U,'ADVY_BU_RU') ! PRUS(:,:,:) = PRUS(:,:,:) & -DZF(1,IKU,1, MXM(PRWCT(:,:,:))*MZM(1,IKU,1,PUT(:,:,:)) ) -IF (LBUDGET_U) CALL BUDGET (PRUS,1,'ADVZ_BU_RU') +IF (LBUDGET_U) CALL BUDGET (PRUS,NBUDGET_U,'ADVZ_BU_RU') ! ! PRVS(:,:,:) = PRVS(:,:,:) & -DXF( MYM(PRUCT(:,:,:))*MXM(PVT(:,:,:)) ) -IF (LBUDGET_V) CALL BUDGET (PRVS,2,'ADVX_BU_RV') +IF (LBUDGET_V) CALL BUDGET (PRVS,NBUDGET_V,'ADVX_BU_RV') ! PRVS(:,:,:) = PRVS(:,:,:) & -DYM( MYF(PRVCT(:,:,:))*MYF(PVT(:,:,:)) ) -IF (LBUDGET_V) CALL BUDGET (PRVS,2,'ADVY_BU_RV') +IF (LBUDGET_V) CALL BUDGET (PRVS,NBUDGET_V,'ADVY_BU_RV') ! PRVS(:,:,:) = PRVS(:,:,:) & -DZF(1,IKU,1, MYM(PRWCT(:,:,:))*MZM(1,IKU,1,PVT(:,:,:)) ) -IF (LBUDGET_V) CALL BUDGET (PRVS,2,'ADVZ_BU_RV') +IF (LBUDGET_V) CALL BUDGET (PRVS,NBUDGET_V,'ADVZ_BU_RV') ! ! PRWS(:,:,:) = PRWS(:,:,:) & -DXF( MZM(1,IKU,1,PRUCT(:,:,:))*MXM(PWT(:,:,:)) ) -IF (LBUDGET_W) CALL BUDGET (PRWS,3,'ADVX_BU_RW') +IF (LBUDGET_W) CALL BUDGET (PRWS,NBUDGET_W,'ADVX_BU_RW') ! PRWS(:,:,:) = PRWS(:,:,:) & -DYF( MZM(1,IKU,1,PRVCT(:,:,:))*MYM(PWT(:,:,:)) ) -IF (LBUDGET_W) CALL BUDGET (PRWS,3,'ADVY_BU_RW') +IF (LBUDGET_W) CALL BUDGET (PRWS,NBUDGET_W,'ADVY_BU_RW') ! PRWS(:,:,:) = PRWS(:,:,:) & -DZM(1,IKU,1, MZF(1,IKU,1,PRWCT(:,:,:))*MZF(1,IKU,1,PWT(:,:,:)) ) -IF (LBUDGET_W) CALL BUDGET (PRWS,3,'ADVZ_BU_RW') +IF (LBUDGET_W) CALL BUDGET (PRWS,NBUDGET_W,'ADVZ_BU_RW') ! !------------------------------------------------------------------------------- ! diff --git a/src/MNH/aircraft_balloon.f90 b/src/MNH/aircraft_balloon.f90 index fa1872b0a346dd3074eda9702937146475b5c50e..5e48b0481a0bdb7d3aea970c82dd1e593c45cde3 100644 --- a/src/MNH/aircraft_balloon.f90 +++ b/src/MNH/aircraft_balloon.f90 @@ -10,18 +10,12 @@ MODULE MODI_AIRCRAFT_BALLOON INTERFACE ! SUBROUTINE AIRCRAFT_BALLOON(PTSTEP, & - TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, & PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, & PTS, PRHODREF, PCIT, PSEA) ! -USE MODD_TYPE_DATE REAL, INTENT(IN) :: PTSTEP ! time step -TYPE(DATE_TIME), INTENT(IN) :: TPDTEXP! experiment date and time -TYPE(DATE_TIME), INTENT(IN) :: TPDTMOD! model start date and time -TYPE(DATE_TIME), INTENT(IN) :: TPDTSEG! segment date and time -TYPE(DATE_TIME), INTENT(IN) :: TPDTCUR! current date and time REAL, DIMENSION(:), INTENT(IN) :: PXHAT ! x coordinate REAL, DIMENSION(:), INTENT(IN) :: PYHAT ! y coordinate REAL, DIMENSION(:,:,:), INTENT(IN) :: PZ ! z @@ -53,7 +47,6 @@ END MODULE MODI_AIRCRAFT_BALLOON ! ! ################################################################### SUBROUTINE AIRCRAFT_BALLOON(PTSTEP, & - TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, & PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, & @@ -90,8 +83,9 @@ END MODULE MODI_AIRCRAFT_BALLOON !! Original 15/05/2000 !! !! March, 2008 (P.Lacarrere) Add 3D fluxes -!! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O -!! -------------------------------------------------------------------------- +! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O +! P. Wautelet 13/09/2019: budget: simplify and modernize date/time management +! -------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ @@ -111,10 +105,6 @@ IMPLICIT NONE ! ! REAL, INTENT(IN) :: PTSTEP ! time step -TYPE(DATE_TIME), INTENT(IN) :: TPDTEXP! experiment date and time -TYPE(DATE_TIME), INTENT(IN) :: TPDTMOD! model start date and time -TYPE(DATE_TIME), INTENT(IN) :: TPDTSEG! segment date and time -TYPE(DATE_TIME), INTENT(IN) :: TPDTCUR! current date and time REAL, DIMENSION(:), INTENT(IN) :: PXHAT ! x coordinate REAL, DIMENSION(:), INTENT(IN) :: PYHAT ! y coordinate REAL, DIMENSION(:,:,:), INTENT(IN) :: PZ ! z array @@ -148,237 +138,198 @@ IF(.NOT. ALLOCATED(XSVW_FLUX)) & ALLOCATE(XSVW_FLUX(SIZE(PSV,1),SIZE(PSV,2),SIZE(PSV,3),SIZE(PSV,4))) ! IF (TBALLOON1%NMODEL /= 0) THEN -CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & - PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & +CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & TBALLOON1, PSEA ) ENDIF IF (TBALLOON2%NMODEL /= 0) THEN -CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & - PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & +CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & TBALLOON2, PSEA ) ENDIF IF (TBALLOON3%NMODEL /= 0) THEN -CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & - PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & +CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & TBALLOON3, PSEA ) ENDIF IF (TBALLOON4%NMODEL /= 0) THEN -CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & - PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & +CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & TBALLOON4, PSEA ) ENDIF IF (TBALLOON5%NMODEL /= 0) THEN -CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & - PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & +CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & TBALLOON5, PSEA ) ENDIF IF (TBALLOON6%NMODEL /= 0) THEN -CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & - PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & +CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & TBALLOON6, PSEA ) ENDIF IF (TBALLOON7%NMODEL /= 0) THEN -CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & - PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & +CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & TBALLOON7, PSEA ) ENDIF IF (TBALLOON8%NMODEL /= 0) THEN -CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & - PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & +CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & TBALLOON8, PSEA ) ENDIF IF (TBALLOON9%NMODEL /= 0) THEN -CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & - PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & +CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & TBALLOON9, PSEA ) ENDIF ! IF (TAIRCRAFT1%NMODEL /= 0) THEN -CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & - PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & +CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & TAIRCRAFT1, PSEA ) ENDIF IF (TAIRCRAFT2%NMODEL /= 0) THEN -CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & - PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & +CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & TAIRCRAFT2, PSEA ) ENDIF IF (TAIRCRAFT3%NMODEL /= 0) THEN -CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & - PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & +CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & TAIRCRAFT3, PSEA ) ENDIF IF (TAIRCRAFT4%NMODEL /= 0) THEN -CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & - PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & +CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & TAIRCRAFT4, PSEA ) ENDIF IF (TAIRCRAFT5%NMODEL /= 0) THEN -CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & - PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & +CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & TAIRCRAFT5, PSEA ) ENDIF IF (TAIRCRAFT6%NMODEL /= 0) THEN -CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & - PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & +CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & TAIRCRAFT6, PSEA ) ENDIF IF (TAIRCRAFT7%NMODEL /= 0) THEN -CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & - PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & +CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & TAIRCRAFT7, PSEA ) ENDIF IF (TAIRCRAFT8%NMODEL /= 0) THEN -CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & - PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & +CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & TAIRCRAFT8, PSEA ) ENDIF IF (TAIRCRAFT9%NMODEL /= 0) THEN -CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & - PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & +CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & TAIRCRAFT9, PSEA ) ENDIF IF (TAIRCRAFT10%NMODEL /= 0) THEN -CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & - PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & +CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & TAIRCRAFT10, PSEA ) ENDIF IF (TAIRCRAFT11%NMODEL /= 0) THEN -CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & - PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & +CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & TAIRCRAFT11, PSEA ) ENDIF IF (TAIRCRAFT12%NMODEL /= 0) THEN -CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & - PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & +CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & TAIRCRAFT12, PSEA ) ENDIF IF (TAIRCRAFT13%NMODEL /= 0) THEN -CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & - PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & +CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & TAIRCRAFT13, PSEA ) ENDIF IF (TAIRCRAFT14%NMODEL /= 0) THEN -CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & - PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & +CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & TAIRCRAFT14, PSEA ) ENDIF IF (TAIRCRAFT15%NMODEL /= 0) THEN -CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & - PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & +CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & TAIRCRAFT15, PSEA ) ENDIF IF (TAIRCRAFT16%NMODEL /= 0) THEN -CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & - PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & +CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & TAIRCRAFT16, PSEA ) ENDIF IF (TAIRCRAFT17%NMODEL /= 0) THEN -CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & - PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & +CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & TAIRCRAFT17, PSEA ) ENDIF IF (TAIRCRAFT18%NMODEL /= 0) THEN -CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & - PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & +CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & TAIRCRAFT18, PSEA ) ENDIF IF (TAIRCRAFT19%NMODEL /= 0) THEN -CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & - PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & +CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & TAIRCRAFT19, PSEA ) ENDIF IF (TAIRCRAFT20%NMODEL /= 0) THEN -CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & - PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & +CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & TAIRCRAFT20, PSEA ) ENDIF IF (TAIRCRAFT21%NMODEL /= 0) THEN -CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & - PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & +CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & TAIRCRAFT21, PSEA ) ENDIF IF (TAIRCRAFT22%NMODEL /= 0) THEN -CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & - PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & +CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & TAIRCRAFT22, PSEA ) ENDIF IF (TAIRCRAFT23%NMODEL /= 0) THEN -CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & - PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & +CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & TAIRCRAFT23, PSEA ) ENDIF IF (TAIRCRAFT24%NMODEL /= 0) THEN -CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & - PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & +CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & TAIRCRAFT24, PSEA ) ENDIF IF (TAIRCRAFT25%NMODEL /= 0) THEN -CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & - PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & +CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & TAIRCRAFT25, PSEA ) ENDIF IF (TAIRCRAFT26%NMODEL /= 0) THEN -CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & - PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & +CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & TAIRCRAFT26, PSEA ) ENDIF IF (TAIRCRAFT27%NMODEL /= 0) THEN -CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & - PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & +CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & TAIRCRAFT27, PSEA ) ENDIF IF (TAIRCRAFT28%NMODEL /= 0) THEN -CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & - PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & +CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & TAIRCRAFT28, PSEA ) ENDIF IF (TAIRCRAFT29%NMODEL /= 0) THEN -CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & - PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & +CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & TAIRCRAFT29, PSEA ) ENDIF IF (TAIRCRAFT30%NMODEL /= 0) THEN -CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & - PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & +CALL AIRCRAFT_BALLOON_EVOL(PTSTEP, PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & TAIRCRAFT30, PSEA ) ENDIF diff --git a/src/MNH/aircraft_balloon_evol.f90 b/src/MNH/aircraft_balloon_evol.f90 index 12f4f595d6cf394d7379a31fabbf68d723013dba..73d2b129408c2d538b723562c6c9271e6283afc7 100644 --- a/src/MNH/aircraft_balloon_evol.f90 +++ b/src/MNH/aircraft_balloon_evol.f90 @@ -10,20 +10,14 @@ MODULE MODI_AIRCRAFT_BALLOON_EVOL INTERFACE ! SUBROUTINE AIRCRAFT_BALLOON_EVOL(PTSTEP, & - TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, & PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, & PTS, PRHODREF, PCIT,TPFLYER, PSEA ) ! -USE MODD_TYPE_DATE USE MODD_AIRCRAFT_BALLOON ! REAL, INTENT(IN) :: PTSTEP ! time step -TYPE(DATE_TIME), INTENT(IN) :: TPDTEXP! experiment date and time -TYPE(DATE_TIME), INTENT(IN) :: TPDTMOD! model start date and time -TYPE(DATE_TIME), INTENT(IN) :: TPDTSEG! segment date and time -TYPE(DATE_TIME), INTENT(IN) :: TPDTCUR! current date and time REAL, DIMENSION(:), INTENT(IN) :: PXHAT ! x coordinate REAL, DIMENSION(:), INTENT(IN) :: PYHAT ! y coordinate REAL, DIMENSION(:,:,:), INTENT(IN) :: PZ ! z array @@ -55,7 +49,6 @@ END MODULE MODI_AIRCRAFT_BALLOON_EVOL ! ! ######################################################## SUBROUTINE AIRCRAFT_BALLOON_EVOL(PTSTEP, & - TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, & PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, & @@ -128,7 +121,8 @@ END MODULE MODI_AIRCRAFT_BALLOON_EVOL !! October, 2016 (G.DELAUTIER) LIMA !! March,28, 2018 (P. Wautelet) replace TEMPORAL_DIST by DATETIME_DISTANCE !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O -!! +! P. Wautelet 13/09/2019: budget: simplify and modernize date/time management +! !! -------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -167,9 +161,9 @@ USE MODD_RAIN_ICE_DESCR, ONLY: XALPHAR_I=>XALPHAR,XNUR_I=>XNUR,XLBEXR_I=>XLBEX XLBI_I=>XLBI,XAI_I=>XAI,XBI_I=>XBI,XC_I_I=>XC_I,& XRTMIN_I=>XRTMIN,XCONC_LAND,XCONC_SEA USE MODD_REF_n, ONLY: XRHODREF -USE MODD_TIME +USE MODD_TIME, only: tdtexp +USE MODD_TIME_n, only: tdtcur USE MODD_TURB_FLUX_AIRCRAFT_BALLOON -USE MODD_TYPE_DATE ! USE MODE_DATETIME USE MODE_FGAU, ONLY: GAULAG @@ -188,10 +182,6 @@ IMPLICIT NONE ! ! REAL, INTENT(IN) :: PTSTEP ! time step -TYPE(DATE_TIME), INTENT(IN) :: TPDTEXP! experiment date and time -TYPE(DATE_TIME), INTENT(IN) :: TPDTMOD! model start date and time -TYPE(DATE_TIME), INTENT(IN) :: TPDTSEG! segment date and time -TYPE(DATE_TIME), INTENT(IN) :: TPDTCUR! current date and time REAL, DIMENSION(:), INTENT(IN) :: PXHAT ! x coordinate REAL, DIMENSION(:), INTENT(IN) :: PYHAT ! y coordinate REAL, DIMENSION(:,:,:), INTENT(IN) :: PZ ! z array @@ -220,7 +210,6 @@ REAL, DIMENSION(:,:), INTENT(IN) :: PSEA ! INTEGER :: IMI ! model index REAL :: ZTHIS_PROC ! 1 if balloon is currently treated by this proc., else 0 -REAL :: ZTIMEEXP ! elpased time between start of experiment and segment ! INTEGER :: IIB ! current processor domain sizes INTEGER :: IJB @@ -398,7 +387,7 @@ ZYHATM( IJU )=1.5*PYHAT( IJU )-0.5*PYHAT( IJU-1) !* 2.3 Compute time until launch by comparison of dates and times ! ---------------------------------------------------------- ! -CALL DATETIME_DISTANCE(TPFLYER%LAUNCH,TPDTCUR,ZTDIST) +CALL DATETIME_DISTANCE(TPFLYER%LAUNCH,TDTCUR,ZTDIST) ! !* 3. LAUNCH ! ------ @@ -412,7 +401,7 @@ IF (.NOT. TPFLYER%FLY) THEN !* 3.1 comparison of dates and times ! ----------------------------- ! -! CALL DATETIME_DISTANCE(TPFLYER%LAUNCH,TPDTCUR,ZTDIST) +! CALL DATETIME_DISTANCE(TPFLYER%LAUNCH,TDTCUR,ZTDIST) ! !* 3.2 launch/takeoff is effective ! --------------------------- @@ -446,8 +435,8 @@ IF (.NOT. TPFLYER%FLY) THEN IF (ZTDIST <= PTSTEP ) THEN WRITE(ILUOUT,*) '-------------------------------------------------------------------' WRITE(ILUOUT,*) 'Aircraft ',TPFLYER%TITLE,' takes off the ', & - TPDTCUR%TDATE%DAY,'/',TPDTCUR%TDATE%MONTH,'/', & - TPDTCUR%TDATE%YEAR,' at ',NINT(TPDTCUR%TIME),' sec.' + TDTCUR%TDATE%DAY,'/',TDTCUR%TDATE%MONTH,'/', & + TDTCUR%TDATE%YEAR,' at ',NINT(TDTCUR%TIME),' sec.' WRITE(ILUOUT,*) '-------------------------------------------------------------------' ENDIF ENDIF @@ -456,8 +445,8 @@ IF (.NOT. TPFLYER%FLY) THEN GLAUNCH = .TRUE. WRITE(ILUOUT,*) '-------------------------------------------------------------------' WRITE(ILUOUT,*) 'Balloon ',TPFLYER%TITLE,' is launched the ', & - TPDTCUR%TDATE%DAY,'/',TPDTCUR%TDATE%MONTH,'/', & - TPDTCUR%TDATE%YEAR,' at ',NINT(TPDTCUR%TIME),' sec.' + TDTCUR%TDATE%DAY,'/',TDTCUR%TDATE%MONTH,'/', & + TDTCUR%TDATE%YEAR,' at ',NINT(TDTCUR%TIME),' sec.' WRITE(ILUOUT,*) '-------------------------------------------------------------------' END IF ! @@ -502,25 +491,14 @@ END IF ! IF (GSTORE) THEN IN = TPFLYER%N_CUR - CALL DATETIME_DISTANCE(TDTEXP,TDTSEG,ZTIMEEXP) - ! - TPFLYER%TIME(IN) = (IN-1) * TPFLYER%STEP + ZTIMEEXP - TPFLYER%DATIME( 1,IN) = TPDTEXP%TDATE%YEAR - TPFLYER%DATIME( 2,IN) = TPDTEXP%TDATE%MONTH - TPFLYER%DATIME( 3,IN) = TPDTEXP%TDATE%DAY - TPFLYER%DATIME( 4,IN) = TPDTEXP%TIME - TPFLYER%DATIME( 5,IN) = TPDTSEG%TDATE%YEAR - TPFLYER%DATIME( 6,IN) = TPDTSEG%TDATE%MONTH - TPFLYER%DATIME( 7,IN) = TPDTSEG%TDATE%DAY - TPFLYER%DATIME( 8,IN) = TPDTSEG%TIME - TPFLYER%DATIME( 9,IN) = TPDTMOD%TDATE%YEAR - TPFLYER%DATIME(10,IN) = TPDTMOD%TDATE%MONTH - TPFLYER%DATIME(11,IN) = TPDTMOD%TDATE%DAY - TPFLYER%DATIME(12,IN) = TPDTMOD%TIME - TPFLYER%DATIME(13,IN) = TPDTCUR%TDATE%YEAR - TPFLYER%DATIME(14,IN) = TPDTCUR%TDATE%MONTH - TPFLYER%DATIME(15,IN) = TPDTCUR%TDATE%DAY - TPFLYER%DATIME(16,IN) = TPDTCUR%TIME +#if 0 + tpflyer%tpdates(in)%date%year = tdtexp%date%year + tpflyer%tpdates(in)%date%month = tdtexp%date%month + tpflyer%tpdates(in)%date%day = tdtexp%date%day + tpflyer%tpdates(in)%time = tdtexp%time + ( in - 1 ) * tpflyer%step +#else + tpflyer%tpdates(in) = tdtcur +#endif END IF ! IF ( TPFLYER%FLY) THEN @@ -829,19 +807,19 @@ IF ( TPFLYER%FLY) THEN TPFLYER%FLY = .FALSE. IF (TPFLYER%TYPE=='AIRCRA' .AND. .NOT. GLAUNCH ) THEN WRITE(ILUOUT,*) 'Aircraft ',TPFLYER%TITLE,' flew out of the domain the ', & - TPDTCUR%TDATE%DAY,'/',TPDTCUR%TDATE%MONTH,'/', & - TPDTCUR%TDATE%YEAR,' at ',TPDTCUR%TIME,' sec.' + TDTCUR%TDATE%DAY,'/',TDTCUR%TDATE%MONTH,'/', & + TDTCUR%TDATE%YEAR,' at ',TDTCUR%TIME,' sec.' ELSE IF (TPFLYER%TYPE /= 'AIRCRA') THEN WRITE(ILUOUT,*) 'Balloon ',TPFLYER%TITLE,' crashed the ', & - TPDTCUR%TDATE%DAY,'/',TPDTCUR%TDATE%MONTH,'/', & - TPDTCUR%TDATE%YEAR,' at ',TPDTCUR%TIME,' sec.' + TDTCUR%TDATE%DAY,'/',TDTCUR%TDATE%MONTH,'/', & + TDTCUR%TDATE%YEAR,' at ',TDTCUR%TIME,' sec.' END IF ELSE IF (TPFLYER%TYPE=='AIRCRA' .AND. .NOT. GLAUNCH .AND. ZTDIST > PTSTEP ) THEN WRITE(ILUOUT,*) '-------------------------------------------------------------------' WRITE(ILUOUT,*) 'Aircraft ',TPFLYER%TITLE,' flies in leg',TPFLYER%SEGCURN ,' the ', & - TPDTCUR%TDATE%DAY,'/',TPDTCUR%TDATE%MONTH,'/', & - TPDTCUR%TDATE%YEAR,' at ',NINT(TPDTCUR%TIME),' sec.' + TDTCUR%TDATE%DAY,'/',TDTCUR%TDATE%MONTH,'/', & + TDTCUR%TDATE%YEAR,' at ',NINT(TDTCUR%TIME),' sec.' WRITE(ILUOUT,*) '-------------------------------------------------------------------' ENDIF ! @@ -1708,12 +1686,12 @@ IF (TPFLYER%NMODEL /= IMODEL) THEN IF (NDAD(IMODEL) == TPFLYER%NMODEL) THEN WRITE(ILUOUT,*) '-------------------------------------------------------------------' WRITE(ILUOUT,*) TPFLYER%TITLE,' comes from model ',IMODEL,' in model ',& - TPFLYER%NMODEL,' at ',NINT(TPDTCUR%TIME),' sec.' + TPFLYER%NMODEL,' at ',NINT(TDTCUR%TIME),' sec.' WRITE(ILUOUT,*) '-------------------------------------------------------------------' ELSE WRITE(ILUOUT,*) '-------------------------------------------------------------------' WRITE(ILUOUT,*) TPFLYER%TITLE,' goes from model ',IMODEL,' to model ',& - TPFLYER%NMODEL,' at ',NINT(TPDTCUR%TIME),' sec.' + TPFLYER%NMODEL,' at ',NINT(TDTCUR%TIME),' sec.' WRITE(ILUOUT,*) '-------------------------------------------------------------------' ENDIF ENDIF diff --git a/src/MNH/c2r2_adjust.f90 b/src/MNH/c2r2_adjust.f90 index 265452f1681cfa2797ae482ccd843fc3ce233e4b..ebbdb572f619806fb953f9e65161d021251fb61b 100644 --- a/src/MNH/c2r2_adjust.f90 +++ b/src/MNH/c2r2_adjust.f90 @@ -420,12 +420,12 @@ END IF ! ---------------------- ! ! -IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:) * PRHODJ(:,:,:),6,'COND_BU_RRV') -IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:) * PRHODJ(:,:,:),7,'COND_BU_RRC') -IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:) * PRHODJ(:,:,:),4,'COND_BU_RTH') +IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:) * PRHODJ(:,:,:),NBUDGET_RV,'COND_BU_RRV') +IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:) * PRHODJ(:,:,:),NBUDGET_RC,'COND_BU_RRC') +IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:) * PRHODJ(:,:,:),NBUDGET_TH,'COND_BU_RTH') IF (LBUDGET_SV) THEN - CALL BUDGET (PCNUCS(:,:,:) * PRHODJ(:,:,:),13+(NSV_C2R2BEG-1),'CEVA_BU_RSV') ! RCN - CALL BUDGET (PCCS(:,:,:) * PRHODJ(:,:,:),14+(NSV_C2R2BEG-1),'CEVA_BU_RSV') ! RCC + CALL BUDGET (PCNUCS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1+(NSV_C2R2BEG-1), 'CEVA_BU_RSV') ! RCN + CALL BUDGET (PCCS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1+(NSV_C2R2BEG-1)+1,'CEVA_BU_RSV') ! RCC END IF ! !------------------------------------------------------------------------------ diff --git a/src/MNH/ch_monitorn.f90 b/src/MNH/ch_monitorn.f90 index 30ea347667318cda050a7dd246ab9396b5635e95..b81da5894992fa6cb6dc9f89b007cdc3a8dcad76 100644 --- a/src/MNH/ch_monitorn.f90 +++ b/src/MNH/ch_monitorn.f90 @@ -1278,7 +1278,7 @@ END DO ! IF (LBUDGET_SV) THEN DO JSV=NSV_CHEMBEG,NSV_CHEMEND - CALL BUDGET(XRSVS(:,:,:,JSV),JSV+12,'CHEM_BU_RSV') + CALL BUDGET(XRSVS(:,:,:,JSV),NBUDGET_SV1-1+JSV,'CHEM_BU_RSV') ENDDO ENDIF ! diff --git a/src/MNH/diag.f90 b/src/MNH/diag.f90 index b68caaebd148f084c2a225f44541877342802d92..af19ea567260d44334e32e912252980f5018ed86 100644 --- a/src/MNH/diag.f90 +++ b/src/MNH/diag.f90 @@ -92,6 +92,7 @@ ! P. Wautelet 11/02/2019: added missing use of MODI_CH_MONITOR_n ! P. Wautelet 28/03/2019: use MNHTIME for time measurement variables ! P. Wautelet 26/07/2019: bug correction: deallocate of zsea and ztown done too early +! P. Wautelet 13/09/2019: budget: simplify and modernize date/time management !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -177,6 +178,7 @@ IMPLICIT NONE !* 0.1 declarations of local variables ! TYPE(DATE_TIME) :: TXDTBAL ! current time and date for BALLOON and AIRCRAFT trajectories +TYPE(DATE_TIME) :: TPDTCUR_SAVE CHARACTER (LEN=28), DIMENSION(1) :: YINIFILE ! names of the INPUT FM-file CHARACTER (LEN=28), DIMENSION(1) :: YINIFILEPGD ! names of the INPUT FM-file CHARACTER (LEN=5) :: YSUFFIX ! character string for the OUTPUT FM-file number @@ -532,12 +534,15 @@ IF ( LAIRCRAFT_BALLOON ) THEN WRITE(ILUOUT0,*) ' ' WRITE(ILUOUT0,*) 'DIAG AFTER OPEN DIACHRONIC FILE' WRITE(ILUOUT0,*) ' ' +! + TPDTCUR_SAVE = TDTCUR ! TXDTBAL%TDATE%YEAR = TDTCUR%TDATE%YEAR TXDTBAL%TDATE%MONTH = TDTCUR%TDATE%MONTH TXDTBAL%TDATE%DAY = TDTCUR%TDATE%DAY TXDTBAL%TIME = TDTCUR%TIME - NTIME_AIRCRAFT_BALLOON/2. CALL DATETIME_CORRECTDATE(TXDTBAL) + TDTCUR = TXDTBAL !TDTCUR is used in AIRCRAFT_BALLOON ! ALLOCATE (ZSEA(SIZE(XRHODJ,1),SIZE(XRHODJ,2))) ALLOCATE (ZTOWN(SIZE(XRHODJ,1),SIZE(XRHODJ,2))) @@ -546,15 +551,18 @@ IF ( LAIRCRAFT_BALLOON ) THEN CALL MNHGET_SURF_PARAM_n (PSEA=ZSEA(:,:),PTOWN=ZTOWN(:,:)) DO ISTEPBAL=1,NTIME_AIRCRAFT_BALLOON,INT(XSTEP_AIRCRAFT_BALLOON) CALL AIRCRAFT_BALLOON(XSTEP_AIRCRAFT_BALLOON, & - TDTEXP, TDTMOD, TDTCUR, TXDTBAL, & XXHAT, XYHAT, XZZ, XMAP, XLONORI, XLATORI, & XUT, XVT, XWT, XPABST, XTHT, XRT, XSVT, & XTKET, XTSRAD, XRHODREF,XCIT,ZSEA) -! + TXDTBAL%TIME=TXDTBAL%TIME + XSTEP_AIRCRAFT_BALLOON CALL DATETIME_CORRECTDATE(TXDTBAL) + TDTCUR = TXDTBAL !TDTCUR is used in AIRCRAFT_BALLOON ENDDO DEALLOCATE (ZSEA,ZTOWN) +! + TDTCUR = TPDTCUR_SAVE +! CALL IO_Header_write(TZDIACFILE) CALL WRITE_LFIFMN_FORDIACHRO_n(TZDIACFILE) CALL WRITE_AIRCRAFT_BALLOON(TZDIACFILE) diff --git a/src/MNH/drag_veg.f90 b/src/MNH/drag_veg.f90 index ce157a15406a436c180f33162b87687868ab56a1..e8ece294e53cd20d217487affc1577c08c5f2d51 100644 --- a/src/MNH/drag_veg.f90 +++ b/src/MNH/drag_veg.f90 @@ -1,7 +1,8 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2009-2019 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. +!----------------------------------------------------------------- ! ####################### MODULE MODI_DRAG_VEG ! ####################### @@ -270,10 +271,10 @@ IF (ODEPOTREE) THEN ! END IF ! -IF (LBUDGET_U) CALL BUDGET (PRUS,1,'DRAG_BU_RU') -IF (LBUDGET_V) CALL BUDGET (PRVS,2,'DRAG_BU_RV') -IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),7,'DEPOTR_BU_RRC') -IF (LBUDGET_SV) CALL BUDGET (PSVS(:,:,:,NSV_C2R2BEG+1),14+(NSV_C2R2BEG-1),'DEPOTR_BU_RSV') +IF (LBUDGET_U) CALL BUDGET (PRUS,NBUDGET_U,'DRAG_BU_RU') +IF (LBUDGET_V) CALL BUDGET (PRVS,NBUDGET_V,'DRAG_BU_RV') +IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),NBUDGET_RC,'DEPOTR_BU_RRC') +IF (LBUDGET_SV) CALL BUDGET (PSVS(:,:,:,NSV_C2R2BEG+1),NBUDGET_SV1+(NSV_C2R2BEG-1)+1,'DEPOTR_BU_RSV') ! ! !* 3. Computations of TKE tendency due to canopy drag @@ -300,6 +301,6 @@ ZTKES(:,:,:)= (ZTKET(:,:,:) + (ZCDRAG(:,:,:)* ZDENSITY(:,:,:) & ! PRTKES(:,:,:)=PRTKES(:,:,:)+((ZTKES(:,:,:)-ZTKET(:,:,:))*PRHODJ(:,:,:)/PTSTEP) ! -IF (LBUDGET_TKE) CALL BUDGET (PRTKES(:,:,:),5,'DRAG_BU_RTKE') +IF (LBUDGET_TKE) CALL BUDGET (PRTKES(:,:,:),NBUDGET_TKE,'DRAG_BU_RTKE') ! END SUBROUTINE DRAG_VEG diff --git a/src/MNH/dyn_sources.f90 b/src/MNH/dyn_sources.f90 index 5bdb5483a3334671dea952eafc5b626efe5a7406..56c6a20103c3d41ded09dceadeac0530cbc05dcb 100644 --- a/src/MNH/dyn_sources.f90 +++ b/src/MNH/dyn_sources.f90 @@ -1,12 +1,8 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-2019 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- -!--------------- special set of characters for RCS information -!----------------------------------------------------------------- -! $Source$ $Revision$ -!----------------------------------------------------------------- ! ####################### MODULE MODI_DYN_SOURCES ! ####################### @@ -267,9 +263,9 @@ IF ((.NOT.L1D).AND.(.NOT.LCARTESIAN) ) THEN ! END IF ! -IF (LBUDGET_U) CALL BUDGET (PRUS,1,'CURV_BU_RU') -IF (LBUDGET_V) CALL BUDGET (PRVS,2,'CURV_BU_RV') -IF (LBUDGET_W) CALL BUDGET (PRWS,3,'CURV_BU_RW') +IF (LBUDGET_U) CALL BUDGET (PRUS,NBUDGET_U,'CURV_BU_RU') +IF (LBUDGET_V) CALL BUDGET (PRVS,NBUDGET_V,'CURV_BU_RV') +IF (LBUDGET_W) CALL BUDGET (PRWS,NBUDGET_W,'CURV_BU_RW') ! !------------------------------------------------------------------------------- ! @@ -298,9 +294,9 @@ IF (LCORIO) THEN ! END IF ! -IF (LBUDGET_U) CALL BUDGET (PRUS,1,'COR_BU_RU') -IF (LBUDGET_V) CALL BUDGET (PRVS,2,'COR_BU_RV') -IF (LBUDGET_W) CALL BUDGET (PRWS,3,'COR_BU_RW') +IF (LBUDGET_U) CALL BUDGET (PRUS,NBUDGET_U,'COR_BU_RU') +IF (LBUDGET_V) CALL BUDGET (PRVS,NBUDGET_V,'COR_BU_RV') +IF (LBUDGET_W) CALL BUDGET (PRWS,NBUDGET_W,'COR_BU_RW') ! !------------------------------------------------------------------------------- ! @@ -339,7 +335,7 @@ IF( .NOT.L1D ) THEN ! END IF ! - IF (LBUDGET_TH) CALL BUDGET (PRTHS,4,'PREF_BU_RTH') + IF (LBUDGET_TH) CALL BUDGET (PRTHS,NBUDGET_TH,'PREF_BU_RTH') ! END IF ! diff --git a/src/MNH/endstep.f90 b/src/MNH/endstep.f90 index f5b1244bfb2cb2c1b97ffbbab9e7a00a34cadab6..d29f434ea2b462e177d6e88e5d8d17573367d525 100644 --- a/src/MNH/endstep.f90 +++ b/src/MNH/endstep.f90 @@ -514,8 +514,8 @@ END IF !* 10. STORAGE IN BUDGET ARRAYS ! IF (LBU_ENABLE) THEN - NBUPROCCTR(1:12+KSV)=3 - NBUCTR_ACTV(1:12+KSV)=3 + NBUPROCCTR (1 : NBUDGET_SV1 - 1 + KSV ) = 3 + NBUCTR_ACTV(1 : NBUDGET_SV1 - 1 + KSV ) = 3 ! IF (LBUDGET_U) CALL BUDGET( PUT(:,:,:) * PRHODJ(:,:,:) / PTSTEP, NBUDGET_U, 'AVEF_BU_RU' ) IF (LBUDGET_V) CALL BUDGET( PVT(:,:,:) * PRHODJ(:,:,:) / PTSTEP, NBUDGET_V, 'AVEF_BU_RV' ) @@ -535,8 +535,8 @@ IF (LBU_ENABLE) THEN END DO END IF ! - NBUPROCCTR(1:12+KSV)=2 - NBUCTR_ACTV(1:12+KSV)=2 + NBUPROCCTR (1 : NBUDGET_SV1 - 1 + KSV ) = 2 + NBUCTR_ACTV(1 : NBUDGET_SV1 - 1 + KSV ) = 2 ! IF (LBUDGET_U) CALL BUDGET( PUS * MXM(PRHODJ) / PTSTEP, NBUDGET_U, 'ENDF_BU_RU' ) IF (LBUDGET_V) CALL BUDGET( PVS * MYM(PRHODJ) / PTSTEP, NBUDGET_V, 'ENDF_BU_RV' ) diff --git a/src/MNH/endstep_budget.f90 b/src/MNH/endstep_budget.f90 index d6c619db4af46d775e511a1dfed82a7cf4909d42..8018b390edf7fec0cfdbcc522470b82d04f7fbfa 100644 --- a/src/MNH/endstep_budget.f90 +++ b/src/MNH/endstep_budget.f90 @@ -10,7 +10,7 @@ INTERFACE ! SUBROUTINE ENDSTEP_BUDGET(TPDIAFILE,KTCOUNT, & - TPDTCUR,TPDTMOD,PTSTEP,KSV) + TPDTCUR,PTSTEP,KSV) ! USE MODD_IO, ONLY: TFILEDATA USE MODD_TYPE_DATE @@ -18,7 +18,6 @@ USE MODD_TYPE_DATE TYPE(TFILEDATA), INTENT(IN) :: TPDIAFILE ! file to write INTEGER, INTENT(IN) :: KTCOUNT ! temporal loop counter TYPE (DATE_TIME), INTENT(IN) :: TPDTCUR ! Current date and time -TYPE (DATE_TIME), INTENT(IN) :: TPDTMOD ! Creation date and time REAL, INTENT(IN) :: PTSTEP ! time step INTEGER, INTENT(IN) :: KSV ! Number of Scalar Variables ! @@ -30,7 +29,7 @@ END MODULE MODI_ENDSTEP_BUDGET ! ! #################################################### SUBROUTINE ENDSTEP_BUDGET(TPDIAFILE,KTCOUNT, & - TPDTCUR,TPDTMOD,PTSTEP,KSV) + TPDTCUR,PTSTEP,KSV) ! #################################################### ! !!**** *ENDSTEP_BUDGET* - routine to call the routine write_budget @@ -105,7 +104,7 @@ USE MODD_IO, ONLY: TFILEDATA USE MODD_TIME USE MODD_BUDGET ! -USE MODI_WRITE_BUDGET +use mode_write_budget, only: Write_budget ! IMPLICIT NONE ! @@ -115,7 +114,6 @@ IMPLICIT NONE TYPE(TFILEDATA), INTENT(IN) :: TPDIAFILE ! file to write INTEGER, INTENT(IN) :: KTCOUNT ! temporal loop counter TYPE (DATE_TIME), INTENT(IN) :: TPDTCUR ! Current date and time -TYPE (DATE_TIME), INTENT(IN) :: TPDTMOD ! Creation date and time REAL, INTENT(IN) :: PTSTEP ! time step INTEGER, INTENT(IN) :: KSV ! Number of Scalar Variables ! @@ -131,8 +129,8 @@ SELECT CASE(CBUTYPE) ! !* 1.1 storage of the budget fields ! - IF( MODULO(KTCOUNT,NBUSTEP*NBUWRNB) == 0 ) THEN - CALL WRITE_BUDGET(TPDIAFILE,TPDTCUR,TPDTMOD,PTSTEP, KSV ) + IF( MODULO(KTCOUNT,NBUSTEP*NBUWRNB) == 0 ) THEN + call Write_budget( tpdiafile, tpdtcur, ptstep, ksv ) ! !* 1.2 resetting the budget arrays to 0. ! @@ -168,7 +166,7 @@ SELECT CASE(CBUTYPE) ! !* 2.1 storage of the budget fields ! - CALL WRITE_BUDGET(TPDIAFILE,TPDTCUR,TPDTMOD,PTSTEP, KSV) + call Write_budget( tpdiafile, tpdtcur, ptstep, ksv ) ! !* 2.2 reset the budget fields to 0. ! diff --git a/src/MNH/exchange.f90 b/src/MNH/exchange.f90 index b6d8bb8b3a90378304d730c19fbdfeecb932cef2..01634dd55e7805147566b0d12449864570f8b362 100644 --- a/src/MNH/exchange.f90 +++ b/src/MNH/exchange.f90 @@ -98,7 +98,7 @@ END MODULE MODI_EXCHANGE USE MODD_ARGSLIST_ll, ONLY : LIST_ll USE MODD_GRID_n USE MODD_NSV -USE MODD_BUDGET, ONLY : LBUDGET_SV +USE MODD_BUDGET, ONLY : LBUDGET_SV, NBUDGET_SV1 USE MODD_CST, ONLY : XMNH_TINY USE MODD_LUNIT_n, ONLY : TLUOUT USE MODI_SHUMAN @@ -210,7 +210,7 @@ IF (LUSECHEM) THEN ! IF (LBUDGET_SV) THEN DO JSV=NSV_CHEMBEG,NSV_CHEMEND - CALL BUDGET(PRSVS(:,:,:,JSV),JSV+12,'NEGA_BU_RSV') + CALL BUDGET(PRSVS(:,:,:,JSV),NBUDGET_SV1-1+JSV,'NEGA_BU_RSV') ENDDO ENDIF ! @@ -251,7 +251,7 @@ IF (LUSECHEM) THEN END DO IF (LBUDGET_SV) THEN DO JSV=NSV_AERBEG,NSV_AEREND - CALL BUDGET(PRSVS(:,:,:,JSV),JSV+12,'NEGA_BU_RSV') + CALL BUDGET(PRSVS(:,:,:,JSV),NBUDGET_SV1-1+JSV,'NEGA_BU_RSV') ENDDO ENDIF ENDIF diff --git a/src/MNH/fast_terms.f90 b/src/MNH/fast_terms.f90 index eba11a693b9118a2636dd07a693234fe732c59de..23532ed69e7d2812d37f25dc10d96b574d40b528 100644 --- a/src/MNH/fast_terms.f90 +++ b/src/MNH/fast_terms.f90 @@ -420,9 +420,9 @@ ENDIF ! ---------------------- ! ! -IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:) * PRHODJ(:,:,:),6,'COND_BU_RRV') -IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:) * PRHODJ(:,:,:),7,'COND_BU_RRC') -IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:) * PRHODJ(:,:,:),4,'COND_BU_RTH') +IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:) * PRHODJ(:,:,:),NBUDGET_RV,'COND_BU_RRV') +IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:) * PRHODJ(:,:,:),NBUDGET_RC,'COND_BU_RRC') +IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:) * PRHODJ(:,:,:),NBUDGET_TH,'COND_BU_RTH') ! !------------------------------------------------------------------------------ ! diff --git a/src/MNH/fct_met.f90 b/src/MNH/fct_met.f90 index 653b238a2235d29b15a741ebfa791eb13b544a65..70ca6911ebae613d96229d2562bca57a0c545a00 100644 --- a/src/MNH/fct_met.f90 +++ b/src/MNH/fct_met.f90 @@ -1,13 +1,8 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-2019 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- -!--------------- special set of characters for RCS information -!----------------------------------------------------------------- -! $Source$ $Revision$ -! MASDEV4_7 newsrc 2006/06/06 12:00:47 -!----------------------------------------------------------------- ! ###################### MODULE MODI_FCT_MET ! ###################### @@ -168,15 +163,15 @@ IKU=SIZE(XZHAT) ! PRTHS(:,:,:) = PRTHS(:,:,:) & - DXF(PRUCT(:,:,:)*MXM (PTHT(:,:,:))) - IF (LBUDGET_TH) CALL BUDGET (PRTHS,4,'ADVX_BU_RTH') + IF (LBUDGET_TH) CALL BUDGET (PRTHS,NBUDGET_TH,'ADVX_BU_RTH') ! PRTHS(:,:,:) = PRTHS(:,:,:) & - DYF(PRVCT(:,:,:)*MYM (PTHT(:,:,:))) - IF (LBUDGET_TH) CALL BUDGET (PRTHS,4,'ADVY_BU_RTH') + IF (LBUDGET_TH) CALL BUDGET (PRTHS,NBUDGET_TH,'ADVY_BU_RTH') ! PRTHS(:,:,:) = PRTHS(:,:,:) & - DZF(1,IKU,1,PRWCT(:,:,:)*MZM (1,IKU,1,PTHT(:,:,:))) - IF (LBUDGET_TH) CALL BUDGET (PRTHS,4,'ADVZ_BU_RTH') + IF (LBUDGET_TH) CALL BUDGET (PRTHS,NBUDGET_TH,'ADVZ_BU_RTH') ! !* 1.2 No condensation case: Vapor ---> advected by a FCT scheme ! @@ -190,15 +185,15 @@ IKU=SIZE(XZHAT) ! PRRS(:,:,:,1) = PRRS(:,:,:,1) - DXF(ZFX(:,:,:)) IF (LBUDGET_RV) & - CALL BUDGET (PRRS(:,:,:,1),6 ,'ADVX_BU_RRV') + CALL BUDGET (PRRS(:,:,:,1), NBUDGET_RV,'ADVX_BU_RRV') ! PRRS(:,:,:,1) = PRRS(:,:,:,1) - DYF(ZFY(:,:,:)) IF (LBUDGET_RV) & - CALL BUDGET (PRRS(:,:,:,1),6 ,'ADVY_BU_RRV') + CALL BUDGET (PRRS(:,:,:,1), NBUDGET_RV,'ADVY_BU_RRV') ! PRRS(:,:,:,1) = PRRS(:,:,:,1) - DZF(1,IKU,1,ZFZ(:,:,:)) IF (LBUDGET_RV) & - CALL BUDGET (PRRS(:,:,:,1),6 ,'ADVZ_BU_RRV') + CALL BUDGET (PRRS(:,:,:,1), NBUDGET_RV,'ADVZ_BU_RRV') END IF ! !* 1.3 No ice case: rv+rc ---> advected by the FCT scheme @@ -220,18 +215,18 @@ IKU=SIZE(XZHAT) ! PRRS(:,:,:,1) = PRRS(:,:,:,1) - DXF(ZRTFX(:,:,:)) PRRS(:,:,:,2) = PRRS(:,:,:,2) - DXF( ZFX(:,:,:)) - IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),6 ,'ADVX_BU_RRV') - IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),7 ,'ADVX_BU_RRC') + IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1), NBUDGET_RV,'ADVX_BU_RRV') + IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2), NBUDGET_RC,'ADVX_BU_RRC') ! PRRS(:,:,:,1) = PRRS(:,:,:,1) - DYF(ZRTFY(:,:,:)) PRRS(:,:,:,2) = PRRS(:,:,:,2) - DYF( ZFY(:,:,:)) - IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),6 ,'ADVY_BU_RRV') - IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),7 ,'ADVY_BU_RRC') + IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1), NBUDGET_RV,'ADVY_BU_RRV') + IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2), NBUDGET_RC,'ADVY_BU_RRC') ! PRRS(:,:,:,1) = PRRS(:,:,:,1) - DZF(1,IKU,1,ZRTFZ(:,:,:)) PRRS(:,:,:,2) = PRRS(:,:,:,2) - DZF(1,IKU,1, ZFZ(:,:,:)) - IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),6 ,'ADVZ_BU_RRV') - IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),7 ,'ADVZ_BU_RRC') + IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1), NBUDGET_RV,'ADVZ_BU_RRV') + IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2), NBUDGET_RC,'ADVZ_BU_RRC') ! END IF ! @@ -255,13 +250,13 @@ IKU=SIZE(XZHAT) ZRTFZ(:,:,:) = ZRTFZ(:,:,:) - ZFZ(:,:,:) ! ! PRRS(:,:,:,2) = PRRS(:,:,:,2) - DXF( ZFX(:,:,:)) - IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),7 ,'ADVX_BU_RRC') + IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2), NBUDGET_RC,'ADVX_BU_RRC') ! PRRS(:,:,:,2) = PRRS(:,:,:,2) - DYF( ZFY(:,:,:)) - IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),7 ,'ADVY_BU_RRC') + IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2), NBUDGET_RC,'ADVY_BU_RRC') ! PRRS(:,:,:,2) = PRRS(:,:,:,2) - DZF(1,IKU,1, ZFZ(:,:,:)) - IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),7 ,'ADVZ_BU_RRC') + IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2), NBUDGET_RC,'ADVZ_BU_RRC') ! ! ZFX(:,:,:) = PRUCT(:,:,:) * MXM (PRT(:,:,:,4)) ! @@ -274,18 +269,18 @@ IKU=SIZE(XZHAT) ! PRRS(:,:,:,1) = PRRS(:,:,:,1) - DXF(ZRTFX(:,:,:)) PRRS(:,:,:,4) = PRRS(:,:,:,4) - DXF( ZFX(:,:,:)) - IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),6 ,'ADVX_BU_RRV') - IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),9 ,'ADVX_BU_RRI') + IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1), NBUDGET_RV,'ADVX_BU_RRV') + IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4), NBUDGET_RI,'ADVX_BU_RRI') ! PRRS(:,:,:,1) = PRRS(:,:,:,1) - DYF(ZRTFY(:,:,:)) PRRS(:,:,:,4) = PRRS(:,:,:,4) - DYF( ZFY(:,:,:)) - IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),6 ,'ADVY_BU_RRV') - IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),9 ,'ADVY_BU_RRI') + IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1), NBUDGET_RV,'ADVY_BU_RRV') + IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4), NBUDGET_RI,'ADVY_BU_RRI') ! PRRS(:,:,:,1) = PRRS(:,:,:,1) - DZF(1,IKU,1,ZRTFZ(:,:,:)) PRRS(:,:,:,4) = PRRS(:,:,:,4) - DZF(1,IKU,1, ZFZ(:,:,:)) - IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),6 ,'ADVZ_BU_RRV') - IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),9 ,'ADVZ_BU_RRI') + IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1), NBUDGET_RV,'ADVZ_BU_RRV') + IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4), NBUDGET_RI,'ADVZ_BU_RRI') ! END IF ! @@ -298,13 +293,13 @@ IKU=SIZE(XZHAT) ZFX(:,:,:), ZFY(:,:,:), ZFZ(:,:,:) ) ! PRRS(:,:,:,3) = PRRS(:,:,:,3) - DXF( ZFX(:,:,:)) - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3),8 ,'ADVX_BU_RRR') + IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3), NBUDGET_RR,'ADVX_BU_RRR') ! PRRS(:,:,:,3) = PRRS(:,:,:,3) - DYF( ZFY(:,:,:)) - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3),8 ,'ADVY_BU_RRR') + IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3), NBUDGET_RR,'ADVY_BU_RRR') ! PRRS(:,:,:,3) = PRRS(:,:,:,3) - DZF(1,IKU,1, ZFZ(:,:,:)) - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3),8 ,'ADVZ_BU_RRR') + IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3), NBUDGET_RR,'ADVZ_BU_RRR') ! END IF ! @@ -318,27 +313,27 @@ IKU=SIZE(XZHAT) ! PRRS(:,:,:,JRR) = PRRS(:,:,:,JRR) - DXF(ZFX(:,:,:)) IF (JRR==5.AND.LBUDGET_RS) & - CALL BUDGET (PRRS(:,:,:,5),10,'ADVX_BU_RRS') + CALL BUDGET (PRRS(:,:,:,5),NBUDGET_RS,'ADVX_BU_RRS') IF (JRR==6.AND.LBUDGET_RG) & - CALL BUDGET (PRRS(:,:,:,6),11,'ADVX_BU_RRG') + CALL BUDGET (PRRS(:,:,:,6),NBUDGET_RG,'ADVX_BU_RRG') IF (JRR==7.AND.LBUDGET_RH) & - CALL BUDGET (PRRS(:,:,:,7),12,'ADVX_BU_RRH') + CALL BUDGET (PRRS(:,:,:,7),NBUDGET_RH,'ADVX_BU_RRH') ! PRRS(:,:,:,JRR) = PRRS(:,:,:,JRR) - DYF(ZFY(:,:,:)) IF (JRR==5.AND.LBUDGET_RS) & - CALL BUDGET (PRRS(:,:,:,5),10,'ADVY_BU_RRS') + CALL BUDGET (PRRS(:,:,:,5),NBUDGET_RS,'ADVY_BU_RRS') IF (JRR==6.AND.LBUDGET_RG) & - CALL BUDGET (PRRS(:,:,:,6),11,'ADVY_BU_RRG') + CALL BUDGET (PRRS(:,:,:,6),NBUDGET_RG,'ADVY_BU_RRG') IF (JRR==7.AND.LBUDGET_RH) & - CALL BUDGET (PRRS(:,:,:,7),12,'ADVY_BU_RRH') + CALL BUDGET (PRRS(:,:,:,7),NBUDGET_RH,'ADVY_BU_RRH') ! PRRS(:,:,:,JRR) = PRRS(:,:,:,JRR) - DZF(1,IKU,1,ZFZ(:,:,:)) IF (JRR==5.AND.LBUDGET_RS) & - CALL BUDGET (PRRS(:,:,:,5),10,'ADVZ_BU_RRS') + CALL BUDGET (PRRS(:,:,:,5),NBUDGET_RS,'ADVZ_BU_RRS') IF (JRR==6.AND.LBUDGET_RG) & - CALL BUDGET (PRRS(:,:,:,6),11,'ADVZ_BU_RRG') + CALL BUDGET (PRRS(:,:,:,6),NBUDGET_RG,'ADVZ_BU_RRG') IF (JRR==7.AND.LBUDGET_RH) & - CALL BUDGET (PRRS(:,:,:,7),12,'ADVZ_BU_RRH') + CALL BUDGET (PRRS(:,:,:,7),NBUDGET_RH,'ADVZ_BU_RRH') ! END DO ! @@ -354,13 +349,13 @@ IKU=SIZE(XZHAT) ZFX(:,:,:), ZFY(:,:,:), ZFZ(:,:,:) ) ! PRTKES(:,:,:) = PRTKES(:,:,:) - DXF(ZFX(:,:,:)) - IF (LBUDGET_TKE) CALL BUDGET (PRTKES,5,'ADVX_BU_RTKE') + IF (LBUDGET_TKE) CALL BUDGET (PRTKES,NBUDGET_TKE,'ADVX_BU_RTKE') ! PRTKES(:,:,:) = PRTKES(:,:,:) - DYF(ZFY(:,:,:)) - IF (LBUDGET_TKE) CALL BUDGET (PRTKES,5,'ADVY_BU_RTKE') + IF (LBUDGET_TKE) CALL BUDGET (PRTKES,NBUDGET_TKE,'ADVY_BU_RTKE') ! PRTKES(:,:,:) = PRTKES(:,:,:) - DZF(1,IKU,1,ZFZ(:,:,:)) - IF (LBUDGET_TKE) CALL BUDGET (PRTKES,5,'ADVZ_BU_RTKE') + IF (LBUDGET_TKE) CALL BUDGET (PRTKES,NBUDGET_TKE,'ADVZ_BU_RTKE') ! END IF ! diff --git a/src/MNH/fct_scalar.f90 b/src/MNH/fct_scalar.f90 index 75df108044a26b5c9eb00a7b39b305cb10b9268e..9af746bb554b79aa7ab7745b6b44ee0bb351630c 100644 --- a/src/MNH/fct_scalar.f90 +++ b/src/MNH/fct_scalar.f90 @@ -1,13 +1,8 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-2019 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- -!--------------- special set of characters for RCS information -!----------------------------------------------------------------- -! $Source$ $Revision$ -! MASDEV4_7 adiab 2006/06/06 12:01:31 -!----------------------------------------------------------------- ! ###################### MODULE MODI_FCT_SCALAR ! ###################### @@ -157,15 +152,15 @@ IKU=SIZE(XZHAT) ! PRSVS(:,:,:,JSV) = PRSVS(:,:,:,JSV) - DXF(ZFX(:,:,:)) IF (LBUDGET_SV) & - CALL BUDGET (PRSVS(:,:,:,JSV),JSV+12,'ADVX_BU_RSV') + CALL BUDGET (PRSVS(:,:,:,JSV),NBUDGET_SV1-1+JSV,'ADVX_BU_RSV') ! PRSVS(:,:,:,JSV) = PRSVS(:,:,:,JSV) - DYF(ZFY(:,:,:)) IF (LBUDGET_SV) & - CALL BUDGET (PRSVS(:,:,:,JSV),JSV+12,'ADVY_BU_RSV') + CALL BUDGET (PRSVS(:,:,:,JSV),NBUDGET_SV1-1+JSV,'ADVY_BU_RSV') ! PRSVS(:,:,:,JSV) = PRSVS(:,:,:,JSV) - DZF(1,IKU,1,ZFZ(:,:,:)) IF (LBUDGET_SV) & - CALL BUDGET (PRSVS(:,:,:,JSV),JSV+12,'ADVZ_BU_RSV') + CALL BUDGET (PRSVS(:,:,:,JSV),NBUDGET_SV1-1+JSV,'ADVZ_BU_RSV') END DO ! !------------------------------------------------------------------------------- diff --git a/src/MNH/forcing.f90 b/src/MNH/forcing.f90 index e2cecf24f85cd243ddd7b10f06b5c875f2b40592..fbf7f239acb5a698bee1869b03390f0cb3666cc5 100644 --- a/src/MNH/forcing.f90 +++ b/src/MNH/forcing.f90 @@ -827,21 +827,21 @@ END IF ! ------------ ! ! -IF (LBUDGET_U) CALL BUDGET (PRUS,1,'FRC_BU_RU') -IF (LBUDGET_V) CALL BUDGET (PRVS,2,'FRC_BU_RV') -IF (LBUDGET_W) CALL BUDGET (PRWS,3,'FRC_BU_RW') -IF (LBUDGET_TH) CALL BUDGET (PRTHS,4,'FRC_BU_RTH') -IF (LBUDGET_TKE) CALL BUDGET (PRTKES,5,'FRC_BU_RTKE') -IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),6,'FRC_BU_RRV') -IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),7,'FRC_BU_RRC') -IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3),8,'FRC_BU_RRR') -IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),9,'FRC_BU_RRI') -IF (LBUDGET_RS) CALL BUDGET (PRRS(:,:,:,5),10,'FRC_BU_RRS') -IF (LBUDGET_RG) CALL BUDGET (PRRS(:,:,:,6),11,'FRC_BU_RRG') -IF (LBUDGET_RH) CALL BUDGET (PRRS(:,:,:,7),12,'FRC_BU_RRH') +IF (LBUDGET_U) CALL BUDGET (PRUS, NBUDGET_U, 'FRC_BU_RU') +IF (LBUDGET_V) CALL BUDGET (PRVS, NBUDGET_V, 'FRC_BU_RV') +IF (LBUDGET_W) CALL BUDGET (PRWS, NBUDGET_W, 'FRC_BU_RW') +IF (LBUDGET_TH) CALL BUDGET (PRTHS, NBUDGET_TH, 'FRC_BU_RTH') +IF (LBUDGET_TKE) CALL BUDGET (PRTKES, NBUDGET_TKE,'FRC_BU_RTKE') +IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),NBUDGET_RV, 'FRC_BU_RRV') +IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),NBUDGET_RC, 'FRC_BU_RRC') +IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3),NBUDGET_RR, 'FRC_BU_RRR') +IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),NBUDGET_RI, 'FRC_BU_RRI') +IF (LBUDGET_RS) CALL BUDGET (PRRS(:,:,:,5),NBUDGET_RS, 'FRC_BU_RRS') +IF (LBUDGET_RG) CALL BUDGET (PRRS(:,:,:,6),NBUDGET_RG, 'FRC_BU_RRG') +IF (LBUDGET_RH) CALL BUDGET (PRRS(:,:,:,7),NBUDGET_RH, 'FRC_BU_RRH') IF (LBUDGET_SV) THEN DO JL = 1 , SIZE(PRSVS,4) - CALL BUDGET (PRSVS(:,:,:,JL),JL+12,'FRC_BU_RSV') + CALL BUDGET (PRSVS(:,:,:,JL),JL+NBUDGET_SV1-1,'FRC_BU_RSV') END DO END IF ! diff --git a/src/MNH/gravity_impl.f90 b/src/MNH/gravity_impl.f90 index 19241d0225ea7d594d311bc7f66b5cf24377a9f9..8c623c54af3a78f148d53ccce500622b89cee27d 100644 --- a/src/MNH/gravity_impl.f90 +++ b/src/MNH/gravity_impl.f90 @@ -1,6 +1,6 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2011-2019 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- ! ##################### @@ -147,7 +147,7 @@ CALL GRAVITY ( KRR,KRRL, KRRI, ZTH, ZR, PRHODJ, PTHVREF, ZRWS_GRAV(:,:,:) ) ! PRWS(:,:,:) = PRWS(:,:,:) + ZRWS_GRAV(:,:,:) ! -IF (LBUDGET_W) CALL BUDGET (PRWS,3,'GRAV_BU_RW') +IF (LBUDGET_W) CALL BUDGET (PRWS,NBUDGET_W,'GRAV_BU_RW') ! !------------------------------------------------------------------------------- ! diff --git a/src/MNH/ice_adjust.f90 b/src/MNH/ice_adjust.f90 index d89d7227fd120a31677f451e7c38c069c5c8a89d..0beb2e0eaa114e016dd3216c13f540cf4b2f746d 100644 --- a/src/MNH/ice_adjust.f90 +++ b/src/MNH/ice_adjust.f90 @@ -430,10 +430,10 @@ ENDIF !* 6. STORE THE BUDGET TERMS ! ---------------------- ! -IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:) * PRHODJ(:,:,:),6,HBUNAME//'_BU_RRV') -IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:) * PRHODJ(:,:,:),7,HBUNAME//'_BU_RRC') -IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:) * PRHODJ(:,:,:),9,HBUNAME//'_BU_RRI') -IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:) * PRHODJ(:,:,:),4,HBUNAME//'_BU_RTH') +IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:) * PRHODJ(:,:,:),NBUDGET_RV,HBUNAME//'_BU_RRV') +IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:) * PRHODJ(:,:,:),NBUDGET_RC,HBUNAME//'_BU_RRC') +IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:) * PRHODJ(:,:,:),NBUDGET_RI,HBUNAME//'_BU_RRI') +IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:) * PRHODJ(:,:,:),NBUDGET_TH,HBUNAME//'_BU_RTH') ! !------------------------------------------------------------------------------ ! diff --git a/src/MNH/ice_adjust_elec.f90 b/src/MNH/ice_adjust_elec.f90 index 8d802babf157138a461aeff09c479f519d42149b..4114d7a2e83efde7fd678237cf4200717844ac85 100644 --- a/src/MNH/ice_adjust_elec.f90 +++ b/src/MNH/ice_adjust_elec.f90 @@ -625,15 +625,15 @@ ENDIF !* 6. STORE THE BUDGET TERMS ! ---------------------- ! -IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:) * PRHODJ(:,:,:),6,'DEPI_BU_RRV') -IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:) * PRHODJ(:,:,:),7,'DEPI_BU_RRC') -IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:) * PRHODJ(:,:,:),9,'DEPI_BU_RRI') -IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:) * PRHODJ(:,:,:),4,'DEPI_BU_RTH') +IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:) * PRHODJ(:,:,:),NBUDGET_RV,'DEPI_BU_RRV') +IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:) * PRHODJ(:,:,:),NBUDGET_RC,'DEPI_BU_RRC') +IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:) * PRHODJ(:,:,:),NBUDGET_RI,'DEPI_BU_RRI') +IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:) * PRHODJ(:,:,:),NBUDGET_TH,'DEPI_BU_RTH') IF (LBUDGET_SV) THEN - CALL BUDGET(PQPIS(:,:,:) * PRHODJ(:,:,:), 12+NSV_ELECBEG, 'DEPI_BU_RSV') - CALL BUDGET(PQNIS(:,:,:) * PRHODJ(:,:,:), 12+NSV_ELECEND, 'DEPI_BU_RSV') - CALL BUDGET(PQCS(:,:,:) * PRHODJ(:,:,:), 12+NSV_ELECBEG+1, 'DEPI_BU_RSV') - CALL BUDGET(PQIS(:,:,:) * PRHODJ(:,:,:), 12+NSV_ELECBEG+3, 'DEPI_BU_RSV') + CALL BUDGET(PQPIS(:,:,:) * PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_ELECBEG, 'DEPI_BU_RSV') + CALL BUDGET(PQNIS(:,:,:) * PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_ELECEND, 'DEPI_BU_RSV') + CALL BUDGET(PQCS(:,:,:) * PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_ELECBEG+1, 'DEPI_BU_RSV') + CALL BUDGET(PQIS(:,:,:) * PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_ELECBEG+3, 'DEPI_BU_RSV') END IF ! !------------------------------------------------------------------------------ diff --git a/src/MNH/ini_aircraft_balloon.f90 b/src/MNH/ini_aircraft_balloon.f90 index 2d5cc4fb336ba31365415304c56fe39c3001fc81..42f1e14a0058469707fac9c550e8f98320467874 100644 --- a/src/MNH/ini_aircraft_balloon.f90 +++ b/src/MNH/ini_aircraft_balloon.f90 @@ -74,6 +74,7 @@ END MODULE MODI_INI_AIRCRAFT_BALLOON !! March, 2013 : O.Caumont, C.Lac : add vertical profiles !! OCT,2016 : G.Delautier LIMA !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O +! P. Wautelet 13/09/2019: budget: simplify and modernize date/time management !! !! -------------------------------------------------------------------------- ! @@ -355,7 +356,7 @@ IF (TPFLYER%NMODEL > 0) THEN ENDIF ! ! -ALLOCATE(TPFLYER%TIME(ISTORE)) +allocate( tpflyer%tpdates(istore) ) ALLOCATE(TPFLYER%X (ISTORE)) ALLOCATE(TPFLYER%Y (ISTORE)) ALLOCATE(TPFLYER%Z (ISTORE)) @@ -390,13 +391,11 @@ END IF ALLOCATE(TPFLYER%TKE_DISS(ISTORE)) ALLOCATE(TPFLYER%TSRAD (ISTORE)) ALLOCATE(TPFLYER%ZS (ISTORE)) -ALLOCATE(TPFLYER%DATIME(16,ISTORE)) ! ALLOCATE(TPFLYER%THW_FLUX (ISTORE)) ALLOCATE(TPFLYER%RCW_FLUX (ISTORE)) ALLOCATE(TPFLYER%SVW_FLUX (ISTORE,KSV)) ! -TPFLYER%TIME = XUNDEF TPFLYER%X = XUNDEF TPFLYER%Y = XUNDEF TPFLYER%Z = XUNDEF @@ -428,23 +427,6 @@ TPFLYER%TKE = XUNDEF TPFLYER%TSRAD = XUNDEF TPFLYER%ZS = XUNDEF TPFLYER%TKE_DISS = XUNDEF -TPFLYER%DATIME( 1,1:ISTORE) = TPDTSEG%TDATE%YEAR -TPFLYER%DATIME( 2,1:ISTORE) = TPDTSEG%TDATE%MONTH -TPFLYER%DATIME( 3,1:ISTORE) = TPDTSEG%TDATE%DAY -TPFLYER%DATIME( 4,1:ISTORE) = TPDTSEG%TIME -TPFLYER%DATIME( 5,1:ISTORE) = TPDTSEG%TDATE%YEAR -TPFLYER%DATIME( 6,1:ISTORE) = TPDTSEG%TDATE%MONTH -TPFLYER%DATIME( 7,1:ISTORE) = TPDTSEG%TDATE%DAY -TPFLYER%DATIME( 8,1:ISTORE) = TPDTSEG%TIME -TPFLYER%DATIME( 9,1:ISTORE) = TPDTSEG%TDATE%YEAR -TPFLYER%DATIME(10,1:ISTORE) = TPDTSEG%TDATE%MONTH -TPFLYER%DATIME(11,1:ISTORE) = TPDTSEG%TDATE%DAY -TPFLYER%DATIME(12,1:ISTORE) = TPDTSEG%TIME -TPFLYER%DATIME(13,1:ISTORE) = TPDTSEG%TDATE%YEAR -TPFLYER%DATIME(14,1:ISTORE) = TPDTSEG%TDATE%MONTH -TPFLYER%DATIME(15,1:ISTORE) = TPDTSEG%TDATE%DAY -TPFLYER%DATIME(16,1:ISTORE) = XUNDEF - ! TPFLYER%THW_FLUX = XUNDEF TPFLYER%RCW_FLUX = XUNDEF diff --git a/src/MNH/ini_budget.f90 b/src/MNH/ini_budget.f90 index 6f188f7ef4e1530aa3e5e690a00d9510a5b5b917..2a4174b6d80f24d837a011cc4edce64f42f3827f 100644 --- a/src/MNH/ini_budget.f90 +++ b/src/MNH/ini_budget.f90 @@ -154,6 +154,7 @@ END MODULE MODI_INI_BUDGET !! S. Riette 11/2016 New budgets for ICE3/ICE4 !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O ! P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg +! P. Wautelet 15/11/2019: remove unused CBURECORD variable !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -232,7 +233,6 @@ INTEGER, DIMENSION(JPBUMAX,JPBUPROMAX+1) :: IPROACTV ! switches set by the ! activation INTEGER :: JI, JJ, JK , JJJ ! loop indices INTEGER :: IIMAX_ll, IJMAX_ll ! size of the physical global domain -INTEGER :: ITEN ! tens for CBURECORD INTEGER :: IPROC ! counter for processes INTEGER :: IIU, IJU ! size along x and y directions ! of the extended subdomain @@ -395,12 +395,10 @@ ALLOCATE( NBUPROCNBR(JPBUMAX) ) ALLOCATE( NBUPROCCTR(JPBUMAX) ) ALLOCATE( CBUACTION(JPBUMAX, JPBUPROMAX) ) ALLOCATE( CBUCOMMENT(JPBUMAX, JPBUPROMAX) ) -ALLOCATE( CBURECORD(JPBUMAX, JPBUPROMAX) ) NBUPROCCTR(:) = 0 NBUCTR_ACTV(:) = 0 NBUPROCNBR(:) = 0 CBUACTION(:,:) = 'OF' -CBURECORD(:,:) = ' ' CBUCOMMENT(:,:) = ' ' LBU_BEG =.TRUE. ! @@ -2664,12 +2662,7 @@ END DO ! ----------------------------------------------------------- ! ! -DO JI=1,JPBUMAX ! loop on the allowed budgets - ! names of recording files for: - CBURECORD(JI,1) = ADJUSTL( CBUCOMMENT(JI,1) ) ! initial guess - CBURECORD(JI,2) = ADJUSTL( CBUCOMMENT(JI,2) ) ! source cumul - CBURECORD(JI,3) = ADJUSTL( CBUCOMMENT(JI,3) ) ! end step -! +DO JI=1,JPBUMAX ! loop on the allowed budgets names of recording files IF (IPROACTV(JI,4) >= 2) THEN WRITE(UNIT=KLUOUT,FMT= '("Error in budget specification of ",A7,/," & & The first source either is the first element of a group of sources or & @@ -2702,10 +2695,6 @@ DO JI=1,JPBUMAX ! loop on the allowed budgets ADJUSTR( CBUCOMMENT(JI,NBUPROCNBR(JI)) ) // & ADJUSTL( ADJUSTR( YWORK2(JI,JJ) ) // & ADJUSTL( YEND_COMMENT(JI) ) ) ) - ITEN=INT(NBUPROCNBR(JI)/10) - CBURECORD(JI,NBUPROCNBR(JI)) = 'S' // CHAR( ITEN + 48 ) & - // CHAR( 48+ MODULO( NBUPROCNBR(JI),10*MAX(1,ITEN) ) ) & - // '_' // ADJUSTL( YEND_COMMENT(JI) ) ELSE IF (IPROACTV(JI,JJJ) == 0) THEN NBUPROCNBR(JI) = NBUPROCNBR(JI)+1 CBUACTION(JI,JJ) = 'DD' @@ -2713,10 +2702,6 @@ DO JI=1,JPBUMAX ! loop on the allowed budgets ADJUSTR( CBUCOMMENT(JI,NBUPROCNBR(JI)) ) // & ADJUSTL( ADJUSTR( YWORK2(JI,JJ) ) // & ADJUSTL( YEND_COMMENT(JI) ) ) ) - ITEN=INT(NBUPROCNBR(JI)/10) - CBURECORD(JI,NBUPROCNBR(JI)) = 'S' // CHAR( ITEN + 48 ) & - // CHAR( 48+ MODULO( NBUPROCNBR(JI),10*MAX(1,ITEN) ) ) & - // '_' // ADJUSTL( YEND_COMMENT(JI) ) ELSE IF (IPROACTV(JI,JJJ) == 2) THEN CBUACTION(JI,JJ) = 'NO' CBUCOMMENT(JI,NBUPROCNBR(JI)+1) = ADJUSTL( & @@ -2740,7 +2725,7 @@ DO JI=1,JPBUMAX ! loop over the allowed budgets YSTRING = ADJUSTL( YEND_COMMENT(JI) ) ILEN = LEN_TRIM(YSTRING) IF( ILEN /= 0 ) THEN - IF( JI <= 12 ) THEN + IF( JI < NBUDGET_SV1 ) THEN WRITE (UNIT=KLUOUT,FMT='(/,"budget ",A7," with ",I2," vectors")') & YSTRING(1:ILEN),NBUPROCNBR(JI) DO JJ=1,3 @@ -2756,7 +2741,7 @@ DO JI=1,JPBUMAX ! loop over the allowed budgets ELSE WRITE (UNIT=KLUOUT, & FMT='(/,"budget ",A7," (number ",I3,") with ",I2," vectors")') & - YSTRING(1:ILEN),JI-12,NBUPROCNBR(JI) + YSTRING(1:ILEN),JI-NBUDGET_SV1+1,NBUPROCNBR(JI) DO JJ=1,3 YSTRING = CBUCOMMENT(JI,JJ) ILEN = LEN_TRIM(YSTRING) @@ -2802,21 +2787,21 @@ ENDIF !* 5. ALLOCATE MEMORY FOR BUDGET STORAGE ARRAYS ! ----------------------------------------- IF (LBU_RU) THEN - ALLOCATE ( XBURU(IBUDIM1, IBUDIM2, IBUDIM3, NBUPROCNBR(1)) ) + ALLOCATE ( XBURU(IBUDIM1, IBUDIM2, IBUDIM3, NBUPROCNBR(NBUDGET_U)) ) XBURU(:,:,:,:)=0. ALLOCATE ( XBURHODJU(IBUDIM1, IBUDIM2, IBUDIM3) ) XBURHODJU(:,:,:)=0. END IF ! IF (LBU_RV) THEN - ALLOCATE ( XBURV(IBUDIM1, IBUDIM2, IBUDIM3, NBUPROCNBR(2)) ) + ALLOCATE ( XBURV(IBUDIM1, IBUDIM2, IBUDIM3, NBUPROCNBR(NBUDGET_V)) ) XBURV(:,:,:,:)=0. ALLOCATE ( XBURHODJV(IBUDIM1, IBUDIM2, IBUDIM3) ) XBURHODJV(:,:,:)=0. END IF ! IF (LBU_RW) THEN - ALLOCATE ( XBURW(IBUDIM1, IBUDIM2, IBUDIM3, NBUPROCNBR(3)) ) + ALLOCATE ( XBURW(IBUDIM1, IBUDIM2, IBUDIM3, NBUPROCNBR(NBUDGET_W)) ) XBURW(:,:,:,:)=0. ALLOCATE ( XBURHODJW(IBUDIM1, IBUDIM2, IBUDIM3) ) XBURHODJW(:,:,:)=0. @@ -2829,47 +2814,47 @@ IF (LBU_RTH .OR. LBU_RTKE .OR. LBU_RRV .OR. LBU_RRC .OR. LBU_RRR .OR. & END IF ! IF (LBU_RTH) THEN - ALLOCATE ( XBURTH(IBUDIM1, IBUDIM2, IBUDIM3, NBUPROCNBR(4)) ) + ALLOCATE ( XBURTH(IBUDIM1, IBUDIM2, IBUDIM3, NBUPROCNBR(NBUDGET_TH)) ) XBURTH(:,:,:,:)=0. END IF ! IF (LBU_RTKE) THEN - ALLOCATE ( XBURTKE(IBUDIM1, IBUDIM2, IBUDIM3, NBUPROCNBR(5)) ) + ALLOCATE ( XBURTKE(IBUDIM1, IBUDIM2, IBUDIM3, NBUPROCNBR(NBUDGET_TKE)) ) XBURTKE(:,:,:,:)=0. END IF ! IF (LBU_RRV) THEN - ALLOCATE ( XBURRV(IBUDIM1, IBUDIM2, IBUDIM3, NBUPROCNBR(6)) ) + ALLOCATE ( XBURRV(IBUDIM1, IBUDIM2, IBUDIM3, NBUPROCNBR(NBUDGET_RV)) ) XBURRV(:,:,:,:)=0. END IF ! IF (LBU_RRC) THEN - ALLOCATE ( XBURRC(IBUDIM1, IBUDIM2, IBUDIM3, NBUPROCNBR(7)) ) + ALLOCATE ( XBURRC(IBUDIM1, IBUDIM2, IBUDIM3, NBUPROCNBR(NBUDGET_RC)) ) XBURRC(:,:,:,:)=0. END IF ! IF (LBU_RRR) THEN - ALLOCATE ( XBURRR(IBUDIM1, IBUDIM2, IBUDIM3, NBUPROCNBR(8)) ) + ALLOCATE ( XBURRR(IBUDIM1, IBUDIM2, IBUDIM3, NBUPROCNBR(NBUDGET_RR)) ) XBURRR(:,:,:,:)=0. END IF ! IF (LBU_RRI) THEN - ALLOCATE ( XBURRI(IBUDIM1, IBUDIM2, IBUDIM3, NBUPROCNBR(9)) ) + ALLOCATE ( XBURRI(IBUDIM1, IBUDIM2, IBUDIM3, NBUPROCNBR(NBUDGET_RI)) ) XBURRI(:,:,:,:)=0. END IF ! IF (LBU_RRS) THEN - ALLOCATE ( XBURRS(IBUDIM1, IBUDIM2, IBUDIM3, NBUPROCNBR(10)) ) + ALLOCATE ( XBURRS(IBUDIM1, IBUDIM2, IBUDIM3, NBUPROCNBR(NBUDGET_RS)) ) XBURRS(:,:,:,:)=0. END IF ! IF (LBU_RRG) THEN - ALLOCATE ( XBURRG(IBUDIM1, IBUDIM2, IBUDIM3, NBUPROCNBR(11)) ) + ALLOCATE ( XBURRG(IBUDIM1, IBUDIM2, IBUDIM3, NBUPROCNBR(NBUDGET_RG)) ) XBURRG(:,:,:,:)=0. END IF ! IF (LBU_RRH) THEN - ALLOCATE ( XBURRH(IBUDIM1, IBUDIM2, IBUDIM3, NBUPROCNBR(12)) ) + ALLOCATE ( XBURRH(IBUDIM1, IBUDIM2, IBUDIM3, NBUPROCNBR(NBUDGET_RH)) ) XBURRH(:,:,:,:)=0. END IF ! diff --git a/src/MNH/ini_lesn.f90 b/src/MNH/ini_lesn.f90 index c2a2256834c47187389d50e94d3e902c1682486d..7bb8af7e91f97f3ca46d43b794cf0c73e6c4e38b 100644 --- a/src/MNH/ini_lesn.f90 +++ b/src/MNH/ini_lesn.f90 @@ -35,6 +35,7 @@ !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O !! 02/2019 (C. Lac) Add rain fraction as a LES diagnostic ! P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg +! P. Wautelet 13/09/2019: budget: simplify and modernize date/time management !! -------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -105,31 +106,6 @@ IJU_ll = IJMAX_ll+2*JPHEXT ! ILUOUT = TLUOUT%NLU ! -NLES_TOTADV = 1 -NLES_RELA = 2 -NLES_RAD = 3 -NLES_GRAV = 4 -NLES_COR = 5 -NLES_MICR = 6 -NLES_HTURB = 7 -NLES_VTURB = 8 -NLES_FORC = 9 -NLES_PRES = 10 -NLES_DIFF = 11 -NLES_CURV = 12 -NLES_PREF = 13 -NLES_DP = 14 -NLES_TP = 15 -NLES_TR = 16 -NLES_DISS = 17 -NLES_TEND = 18 -NLES_ADVR = 19 -NLES_ADVM = 20 -NLES_NEST = 21 -NLES_MISC = 22 -! -NLES_TOT = 22 -! !------------------------------------------------------------------------------- ! !* 1. Does LES computations are used? @@ -338,17 +314,13 @@ NLES_TIMES = ( INT( (XSEGLEN-XTSTEP+1.E-6) / XTSTEP ) ) / NLES_DTCOUNT ! NLES_TCOUNT = 0 ! -!* 3.6 date array for diachro +!* 3.6 dates array for diachro ! ---------------------- ! -ALLOCATE(XLES_DATIME(16,NLES_TIMES)) -! -!* 3.7 sampling times array for diachro -! -------------------------------- -! -ALLOCATE(XLES_TRAJT(NLES_TIMES,1)) +allocate( xles_dates( nles_times ) ) +allocate( xles_times( nles_times ) ) ! -!* 3.8 No data +!* 3.7 No data ! ------- ! IF (NLES_TIMES==0) THEN diff --git a/src/MNH/ini_modeln.f90 b/src/MNH/ini_modeln.f90 index a7ff5457c1cfbe7464077149deef90d0492ec766..a60f92ef3d948f138df9da57312d55392cba96ed 100644 --- a/src/MNH/ini_modeln.f90 +++ b/src/MNH/ini_modeln.f90 @@ -287,6 +287,7 @@ END MODULE MODI_INI_MODEL_n ! P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg ! P. Wautelet 19/04/2019: removed unused dummy arguments and variables ! P. Wautelet 07/06/2019: allocate lookup tables for optical properties only when needed +! P. Wautelet 13/09/2019: budget: simplify and modernize date/time management !--------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -2397,18 +2398,18 @@ CALL INI_AIRCRAFT_BALLOON(TPINIFILE,XTSTEP, TDTSEG, XSEGLEN, NRR, NSV, & !* 24. STATION initializations ! ----------------------- ! -CALL INI_SURFSTATION_n(XTSTEP, TDTSEG, XSEGLEN, NRR, NSV, & - CTURB=="TKEL" , & - XLATORI, XLONORI ) +CALL INI_SURFSTATION_n(XTSTEP, XSEGLEN, NRR, NSV, & + CTURB=="TKEL" , & + XLATORI, XLONORI ) ! !------------------------------------------------------------------------------- ! !* 25. PROFILER initializations ! ------------------------ ! -CALL INI_POSPROFILER_n(XTSTEP, TDTSEG, XSEGLEN, NRR, NSV, & - CTURB=="TKEL", & - XLATORI, XLONORI ) +CALL INI_POSPROFILER_n(XTSTEP, XSEGLEN, NRR, NSV, & + CTURB=="TKEL", & + XLATORI, XLONORI ) ! !------------------------------------------------------------------------------- ! diff --git a/src/MNH/ini_posprofilern.f90 b/src/MNH/ini_posprofilern.f90 index 88b86c3cb78e86e51534a62597948d8cace76d03..21894be24fba16d29538814eda120b48e9894bcc 100644 --- a/src/MNH/ini_posprofilern.f90 +++ b/src/MNH/ini_posprofilern.f90 @@ -9,14 +9,11 @@ MODULE MODI_INI_POSPROFILER_n ! INTERFACE ! - SUBROUTINE INI_POSPROFILER_n(PTSTEP, TPDTSEG, PSEGLEN, & + SUBROUTINE INI_POSPROFILER_n(PTSTEP, PSEGLEN, & KRR, KSV, OUSETKE, & PLATOR, PLONOR ) ! -USE MODD_TYPE_DATE -! REAL, INTENT(IN) :: PTSTEP ! time step -TYPE(DATE_TIME), INTENT(IN) :: TPDTSEG ! segment date and time REAL, INTENT(IN) :: PSEGLEN ! segment length INTEGER, INTENT(IN) :: KRR ! number of moist variables INTEGER, INTENT(IN) :: KSV ! number of scalar variables @@ -33,7 +30,7 @@ END INTERFACE END MODULE MODI_INI_POSPROFILER_n ! ! ######################################################## - SUBROUTINE INI_POSPROFILER_n(PTSTEP, TPDTSEG, PSEGLEN, & + SUBROUTINE INI_POSPROFILER_n(PTSTEP, PSEGLEN, & KRR, KSV, OUSETKE, & PLATOR, PLONOR ) ! ######################################################## @@ -67,6 +64,7 @@ END MODULE MODI_INI_POSPROFILER_n !! P. Tulet 15/01/2002 !! C.Lac 10/2016 Add visibility diagnostic !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O +! P. Wautelet 13/09/2019: budget: simplify and modernize date/time management !! -------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -81,7 +79,6 @@ USE MODD_PARAMETERS USE MODD_PROFILER_n USE MODD_RADIATIONS_n, ONLY: NAER USE MODD_TYPE_PROFILER -USE MODD_TYPE_DATE ! USE MODE_GRIDPROJ USE MODE_ll @@ -96,7 +93,6 @@ IMPLICIT NONE ! ! REAL, INTENT(IN) :: PTSTEP ! time step -TYPE(DATE_TIME), INTENT(IN) :: TPDTSEG ! segment date and time REAL, INTENT(IN) :: PSEGLEN ! segment length INTEGER, INTENT(IN) :: KRR ! number of moist variables INTEGER, INTENT(IN) :: KSV ! number of scalar variables @@ -161,7 +157,7 @@ TYPE(PROFILER), INTENT(INOUT) :: TPROFILER ! ISTORE = INT ( (PSEGLEN-XTSTEP) / TPROFILER%STEP ) + 1 ! -ALLOCATE(TPROFILER%TIME (ISTORE)) +allocate( tprofiler%tpdates( istore ) ) ALLOCATE(TPROFILER%ERROR (NUMBPROFILER)) ALLOCATE(TPROFILER%X (NUMBPROFILER)) ALLOCATE(TPROFILER%Y (NUMBPROFILER)) @@ -186,7 +182,6 @@ IF (OUSETKE) THEN ELSE ALLOCATE(TPROFILER%TKE (0,IKU,0)) END IF -ALLOCATE(TPROFILER%DATIME(16,ISTORE)) ALLOCATE(TPROFILER%T2M (ISTORE,NUMBPROFILER)) ALLOCATE(TPROFILER%Q2M (ISTORE,NUMBPROFILER)) ALLOCATE(TPROFILER%HU2M (ISTORE,NUMBPROFILER)) @@ -209,7 +204,6 @@ ALLOCATE(TPROFILER%TKE_DISS(ISTORE,IKU,NUMBPROFILER)) ! ! TPROFILER%ERROR= .FALSE. -TPROFILER%TIME = XUNDEF TPROFILER%ZON = XUNDEF TPROFILER%MER = XUNDEF TPROFILER%FF = XUNDEF diff --git a/src/MNH/ini_seriesn.f90 b/src/MNH/ini_seriesn.f90 index cff938acec58cfe8b8f51d92758aafbd7d6db3ef..dbb0030186716cf329c841a8027b1773de9dfe54 100644 --- a/src/MNH/ini_seriesn.f90 +++ b/src/MNH/ini_seriesn.f90 @@ -42,30 +42,29 @@ !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O ! P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg ! P. Wautelet 12/04/2019: use standard measurement units -!! +! P. Wautelet 13/09/2019: budget: simplify and modernize date/time management +! !------------------------------------------------------------------------------- ! !* 0. Declaration ! -------------- ! -USE MODE_ll -USE MODE_MSG -USE MODE_MODELN_HANDLER -! -USE MODD_TIME ! Experiment and segment times (TDTEXP and TDTSEG) USE MODD_CONF -USE MODD_DYN, ONLY: XSEGLEN +USE MODD_CONF_n, ONLY: LUSERV, LUSERC, LUSERR, LUSERI, LUSERS, LUSERG, LUSERH +USE MODD_DIM_n, ONLY: NKMAX +USE MODD_DYN, ONLY: XSEGLEN +USE MODD_DYN_n, ONLY: XTSTEP, NSTOP +USE MODD_LUNIT_n, ONLY: TLUOUT +USE MODD_PARAMETERS +USE MODD_PARAM_n, ONLY: CSURF +USE MODD_PRECIP_n, ONLY: XINPRR, XINPRS, XINPRG USE MODD_SERIES USE MODD_SERIES_n -USE MODD_PARAMETERS -USE MODD_CONF_n, ONLY: LUSERV,LUSERC,LUSERR,LUSERI,LUSERS,LUSERG,LUSERH -USE MODD_DIM_n, ONLY: NKMAX -USE MODD_DYN_n, ONLY: XTSTEP,NSTOP -USE MODD_LUNIT_n, ONLY: TLUOUT -USE MODD_PARAM_n, ONLY: CSURF -USE MODD_PRECIP_n, ONLY: XINPRR,XINPRS,XINPRG -USE MODD_TIME_n -! +! +USE MODE_ll +USE MODE_MODELN_HANDLER +USE MODE_MSG +! USE MODI_MNHGET_SURF_PARAM_n ! IMPLICIT NONE @@ -276,8 +275,7 @@ ALLOCATE( CSCOMMENT1 (NSTEMP_SERIE1) ) ALLOCATE( CSCOMMENT2 (NSTEMP_SERIE2) ) ALLOCATE( CSCOMMENT3 (NSTEMP_SERIE3) ) ! -ALLOCATE( XSTRAJT (NSNBSTEPT,1) ) -ALLOCATE( XSDATIME (16,NSNBSTEPT) ) +allocate( tpsdates( nsnbstept ) ) ! XSSERIES1(:,:,:,:,:,:)=0. XSSERIES2(:,:,:,:,:,:)=0. @@ -473,17 +471,4 @@ end if ! NSCOUNTD=0 ! Counting the nb of temporal series outputs ! -XSDATIME( 1,:)= TDTEXP%TDATE%YEAR -XSDATIME( 2,:)= TDTEXP%TDATE%MONTH -XSDATIME( 3,:)= TDTEXP%TDATE%DAY -XSDATIME( 4,:)= TDTEXP%TIME -XSDATIME( 5,:)= TDTSEG%TDATE%YEAR -XSDATIME( 6,:)= TDTSEG%TDATE%MONTH -XSDATIME( 7,:)= TDTSEG%TDATE%DAY -XSDATIME( 8,:)= TDTSEG%TIME -XSDATIME( 9,:)= TDTMOD%TDATE%YEAR -XSDATIME(10,:)= TDTMOD%TDATE%MONTH -XSDATIME(11,:)= TDTMOD%TDATE%DAY -XSDATIME(12,:)= TDTMOD%TIME -! END SUBROUTINE INI_SERIES_n diff --git a/src/MNH/ini_surfstationn.f90 b/src/MNH/ini_surfstationn.f90 index 3d8f085963fea14de3ebad7877b4d984f42e2f2c..8b2b47e73c091ec40ccdab80f4ac0aa8b334ba21 100644 --- a/src/MNH/ini_surfstationn.f90 +++ b/src/MNH/ini_surfstationn.f90 @@ -9,13 +9,12 @@ MODULE MODI_INI_SURFSTATION_n ! INTERFACE ! - SUBROUTINE INI_SURFSTATION_n(PTSTEP, TPDTSEG, PSEGLEN, & + SUBROUTINE INI_SURFSTATION_n(PTSTEP, PSEGLEN, & KRR, KSV, OUSETKE, & PLATOR, PLONOR ) ! USE MODD_TYPE_DATE REAL, INTENT(IN) :: PTSTEP ! time step -TYPE(DATE_TIME), INTENT(IN) :: TPDTSEG ! segment date and time REAL, INTENT(IN) :: PSEGLEN ! segment length INTEGER, INTENT(IN) :: KRR ! number of moist variables INTEGER, INTENT(IN) :: KSV ! number of scalar variables @@ -32,7 +31,7 @@ END INTERFACE END MODULE MODI_INI_SURFSTATION_n ! ! ######################################################## - SUBROUTINE INI_SURFSTATION_n(PTSTEP, TPDTSEG, PSEGLEN, & + SUBROUTINE INI_SURFSTATION_n(PTSTEP, PSEGLEN, & KRR, KSV, OUSETKE, & PLATOR, PLONOR ) ! ######################################################## @@ -66,7 +65,8 @@ END MODULE MODI_INI_SURFSTATION_n !! P. Tulet 15/01/2002 !! A. Lemonsu 19/11/2002 !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O -!! +! P. Wautelet 13/09/2019: budget: simplify and modernize date/time management +! !! -------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -94,7 +94,6 @@ IMPLICIT NONE ! ! REAL, INTENT(IN) :: PTSTEP ! time step -TYPE(DATE_TIME), INTENT(IN) :: TPDTSEG ! segment date and time REAL, INTENT(IN) :: PSEGLEN ! segment length INTEGER, INTENT(IN) :: KRR ! number of moist variables INTEGER, INTENT(IN) :: KSV ! number of scalar variables @@ -158,16 +157,13 @@ TYPE(STATION), INTENT(INOUT) :: TSTATION ! ! ISTORE = INT ( (PSEGLEN-XTSTEP) / TSTATION%STEP ) + 1 ! -! -! -ALLOCATE(TSTATION%TIME(ISTORE)) +allocate( tstation%tpdates( istore ) ) ALLOCATE(TSTATION%ERROR (NUMBSTAT)) ALLOCATE(TSTATION%X (NUMBSTAT)) ALLOCATE(TSTATION%Y (NUMBSTAT)) ALLOCATE(TSTATION%SV (ISTORE,NUMBSTAT,KSV)) ALLOCATE(TSTATION%TSRAD (ISTORE,NUMBSTAT)) ALLOCATE(TSTATION%ZS (NUMBSTAT)) -ALLOCATE(TSTATION%DATIME(16,ISTORE)) ALLOCATE(TSTATION%ZON (ISTORE,NUMBSTAT)) ALLOCATE(TSTATION%MER (ISTORE,NUMBSTAT)) ALLOCATE(TSTATION%W (ISTORE,NUMBSTAT)) @@ -197,7 +193,6 @@ ALLOCATE(TSTATION%DSTAOD (ISTORE,NUMBSTAT)) ALLOCATE(TSTATION%SFCO2 (ISTORE,NUMBSTAT)) ! TSTATION%ERROR = .FALSE. -TSTATION%TIME = XUNDEF TSTATION%ZON = XUNDEF TSTATION%MER = XUNDEF TSTATION%W = XUNDEF diff --git a/src/MNH/ion_attach_elec.f90 b/src/MNH/ion_attach_elec.f90 index bfecbd9a16f54dc039518c785c481438bda2e442..be198dae2f056e2effafcdb498216e65bfd213f1 100644 --- a/src/MNH/ion_attach_elec.f90 +++ b/src/MNH/ion_attach_elec.f90 @@ -91,7 +91,7 @@ USE MODD_ELEC_PARAM USE MODD_RAIN_ICE_DESCR USE MODD_RAIN_ICE_PARAM USE MODD_NSV, ONLY : NSV_ELECBEG, NSV_ELEC -USE MODD_BUDGET, ONLY : LBU_RSV +USE MODD_BUDGET, ONLY : LBU_RSV, NBUDGET_SV1 USE MODD_REF, ONLY : XTHVREFZ use mode_tools_ll, only: GET_INDICE_ll @@ -263,7 +263,7 @@ ENDDO ! IF (LBU_RSV) THEN DO JRR = 1, NSV_ELEC - CALL BUDGET(PSVS(:,:,:,JRR), 11+NSV_ELECBEG+JRR, 'NEUT_BU_RSV') + CALL BUDGET(PSVS(:,:,:,JRR), NBUDGET_SV1-1+NSV_ELECBEG+JRR-1, 'NEUT_BU_RSV') ENDDO END IF ! diff --git a/src/MNH/khko_notadjust.f90 b/src/MNH/khko_notadjust.f90 index 806c6c9652e2dd3515a1657eb1444d864d687637..533ed78e72a7074accfdc2afa5df7a4a368019d1 100644 --- a/src/MNH/khko_notadjust.f90 +++ b/src/MNH/khko_notadjust.f90 @@ -412,12 +412,12 @@ END IF ! ---------------------- ! ! -IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:) * PRHODJ(:,:,:),6,'COND_BU_RRV') -IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:) * PRHODJ(:,:,:),7,'COND_BU_RRC') -IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:) * PRHODJ(:,:,:),4,'COND_BU_RTH') +IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:) * PRHODJ(:,:,:),NBUDGET_RV,'COND_BU_RRV') +IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:) * PRHODJ(:,:,:),NBUDGET_RC,'COND_BU_RRC') +IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:) * PRHODJ(:,:,:),NBUDGET_TH,'COND_BU_RTH') IF (LBUDGET_SV) THEN - CALL BUDGET (PCNUCS(:,:,:) * PRHODJ(:,:,:),13+(NSV_C2R2BEG-1),'CEVA_BU_RSV') ! RCN - CALL BUDGET (PCCS(:,:,:) * PRHODJ(:,:,:),14+(NSV_C2R2BEG-1),'CEVA_BU_RSV') ! RCC + CALL BUDGET (PCNUCS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_C2R2BEG, 'CEVA_BU_RSV') ! RCN + CALL BUDGET (PCCS(:,:,:) * PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_C2R2BEG+1,'CEVA_BU_RSV') ! RCC END IF ! END SUBROUTINE KHKO_NOTADJUST diff --git a/src/MNH/les_budget.f90 b/src/MNH/les_budget.f90 index c11a00da0efb960488bc86fee48c44f705bf17f0..4ad63f048213dd5898db2b6cd09ae89c755a539b 100644 --- a/src/MNH/les_budget.f90 +++ b/src/MNH/les_budget.f90 @@ -53,12 +53,13 @@ END MODULE MODI_LES_BUDGET !* 0. DECLARATIONS ! ------------ ! +use modd_budget, only: NBUDGET_U, NBUDGET_V, NBUDGET_W, NBUDGET_TH, NBUDGET_TKE, & + NBUDGET_RV, NBUDGET_RC, NBUDGET_RR, NBUDGET_RI, NBUDGET_RS, NBUDGET_RG, NBUDGET_RH, NBUDGET_SV1 USE MODD_LES USE MODD_LES_BUDGET USE MODD_NSV ! USE MODI_SHUMAN -USE MODI_THL_RT_FROM_TH_R USE MODI_LES_VER_INT USE MODI_LES_MEAN_ll ! @@ -122,7 +123,7 @@ SELECT CASE (KBUDN) ! !* u ! - CASE(1) + CASE( NBUDGET_U ) CALL LES_BUDGET_ANOMALY(PVARS,'X',ZANOM) ! !* action in KE budget @@ -136,7 +137,7 @@ SELECT CASE (KBUDN) ! !* v ! - CASE(2) + CASE( NBUDGET_V ) CALL LES_BUDGET_ANOMALY(PVARS,'Y',ZANOM) ! !* action in KE budget @@ -150,7 +151,7 @@ SELECT CASE (KBUDN) ! !* w ! - CASE(3) + CASE( NBUDGET_W ) CALL LES_BUDGET_ANOMALY(PVARS,'Z',ZANOM) ! !* action in KE budget @@ -183,7 +184,7 @@ SELECT CASE (KBUDN) ! !* Th ! - CASE(4) + CASE( NBUDGET_TH ) XCURRENT_RTHLS = XCURRENT_RTHLS + PVARS - XCURRENT_RTHS CALL LES_BUDGET_ANOMALY(XCURRENT_RTHLS,'-',ZANOM) ! @@ -211,7 +212,7 @@ SELECT CASE (KBUDN) ! !* Tke ! - CASE(5) + CASE( NBUDGET_TKE ) ALLOCATE(ZTEND(IIU,IJU,IKU)) ZTEND(:,:,:) = (PVARS(:,:,:)-XCURRENT_RTKES(:,:,:)) / XCURRENT_RHODJ XCURRENT_RTKES = PVARS @@ -222,9 +223,9 @@ SELECT CASE (KBUDN) ! !* Rv, Rr, Ri, Rs, Rg, Rh ! - CASE(6,8,9,10,11,12) + CASE( NBUDGET_RV, NBUDGET_RR, NBUDGET_RI, NBUDGET_RS, NBUDGET_RG, NBUDGET_RH ) !* transformation into conservative variables: RT - XCURRENT_RRTS = XCURRENT_RRTS + PVARS(:,:,:) - XCURRENT_RRS(:,:,:,KBUDN-5) + XCURRENT_RRTS = XCURRENT_RRTS + PVARS(:,:,:) - XCURRENT_RRS(:,:,:,KBUDN-(NBUDGET_RV-1)) CALL LES_BUDGET_ANOMALY(XCURRENT_RRTS,'-',ZANOM) ! !* action in WRT budget @@ -244,16 +245,16 @@ SELECT CASE (KBUDN) X_LES_BU_RES_THLRT(:,ILES_BU) = X_LES_BU_RES_THLRT(:,ILES_BU) + ZLES_PROF(:) ! !* update fields - XCURRENT_RRS(:,:,:,KBUDN-5) = PVARS + XCURRENT_RRS(:,:,:,KBUDN-(NBUDGET_RV-1)) = PVARS XRT_ANOM = ZANOM ! !* Rc ! - CASE(7) + CASE( NBUDGET_RC ) !* transformation into conservative variables: theta_l; RT - XCURRENT_RRTS = XCURRENT_RRTS + PVARS(:,:,:) - XCURRENT_RRS(:,:,:,KBUDN-5) + XCURRENT_RRTS = XCURRENT_RRTS + PVARS(:,:,:) - XCURRENT_RRS(:,:,:,KBUDN-(NBUDGET_RV-1)) XCURRENT_RTHLS = XCURRENT_RTHLS - XCURRENT_L_O_EXN_CP & - * (PVARS(:,:,:) - XCURRENT_RRS(:,:,:,KBUDN-5)) + * (PVARS(:,:,:) - XCURRENT_RRS(:,:,:,KBUDN-(NBUDGET_RV-1))) !* anomaly of THL ALLOCATE(ZTHL_ANOM(IIU,IJU,NLES_K)) @@ -291,31 +292,31 @@ SELECT CASE (KBUDN) ! ! !* update fields - XCURRENT_RRS(:,:,:,KBUDN-5) = PVARS + XCURRENT_RRS(:,:,:,KBUDN-(NBUDGET_RV-1)) = PVARS XRT_ANOM = ZANOM XTHL_ANOM = ZTHL_ANOM DEALLOCATE(ZTHL_ANOM) ! !* SV ! - CASE(13:) + CASE( NBUDGET_SV1: ) CALL LES_BUDGET_ANOMALY(PVARS,'-',ZANOM) ! !* action in WSV budget - ZWORK_LES = ( ZANOM * XW_ANOM - XSV_ANOM(:,:,:,KBUDN-12) * XW_ANOM ) / & + ZWORK_LES = ( ZANOM * XW_ANOM - XSV_ANOM(:,:,:,KBUDN-(NBUDGET_SV1-1)) * XW_ANOM ) / & XCURRENT_TSTEP CALL LES_MEAN_ll( ZWORK_LES, LLES_CURRENT_CART_MASK, ZLES_PROF) - X_LES_BU_RES_WSV(:,ILES_BU,KBUDN-12) = X_LES_BU_RES_WSV(:,ILES_BU,KBUDN-12) + ZLES_PROF(:) + X_LES_BU_RES_WSV(:,ILES_BU,KBUDN-(NBUDGET_SV1-1)) = X_LES_BU_RES_WSV(:,ILES_BU,KBUDN-(NBUDGET_SV1-1)) + ZLES_PROF(:) ! !* action in SV2 budget - ZWORK_LES = ( ZANOM **2 - XSV_ANOM(:,:,:,KBUDN-12) **2 ) / & + ZWORK_LES = ( ZANOM **2 - XSV_ANOM(:,:,:,KBUDN-(NBUDGET_SV1-1)) **2 ) / & XCURRENT_TSTEP CALL LES_MEAN_ll( ZWORK_LES, LLES_CURRENT_CART_MASK, ZLES_PROF) - X_LES_BU_RES_SV2(:,ILES_BU,KBUDN-12) = X_LES_BU_RES_SV2(:,ILES_BU,KBUDN-12) + ZLES_PROF(:) + X_LES_BU_RES_SV2(:,ILES_BU,KBUDN-(NBUDGET_SV1-1)) = X_LES_BU_RES_SV2(:,ILES_BU,KBUDN-(NBUDGET_SV1-1)) + ZLES_PROF(:) ! !* update fields - XCURRENT_RSVS(:,:,:,KBUDN-12) = PVARS - XSV_ANOM(:,:,:,KBUDN-12) = ZANOM + XCURRENT_RSVS(:,:,:,KBUDN-(NBUDGET_SV1-1)) = PVARS + XSV_ANOM(:,:,:,KBUDN-(NBUDGET_SV1-1)) = ZANOM END SELECT ! diff --git a/src/MNH/les_ini_timestepn.f90 b/src/MNH/les_ini_timestepn.f90 index 9ab7943694bd079c354d4c74aec2029aa9c02e74..505067d9d0fa2bb49778609fb8bc01fff4989ad5 100644 --- a/src/MNH/les_ini_timestepn.f90 +++ b/src/MNH/les_ini_timestepn.f90 @@ -1,13 +1,8 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2002-2019 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- -!--------------- special set of characters for RCS information -!----------------------------------------------------------------- -! $Source$ $Revision$ -! MASDEV4_7 les 2006/08/30 18:38:45 -!----------------------------------------------------------------- ! ####################### MODULE MODI_LES_INI_TIMESTEP_n ! ####################### @@ -53,6 +48,7 @@ END MODULE MODI_LES_INI_TIMESTEP_n !! MODIFICATIONS !! ------------- !! Original 06/11/02 +! P. Wautelet 13/09/2019: budget: simplify and modernize date/time management !! !! -------------------------------------------------------------------------- ! @@ -73,6 +69,7 @@ USE MODD_TIME USE MODD_CONF USE MODD_LES_BUDGET ! +use mode_datetime, only: Datetime_distance USE MODE_ll USE MODE_MODELN_HANDLER ! @@ -148,25 +145,8 @@ NLES_TCOUNT = NLES_TCOUNT + 1 ! NLES_CURRENT_TCOUNT = NLES_TCOUNT ! -! -XLES_DATIME( 1,NLES_TCOUNT) = TDTEXP%TDATE%YEAR -XLES_DATIME( 2,NLES_TCOUNT) = TDTEXP%TDATE%MONTH -XLES_DATIME( 3,NLES_TCOUNT) = TDTEXP%TDATE%DAY -XLES_DATIME( 4,NLES_TCOUNT) = TDTEXP%TIME -XLES_DATIME( 5,NLES_TCOUNT) = TDTSEG%TDATE%YEAR -XLES_DATIME( 6,NLES_TCOUNT) = TDTSEG%TDATE%MONTH -XLES_DATIME( 7,NLES_TCOUNT) = TDTSEG%TDATE%DAY -XLES_DATIME( 8,NLES_TCOUNT) = TDTSEG%TIME -XLES_DATIME( 9,NLES_TCOUNT) = TDTMOD%TDATE%YEAR -XLES_DATIME(10,NLES_TCOUNT) = TDTMOD%TDATE%MONTH -XLES_DATIME(11,NLES_TCOUNT) = TDTMOD%TDATE%DAY -XLES_DATIME(12,NLES_TCOUNT) = TDTMOD%TIME -XLES_DATIME(13,NLES_TCOUNT) = TDTCUR%TDATE%YEAR -XLES_DATIME(14,NLES_TCOUNT) = TDTCUR%TDATE%MONTH -XLES_DATIME(15,NLES_TCOUNT) = TDTCUR%TDATE%DAY -XLES_DATIME(16,NLES_TCOUNT) = TDTCUR%TIME -! -XLES_TRAJT(NLES_TCOUNT,1) = (KTCOUNT-1) * XTSTEP +xles_dates(nles_tcount ) = tdtcur +call Datetime_distance( tdtseg, tdtcur, xles_times(nles_tcount ) ) ! !* forward-in-time time-step ! diff --git a/src/MNH/les_masksn.f90 b/src/MNH/les_masksn.f90 index 4add46bb679c571b27504ffe3a721408c882effe..eeb310b83d394af51c76b1a9ca2a4b5070fab7b3 100644 --- a/src/MNH/les_masksn.f90 +++ b/src/MNH/les_masksn.f90 @@ -1,13 +1,8 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2000-2019 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- -!--------------- special set of characters for RCS information -!----------------------------------------------------------------- -! $Source$ $Revision$ -! MASDEV4_7 les 2006/08/30 18:38:57 -!----------------------------------------------------------------- ! ################ MODULE MODI_LES_MASKS_n ! ################ @@ -55,19 +50,21 @@ END MODULE MODI_LES_MASKS_n !! ------------- !! Original 07/02/00 !! +! P. Wautelet 13/09/2019: budget: simplify and modernize date/time management !! -------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! -USE MODD_LES -USE MODD_LES_n -USE MODD_FIELD_n USE MODD_CONF_n -USE MODD_TIME_n USE MODD_DYN_n +USE MODD_FIELD_n +USE MODD_LES +USE MODD_LES_n USE MODD_TIME +USE MODD_TIME_n ! +use mode_datetime, only: Datetime_distance USE MODE_ll USE MODE_MODELN_HANDLER ! @@ -121,25 +118,8 @@ NLES_TCOUNT = NLES_TCOUNT + 1 ! NLES_CURRENT_TCOUNT = NLES_TCOUNT ! -! -XLES_DATIME( 1,NLES_TCOUNT) = TDTEXP%TDATE%YEAR -XLES_DATIME( 2,NLES_TCOUNT) = TDTEXP%TDATE%MONTH -XLES_DATIME( 3,NLES_TCOUNT) = TDTEXP%TDATE%DAY -XLES_DATIME( 4,NLES_TCOUNT) = TDTEXP%TIME -XLES_DATIME( 5,NLES_TCOUNT) = TDTSEG%TDATE%YEAR -XLES_DATIME( 6,NLES_TCOUNT) = TDTSEG%TDATE%MONTH -XLES_DATIME( 7,NLES_TCOUNT) = TDTSEG%TDATE%DAY -XLES_DATIME( 8,NLES_TCOUNT) = TDTSEG%TIME -XLES_DATIME( 9,NLES_TCOUNT) = TDTMOD%TDATE%YEAR -XLES_DATIME(10,NLES_TCOUNT) = TDTMOD%TDATE%MONTH -XLES_DATIME(11,NLES_TCOUNT) = TDTMOD%TDATE%DAY -XLES_DATIME(12,NLES_TCOUNT) = TDTMOD%TIME -XLES_DATIME(13,NLES_TCOUNT) = TDTCUR%TDATE%YEAR -XLES_DATIME(14,NLES_TCOUNT) = TDTCUR%TDATE%MONTH -XLES_DATIME(15,NLES_TCOUNT) = TDTCUR%TDATE%DAY -XLES_DATIME(16,NLES_TCOUNT) = TDTCUR%TIME -! -XLES_TRAJT(NLES_TCOUNT,1) = (KTCOUNT-1) * XTSTEP +xles_dates(nles_tcount ) = tdtcur +call Datetime_distance( tdtseg, tdtcur, xles_times(nles_tcount ) ) ! !------------------------------------------------------------------------------- ! diff --git a/src/MNH/lima.f90 b/src/MNH/lima.f90 index 851660cf9fc9c96c62d3af27de1c3667d02115fe..2711c496a1f700f1f8c0a6dab02257f3779996ad 100644 --- a/src/MNH/lima.f90 +++ b/src/MNH/lima.f90 @@ -102,7 +102,9 @@ END MODULE MODI_LIMA !* 0. DECLARATIONS ! ------------ USE MODD_BUDGET, ONLY: LBU_ENABLE, LBUDGET_TH, LBUDGET_RV, LBUDGET_RC, LBUDGET_RR, & - LBUDGET_RI, LBUDGET_RS, LBUDGET_RG, LBUDGET_RH, LBUDGET_SV + LBUDGET_RI, LBUDGET_RS, LBUDGET_RG, LBUDGET_RH, LBUDGET_SV, & + NBUDGET_TH, NBUDGET_RV, NBUDGET_RC, NBUDGET_RR, NBUDGET_RI, & + NBUDGET_RS, NBUDGET_RG, NBUDGET_RH, NBUDGET_SV1 USE MODD_CLOUDPAR_n, ONLY: NSPLITR, NSPLITG USE MODD_CST, ONLY: XCI, XCL, XCPD, XCPV, XLSTT, XLVTT, XTT, XRHOLW, XP00, XRD USE MODD_IO, ONLY: TFILEDATA @@ -560,14 +562,14 @@ IF (LCOLD .AND. LSNOW) THEN END IF ! IF(LBU_ENABLE) THEN - IF (LBUDGET_RC .AND. LWARM .AND. LRAIN) CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'CORR_BU_RRC') - IF (LBUDGET_RR .AND. LWARM .AND. LRAIN) CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'CORR_BU_RRR') - IF (LBUDGET_RI .AND. LCOLD .AND. LSNOW) CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'CORR_BU_RRI') - IF (LBUDGET_RI .AND. LCOLD .AND. LSNOW) CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:),10 , 'CORR_BU_RRS') + IF (LBUDGET_RC .AND. LWARM .AND. LRAIN) CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'CORR_BU_RRC') + IF (LBUDGET_RR .AND. LWARM .AND. LRAIN) CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'CORR_BU_RRR') + IF (LBUDGET_RI .AND. LCOLD .AND. LSNOW) CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'CORR_BU_RRI') + IF (LBUDGET_RI .AND. LCOLD .AND. LSNOW) CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS, 'CORR_BU_RRS') IF (LBUDGET_SV) THEN - IF (LWARM .AND. LRAIN) CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC , 'CORR_BU_RSV') - IF (LWARM .AND. LRAIN) CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR , 'CORR_BU_RSV') - IF (LCOLD .AND. LSNOW) CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI , 'CORR_BU_RSV') + IF (LWARM .AND. LRAIN) CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NC, 'CORR_BU_RSV') + IF (LWARM .AND. LRAIN) CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NR, 'CORR_BU_RSV') + IF (LCOLD .AND. LSNOW) CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NI, 'CORR_BU_RSV') END IF END IF !------------------------------------------------------------------------------- @@ -606,17 +608,17 @@ ZTHS(:,:,:) = ZT(:,:,:) / ZEXN(:,:,:) * ZINV_TSTEP ! Call budgets ! IF(LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'SEDI_BU_RTH') - IF (LBUDGET_RC .AND. LWARM .AND. LSEDC) CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'SEDI_BU_RRC') - IF (LBUDGET_RR .AND. LWARM .AND. LRAIN) CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'SEDI_BU_RRR') - IF (LBUDGET_RI .AND. LCOLD .AND. LSEDI) CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'SEDI_BU_RRI') - IF (LBUDGET_RS .AND. LCOLD .AND. LSNOW) CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'SEDI_BU_RRS') - IF (LBUDGET_RG .AND. LCOLD .AND. LSNOW) CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'SEDI_BU_RRG') - IF (LBUDGET_RH .AND. LCOLD .AND. LHAIL) CALL BUDGET (ZRHS(:,:,:)*PRHODJ(:,:,:), 12 , 'SEDI_BU_RRH') + IF (LBUDGET_TH) CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'SEDI_BU_RTH') + IF (LBUDGET_RC .AND. LWARM .AND. LSEDC) CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'SEDI_BU_RRC') + IF (LBUDGET_RR .AND. LWARM .AND. LRAIN) CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'SEDI_BU_RRR') + IF (LBUDGET_RI .AND. LCOLD .AND. LSEDI) CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'SEDI_BU_RRI') + IF (LBUDGET_RS .AND. LCOLD .AND. LSNOW) CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS, 'SEDI_BU_RRS') + IF (LBUDGET_RG .AND. LCOLD .AND. LSNOW) CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG, 'SEDI_BU_RRG') + IF (LBUDGET_RH .AND. LCOLD .AND. LHAIL) CALL BUDGET (ZRHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RH, 'SEDI_BU_RRH') IF (LBUDGET_SV) THEN - IF (LWARM .AND. LSEDC) CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC , 'SEDI_BU_RSV') - IF (LWARM .AND. LRAIN) CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR , 'SEDI_BU_RSV') - IF (LCOLD .AND. LSEDI) CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI , 'SEDI_BU_RSV') + IF (LWARM .AND. LSEDC) CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NC, 'SEDI_BU_RSV') + IF (LWARM .AND. LRAIN) CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NR, 'SEDI_BU_RSV') + IF (LCOLD .AND. LSEDI) CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NI, 'SEDI_BU_RSV') END IF END IF ! @@ -633,8 +635,8 @@ IF (LWARM .AND. LDEPOC) THEN PINDEP(:,:) = XVDEPOC * ZRCT(:,:,IKB) * PRHODREF(:,:,IKB) /XRHOLW END WHERE ! - IF ( LBUDGET_RC ) CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:),7 ,'DEPO_BU_RRC') - IF ( LBUDGET_SV ) CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'DEPO_BU_RSV') + IF ( LBUDGET_RC ) CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'DEPO_BU_RRC') + IF ( LBUDGET_SV ) CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NC, 'DEPO_BU_RSV') END IF ! ! @@ -650,11 +652,11 @@ IF (LWARM .AND. LRAIN) THEN ZCRS(:,:,:) = ZCRS(:,:,:) + Z_CR_CVRC(:,:,:)/PTSTEP ! IF(LBU_ENABLE) THEN - IF (LBUDGET_RC) CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'R2C1_BU_RRC') - IF (LBUDGET_RR) CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'R2C1_BU_RRR') + IF (LBUDGET_RC) CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'R2C1_BU_RRC') + IF (LBUDGET_RR) CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'R2C1_BU_RRR') IF (LBUDGET_SV) THEN - CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC , 'R2C1_BU_RSV') - CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR , 'R2C1_BU_RSV') + CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NC , 'R2C1_BU_RSV') + CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NR , 'R2C1_BU_RSV') END IF END IF END IF @@ -1476,163 +1478,163 @@ IF ( LCOLD .AND. LHHONI) PSVS(:,:,:,NSV_LIMA_HOM_HAZE) = ZHOMFT(:,:,:) *ZINV_TST IF(LBU_ENABLE) THEN IF (LBUDGET_TH) THEN ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_EVAP(:,:,:)/PTSTEP - CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'REVA_BU_RTH') + CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'REVA_BU_RTH') ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_HONC(:,:,:)/PTSTEP - CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'HONC_BU_RTH') + CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'HONC_BU_RTH') ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_HONR(:,:,:)/PTSTEP - CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'HONR_BU_RTH') + CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'HONR_BU_RTH') ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_DEPS(:,:,:)/PTSTEP - CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'DEPS_BU_RTH') + CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'DEPS_BU_RTH') ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_DEPG(:,:,:)/PTSTEP - CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'DEPG_BU_RTH') + CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'DEPG_BU_RTH') ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_IMLT(:,:,:)/PTSTEP - CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'IMLT_BU_RTH') + CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'IMLT_BU_RTH') ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_BERFI(:,:,:)/PTSTEP - CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'BERFI_BU_RTH') + CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'BERFI_BU_RTH') ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_RIM(:,:,:)/PTSTEP - CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'RIM_BU_RTH') + CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'RIM_BU_RTH') ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_ACC(:,:,:)/PTSTEP - CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'ACC_BU_RTH') + CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'ACC_BU_RTH') ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_CFRZ(:,:,:)/PTSTEP - CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'CFRZ_BU_RTH') + CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'CFRZ_BU_RTH') ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_WETG(:,:,:)/PTSTEP - CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'WETG_BU_RTH') + CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'WETG_BU_RTH') ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_DRYG(:,:,:)/PTSTEP - CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'DRYG_BU_RTH') + CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'DRYG_BU_RTH') ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_GMLT(:,:,:)/PTSTEP - CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'GMLT_BU_RTH') + CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'GMLT_BU_RTH') END IF IF (LBUDGET_RV) THEN ZRVS(:,:,:) = ZRVS(:,:,:) - ZTOT_RR_EVAP(:,:,:)/PTSTEP - CALL BUDGET (ZRVS(:,:,:)*PRHODJ(:,:,:), 6 , 'REVA_BU_RRV') + CALL BUDGET (ZRVS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RV, 'REVA_BU_RRV') ZRVS(:,:,:) = ZRVS(:,:,:) - ZTOT_RS_DEPS(:,:,:)/PTSTEP - CALL BUDGET (ZRVS(:,:,:)*PRHODJ(:,:,:), 6 , 'DEPS_BU_RRV') + CALL BUDGET (ZRVS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RV, 'DEPS_BU_RRV') ZRVS(:,:,:) = ZRVS(:,:,:) - ZTOT_RG_DEPG(:,:,:)/PTSTEP - CALL BUDGET (ZRVS(:,:,:)*PRHODJ(:,:,:), 6 , 'DEPG_BU_RRV') + CALL BUDGET (ZRVS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RV, 'DEPG_BU_RRV') END IF IF (LBUDGET_RC) THEN ZRCS(:,:,:) = ZRCS(:,:,:) + ZTOT_RC_AUTO(:,:,:)/PTSTEP - CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'AUTO_BU_RRC') + CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'AUTO_BU_RRC') ZRCS(:,:,:) = ZRCS(:,:,:) + ZTOT_RC_ACCR(:,:,:)/PTSTEP - CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'ACCR_BU_RRC') + CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'ACCR_BU_RRC') ! impact of rain evap !!!!!! ZRCS(:,:,:) = ZRCS(:,:,:) - CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'REVA_BU_RRC') + CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'REVA_BU_RRC') ZRCS(:,:,:) = ZRCS(:,:,:) + ZTOT_RC_HONC(:,:,:)/PTSTEP - CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'HONC_BU_RRC') + CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'HONC_BU_RRC') ZRCS(:,:,:) = ZRCS(:,:,:) + ZTOT_RC_IMLT(:,:,:)/PTSTEP - CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'IMLT_BU_RRC') + CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'IMLT_BU_RRC') ZRCS(:,:,:) = ZRCS(:,:,:) + ZTOT_RC_BERFI(:,:,:)/PTSTEP - CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'BERFI_BU_RRC') + CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'BERFI_BU_RRC') ZRCS(:,:,:) = ZRCS(:,:,:) + ZTOT_RC_RIM(:,:,:)/PTSTEP - CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'RIM_BU_RRC') + CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'RIM_BU_RRC') ZRCS(:,:,:) = ZRCS(:,:,:) + ZTOT_RC_WETG(:,:,:)/PTSTEP - CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'WETG_BU_RRC') + CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'WETG_BU_RRC') ZRCS(:,:,:) = ZRCS(:,:,:) + ZTOT_RC_DRYG(:,:,:)/PTSTEP - CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'DRYG_BU_RRC') + CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'DRYG_BU_RRC') ZRCS(:,:,:) = ZRCS(:,:,:) - ZTOT_RR_CVRC(:,:,:)/PTSTEP - CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'CVRC_BU_RRC') + CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'CVRC_BU_RRC') END IF IF (LBUDGET_RR) THEN ZRRS(:,:,:) = ZRRS(:,:,:) - ZTOT_RC_AUTO(:,:,:)/PTSTEP - CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'AUTO_BU_RRR') + CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'AUTO_BU_RRR') ZRRS(:,:,:) = ZRRS(:,:,:) - ZTOT_RC_ACCR(:,:,:)/PTSTEP - CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'ACCR_BU_RRR') + CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'ACCR_BU_RRR') ZRRS(:,:,:) = ZRRS(:,:,:) + ZTOT_RR_EVAP(:,:,:)/PTSTEP - CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'REVA_BU_RRR') + CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'REVA_BU_RRR') ZRRS(:,:,:) = ZRRS(:,:,:) + ZTOT_RR_HONR(:,:,:)/PTSTEP - CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'HONR_BU_RRR') + CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'HONR_BU_RRR') ZRRS(:,:,:) = ZRRS(:,:,:) + ZTOT_RR_ACC(:,:,:)/PTSTEP - CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'ACC_BU_RRR') + CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'ACC_BU_RRR') ZRRS(:,:,:) = ZRRS(:,:,:) + ZTOT_RR_CFRZ(:,:,:)/PTSTEP - CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'CFRZ_BU_RRR') + CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'CFRZ_BU_RRR') ZRRS(:,:,:) = ZRRS(:,:,:) + ZTOT_RR_WETG(:,:,:)/PTSTEP - CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'WETG_BU_RRR') + CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'WETG_BU_RRR') ZRRS(:,:,:) = ZRRS(:,:,:) + ZTOT_RR_DRYG(:,:,:)/PTSTEP - CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'DRYG_BU_RRR') + CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'DRYG_BU_RRR') ZRRS(:,:,:) = ZRRS(:,:,:) + ZTOT_RR_GMLT(:,:,:)/PTSTEP - CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'GMLT_BU_RRR') + CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'GMLT_BU_RRR') ZRRS(:,:,:) = ZRRS(:,:,:) + ZTOT_RR_CVRC(:,:,:)/PTSTEP - CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'CVRC_BU_RRR') + CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'CVRC_BU_RRR') END IF IF (LBUDGET_RI) THEN ZRIS(:,:,:) = ZRIS(:,:,:) - ZTOT_RC_HONC(:,:,:)/PTSTEP - CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'HONC_BU_RRI') + CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'HONC_BU_RRI') ZRIS(:,:,:) = ZRIS(:,:,:) + ZTOT_RI_CNVI(:,:,:)/PTSTEP - CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'CNVI_BU_RRI') + CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'CNVI_BU_RRI') ZRIS(:,:,:) = ZRIS(:,:,:) + ZTOT_RI_CNVS(:,:,:)/PTSTEP - CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'CNVS_BU_RRI') + CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'CNVS_BU_RRI') ZRIS(:,:,:) = ZRIS(:,:,:) + ZTOT_RI_AGGS(:,:,:)/PTSTEP - CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'AGGS_BU_RRI') + CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'AGGS_BU_RRI') ZRIS(:,:,:) = ZRIS(:,:,:) - ZTOT_RC_IMLT(:,:,:)/PTSTEP - CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'IMLT_BU_RRI') + CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'IMLT_BU_RRI') ZRIS(:,:,:) = ZRIS(:,:,:) - ZTOT_RC_BERFI(:,:,:)/PTSTEP - CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'BERFI_BU_RRI') + CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'BERFI_BU_RRI') ZRIS(:,:,:) = ZRIS(:,:,:) + ZTOT_RI_HMS(:,:,:)/PTSTEP - CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'HMS_BU_RRI') + CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'HMS_BU_RRI') ZRIS(:,:,:) = ZRIS(:,:,:) + ZTOT_RI_CFRZ(:,:,:)/PTSTEP - CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'CFRZ_BU_RRI') + CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'CFRZ_BU_RRI') ZRIS(:,:,:) = ZRIS(:,:,:) + ZTOT_RI_WETG(:,:,:)/PTSTEP - CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'WETG_BU_RRI') + CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'WETG_BU_RRI') ZRIS(:,:,:) = ZRIS(:,:,:) + ZTOT_RI_DRYG(:,:,:)/PTSTEP - CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'DRYG_BU_RRI') + CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'DRYG_BU_RRI') ZRIS(:,:,:) = ZRIS(:,:,:) + ZTOT_RI_HMG(:,:,:)/PTSTEP - CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'HMG_BU_RRI') + CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'HMG_BU_RRI') END IF IF (LBUDGET_RS) THEN ZRSS(:,:,:) = ZRSS(:,:,:) - ZTOT_RI_CNVI(:,:,:)/PTSTEP - CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'CNVI_BU_RRS') + CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS, 'CNVI_BU_RRS') ZRSS(:,:,:) = ZRSS(:,:,:) + ZTOT_RS_DEPS(:,:,:)/PTSTEP - CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'DEPS_BU_RRS') + CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS, 'DEPS_BU_RRS') ZRSS(:,:,:) = ZRSS(:,:,:) - ZTOT_RI_CNVS(:,:,:)/PTSTEP - CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'CNVS_BU_RRS') + CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS, 'CNVS_BU_RRS') ZRSS(:,:,:) = ZRSS(:,:,:) - ZTOT_RI_AGGS(:,:,:)/PTSTEP - CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'AGGS_BU_RRS') + CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS, 'AGGS_BU_RRS') ZRSS(:,:,:) = ZRSS(:,:,:) + ZTOT_RS_RIM(:,:,:)/PTSTEP - CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'RIM_BU_RRS') + CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS, 'RIM_BU_RRS') ZRSS(:,:,:) = ZRSS(:,:,:) + ZTOT_RS_HMS(:,:,:)/PTSTEP - CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'HMS_BU_RRS') + CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS, 'HMS_BU_RRS') ZRSS(:,:,:) = ZRSS(:,:,:) + ZTOT_RS_ACC(:,:,:)/PTSTEP - CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'ACC_BU_RRS') + CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS, 'ACC_BU_RRS') ZRSS(:,:,:) = ZRSS(:,:,:) + ZTOT_RS_CMEL(:,:,:)/PTSTEP - CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'CMEL_BU_RRS') + CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS, 'CMEL_BU_RRS') ZRSS(:,:,:) = ZRSS(:,:,:) + ZTOT_RS_WETG(:,:,:)/PTSTEP - CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'WETG_BU_RRS') + CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS, 'WETG_BU_RRS') ZRSS(:,:,:) = ZRSS(:,:,:) + ZTOT_RS_DRYG(:,:,:)/PTSTEP - CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'DRYG_BU_RRS') + CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS, 'DRYG_BU_RRS') END IF IF (LBUDGET_RG) THEN ZRGS(:,:,:) = ZRGS(:,:,:) - ZTOT_RR_HONR(:,:,:)/PTSTEP - CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'HONR_BU_RRG') + CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG, 'HONR_BU_RRG') ZRGS(:,:,:) = ZRGS(:,:,:) + ZTOT_RG_DEPG(:,:,:)/PTSTEP - CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'DEPG_BU_RRG') + CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG, 'DEPG_BU_RRG') ZRGS(:,:,:) = ZRGS(:,:,:) + ZTOT_RG_RIM(:,:,:)/PTSTEP - CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'RIM_BU_RRG') + CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG, 'RIM_BU_RRG') ZRGS(:,:,:) = ZRGS(:,:,:) + ZTOT_RG_ACC(:,:,:)/PTSTEP - CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'ACC_BU_RRG') + CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG, 'ACC_BU_RRG') ZRGS(:,:,:) = ZRGS(:,:,:) - ZTOT_RS_CMEL(:,:,:)/PTSTEP - CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'CMEL_BU_RRG') + CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG, 'CMEL_BU_RRG') ZRGS(:,:,:) = ZRGS(:,:,:) - ZTOT_RR_CFRZ(:,:,:)/PTSTEP - ZTOT_RI_CFRZ(:,:,:)/PTSTEP - CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'CFRZ_BU_RRG') + CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG, 'CFRZ_BU_RRG') ZRGS(:,:,:) = ZRGS(:,:,:) + ZTOT_RG_WETG(:,:,:)/PTSTEP - CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'WETG_BU_RRG') + CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG, 'WETG_BU_RRG') ZRGS(:,:,:) = ZRGS(:,:,:) + ZTOT_RG_DRYG(:,:,:)/PTSTEP - CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'DRYG_BU_RRG') + CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG, 'DRYG_BU_RRG') ZRGS(:,:,:) = ZRGS(:,:,:) + ZTOT_RG_HMG(:,:,:)/PTSTEP - CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'HMG_BU_RRG') + CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG, 'HMG_BU_RRG') ZRGS(:,:,:) = ZRGS(:,:,:) - ZTOT_RR_GMLT(:,:,:)/PTSTEP - CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'GMLT_BU_RRG') + CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG, 'GMLT_BU_RRG') END IF IF (LBUDGET_RH) THEN ZRHS(:,:,:) = ZRHS(:,:,:) + ZTOT_RH_WETG(:,:,:)/PTSTEP - CALL BUDGET (ZRHS(:,:,:)*PRHODJ(:,:,:), 12 , 'WETG_BU_RRH') + CALL BUDGET (ZRHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RH, 'WETG_BU_RRH') END IF IF (LBUDGET_SV) THEN @@ -1640,75 +1642,75 @@ IF(LBU_ENABLE) THEN ! Cloud droplets ! ZCCS(:,:,:) = ZCCS(:,:,:) + ZTOT_CC_SELF(:,:,:)/PTSTEP - CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC , 'SELF_BU_RSV') + CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NC, 'SELF_BU_RSV') ZCCS(:,:,:) = ZCCS(:,:,:) + ZTOT_CC_AUTO(:,:,:)/PTSTEP - CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC , 'AUTO_BU_RSV') + CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NC, 'AUTO_BU_RSV') ZCCS(:,:,:) = ZCCS(:,:,:) + ZTOT_CC_ACCR(:,:,:)/PTSTEP - CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC , 'ACCR_BU_RSV') + CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NC, 'ACCR_BU_RSV') ! impact of rain evap !!!!!! ZCCS(:,:,:) = ZCCS(:,:,:) - CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC , 'REVA_BU_RSV') + CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NC, 'REVA_BU_RSV') ZCCS(:,:,:) = ZCCS(:,:,:) + ZTOT_CC_HONC(:,:,:)/PTSTEP - CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC , 'HONC_BU_RSV') + CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NC, 'HONC_BU_RSV') ZCCS(:,:,:) = ZCCS(:,:,:) + ZTOT_CC_IMLT(:,:,:)/PTSTEP - CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC , 'IMLT_BU_RSV') + CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NC, 'IMLT_BU_RSV') ZCCS(:,:,:) = ZCCS(:,:,:) + ZTOT_CC_RIM(:,:,:)/PTSTEP - CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC , 'RIM_BU_RSV') + CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NC, 'RIM_BU_RSV') ZCCS(:,:,:) = ZCCS(:,:,:) + ZTOT_CC_WETG(:,:,:)/PTSTEP - CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC , 'WETG_BU_RSV') + CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NC, 'WETG_BU_RSV') ZCCS(:,:,:) = ZCCS(:,:,:) + ZTOT_CC_DRYG(:,:,:)/PTSTEP - CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC , 'DRYG_BU_RSV') + CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NC, 'DRYG_BU_RSV') ZCCS(:,:,:) = ZCCS(:,:,:) - ZTOT_CR_CVRC(:,:,:)/PTSTEP - CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC , 'CVRC_BU_RSV') + CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NC, 'CVRC_BU_RSV') ! ! Rain drops ! ZCRS(:,:,:) = ZCRS(:,:,:) + ZTOT_CR_AUTO(:,:,:)/PTSTEP - CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR , 'AUTO_BU_RSV') + CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NR, 'AUTO_BU_RSV') ZCRS(:,:,:) = ZCRS(:,:,:) + ZTOT_CR_SCBU(:,:,:)/PTSTEP - CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR , 'SCBU_BU_RSV') + CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NR, 'SCBU_BU_RSV') ! Rain evaporation !!!!!!!!!!!!! ZCRS(:,:,:) = ZCRS(:,:,:) - CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR , 'REVA_BU_RSV') + CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NR, 'REVA_BU_RSV') ZCRS(:,:,:) = ZCRS(:,:,:) + ZTOT_CR_BRKU(:,:,:)/PTSTEP - CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR , 'BRKU_BU_RSV') + CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NR, 'BRKU_BU_RSV') ZCRS(:,:,:) = ZCRS(:,:,:) + ZTOT_CR_HONR(:,:,:)/PTSTEP - CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR , 'HONR_BU_RSV') + CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NR, 'HONR_BU_RSV') ZCRS(:,:,:) = ZCRS(:,:,:) + ZTOT_CR_ACC(:,:,:)/PTSTEP - CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR , 'ACC_BU_RSV') + CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NR, 'ACC_BU_RSV') ZCRS(:,:,:) = ZCRS(:,:,:) + ZTOT_CR_CFRZ(:,:,:)/PTSTEP - CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR , 'CFRZ_BU_RSV') + CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NR, 'CFRZ_BU_RSV') ZCRS(:,:,:) = ZCRS(:,:,:) + ZTOT_CR_WETG(:,:,:)/PTSTEP - CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR , 'WETG_BU_RSV') + CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NR, 'WETG_BU_RSV') ZCRS(:,:,:) = ZCRS(:,:,:) + ZTOT_CR_DRYG(:,:,:)/PTSTEP - CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR , 'DRYG_BU_RSV') + CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NR, 'DRYG_BU_RSV') ZCRS(:,:,:) = ZCRS(:,:,:) + ZTOT_CR_GMLT(:,:,:)/PTSTEP - CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR , 'GMLT_BU_RSV') + CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NR, 'GMLT_BU_RSV') ZCRS(:,:,:) = ZCRS(:,:,:) + ZTOT_CR_CVRC(:,:,:)/PTSTEP - CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR , 'CVRC_BU_RSV') + CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NR, 'CVRC_BU_RSV') ! ! Ice crystals ! ZCIS(:,:,:) = ZCIS(:,:,:) - ZTOT_CC_HONC(:,:,:)/PTSTEP - CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI , 'HONC_BU_RSV') + CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NI, 'HONC_BU_RSV') ZCIS(:,:,:) = ZCIS(:,:,:) + ZTOT_CI_CNVI(:,:,:)/PTSTEP - CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI , 'CNVI_BU_RSV') + CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NI, 'CNVI_BU_RSV') ZCIS(:,:,:) = ZCIS(:,:,:) + ZTOT_CI_CNVS(:,:,:)/PTSTEP - CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI , 'CNVS_BU_RSV') + CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NI, 'CNVS_BU_RSV') ZCIS(:,:,:) = ZCIS(:,:,:) + ZTOT_CI_AGGS(:,:,:)/PTSTEP - CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI , 'AGGS_BU_RSV') + CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NI, 'AGGS_BU_RSV') ZCIS(:,:,:) = ZCIS(:,:,:) - ZTOT_CC_IMLT(:,:,:)/PTSTEP - CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI , 'IMLT_BU_RSV') + CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NI, 'IMLT_BU_RSV') ZCIS(:,:,:) = ZCIS(:,:,:) + ZTOT_CI_HMS(:,:,:)/PTSTEP - CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI , 'HMS_BU_RSV') + CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NI, 'HMS_BU_RSV') ZCIS(:,:,:) = ZCIS(:,:,:) + ZTOT_CI_CFRZ(:,:,:)/PTSTEP - CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI , 'CFRZ_BU_RSV') + CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NI, 'CFRZ_BU_RSV') ZCIS(:,:,:) = ZCIS(:,:,:) + ZTOT_CI_WETG(:,:,:)/PTSTEP - CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI , 'WETG_BU_RSV') + CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NI, 'WETG_BU_RSV') ZCIS(:,:,:) = ZCIS(:,:,:) + ZTOT_CI_DRYG(:,:,:)/PTSTEP - CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI , 'DRYG_BU_RSV') + CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NI, 'DRYG_BU_RSV') ZCIS(:,:,:) = ZCIS(:,:,:) + ZTOT_CI_HMG(:,:,:)/PTSTEP - CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI , 'HMG_BU_RSV') + CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NI, 'HMG_BU_RSV') END IF !!$ ZTOT_RC_EVAP(I1(II),I2(II),I3(II)) = ZTOT_RC_EVAP(I1(II),I2(II),I3(II)) + Z_RC_EVAP(II) * ZMAXTIME(II) !!$ ZTOT_CC_EVAP(I1(II),I2(II),I3(II)) = ZTOT_CC_EVAP(I1(II),I2(II),I3(II)) + Z_CC_EVAP(II) * ZMAXTIME(II) diff --git a/src/MNH/lima_adjust.f90 b/src/MNH/lima_adjust.f90 index 752c861b9d9792eed74add2178143552c425b9c1..4b2056f2041e1b45ffe98c892b4f5cee2fe5d33d 100644 --- a/src/MNH/lima_adjust.f90 +++ b/src/MNH/lima_adjust.f90 @@ -1197,21 +1197,21 @@ END IF ! ! IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:) * PRHODJ(:,:,:),4,'CEDS_BU_RTH') - IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:) * PRHODJ(:,:,:),6,'CEDS_BU_RRV') - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:) * PRHODJ(:,:,:),7,'CEDS_BU_RRC') - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:) * PRHODJ(:,:,:),9,'CEDS_BU_RRI') + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:) * PRHODJ(:,:,:),NBUDGET_TH,'CEDS_BU_RTH') + IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:) * PRHODJ(:,:,:),NBUDGET_RV,'CEDS_BU_RRV') + IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:) * PRHODJ(:,:,:),NBUDGET_RC,'CEDS_BU_RRC') + IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:) * PRHODJ(:,:,:),NBUDGET_RI,'CEDS_BU_RRI') IF (LBUDGET_SV) THEN - CALL BUDGET (PCCS(:,:,:) * PRHODJ(:,:,:),12+NSV_LIMA_NC,'CEDS_BU_RSV') ! RCC - CALL BUDGET (PCIS(:,:,:) * PRHODJ(:,:,:),12+NSV_LIMA_NI,'CEDS_BU_RSV') ! RCI + CALL BUDGET (PCCS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_NC,'CEDS_BU_RSV') ! RCC + CALL BUDGET (PCIS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_NI,'CEDS_BU_RSV') ! RCI IF (NMOD_CCN .GE. 1) THEN DO JL = 1, NMOD_CCN - CALL BUDGET (PNFS(:,:,:,JL)*PRHODJ(:,:,:),12+NSV_LIMA_CCN_FREE+JL-1,'CEDS_BU_RSV') ! RCC + CALL BUDGET (PNFS(:,:,:,JL)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_CCN_FREE+JL-1,'CEDS_BU_RSV') ! RCC END DO END IF IF (NMOD_IFN .GE. 1) THEN DO JL = 1, NMOD_IFN - CALL BUDGET (PIFS(:,:,:,JL)*PRHODJ(:,:,:),12+NSV_LIMA_IFN_FREE+JL-1,'CEDS_BU_RSV') ! RCC + CALL BUDGET (PIFS(:,:,:,JL)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_IFN_FREE+JL-1,'CEDS_BU_RSV') ! RCC END DO END IF END IF diff --git a/src/MNH/lima_cold.f90 b/src/MNH/lima_cold.f90 index 28b88ca60f3aa5848d53e9e1863dc8ed44ecf251..587d2712dee644134ef166a7e8021a5bb42a0b5a 100644 --- a/src/MNH/lima_cold.f90 +++ b/src/MNH/lima_cold.f90 @@ -309,12 +309,12 @@ CALL LIMA_COLD_SEDIMENTATION (OSEDI, KSPLITG, PTSTEP, KMI, & PINPRH ) IF (LBU_ENABLE) THEN - IF (LBUDGET_RI .AND. OSEDI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9 ,'SEDI_BU_RRI') - IF (LBUDGET_RS .AND. LSNOW) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10 ,'SEDI_BU_RRS') - IF (LBUDGET_RG .AND. LSNOW) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11 ,'SEDI_BU_RRG') - IF (LBUDGET_RH .AND. LHAIL) CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),12 ,'SEDI_BU_RRH') + IF (LBUDGET_RI .AND. OSEDI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI,'SEDI_BU_RRI') + IF (LBUDGET_RS .AND. LSNOW) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS,'SEDI_BU_RRS') + IF (LBUDGET_RG .AND. LSNOW) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG,'SEDI_BU_RRG') + IF (LBUDGET_RH .AND. LHAIL) CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RH,'SEDI_BU_RRH') IF (LBUDGET_SV) THEN - IF (OSEDI) CALL BUDGET (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'SEDI_BU_RSV') ! RCI + IF (OSEDI) CALL BUDGET (PCIS(:,:,:)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_NI,'SEDI_BU_RSV') ! RCI END IF END IF !------------------------------------------------------------------------------- diff --git a/src/MNH/lima_cold_hom_nucl.f90 b/src/MNH/lima_cold_hom_nucl.f90 index f6c3f42114c5cbff0cece4bbef71e1eaf538c2cb..3882ac276498816b8576e3dc9db19e3a769a138a 100644 --- a/src/MNH/lima_cold_hom_nucl.f90 +++ b/src/MNH/lima_cold_hom_nucl.f90 @@ -449,23 +449,23 @@ IF (INEGT.GT.0) THEN IF (NBUMOD==KMI .AND. LBU_ENABLE .AND. OHHONI .AND. NMOD_CCN.GT.0 ) THEN IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(ZTHS(:),MASK=GNEGT(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& - 4,'HONH_BU_RTH') + NBUDGET_TH,'HONH_BU_RTH') IF (LBUDGET_RV) CALL BUDGET ( & UNPACK(ZRVS(:),MASK=GNEGT(:,:,:),FIELD=PRVS)*PRHODJ(:,:,:),& - 6,'HONH_BU_RRV') + NBUDGET_RV,'HONH_BU_RRV') IF (LBUDGET_RI) CALL BUDGET ( & UNPACK(ZRIS(:),MASK=GNEGT(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:),& - 9,'HONH_BU_RRI') + NBUDGET_RI,'HONH_BU_RRI') IF (LBUDGET_SV) THEN CALL BUDGET ( UNPACK(ZCIS(:),MASK=GNEGT(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:),& - 12+NSV_LIMA_NI,'HONH_BU_RSV') ! RCI + NBUDGET_SV1-1+NSV_LIMA_NI,'HONH_BU_RSV') ! RCI IF (NMOD_CCN.GE.1) THEN DO JL=1, NMOD_CCN CALL BUDGET ( UNPACK(ZNFS(:,JL),MASK=GNEGT(:,:,:),FIELD=PNFS(:,:,:,JL))*PRHODJ(:,:,:),& - 12+NSV_LIMA_CCN_FREE+JL-1,'HONH_BU_RSV') + NBUDGET_SV1-1+NSV_LIMA_CCN_FREE+JL-1,'HONH_BU_RSV') END DO CALL BUDGET ( UNPACK(ZZNHS(:),MASK=GNEGT(:,:,:),FIELD=ZNHS(:,:,:))*PRHODJ(:,:,:),& - 12+NSV_LIMA_HOM_HAZE,'HONH_BU_RSV') + NBUDGET_SV1-1+NSV_LIMA_HOM_HAZE,'HONH_BU_RSV') END IF END IF @@ -508,18 +508,18 @@ IF (LWARM) THEN IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(ZTHS(:),MASK=GNEGT(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& - 4,'HONC_BU_RTH') + NBUDGET_TH,'HONC_BU_RTH') IF (LBUDGET_RC) CALL BUDGET ( & UNPACK(ZRCS(:),MASK=GNEGT(:,:,:),FIELD=PRCS)*PRHODJ(:,:,:),& - 7,'HONC_BU_RRC') + NBUDGET_RC,'HONC_BU_RRC') IF (LBUDGET_RI) CALL BUDGET ( & UNPACK(ZRIS(:),MASK=GNEGT(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:),& - 9,'HONC_BU_RRI') + NBUDGET_RI,'HONC_BU_RRI') IF (LBUDGET_SV) THEN CALL BUDGET ( UNPACK(ZCCS(:),MASK=GNEGT(:,:,:),FIELD=PCCS)*PRHODJ(:,:,:),& - 12+NSV_LIMA_NC,'HONC_BU_RSV') + NBUDGET_SV1-1+NSV_LIMA_NC,'HONC_BU_RSV') CALL BUDGET ( UNPACK(ZCIS(:),MASK=GNEGT(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:),& - 12+NSV_LIMA_NI,'HONC_BU_RSV') + NBUDGET_SV1-1+NSV_LIMA_NI,'HONC_BU_RSV') END IF END IF END IF @@ -549,16 +549,16 @@ IF (LWARM .AND. LRAIN) THEN IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(ZTHS(:),MASK=GNEGT(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& - 4,'HONR_BU_RTH') + NBUDGET_TH,'HONR_BU_RTH') IF (LBUDGET_RR) CALL BUDGET ( & UNPACK(ZRRS(:),MASK=GNEGT(:,:,:),FIELD=PRRS)*PRHODJ(:,:,:),& - 8,'HONR_BU_RRR') + NBUDGET_RR,'HONR_BU_RRR') IF (LBUDGET_RG) CALL BUDGET ( & UNPACK(ZRGS(:),MASK=GNEGT(:,:,:),FIELD=PRGS)*PRHODJ(:,:,:),& - 11,'HONR_BU_RRG') + NBUDGET_RG,'HONR_BU_RRG') IF (LBUDGET_SV) THEN CALL BUDGET ( UNPACK(ZCRS(:),MASK=GNEGT(:,:,:),FIELD=PCRS)*PRHODJ(:,:,:),& - 12+NSV_LIMA_NR,'HONR_BU_RSV') + NBUDGET_SV1-1+NSV_LIMA_NR,'HONR_BU_RSV') END IF END IF END IF @@ -639,46 +639,46 @@ ELSE IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN IF (LBUDGET_TH) THEN ZW(:,:,:) = PTHS(:,:,:)*PRHODJ(:,:,:) - IF( OHHONI .AND. NMOD_CCN.GT.0 ) CALL BUDGET (ZW,4,'HONH_BU_RTH') - IF (LWARM) CALL BUDGET (ZW,4,'HONC_BU_RTH') - IF (LWARM .AND. LRAIN) CALL BUDGET (ZW,4,'HONR_BU_RTH') + IF( OHHONI .AND. NMOD_CCN.GT.0 ) CALL BUDGET (ZW,NBUDGET_TH,'HONH_BU_RTH') + IF (LWARM) CALL BUDGET (ZW,NBUDGET_TH,'HONC_BU_RTH') + IF (LWARM .AND. LRAIN) CALL BUDGET (ZW,NBUDGET_TH,'HONR_BU_RTH') ENDIF IF (LBUDGET_RV) THEN ZW(:,:,:) = PRVS(:,:,:)*PRHODJ(:,:,:) - IF( OHHONI .AND. NMOD_CCN.GT.0 ) CALL BUDGET (ZW,6,'HONH_BU_RRV') + IF( OHHONI .AND. NMOD_CCN.GT.0 ) CALL BUDGET (ZW,NBUDGET_RV,'HONH_BU_RRV') ENDIF IF (LBUDGET_RC) THEN ZW(:,:,:) = PRCS(:,:,:)*PRHODJ(:,:,:) - IF (LWARM) CALL BUDGET (ZW,7,'HONC_BU_RRC') + IF (LWARM) CALL BUDGET (ZW,NBUDGET_RC,'HONC_BU_RRC') ENDIF IF (LBUDGET_RR) THEN ZW(:,:,:) = PRRS(:,:,:)*PRHODJ(:,:,:) - IF (LWARM .AND. LRAIN) CALL BUDGET (ZW,8,'HONR_BU_RRR') + IF (LWARM .AND. LRAIN) CALL BUDGET (ZW,NBUDGET_RR,'HONR_BU_RRR') ENDIF IF (LBUDGET_RI) THEN ZW(:,:,:) = PRIS(:,:,:)*PRHODJ(:,:,:) - IF( OHHONI .AND. NMOD_CCN.GT.0 ) CALL BUDGET (ZW,9,'HONH_BU_RRI') - IF (LWARM) CALL BUDGET (ZW,9,'HONC_BU_RRI') + IF( OHHONI .AND. NMOD_CCN.GT.0 ) CALL BUDGET (ZW,NBUDGET_RI,'HONH_BU_RRI') + IF (LWARM) CALL BUDGET (ZW,NBUDGET_RI,'HONC_BU_RRI') ENDIF IF (LBUDGET_RG) THEN ZW(:,:,:) = PRGS(:,:,:)*PRHODJ(:,:,:) - IF (LWARM .AND. LRAIN) CALL BUDGET (ZW,11,'HONR_BU_RRG') + IF (LWARM .AND. LRAIN) CALL BUDGET (ZW,NBUDGET_RG,'HONR_BU_RRG') ENDIF IF (LBUDGET_SV) THEN ZW(:,:,:) = PCCS(:,:,:)*PRHODJ(:,:,:) - IF (LWARM) CALL BUDGET (ZW,12+NSV_LIMA_NC,'HONC_BU_RSV') + IF (LWARM) CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NC,'HONC_BU_RSV') ZW(:,:,:) = PCRS(:,:,:)*PRHODJ(:,:,:) - IF (LWARM .AND. LRAIN) CALL BUDGET (ZW,12+NSV_LIMA_NR,'HONR_BU_RSV') + IF (LWARM .AND. LRAIN) CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NR,'HONR_BU_RSV') ZW(:,:,:) = PCIS(:,:,:)*PRHODJ(:,:,:) - IF( OHHONI .AND. NMOD_CCN.GT.0 ) CALL BUDGET (ZW,12+NSV_LIMA_NI,'HONH_BU_RSV') - IF (LWARM) CALL BUDGET (ZW,12+NSV_LIMA_NI,'HONC_BU_RSV') + IF( OHHONI .AND. NMOD_CCN.GT.0 ) CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NI,'HONH_BU_RSV') + IF (LWARM) CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NI,'HONC_BU_RSV') IF( OHHONI .AND. NMOD_CCN.GT.0 ) THEN DO JL=1, NMOD_CCN ZW(:,:,:) = PNFS(:,:,:,JL)*PRHODJ(:,:,:) - CALL BUDGET (ZW,12+NSV_LIMA_CCN_FREE+JL-1,'HONH_BU_RSV') + CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_CCN_FREE+JL-1,'HONH_BU_RSV') END DO ZW(:,:,:) = ZNHS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,12+NSV_LIMA_HOM_HAZE,'HONH_BU_RSV') + CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_HOM_HAZE,'HONH_BU_RSV') END IF END IF END IF diff --git a/src/MNH/lima_cold_slow_processes.f90 b/src/MNH/lima_cold_slow_processes.f90 index 1973c65f3d23fa1a538243e90ac5371ad626d50c..53cdf53a797c73540601e2b6a78efd713c6ff577 100644 --- a/src/MNH/lima_cold_slow_processes.f90 +++ b/src/MNH/lima_cold_slow_processes.f90 @@ -356,13 +356,13 @@ IF( IMICRO >= 1 ) THEN IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN IF (LBUDGET_RI) CALL BUDGET ( & UNPACK(ZRIS(:),MASK=GMICRO(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:),& - 9,'CNVI_BU_RRI') + NBUDGET_RI,'CNVI_BU_RRI') IF (LBUDGET_RS) CALL BUDGET ( & UNPACK(ZRSS(:),MASK=GMICRO(:,:,:),FIELD=PRSS)*PRHODJ(:,:,:),& - 10,'CNVI_BU_RRS') + NBUDGET_RS,'CNVI_BU_RRS') IF (LBUDGET_SV) CALL BUDGET ( & UNPACK(ZCIS(:),MASK=GMICRO(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:), & - 12+NSV_LIMA_NI,'CNVI_BU_RSV') + NBUDGET_SV1-1+NSV_LIMA_NI,'CNVI_BU_RSV') END IF ! ! @@ -385,13 +385,13 @@ IF( IMICRO >= 1 ) THEN IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& - 4,'DEPS_BU_RTH') + NBUDGET_TH,'DEPS_BU_RTH') IF (LBUDGET_RV) CALL BUDGET ( & UNPACK(ZRVS(:),MASK=GMICRO(:,:,:),FIELD=PRVS)*PRHODJ(:,:,:),& - 6,'DEPS_BU_RRV') + NBUDGET_RV,'DEPS_BU_RRV') IF (LBUDGET_RS) CALL BUDGET ( & UNPACK(ZRSS(:),MASK=GMICRO(:,:,:),FIELD=PRSS)*PRHODJ(:,:,:),& - 10,'DEPS_BU_RRS') + NBUDGET_RS,'DEPS_BU_RRS') END IF ! ! @@ -421,13 +421,13 @@ IF( IMICRO >= 1 ) THEN IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN IF (LBUDGET_RI) CALL BUDGET ( & UNPACK(ZRIS(:),MASK=GMICRO(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:),& - 9,'CNVS_BU_RRI') + NBUDGET_RI,'CNVS_BU_RRI') IF (LBUDGET_RS) CALL BUDGET ( & UNPACK(ZRSS(:),MASK=GMICRO(:,:,:),FIELD=PRSS)*PRHODJ(:,:,:),& - 10,'CNVS_BU_RRS') + NBUDGET_RS,'CNVS_BU_RRS') IF (LBUDGET_SV) CALL BUDGET ( & UNPACK(ZCIS(:),MASK=GMICRO(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:), & - 12+NSV_LIMA_NI,'CNVS_BU_RSV') + NBUDGET_SV1-1+NSV_LIMA_NI,'CNVS_BU_RSV') END IF ! ! @@ -453,13 +453,13 @@ IF( IMICRO >= 1 ) THEN IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN IF (LBUDGET_RI) CALL BUDGET ( & UNPACK(ZRIS(:),MASK=GMICRO(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:), & - 9,'AGGS_BU_RRI') + NBUDGET_RI,'AGGS_BU_RRI') IF (LBUDGET_RS) CALL BUDGET ( & UNPACK(ZRSS(:),MASK=GMICRO(:,:,:),FIELD=PRSS)*PRHODJ(:,:,:), & - 10,'AGGS_BU_RRS') + NBUDGET_RS,'AGGS_BU_RRS') IF (LBUDGET_SV) CALL BUDGET ( & UNPACK(ZCIS(:),MASK=GMICRO(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:), & - 12+NSV_LIMA_NI,'AGGS_BU_RSV') + NBUDGET_SV1-1+NSV_LIMA_NI,'AGGS_BU_RSV') END IF ! ! @@ -521,30 +521,30 @@ ELSE IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN IF (LBUDGET_TH) THEN ZW(:,:,:) = PTHS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,4,'DEPS_BU_RTH') + CALL BUDGET (ZW,NBUDGET_TH,'DEPS_BU_RTH') ENDIF IF (LBUDGET_RV) THEN ZW(:,:,:) = PRVS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,6,'DEPS_BU_RRV') + CALL BUDGET (ZW,NBUDGET_RV,'DEPS_BU_RRV') ENDIF IF (LBUDGET_RI) THEN ZW(:,:,:) = PRIS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,9,'CNVI_BU_RRI') - CALL BUDGET (ZW,9,'CNVS_BU_RRI') - CALL BUDGET (ZW,9,'AGGS_BU_RRI') + CALL BUDGET (ZW,NBUDGET_RI,'CNVI_BU_RRI') + CALL BUDGET (ZW,NBUDGET_RI,'CNVS_BU_RRI') + CALL BUDGET (ZW,NBUDGET_RI,'AGGS_BU_RRI') ENDIF IF (LBUDGET_RS) THEN ZW(:,:,:) = PRSS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,10,'CNVI_BU_RRS') - CALL BUDGET (ZW,10,'DEPS_BU_RRS') - CALL BUDGET (ZW,10,'CNVS_BU_RRS') - CALL BUDGET (ZW,10,'AGGS_BU_RRS') + CALL BUDGET (ZW,NBUDGET_RS,'CNVI_BU_RRS') + CALL BUDGET (ZW,NBUDGET_RS,'DEPS_BU_RRS') + CALL BUDGET (ZW,NBUDGET_RS,'CNVS_BU_RRS') + CALL BUDGET (ZW,NBUDGET_RS,'AGGS_BU_RRS') ENDIF IF (LBUDGET_SV) THEN ZW(:,:,:) = PCIS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,12+NSV_LIMA_NI,'CNVI_BU_RSV') - CALL BUDGET (ZW,12+NSV_LIMA_NI,'CNVS_BU_RSV') - CALL BUDGET (ZW,12+NSV_LIMA_NI,'AGGS_BU_RSV') + CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NI,'CNVI_BU_RSV') + CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NI,'CNVS_BU_RSV') + CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NI,'AGGS_BU_RSV') ENDIF ENDIF ! diff --git a/src/MNH/lima_meyers.f90 b/src/MNH/lima_meyers.f90 index 775a104ec5eb74d5d885a93f146f53c2deac0d91..28c90601f4520fb51071b7420fdc3e4154c8548d 100644 --- a/src/MNH/lima_meyers.f90 +++ b/src/MNH/lima_meyers.f90 @@ -341,16 +341,16 @@ IF( INEGT >= 1 ) THEN IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(ZTHS(:),MASK=GNEGT(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& - 4,'HIND_BU_RTH') + NBUDGET_TH,'HIND_BU_RTH') IF (LBUDGET_RV) CALL BUDGET ( & UNPACK(ZRVS(:),MASK=GNEGT(:,:,:),FIELD=PRVS)*PRHODJ(:,:,:),& - 6,'HIND_BU_RRV') + NBUDGET_RV,'HIND_BU_RRV') IF (LBUDGET_RI) CALL BUDGET ( & UNPACK(ZRIS(:),MASK=GNEGT(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:),& - 9,'HIND_BU_RRI') + NBUDGET_RI,'HIND_BU_RRI') IF (LBUDGET_SV) THEN CALL BUDGET ( UNPACK(ZCIS(:),MASK=GNEGT(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:),& - 12+NSV_LIMA_NI,'HIND_BU_RSV') + NBUDGET_SV1-1+NSV_LIMA_NI,'HIND_BU_RSV') END IF END IF ! @@ -397,12 +397,12 @@ IF( INEGT >= 1 ) THEN ! ! Budget storage IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:), 4,'HINC_BU_RTH') - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), 7,'HINC_BU_RRC') - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:), 9,'HINC_BU_RRI') + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH,'HINC_BU_RTH') + IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC,'HINC_BU_RRC') + IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI,'HINC_BU_RRI') IF (LBUDGET_SV) THEN - CALL BUDGET ( PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'HINC_BU_RSV') - CALL BUDGET ( PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'HINC_BU_RSV') + CALL BUDGET ( PCCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_NC,'HINC_BU_RSV') + CALL BUDGET ( PCIS(:,:,:)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_NI,'HINC_BU_RSV') END IF END IF @@ -445,36 +445,32 @@ ELSE IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN IF (LBUDGET_TH) THEN ZW(:,:,:) = PTHS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,4,'HIND_BU_RTH') - CALL BUDGET (ZW,4,'HINC_BU_RTH') + CALL BUDGET (ZW,NBUDGET_TH,'HIND_BU_RTH') + CALL BUDGET (ZW,NBUDGET_TH,'HINC_BU_RTH') ENDIF IF (LBUDGET_RV) THEN ZW(:,:,:) = PRVS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,6,'HIND_BU_RRV') + CALL BUDGET (ZW,NBUDGET_RV,'HIND_BU_RRV') ENDIF IF (LBUDGET_RC) THEN ZW(:,:,:) = PRCS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,7,'HINC_BU_RRC') + CALL BUDGET (ZW,NBUDGET_RC,'HINC_BU_RRC') ENDIF IF (LBUDGET_RI) THEN ZW(:,:,:) = PRIS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,9,'HIND_BU_RRI') - CALL BUDGET (ZW,9,'HINC_BU_RRI') + CALL BUDGET (ZW,NBUDGET_RI,'HIND_BU_RRI') + CALL BUDGET (ZW,NBUDGET_RI,'HINC_BU_RRI') ENDIF IF (LBUDGET_SV) THEN ZW(:,:,:) = PCCS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,12+NSV_LIMA_NC,'HINC_BU_RSV') + CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NC,'HINC_BU_RSV') ZW(:,:,:) = PCIS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,12+NSV_LIMA_NI,'HIND_BU_RSV') - CALL BUDGET (ZW,12+NSV_LIMA_NI,'HINC_BU_RSV') + CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NI,'HIND_BU_RSV') + CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NI,'HINC_BU_RSV') END IF END IF ! END IF - - - - ! !------------------------------------------------------------------------------- ! diff --git a/src/MNH/lima_mixed.f90 b/src/MNH/lima_mixed.f90 index 7525be5b3a195b44b6020d8f7d0320b66a0b089b..9f1769c818feaf831c9b414bd48654dd7420bec2 100644 --- a/src/MNH/lima_mixed.f90 +++ b/src/MNH/lima_mixed.f90 @@ -650,108 +650,108 @@ ELSE IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN IF (LBUDGET_TH) THEN ZW(:,:,:) = PTHS(:,:,:)*PRHODJ(:,:,:) - IF (LSNOW) CALL BUDGET (ZW,4,'DEPG_BU_RTH') - CALL BUDGET (ZW,4,'IMLT_BU_RTH') - CALL BUDGET (ZW,4,'BERFI_BU_RTH') - IF (LSNOW) CALL BUDGET (ZW,4,'RIM_BU_RTH') - IF (LSNOW .AND. LRAIN) CALL BUDGET (ZW,4,'ACC_BU_RTH') - IF (LSNOW) CALL BUDGET (ZW,4,'CFRZ_BU_RTH') - IF (LSNOW) CALL BUDGET (ZW,4,'WETG_BU_RTH') - IF (LSNOW) CALL BUDGET (ZW,4,'DRYG_BU_RTH') - IF (LSNOW) CALL BUDGET (ZW,4,'GMLT_BU_RTH') - IF (LHAIL) CALL BUDGET (ZW,4,'WETH_BU_RTH') - IF (LHAIL) CALL BUDGET (ZW,4,'HMLT_BU_RTH') + IF (LSNOW) CALL BUDGET (ZW,NBUDGET_TH,'DEPG_BU_RTH') + CALL BUDGET (ZW,NBUDGET_TH,'IMLT_BU_RTH') + CALL BUDGET (ZW,NBUDGET_TH,'BERFI_BU_RTH') + IF (LSNOW) CALL BUDGET (ZW,NBUDGET_TH,'RIM_BU_RTH') + IF (LSNOW .AND. LRAIN) CALL BUDGET (ZW,NBUDGET_TH,'ACC_BU_RTH') + IF (LSNOW) CALL BUDGET (ZW,NBUDGET_TH,'CFRZ_BU_RTH') + IF (LSNOW) CALL BUDGET (ZW,NBUDGET_TH,'WETG_BU_RTH') + IF (LSNOW) CALL BUDGET (ZW,NBUDGET_TH,'DRYG_BU_RTH') + IF (LSNOW) CALL BUDGET (ZW,NBUDGET_TH,'GMLT_BU_RTH') + IF (LHAIL) CALL BUDGET (ZW,NBUDGET_TH,'WETH_BU_RTH') + IF (LHAIL) CALL BUDGET (ZW,NBUDGET_TH,'HMLT_BU_RTH') ENDIF IF (LBUDGET_RV) THEN ZW(:,:,:) = PRVS(:,:,:)*PRHODJ(:,:,:) - IF (LSNOW) CALL BUDGET (ZW,6,'DEPG_BU_RRV') + IF (LSNOW) CALL BUDGET (ZW,NBUDGET_RV,'DEPG_BU_RRV') ENDIF IF (LBUDGET_RC) THEN ZW(:,:,:) = PRCS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,7,'IMLT_BU_RRC') - CALL BUDGET (ZW,7,'BERFI_BU_RRC') - IF (LSNOW) CALL BUDGET (ZW,7,'RIM_BU_RRC') - IF (LSNOW) CALL BUDGET (ZW,7,'WETG_BU_RRC') - IF (LSNOW) CALL BUDGET (ZW,7,'DRYG_BU_RRC') - IF (LHAIL) CALL BUDGET (ZW,7,'WETH_BU_RRC') + CALL BUDGET (ZW,NBUDGET_RC,'IMLT_BU_RRC') + CALL BUDGET (ZW,NBUDGET_RC,'BERFI_BU_RRC') + IF (LSNOW) CALL BUDGET (ZW,NBUDGET_RC,'RIM_BU_RRC') + IF (LSNOW) CALL BUDGET (ZW,NBUDGET_RC,'WETG_BU_RRC') + IF (LSNOW) CALL BUDGET (ZW,NBUDGET_RC,'DRYG_BU_RRC') + IF (LHAIL) CALL BUDGET (ZW,NBUDGET_RC,'WETH_BU_RRC') ENDIF IF (LBUDGET_RR .AND. LRAIN) THEN ZW(:,:,:) = PRRS(:,:,:)*PRHODJ(:,:,:) - IF (LSNOW .AND. LRAIN) CALL BUDGET (ZW,8,'ACC_BU_RRR') - IF (LSNOW) CALL BUDGET (ZW,8,'CFRZ_BU_RRR') - IF (LSNOW) CALL BUDGET (ZW,8,'WETG_BU_RRR') - IF (LSNOW) CALL BUDGET (ZW,8,'DRYG_BU_RRR') - IF (LSNOW) CALL BUDGET (ZW,8,'GMLT_BU_RRR') - IF (LHAIL) CALL BUDGET (ZW,8,'WETH_BU_RRR') - IF (LHAIL) CALL BUDGET (ZW,8,'HMLT_BU_RRR') + IF (LSNOW .AND. LRAIN) CALL BUDGET (ZW,NBUDGET_RR,'ACC_BU_RRR') + IF (LSNOW) CALL BUDGET (ZW,NBUDGET_RR,'CFRZ_BU_RRR') + IF (LSNOW) CALL BUDGET (ZW,NBUDGET_RR,'WETG_BU_RRR') + IF (LSNOW) CALL BUDGET (ZW,NBUDGET_RR,'DRYG_BU_RRR') + IF (LSNOW) CALL BUDGET (ZW,NBUDGET_RR,'GMLT_BU_RRR') + IF (LHAIL) CALL BUDGET (ZW,NBUDGET_RR,'WETH_BU_RRR') + IF (LHAIL) CALL BUDGET (ZW,NBUDGET_RR,'HMLT_BU_RRR') ENDIF IF (LBUDGET_RI) THEN ZW(:,:,:) = PRIS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,9,'IMLT_BU_RRI') - CALL BUDGET (ZW,9,'BERFI_BU_RRI') - IF (LSNOW) CALL BUDGET (ZW,9,'HMS_BU_RRI') - IF (LSNOW) CALL BUDGET (ZW,9,'CFRZ_BU_RRI') - IF (LSNOW) CALL BUDGET (ZW,9,'WETG_BU_RRI') - IF (LSNOW) CALL BUDGET (ZW,9,'DRYG_BU_RRI') - IF (LSNOW) CALL BUDGET (ZW,9,'HMG_BU_RRI') - IF (LHAIL) CALL BUDGET (ZW,9,'WETH_BU_RRI') + CALL BUDGET (ZW,NBUDGET_RI,'IMLT_BU_RRI') + CALL BUDGET (ZW,NBUDGET_RI,'BERFI_BU_RRI') + IF (LSNOW) CALL BUDGET (ZW,NBUDGET_RI,'HMS_BU_RRI') + IF (LSNOW) CALL BUDGET (ZW,NBUDGET_RI,'CFRZ_BU_RRI') + IF (LSNOW) CALL BUDGET (ZW,NBUDGET_RI,'WETG_BU_RRI') + IF (LSNOW) CALL BUDGET (ZW,NBUDGET_RI,'DRYG_BU_RRI') + IF (LSNOW) CALL BUDGET (ZW,NBUDGET_RI,'HMG_BU_RRI') + IF (LHAIL) CALL BUDGET (ZW,NBUDGET_RI,'WETH_BU_RRI') ENDIF IF (LBUDGET_RS .AND. LSNOW) THEN ZW(:,:,:) = PRSS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,10,'RIM_BU_RRS') - CALL BUDGET (ZW,10,'HMS_BU_RRS') - IF (LRAIN) CALL BUDGET (ZW,10,'ACC_BU_RRS') - CALL BUDGET (ZW,10,'CMEL_BU_RRS') - CALL BUDGET (ZW,10,'WETG_BU_RRS') - CALL BUDGET (ZW,10,'DRYG_BU_RRS') - IF (LHAIL) CALL BUDGET (ZW,10,'WETH_BU_RRS') + CALL BUDGET (ZW,NBUDGET_RS,'RIM_BU_RRS') + CALL BUDGET (ZW,NBUDGET_RS,'HMS_BU_RRS') + IF (LRAIN) CALL BUDGET (ZW,NBUDGET_RS,'ACC_BU_RRS') + CALL BUDGET (ZW,NBUDGET_RS,'CMEL_BU_RRS') + CALL BUDGET (ZW,NBUDGET_RS,'WETG_BU_RRS') + CALL BUDGET (ZW,NBUDGET_RS,'DRYG_BU_RRS') + IF (LHAIL) CALL BUDGET (ZW,NBUDGET_RS,'WETH_BU_RRS') ENDIF IF (LBUDGET_RG .AND. LSNOW) THEN ZW(:,:,:) = PRGS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,11,'DEPG_BU_RRG') - CALL BUDGET (ZW,11,'RIM_BU_RRG') - IF (LRAIN) CALL BUDGET (ZW,11,'ACC_BU_RRG') - CALL BUDGET (ZW,11,'CMEL_BU_RRG') - CALL BUDGET (ZW,11,'CFRZ_BU_RRG') - CALL BUDGET (ZW,11,'WETG_BU_RRG') - CALL BUDGET (ZW,11,'DRYG_BU_RRG') - CALL BUDGET (ZW,11,'HMG_BU_RRG') - CALL BUDGET (ZW,11,'GMLT_BU_RRG') - IF (LHAIL) CALL BUDGET (ZW,11,'WETH_BU_RRG') - IF (LHAIL) CALL BUDGET (ZW,11,'COHG_BU_RRG') + CALL BUDGET (ZW,NBUDGET_RG,'DEPG_BU_RRG') + CALL BUDGET (ZW,NBUDGET_RG,'RIM_BU_RRG') + IF (LRAIN) CALL BUDGET (ZW,NBUDGET_RG,'ACC_BU_RRG') + CALL BUDGET (ZW,NBUDGET_RG,'CMEL_BU_RRG') + CALL BUDGET (ZW,NBUDGET_RG,'CFRZ_BU_RRG') + CALL BUDGET (ZW,NBUDGET_RG,'WETG_BU_RRG') + CALL BUDGET (ZW,NBUDGET_RG,'DRYG_BU_RRG') + CALL BUDGET (ZW,NBUDGET_RG,'HMG_BU_RRG') + CALL BUDGET (ZW,NBUDGET_RG,'GMLT_BU_RRG') + IF (LHAIL) CALL BUDGET (ZW,NBUDGET_RG,'WETH_BU_RRG') + IF (LHAIL) CALL BUDGET (ZW,NBUDGET_RG,'COHG_BU_RRG') ENDIF IF (LBUDGET_RH .AND. LHAIL) THEN ZW(:,:,:) = PRHS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,12,'WETG_BU_RRH') - IF (LHAIL) CALL BUDGET (ZW,12,'WETH_BU_RRH') - IF (LHAIL) CALL BUDGET (ZW,12,'COHG_BU_RRH') - IF (LHAIL) CALL BUDGET (ZW,12,'HMLT_BU_RRH') + CALL BUDGET (ZW,NBUDGET_RH,'WETG_BU_RRH') + IF (LHAIL) CALL BUDGET (ZW,NBUDGET_RH,'WETH_BU_RRH') + IF (LHAIL) CALL BUDGET (ZW,NBUDGET_RH,'COHG_BU_RRH') + IF (LHAIL) CALL BUDGET (ZW,NBUDGET_RH,'HMLT_BU_RRH') ENDIF IF (LBUDGET_SV) THEN ZW(:,:,:) = PCCS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,12+NSV_LIMA_NC,'IMLT_BU_RSV') - IF (LSNOW) CALL BUDGET (ZW,12+NSV_LIMA_NC,'RIM_BU_RSV') - IF (LSNOW) CALL BUDGET (ZW,12+NSV_LIMA_NC,'WETG_BU_RSV') - IF (LSNOW) CALL BUDGET (ZW,12+NSV_LIMA_NC,'DRYG_BU_RSV') - IF (LHAIL) CALL BUDGET (ZW,12+NSV_LIMA_NC,'WETH_BU_RSV') + CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NC,'IMLT_BU_RSV') + IF (LSNOW) CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NC,'RIM_BU_RSV') + IF (LSNOW) CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NC,'WETG_BU_RSV') + IF (LSNOW) CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NC,'DRYG_BU_RSV') + IF (LHAIL) CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NC,'WETH_BU_RSV') ! ZW(:,:,:) = PCRS(:,:,:)*PRHODJ(:,:,:) - IF (LSNOW) CALL BUDGET (ZW,12+NSV_LIMA_NR,'ACC_BU_RSV') - IF (LSNOW) CALL BUDGET (ZW,12+NSV_LIMA_NR,'CFRZ_BU_RSV') - IF (LSNOW) CALL BUDGET (ZW,12+NSV_LIMA_NR,'WETG_BU_RSV') - IF (LSNOW) CALL BUDGET (ZW,12+NSV_LIMA_NR,'DRYG_BU_RSV') - IF (LSNOW) CALL BUDGET (ZW,12+NSV_LIMA_NR,'GMLT_BU_RSV') - IF (LHAIL) CALL BUDGET (ZW,12+NSV_LIMA_NR,'WETH_BU_RSV') - IF (LHAIL) CALL BUDGET (ZW,12+NSV_LIMA_NR,'HMLT_BU_RSV') + IF (LSNOW) CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NR,'ACC_BU_RSV') + IF (LSNOW) CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NR,'CFRZ_BU_RSV') + IF (LSNOW) CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NR,'WETG_BU_RSV') + IF (LSNOW) CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NR,'DRYG_BU_RSV') + IF (LSNOW) CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NR,'GMLT_BU_RSV') + IF (LHAIL) CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NR,'WETH_BU_RSV') + IF (LHAIL) CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NR,'HMLT_BU_RSV') ! ZW(:,:,:) = PCIS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,12+NSV_LIMA_NI,'IMLT_BU_RSV') - IF (LSNOW) CALL BUDGET (ZW,12+NSV_LIMA_NI,'HMS_BU_RSV') - IF (LSNOW) CALL BUDGET (ZW,12+NSV_LIMA_NI,'CFRZ_BU_RSV') - IF (LSNOW) CALL BUDGET (ZW,12+NSV_LIMA_NI,'WETG_BU_RSV') - IF (LSNOW) CALL BUDGET (ZW,12+NSV_LIMA_NI,'DRYG_BU_RSV') - IF (LSNOW) CALL BUDGET (ZW,12+NSV_LIMA_NI,'HMG_BU_RSV') - IF (LHAIL) CALL BUDGET (ZW,12+NSV_LIMA_NI,'WETH_BU_RSV') + CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NI,'IMLT_BU_RSV') + IF (LSNOW) CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NI,'HMS_BU_RSV') + IF (LSNOW) CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NI,'CFRZ_BU_RSV') + IF (LSNOW) CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NI,'WETG_BU_RSV') + IF (LSNOW) CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NI,'DRYG_BU_RSV') + IF (LSNOW) CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NI,'HMG_BU_RSV') + IF (LHAIL) CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NI,'WETH_BU_RSV') ENDIF ENDIF ! diff --git a/src/MNH/lima_mixed_fast_processes.f90 b/src/MNH/lima_mixed_fast_processes.f90 index fdb9724bcc844fa74054e06b81c066867c806c04..09ea55a1b5a8b21bbd490edc38764c28beed8f79 100644 --- a/src/MNH/lima_mixed_fast_processes.f90 +++ b/src/MNH/lima_mixed_fast_processes.f90 @@ -329,19 +329,19 @@ END IF IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), & - 4,'RIM_BU_RTH') + NBUDGET_TH,'RIM_BU_RTH') IF (LBUDGET_RC) CALL BUDGET ( & UNPACK(ZRCS(:),MASK=GMICRO(:,:,:),FIELD=PRCS)*PRHODJ(:,:,:), & - 7,'RIM_BU_RRC') + NBUDGET_RC,'RIM_BU_RRC') IF (LBUDGET_RS) CALL BUDGET ( & UNPACK(ZRSS(:),MASK=GMICRO(:,:,:),FIELD=PRSS)*PRHODJ(:,:,:), & - 10,'RIM_BU_RRS') + NBUDGET_RS,'RIM_BU_RRS') IF (LBUDGET_RG) CALL BUDGET ( & UNPACK(ZRGS(:),MASK=GMICRO(:,:,:),FIELD=PRGS)*PRHODJ(:,:,:), & - 11,'RIM_BU_RRG') + NBUDGET_RG,'RIM_BU_RRG') IF (LBUDGET_SV) THEN CALL BUDGET (UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=PCCS)*PRHODJ(:,:,:), & - 12+NSV_LIMA_NC,'RIM_BU_RSV') + NBUDGET_SV1-1+NSV_LIMA_NC,'RIM_BU_RSV') END IF END IF ! @@ -386,13 +386,13 @@ END IF IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN IF (LBUDGET_RI) CALL BUDGET ( & UNPACK(ZRIS(:),MASK=GMICRO,FIELD=PRIS)*PRHODJ(:,:,:), & - 9,'HMS_BU_RRI') + NBUDGET_RI,'HMS_BU_RRI') IF (LBUDGET_RS) CALL BUDGET ( & UNPACK(ZRSS(:),MASK=GMICRO,FIELD=PRSS)*PRHODJ(:,:,:), & - 10,'HMS_BU_RRS') + NBUDGET_RS,'HMS_BU_RRS') IF (LBUDGET_SV) CALL BUDGET ( & UNPACK(ZCIS(:),MASK=GMICRO,FIELD=PCIS)*PRHODJ(:,:,:), & - 12+NSV_LIMA_NI,'HMS_BU_RSV') + NBUDGET_SV1-1+NSV_LIMA_NI,'HMS_BU_RSV') END IF ! ! @@ -515,19 +515,19 @@ END IF IF (NBUMOD==KMI .AND. LBU_ENABLE .AND. LRAIN) THEN IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& - 4,'ACC_BU_RTH') + NBUDGET_TH,'ACC_BU_RTH') IF (LBUDGET_RR) CALL BUDGET ( & UNPACK(ZRRS(:),MASK=GMICRO(:,:,:),FIELD=PRRS)*PRHODJ(:,:,:), & - 8,'ACC_BU_RRR') + NBUDGET_RR,'ACC_BU_RRR') IF (LBUDGET_RS) CALL BUDGET ( & UNPACK(ZRSS(:),MASK=GMICRO(:,:,:),FIELD=PRSS)*PRHODJ(:,:,:), & - 10,'ACC_BU_RRS') + NBUDGET_RS,'ACC_BU_RRS') IF (LBUDGET_RG) CALL BUDGET ( & UNPACK(ZRGS(:),MASK=GMICRO(:,:,:),FIELD=PRGS)*PRHODJ(:,:,:), & - 11,'ACC_BU_RRG') + NBUDGET_RG,'ACC_BU_RRG') IF (LBUDGET_SV) THEN CALL BUDGET (UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=PCRS)*PRHODJ(:,:,:), & - 12+NSV_LIMA_NR,'ACC_BU_RSV') + NBUDGET_SV1-1+NSV_LIMA_NR,'ACC_BU_RSV') END IF END IF ! @@ -563,10 +563,10 @@ END WHERE IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN IF (LBUDGET_RS) CALL BUDGET ( & UNPACK(ZRSS(:),MASK=GMICRO(:,:,:),FIELD=PRSS)*PRHODJ(:,:,:), & - 10,'CMEL_BU_RRS') + NBUDGET_RS,'CMEL_BU_RRS') IF (LBUDGET_RG) CALL BUDGET ( & UNPACK(ZRGS(:),MASK=GMICRO(:,:,:),FIELD=PRGS)*PRHODJ(:,:,:), & - 11,'CMEL_BU_RRG') + NBUDGET_RG,'CMEL_BU_RRG') END IF ! END IF ! LSNOW @@ -603,21 +603,21 @@ END WHERE IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), & - 4,'CFRZ_BU_RTH') + NBUDGET_TH,'CFRZ_BU_RTH') IF (LBUDGET_RR) CALL BUDGET ( & UNPACK(ZRRS(:),MASK=GMICRO(:,:,:),FIELD=PRRS)*PRHODJ(:,:,:), & - 8,'CFRZ_BU_RRR') + NBUDGET_RR,'CFRZ_BU_RRR') IF (LBUDGET_RI) CALL BUDGET ( & UNPACK(ZRIS(:),MASK=GMICRO(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:), & - 9,'CFRZ_BU_RRI') + NBUDGET_RI,'CFRZ_BU_RRI') IF (LBUDGET_RG) CALL BUDGET ( & UNPACK(ZRGS(:),MASK=GMICRO(:,:,:),FIELD=PRGS)*PRHODJ(:,:,:), & - 11,'CFRZ_BU_RRG') + NBUDGET_RG,'CFRZ_BU_RRG') IF (LBUDGET_SV) THEN CALL BUDGET ( UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=PCRS)*PRHODJ(:,:,:), & - 12+NSV_LIMA_NR,'CFRZ_BU_RSV') + NBUDGET_SV1-1+NSV_LIMA_NR,'CFRZ_BU_RSV') CALL BUDGET ( UNPACK(ZCIS(:),MASK=GMICRO(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:), & - 12+NSV_LIMA_NI,'CFRZ_BU_RSV') + NBUDGET_SV1-1+NSV_LIMA_NI,'CFRZ_BU_RSV') END IF END IF ! @@ -839,32 +839,32 @@ END WHERE IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& - 4,'WETG_BU_RTH') + NBUDGET_TH,'WETG_BU_RTH') IF (LBUDGET_RC) CALL BUDGET ( & UNPACK(ZRCS(:),MASK=GMICRO(:,:,:),FIELD=PRCS)*PRHODJ(:,:,:), & - 7,'WETG_BU_RRC') + NBUDGET_RC,'WETG_BU_RRC') IF (LBUDGET_RR) CALL BUDGET ( & UNPACK(ZRRS(:),MASK=GMICRO(:,:,:),FIELD=PRRS)*PRHODJ(:,:,:), & - 8,'WETG_BU_RRR') + NBUDGET_RR,'WETG_BU_RRR') IF (LBUDGET_RI) CALL BUDGET ( & UNPACK(ZRIS(:),MASK=GMICRO(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:), & - 9,'WETG_BU_RRI') + NBUDGET_RI,'WETG_BU_RRI') IF (LBUDGET_RS) CALL BUDGET ( & UNPACK(ZRSS(:),MASK=GMICRO(:,:,:),FIELD=PRSS)*PRHODJ(:,:,:), & - 10,'WETG_BU_RRS') + NBUDGET_RS,'WETG_BU_RRS') IF (LBUDGET_RG) CALL BUDGET ( & UNPACK(ZRGS(:),MASK=GMICRO(:,:,:),FIELD=PRGS)*PRHODJ(:,:,:), & - 11,'WETG_BU_RRG') + NBUDGET_RG,'WETG_BU_RRG') IF (LBUDGET_RH) CALL BUDGET ( & UNPACK(ZRHS(:),MASK=GMICRO(:,:,:),FIELD=PRHS)*PRHODJ(:,:,:), & - 12,'WETG_BU_RRH') + NBUDGET_RH,'WETG_BU_RRH') IF (LBUDGET_SV) THEN CALL BUDGET (UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=PCCS)*PRHODJ(:,:,:), & - 12+NSV_LIMA_NC,'WETG_BU_RSV') + NBUDGET_SV1-1+NSV_LIMA_NC,'WETG_BU_RSV') CALL BUDGET (UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=PCRS)*PRHODJ(:,:,:), & - 12+NSV_LIMA_NR,'WETG_BU_RSV') + NBUDGET_SV1-1+NSV_LIMA_NR,'WETG_BU_RSV') CALL BUDGET (UNPACK(ZCIS(:),MASK=GMICRO(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:), & - 12+NSV_LIMA_NI,'WETG_BU_RSV') + NBUDGET_SV1-1+NSV_LIMA_NI,'WETG_BU_RSV') END IF END IF ! @@ -890,29 +890,29 @@ END WHERE IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& - 4,'DRYG_BU_RTH') + NBUDGET_TH,'DRYG_BU_RTH') IF (LBUDGET_RC) CALL BUDGET ( & UNPACK(ZRCS(:),MASK=GMICRO(:,:,:),FIELD=PRCS)*PRHODJ(:,:,:), & - 7,'DRYG_BU_RRC') + NBUDGET_RC,'DRYG_BU_RRC') IF (LBUDGET_RR) CALL BUDGET ( & UNPACK(ZRRS(:),MASK=GMICRO(:,:,:),FIELD=PRRS)*PRHODJ(:,:,:), & - 8,'DRYG_BU_RRR') + NBUDGET_RR,'DRYG_BU_RRR') IF (LBUDGET_RI) CALL BUDGET ( & UNPACK(ZRIS(:),MASK=GMICRO(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:), & - 9,'DRYG_BU_RRI') + NBUDGET_RI,'DRYG_BU_RRI') IF (LBUDGET_RS) CALL BUDGET ( & UNPACK(ZRSS(:),MASK=GMICRO(:,:,:),FIELD=PRSS)*PRHODJ(:,:,:), & - 10,'DRYG_BU_RRS') + NBUDGET_RS,'DRYG_BU_RRS') IF (LBUDGET_RG) CALL BUDGET ( & UNPACK(ZRGS(:),MASK=GMICRO(:,:,:),FIELD=PRGS)*PRHODJ(:,:,:), & - 11,'DRYG_BU_RRG') + NBUDGET_RG,'DRYG_BU_RRG') IF (LBUDGET_SV) THEN CALL BUDGET ( UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=PCCS)*PRHODJ(:,:,:), & - 12+NSV_LIMA_NC,'DRYG_BU_RSV') + NBUDGET_SV1-1+NSV_LIMA_NC,'DRYG_BU_RSV') CALL BUDGET ( UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=PCRS)*PRHODJ(:,:,:), & - 12+NSV_LIMA_NR,'DRYG_BU_RSV') + NBUDGET_SV1-1+NSV_LIMA_NR,'DRYG_BU_RSV') CALL BUDGET ( UNPACK(ZCIS(:),MASK=GMICRO(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:), & - 12+NSV_LIMA_NI,'DRYG_BU_RSV') + NBUDGET_SV1-1+NSV_LIMA_NI,'DRYG_BU_RSV') END IF END IF ! @@ -956,13 +956,13 @@ END IF IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN IF (LBUDGET_RI) CALL BUDGET ( & UNPACK(ZRIS(:),MASK=GMICRO,FIELD=PRIS)*PRHODJ(:,:,:), & - 9,'HMG_BU_RRI') + NBUDGET_RI,'HMG_BU_RRI') IF (LBUDGET_RG) CALL BUDGET ( & UNPACK(ZRGS(:),MASK=GMICRO,FIELD=PRGS)*PRHODJ(:,:,:), & - 11,'HMG_BU_RRG') + NBUDGET_RG,'HMG_BU_RRG') IF (LBUDGET_SV) CALL BUDGET ( & UNPACK(ZCIS(:),MASK=GMICRO,FIELD=PCIS)*PRHODJ(:,:,:), & - 12+NSV_LIMA_NI,'HMG_BU_RSV') + NBUDGET_SV1-1+NSV_LIMA_NI,'HMG_BU_RSV') END IF ! ! @@ -997,16 +997,16 @@ END WHERE IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& - 4,'GMLT_BU_RTH') + NBUDGET_TH,'GMLT_BU_RTH') IF (LBUDGET_RR) CALL BUDGET ( & UNPACK(ZRRS(:),MASK=GMICRO(:,:,:),FIELD=PRRS)*PRHODJ(:,:,:), & - 8,'GMLT_BU_RRR') + NBUDGET_RR,'GMLT_BU_RRR') IF (LBUDGET_RG) CALL BUDGET ( & UNPACK(ZRGS(:),MASK=GMICRO(:,:,:),FIELD=PRGS)*PRHODJ(:,:,:), & - 11,'GMLT_BU_RRG') + NBUDGET_RG,'GMLT_BU_RRG') IF (LBUDGET_SV) THEN CALL BUDGET ( UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=PCRS)*PRHODJ(:,:,:), & - 12+NSV_LIMA_NR,'GMLT_BU_RSV') + NBUDGET_SV1-1+NSV_LIMA_NR,'GMLT_BU_RSV') END IF END IF ! @@ -1216,32 +1216,32 @@ END IF ! IHAIL>0 IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), & - 4,'WETH_BU_RTH') + NBUDGET_TH,'WETH_BU_RTH') IF (LBUDGET_RC) CALL BUDGET ( & UNPACK(ZRCS(:),MASK=GMICRO(:,:,:),FIELD=PRCS)*PRHODJ(:,:,:), & - 7,'WETH_BU_RRC') + NBUDGET_RC,'WETH_BU_RRC') IF (LBUDGET_RR) CALL BUDGET ( & UNPACK(ZRRS(:),MASK=GMICRO(:,:,:),FIELD=PRRS)*PRHODJ(:,:,:), & - 8,'WETH_BU_RRR') + NBUDGET_RR,'WETH_BU_RRR') IF (LBUDGET_RI) CALL BUDGET ( & UNPACK(ZRIS(:),MASK=GMICRO(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:), & - 9,'WETH_BU_RRI') + NBUDGET_RI,'WETH_BU_RRI') IF (LBUDGET_RS) CALL BUDGET ( & UNPACK(ZRSS(:),MASK=GMICRO(:,:,:),FIELD=PRSS)*PRHODJ(:,:,:), & - 10,'WETH_BU_RRS') + NBUDGET_RS,'WETH_BU_RRS') IF (LBUDGET_RG) CALL BUDGET ( & UNPACK(ZRGS(:),MASK=GMICRO(:,:,:),FIELD=PRGS)*PRHODJ(:,:,:), & - 11,'WETH_BU_RRG') + NBUDGET_RG,'WETH_BU_RRG') IF (LBUDGET_RH) CALL BUDGET ( & UNPACK(ZRHS(:),MASK=GMICRO(:,:,:),FIELD=PRHS)*PRHODJ(:,:,:), & - 12,'WETH_BU_RRH') + NBUDGET_RH,'WETH_BU_RRH') IF (LBUDGET_SV) THEN CALL BUDGET (UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=PCCS)*PRHODJ(:,:,:), & - 12+NSV_LIMA_NC,'WETH_BU_RSV') + NBUDGET_SV1-1+NSV_LIMA_NC,'WETH_BU_RSV') CALL BUDGET (UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=PCRS)*PRHODJ(:,:,:), & - 12+NSV_LIMA_NR,'WETH_BU_RSV') + NBUDGET_SV1-1+NSV_LIMA_NR,'WETH_BU_RSV') CALL BUDGET (UNPACK(ZCIS(:),MASK=GMICRO(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:), & - 12+NSV_LIMA_NI,'WETH_BU_RSV') + NBUDGET_SV1-1+NSV_LIMA_NI,'WETH_BU_RSV') END IF END IF ! @@ -1307,16 +1307,16 @@ END IF IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& - 4,'HMLT_BU_RTH') + NBUDGET_TH, 'HMLT_BU_RTH') IF (LBUDGET_RR) CALL BUDGET ( & UNPACK(ZRRS(:),MASK=GMICRO(:,:,:),FIELD=PRRS)*PRHODJ(:,:,:), & - 8,'HMLT_BU_RRR') + NBUDGET_RR, 'HMLT_BU_RRR') IF (LBUDGET_RH) CALL BUDGET ( & UNPACK(ZRHS(:),MASK=GMICRO(:,:,:),FIELD=PRHS)*PRHODJ(:,:,:), & - 12,'HMLT_BU_RRH') + NBUDGET_RH, 'HMLT_BU_RRH') IF (LBUDGET_SV) THEN CALL BUDGET ( UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=PCRS)*PRHODJ(:,:,:), & - 12+NSV_LIMA_NR,'HMLT_BU_RSV') + NBUDGET_SV1-1+NSV_LIMA_NR, 'HMLT_BU_RSV') END IF END IF ! diff --git a/src/MNH/lima_mixed_slow_processes.f90 b/src/MNH/lima_mixed_slow_processes.f90 index 7c58f4910a4603219de2d1c7887db6b2760be388..bf559a2b5812c4cf8dcd92efa2bd0b4ea3e0f37f 100644 --- a/src/MNH/lima_mixed_slow_processes.f90 +++ b/src/MNH/lima_mixed_slow_processes.f90 @@ -1,3 +1,8 @@ +!MNH_LIC Copyright 2013-2019 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. +!----------------------------------------------------------------- ! ##################################### MODULE MODI_LIMA_MIXED_SLOW_PROCESSES ! ##################################### @@ -194,13 +199,13 @@ IF (LSNOW) THEN IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& - 4,'DEPG_BU_RTH') + NBUDGET_TH,'DEPG_BU_RTH') IF (LBUDGET_RV) CALL BUDGET ( & UNPACK(ZRVS(:),MASK=GMICRO(:,:,:),FIELD=PRVS)*PRHODJ(:,:,:),& - 6,'DEPG_BU_RRV') + NBUDGET_RV,'DEPG_BU_RRV') IF (LBUDGET_RG) CALL BUDGET ( & UNPACK(ZRGS(:),MASK=GMICRO(:,:,:),FIELD=PRGS)*PRHODJ(:,:,:), & - 11,'DEPG_BU_RRG') + NBUDGET_RG,'DEPG_BU_RRG') END IF END IF ! @@ -229,18 +234,18 @@ END IF IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& - 4,'IMLT_BU_RTH') + NBUDGET_TH,'IMLT_BU_RTH') IF (LBUDGET_RC) CALL BUDGET ( & UNPACK(ZRCS(:),MASK=GMICRO(:,:,:),FIELD=PRCS)*PRHODJ(:,:,:), & - 7,'IMLT_BU_RRC') + NBUDGET_RC,'IMLT_BU_RRC') IF (LBUDGET_RI) CALL BUDGET ( & UNPACK(ZRIS(:),MASK=GMICRO(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:), & - 9,'IMLT_BU_RRI') + NBUDGET_RI,'IMLT_BU_RRI') IF (LBUDGET_SV) THEN CALL BUDGET (UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=PCCS)*PRHODJ(:,:,:), & - 12+NSV_LIMA_NC,'IMLT_BU_RSV') + NBUDGET_SV1-1+NSV_LIMA_NC,'IMLT_BU_RSV') CALL BUDGET (UNPACK(ZCIS(:),MASK=GMICRO(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:), & - 12+NSV_LIMA_NI,'IMLT_BU_RSV') + NBUDGET_SV1-1+NSV_LIMA_NI,'IMLT_BU_RSV') END IF END IF ! @@ -265,13 +270,13 @@ END IF IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& - 4,'BERFI_BU_RTH') + NBUDGET_TH,'BERFI_BU_RTH') IF (LBUDGET_RC) CALL BUDGET ( & UNPACK(ZRCS(:),MASK=GMICRO(:,:,:),FIELD=PRCS)*PRHODJ(:,:,:), & - 7,'BERFI_BU_RRC') + NBUDGET_RC,'BERFI_BU_RRC') IF (LBUDGET_RI) CALL BUDGET ( & UNPACK(ZRIS(:),MASK=GMICRO(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:), & - 9,'BERFI_BU_RRI') + NBUDGET_RI,'BERFI_BU_RRI') END IF ! !------------------------------------------------------------------------------ diff --git a/src/MNH/lima_nucleation_procs.f90 b/src/MNH/lima_nucleation_procs.f90 index e3efc478d7c83f49440a8f7c344103bd4ec19768..f0e61b630fb2156b8cb8c60c39659263e86d9d28 100644 --- a/src/MNH/lima_nucleation_procs.f90 +++ b/src/MNH/lima_nucleation_procs.f90 @@ -72,11 +72,12 @@ SUBROUTINE LIMA_NUCLEATION_PROCS (PTSTEP, TPFILE, OCLOSE_OUT, PRHODJ, !! !------------------------------------------------------------------------------- ! -USE MODD_PARAM_LIMA, ONLY : LCOLD, LNUCL, LMEYERS, LSNOW, LWARM, LACTI, LRAIN, LHHONI, & +USE MODD_PARAM_LIMA, ONLY : LCOLD, LNUCL, LMEYERS, LSNOW, LWARM, LACTI, LRAIN, LHHONI, & NMOD_CCN, NMOD_IFN, NMOD_IMM -USE MODD_BUDGET, ONLY : LBU_ENABLE, LBUDGET_TH, LBUDGET_RV, LBUDGET_RC, LBUDGET_RR,& - LBUDGET_RI, LBUDGET_RS, LBUDGET_RG, LBUDGET_RH, LBUDGET_SV -USE MODD_NSV, ONLY : NSV_LIMA_NC, NSV_LIMA_NR, NSV_LIMA_CCN_FREE, & +USE MODD_BUDGET, ONLY : LBU_ENABLE, LBUDGET_TH, LBUDGET_RV, LBUDGET_RC, LBUDGET_RR, & + LBUDGET_RI, LBUDGET_RS, LBUDGET_RG, LBUDGET_RH, LBUDGET_SV, & + NBUDGET_TH, NBUDGET_RV, NBUDGET_RC, NBUDGET_RI, NBUDGET_SV1 +USE MODD_NSV, ONLY : NSV_LIMA_NC, NSV_LIMA_NR, NSV_LIMA_CCN_FREE, & NSV_LIMA_NI, NSV_LIMA_IFN_FREE ! USE MODD_IO, ONLY: TFILEDATA @@ -169,13 +170,13 @@ IF (LWARM .AND. LACTI .AND. NMOD_CCN.GE.1) THEN ! Call budgets ! IF (LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET (PTHT(:,:,:)*PRHODJ(:,:,:)/PTSTEP, 4, 'HENU_BU_RTH') - IF (LBUDGET_RV) CALL BUDGET (PRVT(:,:,:)*PRHODJ(:,:,:)/PTSTEP, 6, 'HENU_BU_RRV') - IF (LBUDGET_RC) CALL BUDGET (PRCT(:,:,:)*PRHODJ(:,:,:)/PTSTEP, 7, 'HENU_BU_RRC') + IF (LBUDGET_TH) CALL BUDGET (PTHT(:,:,:)*PRHODJ(:,:,:)/PTSTEP, NBUDGET_TH, 'HENU_BU_RTH') + IF (LBUDGET_RV) CALL BUDGET (PRVT(:,:,:)*PRHODJ(:,:,:)/PTSTEP, NBUDGET_RV, 'HENU_BU_RRV') + IF (LBUDGET_RC) CALL BUDGET (PRCT(:,:,:)*PRHODJ(:,:,:)/PTSTEP, NBUDGET_RC, 'HENU_BU_RRC') IF (LBUDGET_SV) THEN - CALL BUDGET (PCCT(:,:,:)*PRHODJ(:,:,:)/PTSTEP, 12+NSV_LIMA_NC, 'HENU_BU_RSV') + CALL BUDGET (PCCT(:,:,:)*PRHODJ(:,:,:)/PTSTEP, NBUDGET_SV1-1+NSV_LIMA_NC, 'HENU_BU_RSV') DO JL=1, NMOD_CCN - CALL BUDGET (PNFT(:,:,:,JL)*PRHODJ(:,:,:)/PTSTEP,12+NSV_LIMA_CCN_FREE+JL-1,'HENU_BU_RSV') + CALL BUDGET (PNFT(:,:,:,JL)*PRHODJ(:,:,:)/PTSTEP,NBUDGET_SV1-1+NSV_LIMA_CCN_FREE+JL-1, 'HENU_BU_RSV') END DO END IF END IF @@ -194,24 +195,24 @@ IF (LCOLD .AND. LNUCL .AND. .NOT.LMEYERS .AND. NMOD_IFN.GE.1) THEN ! Call budgets ! IF (LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET ((PTHT(:,:,:)+Z_TH_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,4, 'HIND_BU_RTH') - IF (LBUDGET_RV) CALL BUDGET ((PRVT(:,:,:)-Z_RI_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,6, 'HIND_BU_RRV') - IF (LBUDGET_RI) CALL BUDGET ((PRIT(:,:,:)+Z_RI_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,9, 'HIND_BU_RRI') + IF (LBUDGET_TH) CALL BUDGET ((PTHT(:,:,:)+Z_TH_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,NBUDGET_TH, 'HIND_BU_RTH') + IF (LBUDGET_RV) CALL BUDGET ((PRVT(:,:,:)-Z_RI_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,NBUDGET_RV, 'HIND_BU_RRV') + IF (LBUDGET_RI) CALL BUDGET ((PRIT(:,:,:)+Z_RI_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,NBUDGET_RI, 'HIND_BU_RRI') IF (LBUDGET_SV) THEN - CALL BUDGET ((PCIT(:,:,:)+Z_CI_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,12+NSV_LIMA_NI, 'HIND_BU_RSV') + CALL BUDGET ((PCIT(:,:,:)+Z_CI_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,NBUDGET_SV1-1+NSV_LIMA_NI, 'HIND_BU_RSV') IF (NMOD_IFN.GE.1) THEN DO JL=1, NMOD_IFN - CALL BUDGET ((ZIFT(:,:,:,JL))*PRHODJ(:,:,:)/PTSTEP, 12+NSV_LIMA_IFN_FREE+JL-1,'HIND_BU_RSV') + CALL BUDGET ((ZIFT(:,:,:,JL))*PRHODJ(:,:,:)/PTSTEP, NBUDGET_SV1-1+NSV_LIMA_IFN_FREE+JL-1,'HIND_BU_RSV') END DO END IF END IF ! - IF (LBUDGET_TH) CALL BUDGET (ZTHT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,4,'HINC_BU_RTH') - IF (LBUDGET_RC) CALL BUDGET (ZRCT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,7,'HINC_BU_RRC') - IF (LBUDGET_RI) CALL BUDGET (ZRIT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,9,'HINC_BU_RRI') + IF (LBUDGET_TH) CALL BUDGET (ZTHT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,NBUDGET_TH,'HINC_BU_RTH') + IF (LBUDGET_RC) CALL BUDGET (ZRCT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,NBUDGET_RC,'HINC_BU_RRC') + IF (LBUDGET_RI) CALL BUDGET (ZRIT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,NBUDGET_RI,'HINC_BU_RRI') IF (LBUDGET_SV) THEN - CALL BUDGET (ZCCT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,12+NSV_LIMA_NC,'HINC_BU_RSV') - CALL BUDGET (ZCIT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,12+NSV_LIMA_NI,'HINC_BU_RSV') + CALL BUDGET (ZCCT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,NBUDGET_SV1-1+NSV_LIMA_NC,'HINC_BU_RSV') + CALL BUDGET (ZCIT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,NBUDGET_SV1-1+NSV_LIMA_NI,'HINC_BU_RSV') END IF END IF ! @@ -240,17 +241,17 @@ IF (LCOLD .AND. LNUCL .AND. LMEYERS) THEN ! Call budgets ! IF (LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET ((PTHT(:,:,:)+Z_TH_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,4, 'HIND_BU_RTH') - IF (LBUDGET_RV) CALL BUDGET ((PRVT(:,:,:)-Z_RI_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,6, 'HIND_BU_RRV') - IF (LBUDGET_RI) CALL BUDGET ((PRIT(:,:,:)+Z_RI_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,9, 'HIND_BU_RRI') - IF (LBUDGET_SV) CALL BUDGET ((PCIT(:,:,:)+Z_CI_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,12+NSV_LIMA_NI,'HIND_BU_RSV') -! - IF (LBUDGET_TH) CALL BUDGET (ZTHT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,4,'HINC_BU_RTH') - IF (LBUDGET_RC) CALL BUDGET (ZRCT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,7,'HINC_BU_RRC') - IF (LBUDGET_RI) CALL BUDGET (ZRIT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,9,'HINC_BU_RRI') + IF (LBUDGET_TH) CALL BUDGET ((PTHT(:,:,:)+Z_TH_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,NBUDGET_TH, 'HIND_BU_RTH') + IF (LBUDGET_RV) CALL BUDGET ((PRVT(:,:,:)-Z_RI_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,NBUDGET_RV, 'HIND_BU_RRV') + IF (LBUDGET_RI) CALL BUDGET ((PRIT(:,:,:)+Z_RI_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,NBUDGET_RI, 'HIND_BU_RRI') + IF (LBUDGET_SV) CALL BUDGET ((PCIT(:,:,:)+Z_CI_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,NBUDGET_SV1-1+NSV_LIMA_NI,'HIND_BU_RSV') +! + IF (LBUDGET_TH) CALL BUDGET (ZTHT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,NBUDGET_TH,'HINC_BU_RTH') + IF (LBUDGET_RC) CALL BUDGET (ZRCT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,NBUDGET_RC,'HINC_BU_RRC') + IF (LBUDGET_RI) CALL BUDGET (ZRIT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,NBUDGET_RI,'HINC_BU_RRI') IF (LBUDGET_SV) THEN - CALL BUDGET (ZCCT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,12+NSV_LIMA_NC,'HINC_BU_RSV') - CALL BUDGET (ZCIT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,12+NSV_LIMA_NI,'HINC_BU_RSV') + CALL BUDGET (ZCCT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,NBUDGET_SV1-1+NSV_LIMA_NC,'HINC_BU_RSV') + CALL BUDGET (ZCIT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,NBUDGET_SV1-1+NSV_LIMA_NI,'HINC_BU_RSV') END IF END IF ! @@ -273,13 +274,13 @@ IF (LCOLD .AND. LNUCL .AND. LHHONI .AND. NMOD_CCN.GE.1) THEN ! Call budgets ! IF (LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET (ZTHT(:,:,:)*PRHODJ(:,:,:)/PTSTEP, 4, 'HONH_BU_RTH') - IF (LBUDGET_RV) CALL BUDGET (ZRVT(:,:,:)*PRHODJ(:,:,:)/PTSTEP, 6, 'HONH_BU_RRV') - IF (LBUDGET_RI) CALL BUDGET (ZRIT(:,:,:)*PRHODJ(:,:,:)/PTSTEP, 9, 'HONH_BU_RRI') + IF (LBUDGET_TH) CALL BUDGET (ZTHT(:,:,:)*PRHODJ(:,:,:)/PTSTEP, NBUDGET_TH, 'HONH_BU_RTH') + IF (LBUDGET_RV) CALL BUDGET (ZRVT(:,:,:)*PRHODJ(:,:,:)/PTSTEP, NBUDGET_RV, 'HONH_BU_RRV') + IF (LBUDGET_RI) CALL BUDGET (ZRIT(:,:,:)*PRHODJ(:,:,:)/PTSTEP, NBUDGET_RI, 'HONH_BU_RRI') IF (LBUDGET_SV) THEN - CALL BUDGET (ZCIT(:,:,:)*PRHODJ(:,:,:)/PTSTEP, 12+NSV_LIMA_NI, 'HONH_BU_RSV') + CALL BUDGET (ZCIT(:,:,:)*PRHODJ(:,:,:)/PTSTEP, NBUDGET_SV1-1+NSV_LIMA_NI, 'HONH_BU_RSV') DO JL=1, NMOD_CCN - CALL BUDGET (ZNFT(:,:,:,JL)*PRHODJ(:,:,:)/PTSTEP,12+NSV_LIMA_CCN_FREE+JL-1,'HONH_BU_RSV') + CALL BUDGET (ZNFT(:,:,:,JL)*PRHODJ(:,:,:)/PTSTEP,NBUDGET_SV1-1+NSV_LIMA_CCN_FREE+JL-1,'HONH_BU_RSV') END DO END IF END IF diff --git a/src/MNH/lima_phillips.f90 b/src/MNH/lima_phillips.f90 index 03af388b71ef40b0ad5e71b8ddea351a304c1483..3f654dc33906688113acbe0b12b66fe1a4aae9c0 100644 --- a/src/MNH/lima_phillips.f90 +++ b/src/MNH/lima_phillips.f90 @@ -470,19 +470,19 @@ END DO IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(ZTHS(:),MASK=GNEGT(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& - 4,'HIND_BU_RTH') + NBUDGET_TH,'HIND_BU_RTH') IF (LBUDGET_RV) CALL BUDGET ( & UNPACK(ZRVS(:),MASK=GNEGT(:,:,:),FIELD=PRVS)*PRHODJ(:,:,:),& - 6,'HIND_BU_RRV') + NBUDGET_RV,'HIND_BU_RRV') IF (LBUDGET_RI) CALL BUDGET ( & UNPACK(ZRIS(:),MASK=GNEGT(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:),& - 9,'HIND_BU_RRI') + NBUDGET_RI,'HIND_BU_RRI') IF (LBUDGET_SV) THEN CALL BUDGET ( UNPACK(ZCIS(:),MASK=GNEGT(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:),& - 12+NSV_LIMA_NI,'HIND_BU_RSV') + NBUDGET_SV1-1+NSV_LIMA_NI,'HIND_BU_RSV') IF (NMOD_IFN.GE.1) THEN DO JL=1, NMOD_IFN - CALL BUDGET ( PIFS(:,:,:,JL)*PRHODJ(:,:,:),12+NSV_LIMA_IFN_FREE+JL-1,'HIND_BU_RSV') + CALL BUDGET ( PIFS(:,:,:,JL)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_IFN_FREE+JL-1,'HIND_BU_RSV') END DO END IF END IF @@ -540,18 +540,18 @@ END DO IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(ZTHS(:),MASK=GNEGT(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& - 4,'HINC_BU_RTH') + NBUDGET_TH,'HINC_BU_RTH') IF (LBUDGET_RC) CALL BUDGET ( & UNPACK(ZRCS(:),MASK=GNEGT(:,:,:),FIELD=PRCS)*PRHODJ(:,:,:),& - 7,'HINC_BU_RRC') + NBUDGET_RC,'HINC_BU_RRC') IF (LBUDGET_RI) CALL BUDGET ( & UNPACK(ZRIS(:),MASK=GNEGT(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:),& - 9,'HINC_BU_RRI') + NBUDGET_RI,'HINC_BU_RRI') IF (LBUDGET_SV) THEN CALL BUDGET ( UNPACK(ZCCS(:),MASK=GNEGT(:,:,:),FIELD=PCCS)*PRHODJ(:,:,:),& - 12+NSV_LIMA_NC,'HINC_BU_RSV') + NBUDGET_SV1-1+NSV_LIMA_NC,'HINC_BU_RSV') CALL BUDGET ( UNPACK(ZCIS(:),MASK=GNEGT(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:),& - 12+NSV_LIMA_NI,'HINC_BU_RSV') + NBUDGET_SV1-1+NSV_LIMA_NI,'HINC_BU_RSV') END IF END IF ! @@ -627,32 +627,32 @@ ELSE IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN IF (LBUDGET_TH) THEN ZW(:,:,:) = PTHS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,4,'HIND_BU_RTH') - CALL BUDGET (ZW,4,'HINC_BU_RTH') + CALL BUDGET (ZW,NBUDGET_TH,'HIND_BU_RTH') + CALL BUDGET (ZW,NBUDGET_TH,'HINC_BU_RTH') ENDIF IF (LBUDGET_RV) THEN ZW(:,:,:) = PRVS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,6,'HIND_BU_RRV') + CALL BUDGET (ZW,NBUDGET_RV,'HIND_BU_RRV') ENDIF IF (LBUDGET_RC) THEN ZW(:,:,:) = PRCS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,7,'HINC_BU_RRC') + CALL BUDGET (ZW,NBUDGET_RC,'HINC_BU_RRC') ENDIF IF (LBUDGET_RI) THEN ZW(:,:,:) = PRIS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,9,'HIND_BU_RRI') - CALL BUDGET (ZW,9,'HINC_BU_RRI') + CALL BUDGET (ZW,NBUDGET_RI,'HIND_BU_RRI') + CALL BUDGET (ZW,NBUDGET_RI,'HINC_BU_RRI') ENDIF IF (LBUDGET_SV) THEN !print*, 'LBUDGET_SV dans lima_phillips = ', LBUDGET_SV ZW(:,:,:) = PCCS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,12+NSV_LIMA_NC,'HINC_BU_RSV') + CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NC,'HINC_BU_RSV') ZW(:,:,:) = PCIS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,12+NSV_LIMA_NI,'HIND_BU_RSV') - CALL BUDGET (ZW,12+NSV_LIMA_NI,'HINC_BU_RSV') + CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NI,'HIND_BU_RSV') + CALL BUDGET (ZW,NBUDGET_SV1-1+NSV_LIMA_NI,'HINC_BU_RSV') IF (NMOD_IFN.GE.1) THEN DO JL=1, NMOD_IFN - CALL BUDGET ( PIFS(:,:,:,JL)*PRHODJ(:,:,:),12+NSV_LIMA_IFN_FREE+JL-1,'HIND_BU_RSV') + CALL BUDGET ( PIFS(:,:,:,JL)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_IFN_FREE+JL-1,'HIND_BU_RSV') END DO END IF END IF diff --git a/src/MNH/lima_precip_scavenging.f90 b/src/MNH/lima_precip_scavenging.f90 index 351ee92f0222640114445e455096dcd65234ae2b..71de50a5e048d2814b37f93786e4679a745494be 100644 --- a/src/MNH/lima_precip_scavenging.f90 +++ b/src/MNH/lima_precip_scavenging.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2013-2019 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. @@ -559,13 +559,13 @@ IF (LBUDGET_SV) THEN IF (NMOD_CCN.GE.1) THEN DO JL=1, NMOD_CCN CALL BUDGET ( PRSVS(:,:,:,NSV_LIMA_CCN_FREE+JL-1), & - 12+NSV_LIMA_CCN_FREE+JL-1,'SCAV_BU_RSV') + NBUDGET_SV1-1+NSV_LIMA_CCN_FREE+JL-1,'SCAV_BU_RSV') END DO END IF IF (NMOD_IFN.GE.1) THEN DO JL=1, NMOD_IFN CALL BUDGET ( PRSVS(:,:,:,NSV_LIMA_IFN_FREE+JL-1), & - 12+NSV_LIMA_IFN_FREE+JL-1,'SCAV_BU_RSV') + NBUDGET_SV1-1+NSV_LIMA_IFN_FREE+JL-1,'SCAV_BU_RSV') END DO END IF END IF diff --git a/src/MNH/lima_warm.f90 b/src/MNH/lima_warm.f90 index 1ac67f3ce0e7830f0112bad40bf766dbcb0fd783..e896e999a8d3e3134821a947a3f2d0a6839c3e6e 100644 --- a/src/MNH/lima_warm.f90 +++ b/src/MNH/lima_warm.f90 @@ -323,11 +323,11 @@ CALL LIMA_WARM_SEDIMENTATION (OSEDC, KSPLITR, PTSTEP, KMI, & PINPRC, PINPRR, & PINPRR3D ) ! -IF (LBUDGET_RC .AND. OSEDC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'SEDI_BU_RRC') -IF (LBUDGET_RR .AND. ORAIN) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'SEDI_BU_RRR') +IF (LBUDGET_RC .AND. OSEDC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC,'SEDI_BU_RRC') +IF (LBUDGET_RR .AND. ORAIN) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR,'SEDI_BU_RRR') IF (LBUDGET_SV) THEN - IF (OSEDC) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'SEDI_BU_RSV') - IF (ORAIN) CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'SEDI_BU_RSV') + IF (OSEDC) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_NC,'SEDI_BU_RSV') + IF (ORAIN) CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_NR,'SEDI_BU_RSV') END IF ! ! 2.bis Deposition at 1st level above ground @@ -343,8 +343,8 @@ IF (LDEPOC) THEN PINDEP(:,:) = XVDEPOC * PRCT(:,:,2) * PRHODREF(:,:,2) /XRHOLW END WHERE ! - IF ( LBUDGET_RC ) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'DEPO_BU_RRC') - IF ( LBUDGET_SV ) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'DEPO_BU_RSV') + IF ( LBUDGET_RC ) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'DEPO_BU_RRC') + IF ( LBUDGET_SV ) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NC, 'DEPO_BU_RSV') END IF ! !------------------------------------------------------------------------------- @@ -360,13 +360,13 @@ IF (LACTI .AND. NMOD_CCN.GE.1) THEN PRCM, PRVT, PRCT, PRRT, & PTHS, PRVS, PRCS, PCCS, PNFS, PNAS ) ! - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HENU_BU_RTH') - IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),6,'HENU_BU_RRV') - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'HENU_BU_RRC') + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'HENU_BU_RTH') + IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RV,'HENU_BU_RRV') + IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RC,'HENU_BU_RRC') IF (LBUDGET_SV) THEN - CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'HENU_BU_RSV') ! RCN + CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_NC,'HENU_BU_RSV') ! RCN DO JL=1, NMOD_CCN - CALL BUDGET ( PNFS(:,:,:,JL)*PRHODJ(:,:,:),12+NSV_LIMA_CCN_FREE+JL-1,'HENU_BU_RSV') + CALL BUDGET ( PNFS(:,:,:,JL)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_CCN_FREE+JL-1,'HENU_BU_RSV') END DO END IF ! @@ -401,12 +401,12 @@ IF (ORAIN) THEN PRVS, PRCS, PRRS, PCCS, PCRS, PTHS, & PEVAP3D ) ! - IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),6 ,'REVA_BU_RRV') - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'REVA_BU_RRC') - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'REVA_BU_RRR') - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4 ,'REVA_BU_RTH') - IF (LBUDGET_SV) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'REVA_BU_RSV') - IF (LBUDGET_SV) CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'REVA_BU_RSV') + IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RV,'REVA_BU_RRV') + IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC,'REVA_BU_RRC') + IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR,'REVA_BU_RRR') + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH,'REVA_BU_RTH') + IF (LBUDGET_SV) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_NC,'REVA_BU_RSV') + IF (LBUDGET_SV) CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_NR,'REVA_BU_RSV') ! ! !------------------------------------------------------------------------------- @@ -426,7 +426,7 @@ IF (ORAIN) THEN ! ! Budget storage IF (LBUDGET_SV) & - CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,& + CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_NR,& &'BRKU_BU_RSV') ! diff --git a/src/MNH/lima_warm_coal.f90 b/src/MNH/lima_warm_coal.f90 index aaae2a04be021958b9d559584d07004c012c40ea..ff32fb82922bd0eb4cae1109b199538bc69d7dba 100644 --- a/src/MNH/lima_warm_coal.f90 +++ b/src/MNH/lima_warm_coal.f90 @@ -262,7 +262,7 @@ IF (LRAIN) THEN ZW(:,:,:) = PCCS(:,:,:) IF (LBUDGET_SV) CALL BUDGET ( & UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:))& - &*PRHODJ(:,:,:),12+NSV_LIMA_NC,'SELF_BU_RSV') + &*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_NC,'SELF_BU_RSV') ! ! !------------------------------------------------------------------------------- @@ -297,20 +297,20 @@ IF (LRAIN) THEN ZW(:,:,:) = PRCS(:,:,:) IF (LBUDGET_RC) CALL BUDGET ( & UNPACK(ZRCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) & - *PRHODJ(:,:,:),7 ,'AUTO_BU_RRC') + *PRHODJ(:,:,:), NBUDGET_RC,'AUTO_BU_RRC') ZW(:,:,:) = PRRS(:,:,:) IF (LBUDGET_RR) CALL BUDGET ( & UNPACK(ZRRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) & - *PRHODJ(:,:,:),8 ,'AUTO_BU_RRR') + *PRHODJ(:,:,:), NBUDGET_RR,'AUTO_BU_RRR') ZW(:,:,:) = PCRS(:,:,:) IF (LBUDGET_SV) THEN ZW(:,:,:) = PCRS(:,:,:) CALL BUDGET (UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) & - *PRHODJ(:,:,:),12+NSV_LIMA_NR,'AUTO_BU_RSV') + *PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_NR,'AUTO_BU_RSV') ZW(:,:,:) = PCCS(:,:,:) CALL BUDGET (UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) & - *PRHODJ(:,:,:),12+NSV_LIMA_NC,'AUTO_BU_RSV') + *PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_NC,'AUTO_BU_RSV') END IF ! ! @@ -364,15 +364,15 @@ IF (LRAIN) THEN ZW(:,:,:) = PRCS(:,:,:) IF (LBUDGET_RC) CALL BUDGET ( & UNPACK(ZRCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) & - *PRHODJ(:,:,:),7 ,'ACCR_BU_RRC') + *PRHODJ(:,:,:), NBUDGET_RC,'ACCR_BU_RRC') ZW(:,:,:) = PRRS(:,:,:) IF (LBUDGET_RR) CALL BUDGET ( & UNPACK(ZRRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) & - *PRHODJ(:,:,:),8 ,'ACCR_BU_RRR') + *PRHODJ(:,:,:), NBUDGET_RR,'ACCR_BU_RRR') ZW(:,:,:) = PCCS(:,:,:) IF (LBUDGET_SV) CALL BUDGET ( & UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) & - *PRHODJ(:,:,:),12+NSV_LIMA_NC,'ACCR_BU_RSV') + *PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_NC,'ACCR_BU_RSV') ! ! !------------------------------------------------------------------------------- @@ -422,7 +422,7 @@ IF (LRAIN) THEN ZW(:,:,:) = PCRS(:,:,:) IF (LBUDGET_SV) CALL BUDGET ( & UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) & - *PRHODJ(:,:,:),12+NSV_LIMA_NR,'SCBU_BU_RSV') + *PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_NR,'SCBU_BU_RSV') ! END IF ! LRAIN ! @@ -473,18 +473,18 @@ ELSE ! ------------------------ ! ! - IF (LBUDGET_SV .AND. LRAIN) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'SELF_BU_RSV') + IF (LBUDGET_SV .AND. LRAIN) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NC, 'SELF_BU_RSV') ! - IF (LBUDGET_RC .AND. LRAIN) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'AUTO_BU_RRC') - IF (LBUDGET_RR .AND. LRAIN) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'AUTO_BU_RRR') - IF (LBUDGET_SV .AND. LRAIN) CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'AUTO_BU_RSV') - IF (LBUDGET_SV .AND. LRAIN) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'AUTO_BU_RSV') + IF (LBUDGET_RC .AND. LRAIN) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'AUTO_BU_RRC') + IF (LBUDGET_RR .AND. LRAIN) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'AUTO_BU_RRR') + IF (LBUDGET_SV .AND. LRAIN) CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NR, 'AUTO_BU_RSV') + IF (LBUDGET_SV .AND. LRAIN) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NC, 'AUTO_BU_RSV') ! - IF (LBUDGET_RC .AND. LRAIN) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'ACCR_BU_RRC') - IF (LBUDGET_RR .AND. LRAIN) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'ACCR_BU_RRR') - IF (LBUDGET_SV .AND. LRAIN) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'ACCR_BU_RSV') + IF (LBUDGET_RC .AND. LRAIN) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'ACCR_BU_RRC') + IF (LBUDGET_RR .AND. LRAIN) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'ACCR_BU_RRR') + IF (LBUDGET_SV .AND. LRAIN) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NC, 'ACCR_BU_RSV') ! - IF (LBUDGET_SV .AND. LRAIN) CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'SCBU_BU_RSV') + IF (LBUDGET_SV .AND. LRAIN) CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_LIMA_NR, 'SCBU_BU_RSV') END IF ! IMICRO ! diff --git a/src/MNH/modd_aircraft_balloon.f90 b/src/MNH/modd_aircraft_balloon.f90 index 9ff02772fc696e682c0efc396edbb3c0b6780748..33d6f973fbc2407e4d9f72b8922e1d2e1179dc27 100644 --- a/src/MNH/modd_aircraft_balloon.f90 +++ b/src/MNH/modd_aircraft_balloon.f90 @@ -33,14 +33,17 @@ !! March, 2013 : O.Caumont, C.Lac : add vertical profiles !! Oct,2016 : G.DELAUTIER LIMA ! P. Wautelet 08/02/2019: add missing NULL association for pointers +! P. Wautelet 13/09/2019: budget: simplify and modernize date/time management !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! ! -USE MODD_TYPE_DATE -! +use modd_type_date, only: date_time + +implicit none + TYPE FLYER ! ! @@ -109,7 +112,7 @@ REAL :: P_CUR ! current p (if 'AIRCRA' and 'ALTDEF' ! !* data records ! -REAL, DIMENSION(:), POINTER :: TIME => NULL() ! t(n) (n: recording instants) +type(date_time), dimension(:), pointer :: tpdates => NULL() ! dates(n) (n: recording instants) REAL, DIMENSION(:), POINTER :: X => NULL() ! X(n) REAL, DIMENSION(:), POINTER :: Y => NULL() ! Y(n) REAL, DIMENSION(:), POINTER :: Z => NULL() ! Z(n) @@ -140,7 +143,6 @@ REAL, DIMENSION(:,:), POINTER :: AER => NULL() ! Extinction at 550 nm REAL, DIMENSION(:,:), POINTER :: DST_WL => NULL() ! Extinction by wavelength REAL, DIMENSION(:), POINTER :: ZS => NULL() ! zs(n) REAL, DIMENSION(:), POINTER :: TSRAD => NULL() ! Ts(n) -REAL, DIMENSION(:,:), POINTER :: DATIME => NULL() ! record for diachro ! REAL, DIMENSION(:) , POINTER :: THW_FLUX => NULL() ! thw_flux(n) REAL, DIMENSION(:) , POINTER :: RCW_FLUX => NULL() ! rcw_flux(n) diff --git a/src/MNH/modd_budget.f90 b/src/MNH/modd_budget.f90 index 85fd9295bea449b2a57a47dfe866e77572cdab38..56e11dcee214fea7c535481f5f7a5032233b263b 100644 --- a/src/MNH/modd_budget.f90 +++ b/src/MNH/modd_budget.f90 @@ -44,6 +44,7 @@ !! S. Riette 11/2016 New budgets for ICE3/ICE4 ! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O ! P. Wautelet 19/07/2019: parameters to identify budget number +! P. Wautelet 15/11/2019: remove unused CBURECORD variable !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -54,6 +55,7 @@ implicit none public +integer, parameter :: NBUDGET_RHO = 0 ! Reference number for budget of RhoJ integer, parameter :: NBUDGET_U = 1 ! Reference number for budget of RhoJu and/or LES budgets with u integer, parameter :: NBUDGET_V = 2 ! Reference number for budget of RhoJv and/or LES budgets with u integer, parameter :: NBUDGET_W = 3 ! Reference number for budget of RhoJw and/or LES budgets with u @@ -94,8 +96,6 @@ CHARACTER(LEN=2), SAVE, DIMENSION(:,:), & ! resulting string character of the ALLOCATABLE :: CBUACTION ! transcription of the budget actions ! (integer) read in namelists or ! set by default -CHARACTER (LEN=NMNHNAMELGTMAX), SAVE, DIMENSION(:,:),& ! names of records on the FM file - ALLOCATABLE :: CBURECORD ! for the budgets ! CHARACTER (LEN=99), SAVE, DIMENSION(:,:),& ! name of a process for a budget. It ALLOCATABLE :: CBUCOMMENT ! will appear in the comment part of diff --git a/src/MNH/modd_les.f90 b/src/MNH/modd_les.f90 index c30666b2e4e2cdbb2fdce8ea65291c2bf0bcc51c..e830ed1a4331fd3716cda326390bb7b22f0085bd 100644 --- a/src/MNH/modd_les.f90 +++ b/src/MNH/modd_les.f90 @@ -1,6 +1,6 @@ -!MNH_LIC Copyright 1995-2018 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1995-2019 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- ! ############### @@ -42,6 +42,7 @@ !! P. Aumond Oct ,2009 User multimaskS + 4th order !! C.Lac Oct ,2014 Correction on user masks !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O +! P. Wautelet 13/09/2019: budget: simplify and modernize date/time management !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -136,9 +137,6 @@ INTEGER :: NLES_CURRENT_TCOUNT INTEGER :: NLES_CURRENT_TIMES ! current model NLES_TIMES (number of LES samplings) ! -REAL, DIMENSION(:,:), ALLOCATABLE :: XLES_CURRENT_TRAJT -! trajt array for write_diachro routine -! INTEGER :: NLES_CURRENT_IINF, NLES_CURRENT_ISUP, NLES_CURRENT_JINF, NLES_CURRENT_JSUP ! coordinates for write_diachro, set to NLESn_IINF(current model), etc... ! @@ -151,9 +149,6 @@ CHARACTER(LEN=4), DIMENSION(2) :: CLES_CURRENT_LBCX CHARACTER(LEN=4), DIMENSION(2) :: CLES_CURRENT_LBCY ! current model Y boundary conditions for 2 points correlations computations ! -REAL, DIMENSION(:,:), ALLOCATABLE :: XLES_CURRENT_DATIME -! date array for diachro -! REAL, DIMENSION(:), ALLOCATABLE :: XLES_CURRENT_Z ! altitudes for diachro ! diff --git a/src/MNH/modd_les_budget.f90 b/src/MNH/modd_les_budget.f90 index 355b3890b566a508e94163f700d59bbacb432456..062eb355286b592ace756db804a5257fbe31d3f2 100644 --- a/src/MNH/modd_les_budget.f90 +++ b/src/MNH/modd_les_budget.f90 @@ -1,13 +1,8 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2002-2019 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- -!--------------- special set of characters for RCS information -!----------------------------------------------------------------- -! $Source$ $Revision$ -! MASDEV4_7 modd 2006/05/18 13:07:25 -!----------------------------------------------------------------- ! ############### MODULE MODD_LES_BUDGET ! ############### @@ -113,30 +108,30 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: X_LES_BU_SBG_Tke ! !* index for each processus taken into account in the budgets ! -INTEGER :: NLES_TOTADV -INTEGER :: NLES_RELA -INTEGER :: NLES_RAD -INTEGER :: NLES_GRAV -INTEGER :: NLES_COR -INTEGER :: NLES_MICR -INTEGER :: NLES_HTURB -INTEGER :: NLES_VTURB -INTEGER :: NLES_FORC -INTEGER :: NLES_PRES -INTEGER :: NLES_DIFF -INTEGER :: NLES_CURV -INTEGER :: NLES_PREF -INTEGER :: NLES_DP -INTEGER :: NLES_TP -INTEGER :: NLES_TR -INTEGER :: NLES_DISS -INTEGER :: NLES_TEND -INTEGER :: NLES_MISC -INTEGER :: NLES_ADVR -INTEGER :: NLES_ADVM -INTEGER :: NLES_NEST -! -INTEGER :: NLES_TOT +integer, parameter :: NLES_TOTADV= 1 +integer, parameter :: NLES_RELA = 2 +integer, parameter :: NLES_RAD = 3 +integer, parameter :: NLES_GRAV = 4 +integer, parameter :: NLES_COR = 5 +integer, parameter :: NLES_MICR = 6 +integer, parameter :: NLES_HTURB = 7 +integer, parameter :: NLES_VTURB = 8 +integer, parameter :: NLES_FORC = 9 +integer, parameter :: NLES_PRES = 10 +integer, parameter :: NLES_DIFF = 11 +integer, parameter :: NLES_CURV = 12 +integer, parameter :: NLES_PREF = 13 +integer, parameter :: NLES_DP = 14 +integer, parameter :: NLES_TP = 15 +integer, parameter :: NLES_TR = 16 +integer, parameter :: NLES_DISS = 17 +integer, parameter :: NLES_TEND = 18 +integer, parameter :: NLES_ADVR = 19 +integer, parameter :: NLES_ADVM = 20 +integer, parameter :: NLES_NEST = 21 +integer, parameter :: NLES_MISC = 22 + +integer, parameter :: NLES_TOT = 22 ! !------------------------------------------------------------------------------- ! diff --git a/src/MNH/modd_lesn.f90 b/src/MNH/modd_lesn.f90 index 9fe76c3f8f7eacbc68b7724d4f0df26562d791d3..88ac14ccec79b3747f23fce4c82ca684dc997b69 100644 --- a/src/MNH/modd_lesn.f90 +++ b/src/MNH/modd_lesn.f90 @@ -40,7 +40,8 @@ !! O.Thouron June, 2008 New radiation diagnostics !! 10/2016 (C.Lac) Add droplet deposition ! P. Wautelet 08/02/2019: add missing NULL association for pointers -!! 02/2019 (C. Lac) Add rain fraction as a LES diagnostic +! C. Lac 02/2019: add rain fraction as a LES diagnostic +! P. Wautelet 13/09/2019: budget: simplify and modernize date/time management !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -63,8 +64,8 @@ TYPE LES_t INTEGER :: NSPECTRA_NI ! number of wave lengths in I direction INTEGER :: NSPECTRA_NJ ! number of wave lengths in J direction ! - REAL, DIMENSION(:,:), POINTER :: XLES_DATIME=>NULL() ! date array for diachro - REAL, DIMENSION(:,:), POINTER :: XLES_TRAJT=>NULL() ! sampling times array for diachro + type(date_time), dimension(:), pointer :: xles_dates => null() !Dates array + real, dimension(:), pointer :: xles_times => null() !Times from the start of the segment ! REAL, DIMENSION(:), POINTER :: XLES_Z=>NULL() ! altitudes REAL :: XLES_ZS ! mean orography @@ -670,8 +671,8 @@ INTEGER, POINTER :: NLES_DTCOUNT=>NULL() INTEGER, POINTER :: NLES_TCOUNT=>NULL() INTEGER, POINTER :: NSPECTRA_NI=>NULL() INTEGER, POINTER :: NSPECTRA_NJ=>NULL() -REAL, DIMENSION(:,:), POINTER :: XLES_DATIME=>NULL() -REAL, DIMENSION(:,:), POINTER :: XLES_TRAJT=>NULL() +type(date_time), dimension(:), pointer :: xles_dates => null() +real, dimension(:), pointer :: xles_times => null() REAL, DIMENSION(:), POINTER :: XLES_Z=>NULL() REAL, POINTER :: XLES_ZS=>NULL() REAL, DIMENSION(:,:,:), POINTER :: XCOEFLIN_LES=>NULL() @@ -1099,8 +1100,8 @@ SUBROUTINE LES_GOTO_MODEL(KFROM, KTO) INTEGER, INTENT(IN) :: KFROM, KTO ! ! Save current state for allocated arrays -LES_MODEL(KFROM)%XLES_DATIME=>XLES_DATIME -LES_MODEL(KFROM)%XLES_TRAJT=>XLES_TRAJT +les_model(kfrom)%xles_dates=>xles_dates +les_model(kfrom)%xles_times=>xles_times LES_MODEL(KFROM)%XLES_Z=>XLES_Z LES_MODEL(KFROM)%XCOEFLIN_LES=>XCOEFLIN_LES LES_MODEL(KFROM)%NKLIN_LES=>NKLIN_LES @@ -1527,8 +1528,8 @@ NLES_DTCOUNT=>LES_MODEL(KTO)%NLES_DTCOUNT NLES_TCOUNT=>LES_MODEL(KTO)%NLES_TCOUNT NSPECTRA_NI=>LES_MODEL(KTO)%NSPECTRA_NI NSPECTRA_NJ=>LES_MODEL(KTO)%NSPECTRA_NJ -XLES_DATIME=>LES_MODEL(KTO)%XLES_DATIME -XLES_TRAJT=>LES_MODEL(KTO)%XLES_TRAJT +xles_dates=>les_model(kto)%xles_dates +xles_times=>les_model(kto)%xles_times XLES_Z=>LES_MODEL(KTO)%XLES_Z XLES_ZS=>LES_MODEL(KTO)%XLES_ZS XCOEFLIN_LES=>LES_MODEL(KTO)%XCOEFLIN_LES diff --git a/src/MNH/modd_seriesn.f90 b/src/MNH/modd_seriesn.f90 index 0078ed222a0d9db9bf9f232a32187e60021fdcec..03ab9f206df8701771193cbe8960cec8394ee320 100644 --- a/src/MNH/modd_seriesn.f90 +++ b/src/MNH/modd_seriesn.f90 @@ -1,13 +1,8 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1998-2019 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- -!--------------- special set of characters for RCS information -!----------------------------------------------------------------- -! $Source$ $Revision$ -! NEC0 masdev4_7 2007/06/16 01:41:59 -!----------------------------------------------------------------- ! #################### MODULE MODD_SERIES_n ! #################### @@ -37,12 +32,15 @@ !! Original 29/01/98 !! Oct. 10,1998 (Lafore) adaptation of Diagnostics !! to the sequential nesting version +! P. Wautelet 13/09/2019: budget: simplify and modernize date/time management !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! USE MODD_PARAMETERS, ONLY: JPMODELMAX +use modd_type_date, only: date_time + IMPLICIT NONE TYPE SERIES_t @@ -68,8 +66,7 @@ TYPE SERIES_t REAL, DIMENSION(:,:,:,:,:,:), POINTER :: XSSERIES1=>NULL() ! 1st group: temporal serie (t) REAL, DIMENSION(:,:,:,:,:,:), POINTER :: XSSERIES2=>NULL() ! 2nd group:temporal serie (z,t) REAL, DIMENSION(:,:,:,:,:,:), POINTER :: XSSERIES3=>NULL() ! 3rd group:temporal serie (x,t) - REAL, DIMENSION(:,:) , POINTER :: XSTRAJT=>NULL() ! time trajectory - REAL, DIMENSION(:,:), POINTER :: XSDATIME=>NULL() ! Dates of exp, seg and current + type(date_time), dimension(:), pointer :: tpsdates => NULL() ! dates CHARACTER(LEN=50),DIMENSION(:),POINTER :: CSCOMMENT1=>NULL() ! strings ! associated with the 1st group CHARACTER(LEN=50),DIMENSION(:),POINTER :: CSCOMMENT2=>NULL() ! with the 2nd @@ -128,8 +125,7 @@ INTEGER, POINTER :: NSTEMP_SERIE3=>NULL() REAL, DIMENSION(:,:,:,:,:,:), POINTER :: XSSERIES1=>NULL() REAL, DIMENSION(:,:,:,:,:,:), POINTER :: XSSERIES2=>NULL() REAL, DIMENSION(:,:,:,:,:,:), POINTER :: XSSERIES3=>NULL() -REAL, DIMENSION(:,:), POINTER :: XSTRAJT=>NULL() -REAL, DIMENSION(:,:), POINTER :: XSDATIME=>NULL() +type(date_time), dimension(:), pointer :: tpsdates => NULL() CHARACTER(LEN=50),DIMENSION(:),POINTER :: CSCOMMENT1=>NULL() CHARACTER(LEN=50),DIMENSION(:),POINTER :: CSCOMMENT2=>NULL() CHARACTER(LEN=50),DIMENSION(:),POINTER :: CSCOMMENT3=>NULL() @@ -175,8 +171,7 @@ ENDIF SERIES_MODEL(KFROM)%XSSERIES1=>XSSERIES1 SERIES_MODEL(KFROM)%XSSERIES2=>XSSERIES2 SERIES_MODEL(KFROM)%XSSERIES3=>XSSERIES3 -SERIES_MODEL(KFROM)%XSTRAJT=>XSTRAJT -SERIES_MODEL(KFROM)%XSDATIME=>XSDATIME +series_model(kfrom)%tpsdates=>tpsdates SERIES_MODEL(KFROM)%CSCOMMENT1=>CSCOMMENT1 SERIES_MODEL(KFROM)%CSCOMMENT2=>CSCOMMENT2 SERIES_MODEL(KFROM)%CSCOMMENT3=>CSCOMMENT3 @@ -215,8 +210,7 @@ NSTEMP_SERIE3=>SERIES_MODEL(KTO)%NSTEMP_SERIE3 XSSERIES1=>SERIES_MODEL(KTO)%XSSERIES1 XSSERIES2=>SERIES_MODEL(KTO)%XSSERIES2 XSSERIES3=>SERIES_MODEL(KTO)%XSSERIES3 -XSTRAJT=>SERIES_MODEL(KTO)%XSTRAJT -XSDATIME=>SERIES_MODEL(KTO)%XSDATIME +tpsdates=>series_model(kto)%tpsdates CSCOMMENT1=>SERIES_MODEL(KTO)%CSCOMMENT1 CSCOMMENT2=>SERIES_MODEL(KTO)%CSCOMMENT2 CSCOMMENT3=>SERIES_MODEL(KTO)%CSCOMMENT3 diff --git a/src/MNH/modd_type_profiler.f90 b/src/MNH/modd_type_profiler.f90 index 944e44307e28dfd270eca6ca185cee5c28c5676b..ed00d4799ed5d79f395ebd3a92331bece8b1269e 100644 --- a/src/MNH/modd_type_profiler.f90 +++ b/src/MNH/modd_type_profiler.f90 @@ -1,13 +1,8 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2002-2019 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- -!--------------- special set of characters for RCS information -!----------------------------------------------------------------- -! $Source: /home/cvsroot/MNH-VX-Y-Z/src/MNH/modd_type_profiler.f90,v $ $Revision: 1.2.4.1.2.1.10.2.2.1 $ -! MASDEV4_7 modd 2006/06/27 12:27:06 -!----------------------------------------------------------------- ! ############################ MODULE MODD_TYPE_PROFILER ! ############################ @@ -22,9 +17,7 @@ !! !!** IMPLICIT ARGUMENTS !! ------------------ -!! NONE !! -IMPLICIT NONE !! !! REFERENCE !! --------- @@ -37,13 +30,16 @@ IMPLICIT NONE !! ------------- !! Original 15/01/02 !! C.Lac 10/2016 Add visibility diagnostic +! P. Wautelet 13/09/2019: budget: simplify and modernize date/time management !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! -! -! +use modd_type_date, only: date_time + +implicit none + TYPE PROFILER ! ! @@ -61,8 +57,8 @@ REAL :: STEP ! storage time step CHARACTER(LEN=8),DIMENSION(:), POINTER :: NAME=>NULL() ! station name CHARACTER(LEN=8),DIMENSION(:), POINTER :: TYPE=>NULL() ! station type ! -REAL, DIMENSION(:), POINTER :: TIME=>NULL() ! t(n) (n: recording instants) -LOGICAL, DIMENSION(:), POINTER :: ERROR=>NULL() +type(date_time), dimension(:), pointer :: tpdates => NULL() ! dates(n) (n: recording instants) +LOGICAL, DIMENSION(:), POINTER :: ERROR=>NULL() REAL, DIMENSION(:), POINTER :: X=>NULL() ! X(n) REAL, DIMENSION(:), POINTER :: Y=>NULL() ! Y(n) REAL, DIMENSION(:), POINTER :: LON=>NULL() ! longitude(n) @@ -70,7 +66,7 @@ REAL, DIMENSION(:), POINTER :: LAT=>NULL() ! latitude (n) REAL, DIMENSION(:), POINTER :: ALT=>NULL() ! altitude (n) REAL, DIMENSION(:,:,:), POINTER :: ZON=>NULL() ! zonal wind(n) REAL, DIMENSION(:,:,:), POINTER :: MER=>NULL() ! meridian wind(n) -REAL, DIMENSION(:,:,:), POINTER :: FF=>NULL() ! wind intensity +REAL, DIMENSION(:,:,:), POINTER :: FF=>NULL() ! wind intensity REAL, DIMENSION(:,:,:), POINTER :: DD=>NULL() ! wind direction REAL, DIMENSION(:,:,:), POINTER :: W=>NULL() ! w(n) (air vertical speed) REAL, DIMENSION(:,:,:), POINTER :: P=>NULL() ! p(n) @@ -85,7 +81,6 @@ REAL, DIMENSION(:,:,:), POINTER :: RHOD=>NULL() ! density of dry air/moist REAL, DIMENSION(:,:,:,:), POINTER :: R=>NULL() ! r*(n) REAL, DIMENSION(:,:,:,:), POINTER :: SV=>NULL() ! Sv*(n) REAL, DIMENSION(:,:,:,:), POINTER :: AER=>NULL() ! AER*(n) aerosol extinction -REAL, DIMENSION(:,:), POINTER :: DATIME=>NULL() ! record for diachro ! REAL, DIMENSION(:,:), POINTER :: T2M=>NULL() ! 2 m air temperature (°C) REAL, DIMENSION(:,:), POINTER :: Q2M=>NULL() ! 2 m humidity (kg/kg) diff --git a/src/MNH/modd_type_station.f90 b/src/MNH/modd_type_station.f90 index 462358f2dd38cf66d8f8f52337baa5d89ba95a49..3456ac2d272e30cd9ce2e85fbd58f6d4dd4019a3 100644 --- a/src/MNH/modd_type_station.f90 +++ b/src/MNH/modd_type_station.f90 @@ -1,8 +1,9 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2002-2019 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. -! ######spl +!----------------------------------------------------------------- +! ############################ MODULE MODD_TYPE_STATION ! ############################ ! @@ -28,12 +29,17 @@ !! MODIFICATIONS !! ------------- !! Original 15/01/02 +! P. Wautelet 13/09/2019: budget: simplify and modernize date/time management !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! ! +use modd_type_date, only: date_time + +implicit none + TYPE STATION ! ! @@ -50,8 +56,8 @@ REAL :: STEP ! storage time step ! CHARACTER(LEN=8),DIMENSION(:), POINTER :: NAME=>NULL() ! station name CHARACTER(LEN=8),DIMENSION(:), POINTER :: TYPE=>NULL() ! station type -REAL, DIMENSION(:), POINTER :: TIME=>NULL() ! t(n) (n: recording instants) -LOGICAL, DIMENSION(:), POINTER :: ERROR=>NULL() ! +type(date_time), dimension(:), pointer :: tpdates => NULL() ! dates(n) (n: recording instants) +LOGICAL, DIMENSION(:), POINTER :: ERROR=>NULL() ! REAL, DIMENSION(:), POINTER :: X=>NULL() ! X(n) REAL, DIMENSION(:), POINTER :: Y=>NULL() ! Y(n) REAL, DIMENSION(:), POINTER :: Z=>NULL() ! Z(n) @@ -67,7 +73,6 @@ REAL, DIMENSION(:,:,:), POINTER :: R=>NULL() ! r*(n) REAL, DIMENSION(:,:,:), POINTER :: SV=>NULL() ! Sv*(n) REAL, DIMENSION(:), POINTER :: ZS=>NULL() ! zs(n) REAL, DIMENSION(:,:), POINTER :: TSRAD=>NULL() ! Ts(n) -REAL, DIMENSION(:,:), POINTER :: DATIME=>NULL() ! record for diachro ! REAL, DIMENSION(:,:), POINTER :: T2M=>NULL() ! REAL, DIMENSION(:,:), POINTER :: Q2M=>NULL() ! diff --git a/src/MNH/mode_les_diachro.f90 b/src/MNH/mode_les_diachro.f90 index 225d990414a1c5cd27362ee4e0a3051075f050d8..4c91d1ebaf870b6a8299a25f63adffdaf327997f 100644 --- a/src/MNH/mode_les_diachro.f90 +++ b/src/MNH/mode_les_diachro.f90 @@ -4,212 +4,104 @@ !MNH_LIC for details. version 1. !----------------------------------------------------------------- ! Modifications -! G. TANGUY 19/05/2014 : correctoin DATIME in case of time average -! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O +! G. Tanguy 19/05/2014: correct DATIME in case of time average +! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O +! P. Wautelet 13/09/2019: budget: simplify and modernize date/time management +! P. Wautelet 20/09/2019: rewrite normalization of LES budgets !----------------------------------------------------------------- !####################### MODULE MODE_LES_DIACHRO !####################### -! + USE MODD_LUNIT -! +use modd_les_n, only: xles_dates, xles_times + +use mode_msg + +implicit none + +private + +public :: LES_DIACHRO, LES_DIACHRO_2PT, LES_DIACHRO_MASKS, LES_DIACHRO_SPEC, & + LES_DIACHRO_SURF, LES_DIACHRO_SURF_SV, LES_DIACHRO_SV, LES_DIACHRO_SV_MASKS + CONTAINS ! !--------------------------------------------------------------------- ! !######################################################## -SUBROUTINE MAKE_NORM(HUNIT, KC, ODIV, PA_NORM, PLES_NORM) +subroutine Make_norm( pa_norm, ples_norm, kpower ) !######################################################## -! -USE MODD_PARAMETERS -USE MODD_LES -IMPLICIT NONE -! -CHARACTER(LEN=50), INTENT(IN) :: HUNIT ! physical unit of field -INTEGER, INTENT(IN) :: KC ! character counter -LOGICAL, INTENT(INOUT) :: ODIV ! flag to make a division -REAL, DIMENSION(:,:,:,:),INTENT(INOUT) :: PA_NORM ! normalized field -REAL, DIMENSION(:), INTENT(IN) :: PLES_NORM ! normalization coefficient -INTEGER :: JK ! z counter -INTEGER :: JT ! time counter -INTEGER :: JP ! process counter -INTEGER :: JN ! variable number counter (larger than 1 only for scalar var.) -CHARACTER(LEN=50) :: YUNIT -! -!------------------------------------------------------------------------ -! -YUNIT=HUNIT -! -IF ( ANY(PLES_NORM(:)==0.) ) THEN - PA_NORM(:,:,:,:)=XUNDEF - ODIV=.FALSE. - RETURN -END IF +use modd_les, only: nles_current_times, nles_k +use modd_parameters, only: XUNDEF -DO JN=1,SIZE(PA_NORM,4) - IF (YUNIT(KC+1:KC+1)=='3') THEN - IF (ODIV) THEN - DO JP=1,SIZE(PA_NORM,3) - DO JT=1,NLES_CURRENT_TIMES - DO JK=1,NLES_K - IF (PA_NORM(JK,JT,JP,JN)/=XUNDEF) & - PA_NORM(JK,JT,JP,JN) = PA_NORM(JK,JT,JP,JN) * PLES_NORM(JT)**3 - END DO - END DO - END DO - ELSE - DO JP=1,SIZE(PA_NORM,3) - DO JT=1,NLES_CURRENT_TIMES - DO JK=1,NLES_K - IF (PA_NORM(JK,JT,JP,JN)/=XUNDEF) & - PA_NORM(JK,JT,JP,JN) = PA_NORM(JK,JT,JP,JN) / PLES_NORM(JT)**3 - END DO - END DO - END DO - END IF - ELSE IF (YUNIT(KC+1:KC+1)=='2') THEN - IF (ODIV) THEN - DO JP=1,SIZE(PA_NORM,3) - DO JT=1,NLES_CURRENT_TIMES - DO JK=1,NLES_K - IF (PA_NORM(JK,JT,JP,JN)/=XUNDEF) & - PA_NORM(JK,JT,JP,JN) = PA_NORM(JK,JT,JP,JN) * PLES_NORM(JT)**2 - END DO - END DO - END DO - ELSE - DO JP=1,SIZE(PA_NORM,3) - DO JT=1,NLES_CURRENT_TIMES - DO JK=1,NLES_K - IF (PA_NORM(JK,JT,JP,JN)/=XUNDEF) & - PA_NORM(JK,JT,JP,JN) = PA_NORM(JK,JT,JP,JN) / PLES_NORM(JT)**2 - END DO - END DO - END DO - END IF - ELSE - IF (ODIV) THEN - DO JP=1,SIZE(PA_NORM,3) - DO JT=1,NLES_CURRENT_TIMES - DO JK=1,NLES_K - IF (PA_NORM(JK,JT,JP,JN)/=XUNDEF) & - PA_NORM(JK,JT,JP,JN) = PA_NORM(JK,JT,JP,JN) * PLES_NORM(JT) - END DO - END DO - END DO - ELSE - DO JP=1,SIZE(PA_NORM,3) - DO JT=1,NLES_CURRENT_TIMES - DO JK=1,NLES_K - IF (PA_NORM(JK,JT,JP,JN)/=XUNDEF) & - PA_NORM(JK,JT,JP,JN) = PA_NORM(JK,JT,JP,JN) / PLES_NORM(JT) - END DO - END DO - END DO - END IF - END IF -END DO -! -ODIV=.FALSE. -! -END SUBROUTINE MAKE_NORM -! -!########################################################### -SUBROUTINE MAKE_NORM_SV(HUNIT, KC, ODIV, PA_NORM, PLES_NORM) -!########################################################### -! -USE MODD_PARAMETERS -USE MODD_LES -IMPLICIT NONE -! -CHARACTER(LEN=50), INTENT(IN) :: HUNIT ! physical unit of field -INTEGER, INTENT(IN) :: KC ! character counter -LOGICAL, INTENT(INOUT) :: ODIV ! flag to make a division -REAL, DIMENSION(:,:,:,:),INTENT(INOUT) :: PA_NORM ! normalized field -REAL, DIMENSION(:,:), INTENT(IN) :: PLES_NORM ! normalization coefficient +real, dimension(:,:,:,:), intent(inout) :: pa_norm ! normalized field +real, dimension(:), intent(in) :: ples_norm ! normalization coefficient +integer, intent(in) :: kpower ! normalization power -INTEGER :: JK ! z counter -INTEGER :: JT ! time counter -INTEGER :: JP ! process counter -INTEGER :: JSV! scalar variables counter -CHARACTER(LEN=50) :: YUNIT -! -!------------------------------------------------------------------- -! -YUNIT=HUNIT -! -DO JSV=1,SIZE(PLES_NORM,2) - IF (ANY(PLES_NORM(:,JSV)==0.)) THEN - PA_NORM(:,:,:,JSV)=XUNDEF - CYCLE - END IF - IF (YUNIT(KC+1:KC+1)=='3') THEN - IF (ODIV) THEN - DO JP=1,SIZE(PA_NORM,3) - DO JT=1,NLES_CURRENT_TIMES - DO JK=1,NLES_K - IF (PA_NORM(JK,JT,JP,JSV)/=XUNDEF) & - PA_NORM(JK,JT,JP,JSV) = PA_NORM(JK,JT,JP,JSV) * PLES_NORM(JT,JSV)**3 - END DO - END DO - END DO - ELSE - DO JP=1,SIZE(PA_NORM,3) - DO JT=1,NLES_CURRENT_TIMES - DO JK=1,NLES_K - IF (PA_NORM(JK,JT,JP,JSV)/=XUNDEF) & - PA_NORM(JK,JT,JP,JSV) = PA_NORM(JK,JT,JP,JSV) / PLES_NORM(JT,JSV)**3 - END DO - END DO - END DO - END IF - ELSE IF (YUNIT(KC+1:KC+1)=='2') THEN - IF (ODIV) THEN - DO JP=1,SIZE(PA_NORM,3) - DO JT=1,NLES_CURRENT_TIMES - DO JK=1,NLES_K - IF (PA_NORM(JK,JT,JP,JSV)/=XUNDEF) & - PA_NORM(JK,JT,JP,JSV) = PA_NORM(JK,JT,JP,JSV) * PLES_NORM(JT,JSV)**2 - END DO - END DO - END DO - ELSE - DO JP=1,SIZE(PA_NORM,3) - DO JT=1,NLES_CURRENT_TIMES - DO JK=1,NLES_K - IF (PA_NORM(JK,JT,JP,JSV)/=XUNDEF) & - PA_NORM(JK,JT,JP,JSV) = PA_NORM(JK,JT,JP,JSV) / PLES_NORM(JT,JSV)**2 - END DO - END DO - END DO - END IF - ELSE - IF (ODIV) THEN - DO JP=1,SIZE(PA_NORM,3) - DO JT=1,NLES_CURRENT_TIMES - DO JK=1,NLES_K - IF (PA_NORM(JK,JT,JP,JSV)/=XUNDEF) & - PA_NORM(JK,JT,JP,JSV) = PA_NORM(JK,JT,JP,JSV) * PLES_NORM(JT,JSV) - END DO - END DO - END DO - ELSE - DO JP=1,SIZE(PA_NORM,3) - DO JT=1,NLES_CURRENT_TIMES - DO JK=1,NLES_K - IF (PA_NORM(JK,JT,JP,JSV)/=XUNDEF) & - PA_NORM(JK,JT,JP,JSV) = PA_NORM(JK,JT,JP,JSV) / PLES_NORM(JT,JSV) - END DO - END DO - END DO - END IF - END IF -END DO -! -ODIV=.FALSE. -! -END SUBROUTINE MAKE_NORM_SV +integer :: jk ! z counter +integer :: jt ! time counter +integer :: jp ! process counter +integer :: jn ! variable number counter (larger than 1 only for scalar var.) + +if ( kpower == 0 ) return + +!normalization is not possible if some values are zero +if ( any( ples_norm(: ) == 0. ) ) then + pa_norm(:, :, :, : ) = XUNDEF + return +end if + +do jn = 1, size( pa_norm, 4 ) + do jp = 1, size( pa_norm, 3 ) + do jt = 1, nles_current_times + do jk = 1, nles_k + if ( pa_norm(jk, jt, jp, jn ) /= XUNDEF ) & + pa_norm(jk, jt, jp, jn ) = pa_norm(jk, jt, jp, jn ) * ples_norm(jt )**( -kpower ) + end do + end do + end do +end do + +end subroutine Make_norm + +!######################################################## +subroutine Make_norm_sv( pa_norm, ples_norm, kpower ) +!######################################################## + +use modd_les, only: nles_current_times, nles_k +use modd_parameters, only: XUNDEF + +real, dimension(:,:,:,:), intent(inout) :: pa_norm ! normalized field +real, dimension(:,:), intent(in) :: ples_norm ! normalization coefficient +integer, intent(in) :: kpower ! normalization power + +integer :: jk ! z counter +integer :: jt ! time counter +integer :: jp ! process counter +integer :: jsv! scalar variables counter + +if ( kpower == 0 ) return + +!normalization is not possible if some values are zero +do jsv = 1, size( ples_norm, 2 ) + if ( any( ples_norm(:, jsv ) == 0. ) ) then + pa_norm(:, :, :, jsv) = xundef + cycle + end if + + do jp = 1, size( pa_norm, 3 ) + do jt = 1, nles_current_times + do jk = 1, nles_k + if ( pa_norm(jk, jt, jp, jsv) /= xundef ) & + pa_norm(jk, jt,jp, jsv ) = pa_norm(jk, jt, jp, jsv ) * ples_norm(jt, jsv )**( -kpower ) + end do + end do + end do +end do + +end subroutine Make_norm_sv ! ! ################################################### SUBROUTINE LES_NORM_4D(HUNIT, PA_LES, PA_NORM, OSV) @@ -258,69 +150,125 @@ LOGICAL, OPTIONAL, INTENT(IN) :: OSV ! flag for scalar variables ! ! 0.2 declaration of local variables ! -INTEGER :: JC ! character counter -LOGICAL :: GDIV ! flag to make a division -INTEGER :: IKG ! number of 'kg' in the field unit -! -CHARACTER(LEN=50) :: YUNIT -! +integer, parameter :: NMAXUNITS = 10 + +integer, parameter :: NNORM_K = 1 +integer, parameter :: NNORM_KG = 2 +integer, parameter :: NNORM_M = 3 +integer, parameter :: NNORM_PA = 4 +integer, parameter :: NNORM_S = 5 +integer, parameter :: NNORM_RV = 6 +integer, parameter :: NNORM_SV = 7 +integer, parameter :: NNORMS = 7 + +integer :: idx, ispace +integer :: ikg ! number of 'kg' in the field unit +integer :: inunits +integer :: ipower +integer :: ipower_kg_1st +integer :: ji +integer, dimension ( NNORMS ) :: ipowers +character( len = 8 ) :: yun, yname, ypower +character( len = 8 ), dimension( NMAXUNITS ) :: yunits +logical :: gsv !------------------------------------------------------------------------------ -YUNIT=HUNIT//' ' -! -PA_NORM = PA_LES -! -IKG=0 -! -DO JC=1,50 - IF (YUNIT(JC:JC)=='g') THEN - IKG=IKG+1 - ELSE IF (YUNIT(JC:JC)==' ') THEN - EXIT - END IF -END DO -! -GDIV=.FALSE. -! -DO JC=1,49 - ! - SELECT CASE (YUNIT(JC:JC)) - CASE('m') - CALL MAKE_NORM(YUNIT, JC, GDIV, PA_NORM, XLES_NORM_M) - CASE('g') - IF (IKG==1) THEN - CALL MAKE_NORM(YUNIT, JC, GDIV, PA_NORM, XLES_NORM_RHO) - ELSE - IF (PRESENT(OSV)) THEN - IF (OSV) THEN - IF (.NOT. GDIV) & - CALL MAKE_NORM_SV(YUNIT, JC, GDIV, PA_NORM, XLES_NORM_SV) - GDIV=.FALSE. - ELSE - IF (.NOT. GDIV) & - CALL MAKE_NORM(YUNIT, JC, GDIV, PA_NORM, XLES_NORM_RV) - GDIV=.FALSE. - END IF - ELSE - IF (.NOT. GDIV) & - CALL MAKE_NORM(YUNIT, JC, GDIV, PA_NORM, XLES_NORM_RV) - GDIV=.FALSE. - END IF - END IF - CASE('K') - CALL MAKE_NORM(YUNIT, JC, GDIV, PA_NORM, XLES_NORM_K) - CASE('s') - CALL MAKE_NORM(YUNIT, JC, GDIV, PA_NORM, XLES_NORM_S) - CASE('a') - CALL MAKE_NORM(YUNIT, JC, GDIV, PA_NORM, XLES_NORM_P) - CASE('/') - GDIV=.TRUE. - CASE(' ') - EXIT - END SELECT -END DO -! -WHERE(PA_NORM==XUNDEF) PA_NORM = PA_LES -! + +gsv = .false. +if ( present( osv ) ) gsv = osv + +pa_norm(:, :, :, : ) = pa_les(:, :, :, : ) + +!Parse units +!Each unit is separated by blanks +!First part: unit, second part: power (and sign of it) +ipowers(: ) = 0 +inunits = 0 +ikg = 0 +idx = 1 + +!Separate units +do + ispace = scan( hunit(idx: ), ' ' ) + if ( ispace == 0 ) then + inunits = inunits + 1 + if (inunits > NMAXUNITS ) call Print_msg( NVERB_FATAL, 'GEN', 'LES_NORM_4D', 'inunits > NMAXUNITS' ) + yunits(inunits ) = hunit(idx:) + exit + else if ( ispace == len(hunit(idx: )) ) then + exit + else + inunits = inunits + 1 + if (inunits > NMAXUNITS ) call Print_msg( NVERB_FATAL, 'GEN', 'LES_NORM_4D', 'inunits > NMAXUNITS' ) + yunits(inunits ) = hunit( idx : idx+ispace-1 ) + idx = idx + ispace + end if +end do + +!Treat units and their power +!kg are special: they can appear twice with opposite power signs (kg kg-1) +!In that case, they are normalized with xles_norm_rv or xles_norm_sv +do ji = 1, inunits + yun = yunits(ji ) + + !Non dimensional unit + if ( trim( yun ) == '-' .or. trim( yun ) == '1' .or. trim( yun ) == 'percent') then + cycle + end if + + !Separate unit and its power + idx = scan( yun, '-1234567890' ) + if ( idx == 0 ) then + yname = trim( yun ) + ypower = '' + ipower = 1 + else + yname = yun( 1 : idx - 1 ) + ypower = yun( idx : ) + read (ypower,'(I8)') ipower + end if + + select case( trim( yname ) ) + case ( 'K' ) + ipowers(NNORM_K ) = ipowers(NNORM_K ) + ipower + case ( 'kg' ) + ikg = ikg + 1 + if ( ikg == 1 ) ipower_kg_1st = ipower + ipowers(NNORM_KG ) = ipowers(NNORM_KG ) + ipower + case ( 'm' ) + ipowers(NNORM_M ) = ipowers(NNORM_M ) + ipower + case ( 'Pa' ) + ipowers(NNORM_PA ) = ipowers(NNORM_PA ) + ipower + case ( 's' ) + ipowers(NNORM_S ) = ipowers(NNORM_S ) + ipower + case default + call Print_msg( NVERB_WARNING, 'IO', 'LES_NORM_4D', 'unknown unit: '//trim(yname)//'. Conversion could be wrong.' ) + end select +end do + +if ( ikg > 1 .and. ipowers(NNORM_KG ) /= 0 ) & + call Print_msg( NVERB_ERROR, 'IO', 'LES_NORM_4D', 'if kg appears more than one time, it should be admimensional' ) + +if ( ikg > 2 ) & + call Print_msg( NVERB_ERROR, 'IO', 'LES_NORM_4D', 'kg should not appear more than 2 times' ) + +if ( ikg == 2 ) then + if ( gsv ) then + ipowers(NNORM_SV ) = ipower_kg_1st + else + ipowers(NNORM_RV ) = ipower_kg_1st + end if +end if + +if (ipowers(NNORM_K ) /= 0 ) call Make_norm ( pa_norm, xles_norm_k, ipowers(NNORM_K ) ) +if (ipowers(NNORM_KG ) /= 0 ) call Make_norm ( pa_norm, xles_norm_rho, ipowers(NNORM_KG ) ) +if (ipowers(NNORM_M ) /= 0 ) call Make_norm ( pa_norm, xles_norm_m, ipowers(NNORM_M ) ) +if (ipowers(NNORM_PA ) /= 0 ) call Make_norm ( pa_norm, xles_norm_p, ipowers(NNORM_PA ) ) +if (ipowers(NNORM_S ) /= 0 ) call Make_norm ( pa_norm, xles_norm_s, ipowers(NNORM_S ) ) +if (ipowers(NNORM_RV ) /= 0 ) call Make_norm ( pa_norm, xles_norm_rv, ipowers(NNORM_RV ) ) +if (ipowers(NNORM_SV ) /= 0 ) call Make_norm_sv( pa_norm, xles_norm_sv, ipowers(NNORM_SV ) ) + +where( pa_norm == XUNDEF ) pa_norm = pa_les + END SUBROUTINE LES_NORM_4D ! !------------------------------------------------------------------------------ @@ -477,8 +425,9 @@ SUBROUTINE LES_Z_NORM(OAVG,PTRAJZ,PWORK6) !* this subroutine interpolates the normalized field PWORK6 to the ! vertical normalized coordinate. ! -USE MODD_PARAMETERS, ONLY : XUNDEF, JPVEXT USE MODD_LES +USE MODD_PARAMETERS, ONLY: XUNDEF, JPVEXT +use modd_time, only: tdtseg ! USE MODI_COEF_VER_INTERP_LIN USE MODI_VER_INTERP_LIN @@ -515,8 +464,10 @@ REAL :: ZMAX_NORM_M !* normalization height (usually maximum BL height) ! IF (OAVG) THEN - ITEMP_MEAN_START = COUNT( XLES_CURRENT_TRAJT(:,1)<=XLES_TEMP_MEAN_START ) + 1 - ITEMP_MEAN_END = COUNT( XLES_CURRENT_TRAJT(:,1)<=XLES_TEMP_MEAN_END ) + + ITEMP_MEAN_START = COUNT( xles_times(:)<=XLES_TEMP_MEAN_START ) + 1 + ITEMP_MEAN_END = COUNT( xles_times(:)<=XLES_TEMP_MEAN_END ) + IF (ITEMP_MEAN_START > ITEMP_MEAN_END) THEN ITEMP_MEAN_START = 1 ITEMP_MEAN_END = NLES_CURRENT_TIMES @@ -596,7 +547,7 @@ END SUBROUTINE LES_Z_NORM !------------------------------------------------------------------------------ ! !######################################################## -SUBROUTINE LES_TIME_AVG(PTRAJT,PWORK6,KRESP,PDATIME_AVG) +SUBROUTINE LES_TIME_AVG(PWORK6,tpdates,KRESP) !######################################################## ! ! this routine computes time averaging @@ -604,16 +555,16 @@ SUBROUTINE LES_TIME_AVG(PTRAJT,PWORK6,KRESP,PDATIME_AVG) ! Modifications: ! 03/2018 (P.Wautelet) replace ADD_FORECAST_TO_DATE by DATETIME_CORRECTDATE ! +use modd_time, only: tdtseg USE MODD_LES -USE MODD_TYPE_DATE +USE MODD_TYPE_DATE, only: date_time ! -USE MODE_DATETIME +use mode_datetime, only: Datetime_correctdate ! IMPLICIT NONE ! -REAL, DIMENSION(:,:), POINTER :: PTRAJT ! time -REAL, DIMENSION(:,:), POINTER :: PDATIME_AVG ! date REAL, DIMENSION(:,:,:,:,:,:), POINTER :: PWORK6 ! contains physical field +type(date_time), dimension(:), allocatable, intent(inout) :: tpdates INTEGER, INTENT(OUT) :: KRESP ! return code (0 is OK) !------------------------------------------------------------------------------ INTEGER :: JT ! time counter @@ -628,8 +579,6 @@ INTEGER :: JP ! process loop counter INTEGER :: JSV ! scalar loop counter INTEGER :: JX ! first spatial or spectral coordinate loop counter INTEGER :: JY ! second spatial or spectral coordinate loop counter -REAL, DIMENSION(16) :: ZDATIME_SAVE ! date -TYPE(DATE_TIME) :: TZDATE !------------------------------------------------------------------------------ ! IF ( XLES_TEMP_MEAN_END==XUNDEF & @@ -645,29 +594,13 @@ IF (IAVG<=0) THEN RETURN END IF ! -ZDATIME_SAVE(:)=PDATIME_AVG(:,1) -DEALLOCATE(PTRAJT) -DEALLOCATE(PDATIME_AVG) +deallocate( tpdates ) ! -ALLOCATE (PTRAJT(IAVG,1)) -ALLOCATE (PDATIME_AVG(16,IAVG)) +allocate( tpdates( iavg ) ) ALLOCATE (ZWORK6(SIZE(PWORK6,1),SIZE(PWORK6,2),NLES_K,IAVG,SIZE(PWORK6,5),SIZE(PWORK6,6))) ! ZWORK6(:,:,:,:,:,:) = 0. ! -PDATIME_AVG(1,:)=ZDATIME_SAVE(1) -PDATIME_AVG(2,:)=ZDATIME_SAVE(2) -PDATIME_AVG(3,:)=ZDATIME_SAVE(3) -PDATIME_AVG(4,:)=ZDATIME_SAVE(4) -PDATIME_AVG(5,:)=ZDATIME_SAVE(5) -PDATIME_AVG(6,:)=ZDATIME_SAVE(6) -PDATIME_AVG(7,:)=ZDATIME_SAVE(7) -PDATIME_AVG(8,:)=ZDATIME_SAVE(8) -PDATIME_AVG(9,:)=ZDATIME_SAVE(9) -PDATIME_AVG(10,:)=ZDATIME_SAVE(10) -PDATIME_AVG(11,:)=ZDATIME_SAVE(11) -PDATIME_AVG(12,:)=ZDATIME_SAVE(12) -! DO JAVG=1,IAVG ZLES_TEMP_MEAN_START=XLES_TEMP_MEAN_START + (JAVG-1) * XLES_TEMP_MEAN_STEP ZLES_TEMP_MEAN_END =MIN(XLES_TEMP_MEAN_END, ZLES_TEMP_MEAN_START + XLES_TEMP_MEAN_STEP) @@ -679,8 +612,8 @@ DO JAVG=1,IAVG DO JX=1,SIZE(PWORK6,1) ITIME=0 DO JT=1,NLES_CURRENT_TIMES - IF ( XLES_CURRENT_TRAJT(JT,1) >= ZLES_TEMP_MEAN_START .AND. & - XLES_CURRENT_TRAJT(JT,1) <= ZLES_TEMP_MEAN_END) THEN + IF ( xles_times(JT) >= ZLES_TEMP_MEAN_START .AND. & + xles_times(JT) <= ZLES_TEMP_MEAN_END ) THEN IF (PWORK6(JX,JY,JK,JT,JSV,JP) /= XUNDEF) THEN ZWORK6(JX,JY,JK,JAVG,JSV,JP) = ZWORK6(JX,JY,JK,JAVG,JSV,JP) & + PWORK6(JX,JY,JK,JT,JSV,JP) @@ -693,23 +626,19 @@ DO JAVG=1,IAVG ZWORK6(JX,JY,JK,JAVG,JSV,JP) / ITIME END IF IF (ITIME == 0) THEN - ZWORK6(JX,JY,JK,JAVG,JSV,JP)= XUNDEF + ZWORK6(JX,JY,JK,JAVG,JSV,JP)= XUNDEF END IF END DO END DO END DO END DO END DO - PTRAJT(JAVG,1)=(ZLES_TEMP_MEAN_START+ZLES_TEMP_MEAN_END)/2. - TZDATE%TDATE%YEAR = PDATIME_AVG(5,JAVG) - TZDATE%TDATE%MONTH = PDATIME_AVG(6,JAVG) - TZDATE%TDATE%DAY = PDATIME_AVG(7,JAVG) - TZDATE%TIME = PDATIME_AVG(8,JAVG)+PTRAJT(JAVG,1) - CALL DATETIME_CORRECTDATE(TZDATE) - PDATIME_AVG(13,JAVG) = TZDATE%TDATE%YEAR - PDATIME_AVG(14,JAVG) = TZDATE%TDATE%MONTH - PDATIME_AVG(15,JAVG) = TZDATE%TDATE%DAY - PDATIME_AVG(16,JAVG) = TZDATE%TIME + + tpdates(javg )%tdate%year = tdtseg%tdate%year + tpdates(javg )%tdate%month = tdtseg%tdate%month + tpdates(javg )%tdate%day = tdtseg%tdate%day + tpdates(javg )%time = tdtseg%time + ( zles_temp_mean_start + zles_temp_mean_end ) / 2. + call Datetime_correctdate( tpdates(javg ) ) END DO ! DEALLOCATE(PWORK6) @@ -726,9 +655,11 @@ END SUBROUTINE LES_TIME_AVG SUBROUTINE LES_DIACHRO(TPDIAFILE,HGROUP,HCOMMENT,HUNIT,PFIELD,HAVG) !######################################################## ! -USE MODD_IO, ONLY: TFILEDATA -USE MODD_LES USE MODD_GRID +USE MODD_IO, ONLY: TFILEDATA +USE MODD_LES +use modd_type_date, only: date_time + USE MODE_WRITE_DIACHRO, only: WRITE_DIACHRO ! IMPLICIT NONE @@ -748,8 +679,6 @@ CHARACTER(LEN=1), INTENT(IN) :: HAVG ! flag to compute avg. REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTRAJX ! localization of the temporal REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTRAJY ! series in x,y and z. remark: REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTRAJZ ! x and y are not used for LES -REAL, DIMENSION(:,:), POINTER :: ZTRAJT ! time -REAL, DIMENSION(:,:), POINTER :: ZDATIME ! date ! INTEGER, DIMENSION(1) :: IGRID ! grid indicator CHARACTER(LEN= 10) :: YGROUP ! group title @@ -769,6 +698,7 @@ INTEGER :: JK ! vertical loop counter ! LOGICAL :: GAVG ! flag to compute time averagings LOGICAL :: GNORM ! flag to compute normalizations +type(date_time), dimension(:), allocatable :: tzdates ! !------------------------------------------------------------------------------- ! @@ -788,8 +718,7 @@ ALLOCATE (ZTRAJY(1,1,1)) ALLOCATE (ZTRAJZ(NLES_K,1,1)) ! ALLOCATE(ZWORK6(1,1,NLES_K,NLES_CURRENT_TIMES,1,1)) -ALLOCATE(ZTRAJT(NLES_CURRENT_TIMES,1)) -ALLOCATE(ZDATIME(16,NLES_CURRENT_TIMES)) +allocate( tzdates( NLES_CURRENT_TIMES ) ) ! IIL = NLES_CURRENT_IINF IIH = NLES_CURRENT_ISUP @@ -809,8 +738,7 @@ YUNIT (1) = HUNIT YGROUP = HGROUP ! ZWORK6(1,1,:,:,1,1) = ZFIELD (:,:) -ZTRAJT(:,:) = XLES_CURRENT_TRAJT(:,:) -ZDATIME(:,:)=XLES_CURRENT_DATIME(:,:) +tzdates(:) = xles_dates(:) ! !* normalization of vertical dimension ! @@ -822,7 +750,7 @@ END IF !* time average ! IRESP = 0 -IF (GAVG) CALL LES_TIME_AVG(ZTRAJT,ZWORK6,IRESP,ZDATIME) +IF (GAVG) CALL LES_TIME_AVG( ZWORK6, tzdates, IRESP ) ! IF (HAVG/=' ') YGROUP=HAVG//'_'//YGROUP YTITLE(1) = YGROUP @@ -831,10 +759,11 @@ YTITLE(1) = YGROUP ! ---------------------- ! IF (IRESP==0 .AND. ANY(ZWORK6/=XUNDEF)) & -CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT0,YGROUP,"SSOL",IGRID,ZDATIME, ZWORK6, & - ZTRAJT,YTITLE,YUNIT,YCOMMENT,.FALSE.,.FALSE.,.FALSE., & - IIL,IIH,IJL,IJH,IKL,IKH, & - PTRAJX=ZTRAJX,PTRAJY=ZTRAJY,PTRAJZ=ZTRAJZ ) +CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT0, YGROUP, "SSOL", IGRID, tzdates, & + ZWORK6, YTITLE, YUNIT, YCOMMENT, & + OICP = .FALSE., OJCP = .FALSE., OKCP = .FALSE., & + KIL = IIL, KIH = IIH, KJL = IJL, KJH = IJH, KKL = IKL, KKH = IKH, & + PTRAJX = ZTRAJX, PTRAJY = ZTRAJY, PTRAJZ = ZTRAJZ ) ! ! !* 3.0 Deallocations @@ -843,9 +772,8 @@ CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT0,YGROUP,"SSOL",IGRID,ZDATIME, ZWORK6, & DEALLOCATE (ZTRAJX) DEALLOCATE (ZTRAJY) DEALLOCATE (ZTRAJZ) -DEALLOCATE (ZTRAJT) DEALLOCATE (ZWORK6) -DEALLOCATE (ZDATIME) +deallocate( tzdates ) ! !------------------------------------------------------------------------------- END SUBROUTINE LES_DIACHRO @@ -854,10 +782,12 @@ END SUBROUTINE LES_DIACHRO SUBROUTINE LES_DIACHRO_SV(TPDIAFILE,HGROUP,HCOMMENT,HUNIT,PFIELD,HAVG) !########################################################### ! -USE MODD_IO, ONLY: TFILEDATA -USE MODD_LES USE MODD_GRID -USE MODI_WRITE_DIACHRO +USE MODD_IO, ONLY: TFILEDATA +USE MODD_LES +use modd_type_date, only: date_time + +USE MODE_WRITE_DIACHRO ! IMPLICIT NONE ! @@ -876,8 +806,6 @@ CHARACTER(LEN=1), INTENT(IN) :: HAVG ! flag to compute avg. REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTRAJX ! localization of the temporal REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTRAJY ! series in x,y and z. remark: REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTRAJZ ! x and y are not used for LES -REAL, DIMENSION(:,:), POINTER :: ZTRAJT ! time -REAL, DIMENSION(:,:), POINTER :: ZDATIME ! date ! INTEGER, DIMENSION(1) :: IGRID ! grid indicator CHARACTER(LEN= 10) :: YGROUP ! group title @@ -897,6 +825,7 @@ INTEGER :: JSV ! scalar loop counter ! LOGICAL :: GAVG ! flag to compute time averagings LOGICAL :: GNORM ! flag to compute normalizations +type(date_time), dimension(:), allocatable :: tzdates ! !------------------------------------------------------------------------------- ! @@ -915,8 +844,7 @@ ALLOCATE (ZTRAJX(1,1,SIZE(PFIELD,3))) ALLOCATE (ZTRAJY(1,1,SIZE(PFIELD,3))) ALLOCATE (ZTRAJZ(NLES_K,1,SIZE(PFIELD,3))) ALLOCATE(ZWORK6(1,1,NLES_K,NLES_CURRENT_TIMES,SIZE(PFIELD,3),1)) -ALLOCATE(ZTRAJT(NLES_CURRENT_TIMES,1)) -ALLOCATE(ZDATIME(16,NLES_CURRENT_TIMES)) +allocate( tzdates( NLES_CURRENT_TIMES ) ) ! IIL = NLES_CURRENT_IINF IIH = NLES_CURRENT_ISUP @@ -936,8 +864,7 @@ YUNIT (1) = HUNIT YGROUP = HGROUP ! ZWORK6(1,1,:,:,:,1) = ZFIELD (:,:,:) -ZTRAJT(:,:) = XLES_CURRENT_TRAJT(:,:) -ZDATIME(:,:)=XLES_CURRENT_DATIME(:,:) +tzdates(:) = xles_dates(:) ! IF (GNORM) THEN IF (HUNIT(1:1)/=' ') YUNIT='-' @@ -947,7 +874,7 @@ END IF !* time average ! IRESP = 0 -IF (GAVG) CALL LES_TIME_AVG(ZTRAJT,ZWORK6,IRESP,ZDATIME) +IF (GAVG) CALL LES_TIME_AVG( ZWORK6, tzdates, IRESP ) ! IF (HAVG/=' ') YGROUP=HAVG//'_'//YGROUP YTITLE(1) = YGROUP @@ -957,10 +884,11 @@ YTITLE(1) = YGROUP ! ! IF (IRESP==0 .AND. ANY(ZWORK6/=XUNDEF)) & -CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT0,YGROUP,"SSOL",IGRID,ZDATIME, ZWORK6, & - ZTRAJT,YTITLE,YUNIT,YCOMMENT,.FALSE.,.FALSE.,.FALSE., & - IIL,IIH,IJL,IJH,IKL,IKH, & - PTRAJX=ZTRAJX,PTRAJY=ZTRAJY,PTRAJZ=ZTRAJZ ) +CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT0, YGROUP, "SSOL", IGRID, tzdates, & + ZWORK6, YTITLE, YUNIT, YCOMMENT, & + OICP = .FALSE., OJCP = .FALSE., OKCP = .FALSE., & + KIL = IIL, KIH = IIH, KJL = IJL, KJH = IJH, KKL = IKL, KKH = IKH, & + PTRAJX = ZTRAJX, PTRAJY = ZTRAJY, PTRAJZ = ZTRAJZ ) ! ! !* 3.0 Deallocations @@ -969,9 +897,8 @@ CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT0,YGROUP,"SSOL",IGRID,ZDATIME, ZWORK6, & DEALLOCATE (ZTRAJX) DEALLOCATE (ZTRAJY) DEALLOCATE (ZTRAJZ) -DEALLOCATE (ZTRAJT) DEALLOCATE(ZWORK6) -DEALLOCATE(ZDATIME) +deallocate( tzdates ) ! !------------------------------------------------------------------------------- END SUBROUTINE LES_DIACHRO_SV @@ -980,10 +907,12 @@ END SUBROUTINE LES_DIACHRO_SV SUBROUTINE LES_DIACHRO_MASKS(TPDIAFILE,HGROUP,HTITLE,HCOMMENT,HUNIT,PFIELD,HAVG) !##################################################################### ! +USE MODD_GRID USE MODD_IO, ONLY: TFILEDATA USE MODD_LES -USE MODD_GRID -USE MODI_WRITE_DIACHRO +use modd_type_date, only: date_time + +USE MODE_WRITE_DIACHRO ! IMPLICIT NONE ! @@ -1003,8 +932,6 @@ CHARACTER(LEN=1), INTENT(IN) :: HAVG ! flag to compute avg REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTRAJX ! localization of the temporal REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTRAJY ! series in x,y and z. remark: REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTRAJZ ! x and y are not used for LES -REAL, DIMENSION(:,:), POINTER :: ZTRAJT ! time -REAL, DIMENSION(:,:), POINTER :: ZDATIME ! date ! INTEGER, DIMENSION(SIZE(PFIELD,3)) :: IGRID ! grid indicator CHARACTER(LEN= 10) :: YGROUP ! group title @@ -1024,6 +951,7 @@ INTEGER :: JMASK ! Mask loop counter ! LOGICAL :: GAVG ! flag to compute time averagings LOGICAL :: GNORM ! flag to compute normalizations +type(date_time), dimension(:), allocatable :: tzdates ! !------------------------------------------------------------------------------- ! @@ -1042,9 +970,7 @@ ALLOCATE (ZTRAJX(1,1,1)) ALLOCATE (ZTRAJY(1,1,1)) ALLOCATE (ZTRAJZ(NLES_K,1,1)) ALLOCATE(ZWORK6(1,1,NLES_K,NLES_CURRENT_TIMES,1,SIZE(PFIELD,3))) -ALLOCATE(ZTRAJT(NLES_CURRENT_TIMES,1)) -ALLOCATE(ZDATIME(16,NLES_CURRENT_TIMES)) - +allocate( tzdates( NLES_CURRENT_TIMES ) ) ! IIL = NLES_CURRENT_IINF IIH = NLES_CURRENT_ISUP @@ -1065,9 +991,7 @@ YUNIT (:) = HUNIT YGROUP = HGROUP ! ZWORK6(1,1,:,:,1,:) = ZFIELD (:,:,:) -ZTRAJT(:,:) = XLES_CURRENT_TRAJT(:,:) -ZDATIME(:,:)= XLES_CURRENT_DATIME(:,:) - +tzdates(:) = xles_dates(:) ! IF (GNORM) THEN IF (HUNIT(1:1)/=' ') YUNIT='-' @@ -1078,7 +1002,7 @@ END IF !* time average ! IRESP = 0 -IF (GAVG) CALL LES_TIME_AVG(ZTRAJT,ZWORK6,IRESP,ZDATIME) +IF (GAVG) CALL LES_TIME_AVG( ZWORK6, tzdates, IRESP ) ! IF (HAVG/=' ') YGROUP=HAVG//'_'//YGROUP YTITLE (:) = YGROUP//HTITLE(:) @@ -1088,10 +1012,11 @@ YTITLE (:) = YGROUP//HTITLE(:) ! ---------------------- ! IF (IRESP==0 .AND. ANY(ZWORK6/=XUNDEF)) & -CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT0,YGROUP,"SSOL",IGRID,ZDATIME, ZWORK6, & - ZTRAJT,YTITLE,YUNIT,YCOMMENT,.FALSE.,.FALSE.,.FALSE., & - IIL,IIH,IJL,IJH,IKL,IKH, & - PTRAJX=ZTRAJX,PTRAJY=ZTRAJY,PTRAJZ=ZTRAJZ ) +CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT0, YGROUP, "SSOL", IGRID, tzdates, & + ZWORK6, YTITLE, YUNIT, YCOMMENT, & + OICP = .FALSE., OJCP = .FALSE., OKCP = .FALSE., & + KIL = IIL, KIH = IIH, KJL = IJL, KJH = IJH, KKL = IKL, KKH = IKH, & + PTRAJX = ZTRAJX, PTRAJY = ZTRAJY, PTRAJZ = ZTRAJZ ) ! ! !* 3.0 Deallocations @@ -1100,9 +1025,8 @@ CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT0,YGROUP,"SSOL",IGRID,ZDATIME, ZWORK6, & DEALLOCATE (ZTRAJX) DEALLOCATE (ZTRAJY) DEALLOCATE (ZTRAJZ) -DEALLOCATE (ZTRAJT) DEALLOCATE(ZWORK6) -DEALLOCATE(ZDATIME) +deallocate( tzdates ) ! !------------------------------------------------------------------------------- END SUBROUTINE LES_DIACHRO_MASKS @@ -1111,10 +1035,12 @@ END SUBROUTINE LES_DIACHRO_MASKS SUBROUTINE LES_DIACHRO_SV_MASKS(TPDIAFILE,HGROUP,HTITLE,HCOMMENT,HUNIT,PFIELD,HAVG) !######################################################################## ! -USE MODD_IO, ONLY: TFILEDATA -USE MODD_LES USE MODD_GRID -USE MODI_WRITE_DIACHRO +USE MODD_IO, ONLY: TFILEDATA +USE MODD_LES +use modd_type_date, only: date_time + +USE MODE_WRITE_DIACHRO ! IMPLICIT NONE ! @@ -1134,8 +1060,6 @@ CHARACTER(LEN=1), INTENT(IN) :: HAVG ! flag to compute a REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTRAJX ! localization of the temporal REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTRAJY ! series in x,y and z. remark: REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTRAJZ ! x and y are not used for LES -REAL, DIMENSION(:,:), POINTER :: ZTRAJT ! time -REAL, DIMENSION(:,:), POINTER :: ZDATIME! date ! INTEGER, DIMENSION(SIZE(PFIELD,3)) :: IGRID ! grid indicator CHARACTER(LEN= 10) :: YGROUP ! group title @@ -1157,6 +1081,7 @@ INTEGER :: JMASK ! mask loop counter ! LOGICAL :: GAVG ! flag to compute time averagings LOGICAL :: GNORM ! flag to compute normalizations +type(date_time), dimension(:), allocatable :: tzdates ! !------------------------------------------------------------------------------- ! @@ -1175,8 +1100,7 @@ ALLOCATE (ZTRAJX(1,1,SIZE(PFIELD,4))) ALLOCATE (ZTRAJY(1,1,SIZE(PFIELD,4))) ALLOCATE (ZTRAJZ(NLES_K,1,SIZE(PFIELD,4))) ALLOCATE(ZWORK6(1,1,NLES_K,NLES_CURRENT_TIMES,SIZE(PFIELD,4),SIZE(PFIELD,3))) -ALLOCATE(ZTRAJT(NLES_CURRENT_TIMES,1)) -ALLOCATE(ZDATIME(16,NLES_CURRENT_TIMES)) +allocate( tzdates( NLES_CURRENT_TIMES ) ) ! IIL = NLES_CURRENT_IINF IIH = NLES_CURRENT_ISUP @@ -1201,8 +1125,7 @@ DO JSV=1,SIZE(PFIELD,4) ZWORK6(1,1,:,:,JSV,JP) = ZFIELD (:,:,JP,JSV) END DO END DO -ZTRAJT(:,:) = XLES_CURRENT_TRAJT(:,:) -ZDATIME(:,:)= XLES_CURRENT_DATIME(:,:) +tzdates(:) = xles_dates(:) ! IF (GNORM) THEN IF (HUNIT(1:1)/=' ') YUNIT='-' @@ -1213,7 +1136,7 @@ END IF !* time average ! IRESP = 0 -IF (GAVG) CALL LES_TIME_AVG(ZTRAJT,ZWORK6,IRESP,ZDATIME) +IF (GAVG) CALL LES_TIME_AVG( ZWORK6, tzdates, IRESP ) ! IF (HAVG/=' ') YGROUP=HAVG//'_'//YGROUP YTITLE (:) = YGROUP//HTITLE(:) @@ -1223,10 +1146,11 @@ YTITLE (:) = YGROUP//HTITLE(:) ! ! IF (IRESP==0 .AND. ANY(ZWORK6/=XUNDEF)) & -CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT0,YGROUP,"SSOL",IGRID,ZDATIME, ZWORK6, & - ZTRAJT,YTITLE,YUNIT,YCOMMENT,.FALSE.,.FALSE.,.FALSE., & - IIL,IIH,IJL,IJH,IKL,IKH, & - PTRAJX=ZTRAJX,PTRAJY=ZTRAJY,PTRAJZ=ZTRAJZ ) +CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT0, YGROUP, "SSOL", IGRID, tzdates, & + ZWORK6, YTITLE, YUNIT, YCOMMENT, & + OICP = .FALSE., OJCP = .FALSE., OKCP = .FALSE., & + KIL = IIL, KIH = IIH, KJL = IJL, KJH = IJH, KKL = IKL, KKH = IKH, & + PTRAJX = ZTRAJX, PTRAJY = ZTRAJY, PTRAJZ = ZTRAJZ ) ! ! !* 3.0 Deallocations @@ -1235,9 +1159,8 @@ CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT0,YGROUP,"SSOL",IGRID,ZDATIME, ZWORK6, & DEALLOCATE (ZTRAJX) DEALLOCATE (ZTRAJY) DEALLOCATE (ZTRAJZ) -DEALLOCATE (ZTRAJT) DEALLOCATE(ZWORK6) -DEALLOCATE(ZDATIME) +deallocate( tzdates ) ! !------------------------------------------------------------------------------- END SUBROUTINE LES_DIACHRO_SV_MASKS @@ -1247,10 +1170,12 @@ END SUBROUTINE LES_DIACHRO_SV_MASKS SUBROUTINE LES_DIACHRO_SURF(TPDIAFILE,HGROUP,HCOMMENT,HUNIT,PFIELD,HAVG) !############################################################# ! -USE MODD_IO, ONLY: TFILEDATA -USE MODD_LES USE MODD_GRID -USE MODI_WRITE_DIACHRO +USE MODD_IO, ONLY: TFILEDATA +USE MODD_LES +use modd_type_date, only: date_time + +USE MODE_WRITE_DIACHRO ! IMPLICIT NONE ! @@ -1270,8 +1195,6 @@ CHARACTER(LEN=1), INTENT(IN) :: HAVG ! flag to compute avg. REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTRAJX ! localization of the temporal REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTRAJY ! series in x,y and z. remark: REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTRAJZ ! x and y are not used for LES -REAL, DIMENSION(:,:), POINTER :: ZTRAJT ! time -REAL, DIMENSION(:,:), POINTER :: ZDATIME ! DATE ! INTEGER, DIMENSION(1) :: IGRID ! grid indicator CHARACTER(LEN= 10) :: YGROUP ! group title @@ -1287,6 +1210,7 @@ INTEGER :: IIL, IIH, IJL, IJH, IKL, IKH ! cartesian area relatively to the ! LOGICAL :: GAVG ! flag to compute time averagings LOGICAL :: GNORM ! flag to compute normalizations +type(date_time), dimension(:), allocatable :: tzdates !------------------------------------------------------------------------------- ! GAVG =(HAVG=='A' .OR. HAVG=='H') @@ -1304,8 +1228,7 @@ ALLOCATE (ZTRAJX(1,1,1)) ALLOCATE (ZTRAJY(1,1,1)) ALLOCATE (ZTRAJZ(1,1,1)) ALLOCATE(ZWORK6(1,1,1,NLES_CURRENT_TIMES,1,1)) -ALLOCATE(ZTRAJT(NLES_CURRENT_TIMES,1)) -ALLOCATE(ZDATIME(16,NLES_CURRENT_TIMES)) +allocate( tzdates( NLES_CURRENT_TIMES ) ) ! IIL = NLES_CURRENT_IINF IIH = NLES_CURRENT_ISUP @@ -1323,13 +1246,12 @@ YUNIT (1) = HUNIT YGROUP = HGROUP ! ZWORK6(1,1,1,:,1,1) = PFIELD (:) -ZTRAJT(:,:) = XLES_CURRENT_TRAJT(:,:) -ZDATIME(:,:)=XLES_CURRENT_DATIME(:,:) +tzdates(:) = xles_dates(:) ! !* time average ! IRESP = 0 -IF (GAVG) CALL LES_TIME_AVG(ZTRAJT,ZWORK6,IRESP,ZDATIME) +IF (GAVG) CALL LES_TIME_AVG( ZWORK6, tzdates, IRESP ) ! IF (HAVG/=' ') YGROUP=HAVG//'_'//YGROUP YTITLE(1) = HGROUP @@ -1338,10 +1260,11 @@ YTITLE(1) = HGROUP ! ---------------------- ! IF (IRESP==0) & -CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT0,YGROUP,"SSOL",IGRID,ZDATIME, ZWORK6, & - ZTRAJT,YTITLE,YUNIT,YCOMMENT,.FALSE.,.FALSE.,.FALSE., & - IIL,IIH,IJL,IJH,IKL,IKH, & - PTRAJX=ZTRAJX,PTRAJY=ZTRAJY,PTRAJZ=ZTRAJZ ) +CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT0, YGROUP, "SSOL", IGRID, tzdates, & + ZWORK6, YTITLE, YUNIT, YCOMMENT, & + OICP = .FALSE., OJCP = .FALSE., OKCP = .FALSE., & + KIL = IIL, KIH = IIH, KJL = IJL, KJH = IJH, KKL = IKL, KKH = IKH, & + PTRAJX = ZTRAJX, PTRAJY = ZTRAJY, PTRAJZ = ZTRAJZ ) ! ! !* 3.0 Deallocations @@ -1350,9 +1273,8 @@ CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT0,YGROUP,"SSOL",IGRID,ZDATIME, ZWORK6, & DEALLOCATE (ZTRAJX) DEALLOCATE (ZTRAJY) DEALLOCATE (ZTRAJZ) -DEALLOCATE (ZTRAJT) DEALLOCATE(ZWORK6) -DEALLOCATE(ZDATIME) +deallocate( tzdates ) ! !------------------------------------------------------------------------------- END SUBROUTINE LES_DIACHRO_SURF @@ -1361,10 +1283,12 @@ END SUBROUTINE LES_DIACHRO_SURF SUBROUTINE LES_DIACHRO_SURF_SV(TPDIAFILE,HGROUP,HCOMMENT,HUNIT,PFIELD,HAVG) !################################################################ ! -USE MODD_IO, ONLY: TFILEDATA -USE MODD_LES USE MODD_GRID -USE MODI_WRITE_DIACHRO +USE MODD_IO, ONLY: TFILEDATA +USE MODD_LES +use modd_type_date, only: date_time + +USE MODE_WRITE_DIACHRO ! IMPLICIT NONE ! @@ -1383,8 +1307,6 @@ CHARACTER(LEN=1), INTENT(IN) :: HAVG ! flag to compute avg. REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTRAJX ! localization of the temporal REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTRAJY ! series in x,y and z. remark: REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTRAJZ ! x and y are not used for LES -REAL, DIMENSION(:,:), POINTER :: ZTRAJT ! time -REAL, DIMENSION(:,:), POINTER :: ZDATIME ! date INTEGER, DIMENSION(1) :: IGRID ! grid indicator CHARACTER(LEN= 10) :: YGROUP ! group title CHARACTER(LEN=100), DIMENSION(1) :: YCOMMENT ! comment string @@ -1399,6 +1321,7 @@ INTEGER :: IIL, IIH, IJL, IJH, IKL, IKH ! cartesian area relatively to the ! LOGICAL :: GAVG ! flag to compute time averagings LOGICAL :: GNORM ! flag to compute normalizations +type(date_time), dimension(:), allocatable :: tzdates !------------------------------------------------------------------------------- ! GAVG =(HAVG=='A' .OR. HAVG=='H') @@ -1415,9 +1338,7 @@ ALLOCATE (ZTRAJX(1,1,SIZE(PFIELD,2))) ALLOCATE (ZTRAJY(1,1,SIZE(PFIELD,2))) ALLOCATE (ZTRAJZ(1,1,SIZE(PFIELD,2))) ALLOCATE(ZWORK6(1,1,1,NLES_CURRENT_TIMES,SIZE(PFIELD,2),1)) -ALLOCATE(ZTRAJT(NLES_CURRENT_TIMES,1)) -ALLOCATE(ZDATIME(16,NLES_CURRENT_TIMES)) - +allocate( tzdates( NLES_CURRENT_TIMES ) ) ! IIL = NLES_CURRENT_IINF IIH = NLES_CURRENT_ISUP @@ -1436,14 +1357,11 @@ YGROUP = HGROUP ! IRESP = 0 ZWORK6(1,1,1,:,:,1) = PFIELD (:,:) -ZTRAJT(:,:) = XLES_CURRENT_TRAJT(:,:) -ZDATIME(:,:)=XLES_CURRENT_DATIME(:,:) -! - +tzdates(:) = xles_dates(:) ! !* time average ! -IF (GAVG) CALL LES_TIME_AVG(ZTRAJT,ZWORK6,IRESP,ZDATIME) +IF (GAVG) CALL LES_TIME_AVG( ZWORK6, tzdates, IRESP ) ! ! IF (HAVG/=' ') YGROUP=HAVG//'_'//YGROUP @@ -1453,10 +1371,11 @@ YTITLE(1) = HGROUP ! ---------------------- ! IF (IRESP==0) & -CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT0,YGROUP,"SSOL",IGRID,ZDATIME, ZWORK6, & - ZTRAJT,YTITLE,YUNIT,YCOMMENT,.FALSE.,.FALSE.,.FALSE., & - IIL,IIH,IJL,IJH,IKL,IKH, & - PTRAJX=ZTRAJX,PTRAJY=ZTRAJY,PTRAJZ=ZTRAJZ ) +CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT0, YGROUP, "SSOL", IGRID, tzdates, & + ZWORK6, YTITLE, YUNIT, YCOMMENT, & + OICP = .FALSE., OJCP = .FALSE., OKCP = .FALSE., & + KIL = IIL, KIH = IIH, KJL = IJL, KJH = IJH, KKL = IKL, KKH = IKH, & + PTRAJX = ZTRAJX, PTRAJY = ZTRAJY, PTRAJZ = ZTRAJZ ) ! ! !* 3.0 Deallocations @@ -1465,9 +1384,8 @@ CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT0,YGROUP,"SSOL",IGRID,ZDATIME, ZWORK6, & DEALLOCATE (ZTRAJX) DEALLOCATE (ZTRAJY) DEALLOCATE (ZTRAJZ) -DEALLOCATE (ZTRAJT) DEALLOCATE(ZWORK6) -DEALLOCATE(ZDATIME) +deallocate( tzdates ) ! !------------------------------------------------------------------------------- END SUBROUTINE LES_DIACHRO_SURF_SV @@ -1479,11 +1397,13 @@ SUBROUTINE LES_DIACHRO_2PT(TPDIAFILE,HGROUP,HCOMMENT,HUNIT,PFIELDX,PFIELDY,HAVG) !* Modification 01/04/03 (V. Masson) safer use of ZWORK6 with loops ! ! -USE MODD_IO, ONLY: TFILEDATA -USE MODD_LES -USE MODD_GRID USE MODD_CONF -USE MODI_WRITE_DIACHRO +USE MODD_GRID +USE MODD_IO, ONLY: TFILEDATA +USE MODD_LES +use modd_type_date, only: date_time + +USE MODE_WRITE_DIACHRO ! IMPLICIT NONE ! @@ -1511,9 +1431,6 @@ REAL, DIMENSION(SIZE(PFIELDY,1),SIZE(PFIELDY,2)) :: ZAVG_FIELDY INTEGER :: JT ! time counter INTEGER :: JK ! level counter INTEGER :: IRESP ! return code -REAL, DIMENSION(:,:),POINTER :: ZTRAJT ! time -REAL, DIMENSION(:,:),POINTER :: ZDATIME ! date - ! REAL, DIMENSION(:,:,:,:,:,:), POINTER :: ZWORK6 ! contains physical field ! @@ -1523,6 +1440,7 @@ INTEGER :: IIL, IIH, IJL, IJH, IKL, IKH ! cartesian area relatively to the CHARACTER(len=6) :: YSTRING ! LOGICAL :: GAVG ! flag to compute time averagings +type(date_time), dimension(:), allocatable :: tzdates !------------------------------------------------------------------------------- ! IF (HAVG/=' '.AND. HAVG/='A') RETURN @@ -1535,8 +1453,7 @@ IF (GAVG .AND. (XLES_TEMP_MEAN_START==XUNDEF .OR. XLES_TEMP_MEAN_END==XUNDEF)) R ! ---------------------------------------------------------- ! ALLOCATE(ZWORK6(SIZE(PFIELDX,1),1,NSPECTRA_K,NLES_CURRENT_TIMES,2,1)) -ALLOCATE(ZTRAJT(NLES_CURRENT_TIMES,1)) -ALLOCATE(ZDATIME(16,NLES_CURRENT_TIMES)) +allocate( tzdates( NLES_CURRENT_TIMES ) ) ! IGRID(:)=1 ! @@ -1562,12 +1479,13 @@ DO JT=1,SIZE(PFIELDX,3) ZWORK6(:,1,JK,JT,2,1) = 0. END DO END DO -ZTRAJT(:,:) = XLES_CURRENT_TRAJT(:,:) -ZDATIME(:,:)= XLES_CURRENT_DATIME(:,:) + +tzdates(:) = xles_dates(:) + !* time average ! IF (GAVG) THEN - CALL LES_TIME_AVG(ZTRAJT,ZWORK6,IRESP,ZDATIME) + CALL LES_TIME_AVG( ZWORK6, tzdates, IRESP ) YGROUP = 'T_'//YGROUP END IF ! @@ -1576,20 +1494,19 @@ END IF ! ---------------------- ! IF (IRESP==0) & -CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT0,YGROUP,"SPXY",IGRID,ZDATIME, ZWORK6, & - ZTRAJT,YTITLE,YUNIT,YCOMMENT,.FALSE.,.FALSE.,.FALSE., & - IIL,IIH,IJL,IJH,IKL,IKH ) +CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT0, YGROUP, "SPXY", IGRID, tzdates, & + ZWORK6, YTITLE, YUNIT, YCOMMENT, & + OICP = .FALSE., OJCP = .FALSE., OKCP = .FALSE., & + KIL = IIL, KIH = IIH, KJL = IJL, KJH = IJH, KKL = IKL, KKH = IKH ) ! ! -DEALLOCATE (ZTRAJT) -DEALLOCATE(ZDATIME) +deallocate( tzdates ) DEALLOCATE(ZWORK6) ! IF (L2D) RETURN ! ALLOCATE(ZWORK6(1,SIZE(PFIELDY,1),NSPECTRA_K,NLES_CURRENT_TIMES,2,1)) -ALLOCATE(ZTRAJT(NLES_CURRENT_TIMES,1)) -ALLOCATE(ZDATIME(16,NLES_CURRENT_TIMES)) +allocate( tzdates( NLES_CURRENT_TIMES ) ) ! IIL = 1 IIH = 1 @@ -1602,8 +1519,8 @@ DO JT=1,SIZE(PFIELDY,3) ZWORK6(1,:,JK,JT,2,1) = 0. END DO END DO -ZTRAJT(:,:) = XLES_CURRENT_TRAJT(:,:) -ZDATIME(:,:)= XLES_CURRENT_DATIME(:,:) + +tzdates(:) = xles_dates(:) ! YGROUP = 'CJ_'//HGROUP YTITLE(:) = YGROUP @@ -1614,18 +1531,17 @@ YCOMMENT(:) = " DOMEGAY="//YSTRING//' '//HCOMMENT !* time average ! IF (GAVG) THEN - CALL LES_TIME_AVG(ZTRAJT,ZWORK6,IRESP,ZDATIME) + CALL LES_TIME_AVG( ZWORK6, tzdates, IRESP ) YGROUP = 'T_'//YGROUP END IF ! -CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT0,YGROUP,"SPXY",IGRID,ZDATIME, ZWORK6, & - ZTRAJT,YTITLE,YUNIT,YCOMMENT,.FALSE.,.FALSE.,.FALSE., & - IIL,IIH,IJL,IJH,IKL,IKH ) +CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT0, YGROUP, "SPXY", IGRID, tzdates, & + ZWORK6, YTITLE, YUNIT, YCOMMENT, & + OICP = .FALSE., OJCP = .FALSE., OKCP = .FALSE., & + KIL = IIL, KIH = IIH, KJL = IJL, KJH = IJH, KKL = IKL, KKH = IKH ) ! -DEALLOCATE (ZTRAJT) DEALLOCATE(ZWORK6) -DEALLOCATE(ZDATIME) - +deallocate( tzdates ) ! !------------------------------------------------------------------------------- END SUBROUTINE LES_DIACHRO_2PT @@ -1638,11 +1554,13 @@ SUBROUTINE LES_DIACHRO_SPEC(TPDIAFILE,HGROUP,HCOMMENT,HUNIT,PSPECTRAX,PSPECTRAY) !* Modification 01/04/03 (V. Masson) safer use of ZWORK6 with loops ! ! -USE MODD_IO, ONLY: TFILEDATA -USE MODD_LES -USE MODD_GRID USE MODD_CONF -USE MODI_WRITE_DIACHRO +USE MODD_GRID +USE MODD_IO, ONLY: TFILEDATA +USE MODD_LES +use modd_type_date, only: date_time + +USE MODE_WRITE_DIACHRO ! IMPLICIT NONE ! @@ -1667,8 +1585,6 @@ CHARACTER(LEN=100), DIMENSION(1) :: YUNIT ! physical unit INTEGER :: IRESP ! return code ! REAL, DIMENSION(:,:,:,:,:,:), POINTER :: ZWORK6 ! contains physical field -REAL, DIMENSION(:,:), POINTER :: ZTRAJT ! time -REAL, DIMENSION(:,:), POINTER :: ZDATIME ! date ! INTEGER :: IIL, IIH, IJL, IJH, IKL, IKH ! cartesian area relatively to the @@ -1677,6 +1593,7 @@ INTEGER :: IIL, IIH, IJL, IJH, IKL, IKH ! cartesian area relatively to the CHARACTER(len=6) :: YSTRING INTEGER :: JT ! time counter INTEGER :: JK ! level counter +type(date_time), dimension(:), allocatable :: tzdates ! !------------------------------------------------------------------------------- ! @@ -1695,12 +1612,9 @@ IKH=NSPECTRA_K !* spectra in X direction ! ALLOCATE(ZWORK6(SIZE(PSPECTRAX,1),1,NSPECTRA_K,NLES_CURRENT_TIMES,2,1)) -ALLOCATE(ZTRAJT(NLES_CURRENT_TIMES,1)) -ALLOCATE(ZDATIME(16,NLES_CURRENT_TIMES)) - +allocate( tzdates( NLES_CURRENT_TIMES ) ) ! -ZTRAJT(:,:) = XLES_CURRENT_TRAJT(:,:) -ZDATIME(:,:)= XLES_CURRENT_DATIME(:,:) +tzdates(:) = xles_dates(:) ! IIL = NLES_CURRENT_IINF IIH = NLES_CURRENT_ISUP @@ -1720,24 +1634,25 @@ WRITE(YSTRING,FMT="(I6.6)") NINT( XLES_CURRENT_DOMEGAX ) YCOMMENT(:) = " DOMEGAX="//YSTRING//' '//HCOMMENT ! ! -CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT0,YGROUP,"SPXY",IGRID,ZDATIME, ZWORK6, & - ZTRAJT,YTITLE,YUNIT,YCOMMENT,.FALSE.,.FALSE.,.FALSE., & - IIL,IIH,IJL,IJH,IKL,IKH ) +CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT0, YGROUP, "SPXY", IGRID, tzdates, & + ZWORK6, YTITLE, YUNIT, YCOMMENT, & + OICP = .FALSE., OJCP = .FALSE., OKCP = .FALSE., & + KIL = IIL, KIH = IIH, KJL = IJL, KJH = IJH, KKL = IKL, KKH = IKH ) ! ! !* time average ! IRESP=0 -CALL LES_TIME_AVG(ZTRAJT,ZWORK6,IRESP,ZDATIME) +CALL LES_TIME_AVG( ZWORK6, tzdates, IRESP ) YGROUP = 'T_'//YGROUP ! IF (IRESP==0) & -CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT0,YGROUP,"SPXY",IGRID,ZDATIME, ZWORK6, & - ZTRAJT,YTITLE,YUNIT,YCOMMENT,.FALSE.,.FALSE.,.FALSE., & - IIL,IIH,IJL,IJH,IKL,IKH ) +CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT0, YGROUP, "SPXY", IGRID, tzdates, & + ZWORK6, YTITLE, YUNIT, YCOMMENT, & + OICP = .FALSE., OJCP = .FALSE., OKCP = .FALSE., & + KIL = IIL, KIH = IIH, KJL = IJL, KJH = IJH, KKL = IKL, KKH = IKH ) DEALLOCATE(ZWORK6) -DEALLOCATE(ZTRAJT) -DEALLOCATE(ZDATIME) +deallocate( tzdates ) ! !* spectra in Y direction ! @@ -1745,11 +1660,9 @@ DEALLOCATE(ZDATIME) IF (L2D) RETURN ! ALLOCATE(ZWORK6(1,SIZE(PSPECTRAY,1),NSPECTRA_K,NLES_CURRENT_TIMES,2,1)) -ALLOCATE(ZTRAJT(NLES_CURRENT_TIMES,1)) -ALLOCATE(ZDATIME(16,NLES_CURRENT_TIMES)) +allocate( tzdates( NLES_CURRENT_TIMES ) ) ! -ZTRAJT(:,:) = XLES_CURRENT_TRAJT(:,:) -ZDATIME(:,:)= XLES_CURRENT_DATIME(:,:) +tzdates(:) = xles_dates(:) ! IIL = 1 IIH = 1 @@ -1768,25 +1681,25 @@ YTITLE(:) = YGROUP WRITE(YSTRING,FMT="(I6.6)") NINT( XLES_CURRENT_DOMEGAY ) YCOMMENT(:) = " DOMEGAY="//YSTRING//' '//HCOMMENT ! -CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT0,YGROUP,"SPXY",IGRID,ZDATIME, ZWORK6, & - ZTRAJT,YTITLE,YUNIT,YCOMMENT,.FALSE.,.FALSE.,.FALSE., & - IIL,IIH,IJL,IJH,IKL,IKH ) +CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT0, YGROUP, "SPXY", IGRID, tzdates, & + ZWORK6, YTITLE, YUNIT, YCOMMENT, & + OICP = .FALSE., OJCP = .FALSE., OKCP = .FALSE., & + KIL = IIL, KIH = IIH, KJL = IJL, KJH = IJH, KKL = IKL, KKH = IKH ) ! ! !* time average ! -CALL LES_TIME_AVG(ZTRAJT,ZWORK6,IRESP,ZDATIME) +CALL LES_TIME_AVG( ZWORK6, tzdates, IRESP ) YGROUP = 'T_'//YGROUP ! IF (IRESP==0) & -CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT0,YGROUP,"SPXY",IGRID,ZDATIME, ZWORK6, & - ZTRAJT,YTITLE,YUNIT,YCOMMENT,.FALSE.,.FALSE.,.FALSE., & - IIL,IIH,IJL,IJH,IKL,IKH ) +CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT0, YGROUP, "SPXY", IGRID, tzdates, & + ZWORK6, YTITLE, YUNIT, YCOMMENT, & + OICP = .FALSE., OJCP = .FALSE., OKCP = .FALSE., & + KIL = IIL, KIH = IIH, KJL = IJL, KJH = IJH, KKL = IKL, KKH = IKH ) ! DEALLOCATE(ZWORK6) -DEALLOCATE(ZTRAJT) -DEALLOCATE(ZDATIME) - +deallocate( tzdates ) ! !------------------------------------------------------------------------------- END SUBROUTINE LES_DIACHRO_SPEC diff --git a/src/MNH/modeln.f90 b/src/MNH/modeln.f90 index 644c8855f929dabdee5ff4fa1e74ac00229eedfa..e1073f233c28c2b4640134fab9ab554b18b422e0 100644 --- a/src/MNH/modeln.f90 +++ b/src/MNH/modeln.f90 @@ -264,6 +264,7 @@ END MODULE MODI_MODEL_n ! P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine ! J. Escobar 09/07/2019: norme Doctor -> Rename Module Type variable TZ -> T ! J. Escobar 09/07/2019: for bug in management of XLSZWSM variable, add/use specific 2D TLSFIELD2D_ll pointer +! P. Wautelet 13/09/2019: budget: simplify and modernize date/time management !!------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -636,11 +637,11 @@ IF (KTCOUNT == 1) THEN ! ! b) LS fields ! - CALL ADD3DFIELD_ll( TLSFIELD_ll, XLSUM, 'MODEL_n::XLSUM' ) - CALL ADD3DFIELD_ll( TLSFIELD_ll, XLSVM, 'MODEL_n::XLSVM' ) - CALL ADD3DFIELD_ll( TLSFIELD_ll, XLSWM, 'MODEL_n::XLSWM' ) - CALL ADD3DFIELD_ll( TLSFIELD_ll, XLSTHM, 'MODEL_n::XLSTHM' ) - CALL ADD2DFIELD_ll( TLSFIELD_ll, XLSZWSM, 'MODEL_n::XLSZWSM' ) + CALL ADD3DFIELD_ll( TLSFIELD_ll, XLSUM, 'MODEL_n::XLSUM' ) + CALL ADD3DFIELD_ll( TLSFIELD_ll, XLSVM, 'MODEL_n::XLSVM' ) + CALL ADD3DFIELD_ll( TLSFIELD_ll, XLSWM, 'MODEL_n::XLSWM' ) + CALL ADD3DFIELD_ll( TLSFIELD_ll, XLSTHM, 'MODEL_n::XLSTHM' ) + CALL ADD2DFIELD_ll( TLSFIELD2D_ll, XLSZWSM, 'MODEL_n::XLSZWSM' ) IF (NRR >= 1) THEN CALL ADD3DFIELD_ll( TLSFIELD_ll, XLSRVM, 'MODEL_n::XLSRVM' ) ENDIF @@ -1975,7 +1976,6 @@ ZTIME1 = ZTIME2 ! IF (LFLYER) & CALL AIRCRAFT_BALLOON(XTSTEP, & - TDTEXP, TDTMOD, TDTSEG, TDTCUR, & XXHAT, XYHAT, XZZ, XMAP, XLONORI, XLATORI, & XUT, XVT, XWT, XPABST, XTHT, XRT, XSVT, XTKET, XTSRAD, & XRHODREF,XCIT,PSEA=ZSEA(:,:)) @@ -1988,7 +1988,6 @@ IF (LFLYER) & ! IF (LSTATION) & CALL STATION_n(XTSTEP, & - TDTEXP, TDTMOD, TDTSEG, TDTCUR, & XXHAT, XYHAT, XZZ, & XUT, XVT, XWT, XTHT, XRT, XSVT, XTKET, XTSRAD, XPABST ) ! @@ -1999,7 +1998,6 @@ IF (LSTATION) & ! IF (LPROFILER) & CALL PROFILER_n(XTSTEP, & - TDTEXP, TDTMOD, TDTSEG, TDTCUR, & XXHAT, XYHAT, XZZ,XRHODREF, & XUT, XVT, XWT, XTHT, XRT, XSVT, XTKET, XTSRAD, XPABST, & XAER, XCLDFR, XCIT) @@ -2026,7 +2024,7 @@ ZTIME1 = ZTIME2 ! IF ( .NOT. LIO_NO_WRITE ) THEN IF (NBUMOD==IMI .AND. CBUTYPE/='NONE') THEN - CALL ENDSTEP_BUDGET(TDIAFILE,KTCOUNT,TDTCUR,TDTMOD,XTSTEP,NSV) + CALL ENDSTEP_BUDGET(TDIAFILE,KTCOUNT,TDTCUR,XTSTEP,NSV) END IF END IF ! diff --git a/src/MNH/mpdata.f90 b/src/MNH/mpdata.f90 index 961d2d98aec37e1372714ba152a3aca51743734d..a0e2c921dca860fbaecd41418156acb71e7710e6 100644 --- a/src/MNH/mpdata.f90 +++ b/src/MNH/mpdata.f90 @@ -164,6 +164,7 @@ REAL, DIMENSION(SIZE(PRUCT,1),SIZE(PRUCT,2),SIZE(PRUCT,3)):: ZFADVV ! budget REAL, DIMENSION(SIZE(PRUCT,1),SIZE(PRUCT,2),SIZE(PRUCT,3)):: ZFADVW ! purpose REAL, DIMENSION(SIZE(PRUCT,1),SIZE(PRUCT,2),SIZE(PRUCT,3)):: ZRVARS ! only ! +integer, dimension(7) :: irx CHARACTER (LEN=3) , DIMENSION(7) :: YRX CHARACTER (LEN=20) :: YBURX LOGICAL , DIMENSION(7) :: LBUDGET_R @@ -197,6 +198,13 @@ LBUDGET_R(5) = LBUDGET_RS LBUDGET_R(6) = LBUDGET_RG LBUDGET_R(7) = LBUDGET_RH ! +irx(1) = NBUDGET_RV +irx(2) = NBUDGET_RC +irx(3) = NBUDGET_RR +irx(4) = NBUDGET_RI +irx(5) = NBUDGET_RS +irx(6) = NBUDGET_RG +irx(7) = NBUDGET_RH ! !------------------------------------------------------------------------------- ! @@ -263,11 +271,11 @@ LBUDGET_R(7) = LBUDGET_RH ! IF (LBUDGET_TH) THEN ZRVARS(:,:,:) = ZRVARS(:,:,:) + ZFADVU(:,:,:) - CALL BUDGET (ZRVARS,4,'ADVX_BU_RTH') + CALL BUDGET (ZRVARS,NBUDGET_TH,'ADVX_BU_RTH') ZRVARS(:,:,:) = ZRVARS(:,:,:) + ZFADVV(:,:,:) - CALL BUDGET (ZRVARS,4,'ADVY_BU_RTH') + CALL BUDGET (ZRVARS,NBUDGET_TH,'ADVY_BU_RTH') ZRVARS(:,:,:) = ZRVARS(:,:,:) + ZFADVW(:,:,:) - CALL BUDGET (ZRVARS,4,'ADVZ_BU_RTH') + CALL BUDGET (ZRVARS,NBUDGET_TH,'ADVZ_BU_RTH') END IF ! !------------------------------------------------------------------------------- @@ -327,13 +335,13 @@ LBUDGET_R(7) = LBUDGET_RH IF (LBUDGET_R(JRR)) THEN ZRVARS(:,:,:) = ZRVARS(:,:,:) + ZFADVU(:,:,:) YBURX = 'ADVX_BU_'//YRX(JRR) - CALL BUDGET (ZRVARS(:,:,:),JRR+5 ,YBURX) + CALL BUDGET (ZRVARS(:,:,:), irx(jrr ), YBURX) ZRVARS(:,:,:) = ZRVARS(:,:,:) + ZFADVV(:,:,:) YBURX = 'ADVY_BU_'//YRX(JRR) - CALL BUDGET (ZRVARS(:,:,:),JRR+5 ,YBURX) + CALL BUDGET (ZRVARS(:,:,:), irx(jrr ), YBURX) ZRVARS(:,:,:) = ZRVARS(:,:,:) + ZFADVW(:,:,:) YBURX = 'ADVZ_BU_'//YRX(JRR) - CALL BUDGET (ZRVARS(:,:,:),JRR+5 ,YBURX) + CALL BUDGET (ZRVARS(:,:,:), irx(jrr ), YBURX) END IF END DO ! @@ -393,11 +401,11 @@ LBUDGET_R(7) = LBUDGET_RH ! IF (LBUDGET_TKE) THEN ZRVARS(:,:,:) = ZRVARS(:,:,:) + ZFADVU(:,:,:) - CALL BUDGET (ZRVARS,5,'ADVX_BU_RTKE') + CALL BUDGET (ZRVARS,NBUDGET_TKE,'ADVX_BU_RTKE') ZRVARS(:,:,:) = ZRVARS(:,:,:) + ZFADVV(:,:,:) - CALL BUDGET (ZRVARS,5,'ADVY_BU_RTKE') + CALL BUDGET (ZRVARS,NBUDGET_TKE,'ADVY_BU_RTKE') ZRVARS(:,:,:) = ZRVARS(:,:,:) + ZFADVW(:,:,:) - CALL BUDGET (ZRVARS,5,'ADVZ_BU_RTKE') + CALL BUDGET (ZRVARS,NBUDGET_TKE,'ADVZ_BU_RTKE') END IF END IF ! diff --git a/src/MNH/mpdata_scalar.f90 b/src/MNH/mpdata_scalar.f90 index ae29c69b09e8cd4baaf5cddcbb511f7780a9843c..6214a8c3eceb949318df76a8b0a73afdb229b594 100644 --- a/src/MNH/mpdata_scalar.f90 +++ b/src/MNH/mpdata_scalar.f90 @@ -236,11 +236,11 @@ IKU=SIZE(PSVM,3) ! IF (LBUDGET_SV) THEN ZRVARS(:,:,:) = ZRVARS(:,:,:) + ZFADVU(:,:,:) - CALL BUDGET (ZRVARS,JSV+12,'ADVX_BU_RSV') + CALL BUDGET (ZRVARS,NBUDGET_SV1-1+JSV,'ADVX_BU_RSV') ZRVARS(:,:,:) = ZRVARS(:,:,:) + ZFADVV(:,:,:) - CALL BUDGET (ZRVARS,JSV+12,'ADVY_BU_RSV') + CALL BUDGET (ZRVARS,NBUDGET_SV1-1+JSV,'ADVY_BU_RSV') ZRVARS(:,:,:) = ZRVARS(:,:,:) + ZFADVW(:,:,:) - CALL BUDGET (ZRVARS,JSV+12,'ADVZ_BU_RSV') + CALL BUDGET (ZRVARS,NBUDGET_SV1-1+JSV,'ADVZ_BU_RSV') END IF ! END DO diff --git a/src/MNH/nudging.f90 b/src/MNH/nudging.f90 index 78f0d7894095029980f9e470d7e751ac753acfd9..28d18b0e87cffd206e53a5c65a66ef416959e37e 100644 --- a/src/MNH/nudging.f90 +++ b/src/MNH/nudging.f90 @@ -1,13 +1,8 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2006-2019 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- -!--------------- special set of characters for RCS information -!----------------------------------------------------------------- -! $Source$ $Revision$ -! MASDEV4_7 newsrc 2006/05/24 18:05:52 -!----------------------------------------------------------------- ! ################### MODULE MODI_NUDGING ! ################### @@ -129,10 +124,10 @@ IF (OUSERV) & !* 2. BUDGET CALLS ! ------------ ! -IF (LBUDGET_U) CALL BUDGET (PRUS,1,'NUD_BU_RU') -IF (LBUDGET_V) CALL BUDGET (PRVS,2,'NUD_BU_RV') -IF (LBUDGET_W) CALL BUDGET (PRWS,3,'NUD_BU_RW') -IF (LBUDGET_TH) CALL BUDGET (PRTHS,4,'NUD_BU_RTH') -IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),6,'NUD_BU_RRV') +IF (LBUDGET_U) CALL BUDGET (PRUS,NBUDGET_U,'NUD_BU_RU') +IF (LBUDGET_V) CALL BUDGET (PRVS,NBUDGET_V,'NUD_BU_RV') +IF (LBUDGET_W) CALL BUDGET (PRWS,NBUDGET_W,'NUD_BU_RW') +IF (LBUDGET_TH) CALL BUDGET (PRTHS,NBUDGET_TH,'NUD_BU_RTH') +IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),NBUDGET_RV,'NUD_BU_RRV') ! END SUBROUTINE NUDGING diff --git a/src/MNH/num_diff.f90 b/src/MNH/num_diff.f90 index 23751bff843dc1a983d8ad0f1cde32eeb59fb3dd..800f23a1bd42fae53e71a20a94449c3dec34e324 100644 --- a/src/MNH/num_diff.f90 +++ b/src/MNH/num_diff.f90 @@ -440,21 +440,21 @@ END IF !* 3. STORES FIELDS IN BUDGET ARRAYS ! ------------------------------ ! -IF (LBUDGET_U .AND. ONUMDIFU ) CALL BUDGET (PRUS,1,'DIF_BU_RU') -IF (LBUDGET_V .AND. ONUMDIFU ) CALL BUDGET (PRVS,2,'DIF_BU_RV') -IF (LBUDGET_W .AND. ONUMDIFU ) CALL BUDGET (PRWS,3,'DIF_BU_RW') -IF (LBUDGET_TH .AND. ONUMDIFTH ) CALL BUDGET (PRTHS,4,'DIF_BU_RTH') -IF (LBUDGET_TKE .AND. ONUMDIFTH ) CALL BUDGET (PRTKES,5,'DIF_BU_RTKE') -IF (LBUDGET_RV .AND. ONUMDIFTH ) CALL BUDGET (PRRS(:,:,:,1),6,'DIF_BU_RRV') -IF (LBUDGET_RC .AND. ONUMDIFTH ) CALL BUDGET (PRRS(:,:,:,2),7,'DIF_BU_RRC') -IF (LBUDGET_RR .AND. ONUMDIFTH ) CALL BUDGET (PRRS(:,:,:,3),8,'DIF_BU_RRR') -IF (LBUDGET_RI .AND. ONUMDIFTH ) CALL BUDGET (PRRS(:,:,:,4),9,'DIF_BU_RRI') -IF (LBUDGET_RS .AND. ONUMDIFTH ) CALL BUDGET (PRRS(:,:,:,5),10,'DIF_BU_RRS') -IF (LBUDGET_RG .AND. ONUMDIFTH ) CALL BUDGET (PRRS(:,:,:,6),11,'DIF_BU_RRG') -IF (LBUDGET_RH .AND. ONUMDIFTH ) CALL BUDGET (PRRS(:,:,:,7),12,'DIF_BU_RRH') -IF (LBUDGET_SV .AND. ONUMDIFSV ) THEN +IF ( LBUDGET_U .AND. ONUMDIFU ) CALL BUDGET( PRUS, NBUDGET_U, 'DIF_BU_RU' ) +IF ( LBUDGET_V .AND. ONUMDIFU ) CALL BUDGET( PRVS, NBUDGET_V, 'DIF_BU_RV' ) +IF ( LBUDGET_W .AND. ONUMDIFU ) CALL BUDGET( PRWS, NBUDGET_W, 'DIF_BU_RW' ) +IF ( LBUDGET_TH .AND. ONUMDIFTH ) CALL BUDGET( PRTHS, NBUDGET_TH, 'DIF_BU_RTH' ) +IF ( LBUDGET_TKE .AND. ONUMDIFTH ) CALL BUDGET( PRTKES, NBUDGET_TKE, 'DIF_BU_RTKE' ) +IF ( LBUDGET_RV .AND. ONUMDIFTH ) CALL BUDGET( PRRS(:, :, :, 1 ), NBUDGET_RV, 'DIF_BU_RRV' ) +IF ( LBUDGET_RC .AND. ONUMDIFTH ) CALL BUDGET( PRRS(:, :, :, 2 ), NBUDGET_RC, 'DIF_BU_RRC' ) +IF ( LBUDGET_RR .AND. ONUMDIFTH ) CALL BUDGET( PRRS(:, :, :, 3 ), NBUDGET_RR, 'DIF_BU_RRR' ) +IF ( LBUDGET_RI .AND. ONUMDIFTH ) CALL BUDGET( PRRS(:, :, :, 4 ), NBUDGET_RI, 'DIF_BU_RRI' ) +IF ( LBUDGET_RS .AND. ONUMDIFTH ) CALL BUDGET( PRRS(:, :, :, 5 ), NBUDGET_RS, 'DIF_BU_RRS' ) +IF ( LBUDGET_RG .AND. ONUMDIFTH ) CALL BUDGET( PRRS(:, :, :, 6 ), NBUDGET_RG, 'DIF_BU_RRG' ) +IF ( LBUDGET_RH .AND. ONUMDIFTH ) CALL BUDGET( PRRS(:, :, :, 7 ), NBUDGET_RH, 'DIF_BU_RRH' ) +IF ( LBUDGET_SV .AND. ONUMDIFSV ) THEN DO JSV=1,KSV - CALL BUDGET (PRSVS(:,:,:,JSV),JSV+12,'DIF_BU_RSV') + CALL BUDGET( PRSVS(:, :, :, JSV ), NBUDGET_SV1 - 1 + JSV, 'DIF_BU_RSV' ) END DO END IF !------------------------------------------------------------------------------- diff --git a/src/MNH/phys_paramn.f90 b/src/MNH/phys_paramn.f90 index bedad9ddef9e7eac9f877bc31387c3100c1ef29e..e9beceaa387a7a84ff6bf6d8dc2e4e4ae4998d65 100644 --- a/src/MNH/phys_paramn.f90 +++ b/src/MNH/phys_paramn.f90 @@ -789,7 +789,7 @@ END IF !* 1.6 budget storage ! -------------- ! -IF (CRAD/='NONE' .AND. LBUDGET_TH) CALL BUDGET (XRTHS,4,'RAD_BU_RTH') +IF (CRAD/='NONE' .AND. LBUDGET_TH) CALL BUDGET (XRTHS,NBUDGET_TH,'RAD_BU_RTH') ! CALL SECOND_MNH2(ZTIME2) ! @@ -1050,13 +1050,13 @@ END IF ! budget storage ! IF (CDCONV == 'KAFR' .OR. CSCONV == 'KAFR' ) THEN - IF (LBUDGET_TH) CALL BUDGET (XRTHS,4,'DCONV_BU_RTH') - IF (LBUDGET_RV) CALL BUDGET (XRRS(:,:,:,1),6,'DCONV_BU_RRV') - IF (LBUDGET_RC) CALL BUDGET (XRRS(:,:,:,2),7,'DCONV_BU_RRC') - IF (LBUDGET_RI) CALL BUDGET (XRRS(:,:,:,4),9,'DCONV_BU_RRI') + IF (LBUDGET_TH) CALL BUDGET (XRTHS,NBUDGET_TH,'DCONV_BU_RTH') + IF (LBUDGET_RV) CALL BUDGET (XRRS(:,:,:,1),NBUDGET_RV,'DCONV_BU_RRV') + IF (LBUDGET_RC) CALL BUDGET (XRRS(:,:,:,2),NBUDGET_RC,'DCONV_BU_RRC') + IF (LBUDGET_RI) CALL BUDGET (XRRS(:,:,:,4),NBUDGET_RI,'DCONV_BU_RRI') IF (LCHTRANS .AND. LBUDGET_SV) THEN DO JSV = 1, SIZE(XRSVS,4) - CALL BUDGET (XRSVS(:,:,:,JSV),JSV+12,'DCONV_BU_RSV') + CALL BUDGET (XRSVS(:,:,:,JSV),NBUDGET_SV1-1+JSV,'DCONV_BU_RSV') END DO END IF END IF diff --git a/src/MNH/pressure.f90 b/src/MNH/pressure.f90 index 0ec507eec7ee8fb1fe94c7bacc2836524e3dc88e..c84dfaf95a1e8900f737d7bfe829bdb67297ca5c 100644 --- a/src/MNH/pressure.f90 +++ b/src/MNH/pressure.f90 @@ -610,9 +610,9 @@ ENDIF !* 7. STORAGE OF THE FIELDS IN BUDGET ARRAYS ! -------------------------------------- ! -IF (LBUDGET_U) CALL BUDGET (PRUS,1,'PRES_BU_RU') -IF (LBUDGET_V) CALL BUDGET (PRVS,2,'PRES_BU_RV') -IF (LBUDGET_W) CALL BUDGET (PRWS,3,'PRES_BU_RW') +IF (LBUDGET_U) CALL BUDGET (PRUS,NBUDGET_U,'PRES_BU_RU') +IF (LBUDGET_V) CALL BUDGET (PRVS,NBUDGET_V,'PRES_BU_RV') +IF (LBUDGET_W) CALL BUDGET (PRWS,NBUDGET_W,'PRES_BU_RW') ! !------------------------------------------------------------------------------- ! diff --git a/src/MNH/pressurez.f90 b/src/MNH/pressurez.f90 index b4c3096c367839114be4329438e174c08f608d4c..976f428bd8115d713280f6b212f5461a138a022b 100644 --- a/src/MNH/pressurez.f90 +++ b/src/MNH/pressurez.f90 @@ -677,9 +677,9 @@ ENDIF !* 7. STORAGE OF THE FIELDS IN BUDGET ARRAYS ! -------------------------------------- ! -IF (LBUDGET_U) CALL BUDGET (PRUS,1,'PRES_BU_RU') -IF (LBUDGET_V) CALL BUDGET (PRVS,2,'PRES_BU_RV') -IF (LBUDGET_W) CALL BUDGET (PRWS,3,'PRES_BU_RW') +IF (LBUDGET_U) CALL BUDGET (PRUS,NBUDGET_U,'PRES_BU_RU') +IF (LBUDGET_V) CALL BUDGET (PRVS,NBUDGET_V,'PRES_BU_RV') +IF (LBUDGET_W) CALL BUDGET (PRWS,NBUDGET_W,'PRES_BU_RW') ! !------------------------------------------------------------------------------- ! diff --git a/src/MNH/profilern.f90 b/src/MNH/profilern.f90 index a463a4ad712b60b1a0dfabcc444ed12fe91e4b55..ce7a3f0b758036b8e485499aebcb6954304d05f4 100644 --- a/src/MNH/profilern.f90 +++ b/src/MNH/profilern.f90 @@ -1,6 +1,6 @@ -!MNH_LIC Copyright 2002-2018 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2002-2019 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- ! ########################## @@ -10,18 +10,11 @@ MODULE MODI_PROFILER_n INTERFACE ! SUBROUTINE PROFILER_n(PTSTEP, & - TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ,PRHODREF, & PU, PV, PW, PTH, PR, PSV, PTKE, & PTS,PP, PAER, PCLDFR, PCIT) ! -USE MODD_TYPE_DATE -! REAL, INTENT(IN) :: PTSTEP ! time step -TYPE(DATE_TIME), INTENT(IN) :: TPDTEXP! experiment date and time -TYPE(DATE_TIME), INTENT(IN) :: TPDTMOD! model start date and time -TYPE(DATE_TIME), INTENT(IN) :: TPDTSEG! segment date and time -TYPE(DATE_TIME), INTENT(IN) :: TPDTCUR! current date and time REAL, DIMENSION(:), INTENT(IN) :: PXHAT ! x coordinate REAL, DIMENSION(:), INTENT(IN) :: PYHAT ! y coordinate REAL, DIMENSION(:,:,:), INTENT(IN) :: PZ ! z array @@ -49,7 +42,6 @@ END MODULE MODI_PROFILER_n ! ! ######################################################## SUBROUTINE PROFILER_n(PTSTEP, & - TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ,PRHODREF, & PU, PV, PW, PTH, PR, PSV, PTKE, & PTS, PP, PAER, PCLDFR, PCIT) @@ -90,33 +82,31 @@ END MODULE MODI_PROFILER_n !! C.Lac 10/2016 Add visibility diagnostic !! March,28, 2018 (P. Wautelet) replace TEMPORAL_DIST by DATETIME_DISTANCE !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O -!! -!! -------------------------------------------------------------------------- +! P. Wautelet 13/09/2019: budget: simplify and modernize date/time management +! +! -------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! -USE MODD_TYPE_DATE -USE MODD_PROFILER_n -USE MODD_SUB_PROFILER_n -USE MODD_TIME -USE MODD_PARAMETERS +USE MODD_CONF USE MODD_CST -USE MODD_GRID USE MODD_DIAG_IN_RUN -USE MODD_CONF +USE MODD_GRID +USE MODD_SUB_PROFILER_n USE MODD_NSV +USE MODD_PARAMETERS +USE MODD_PARAM_n, ONLY : CCLOUD +USE MODD_PROFILER_n +USE MODD_TIME, only: tdtexp +USE MODD_TIME_n, only: tdtcur ! -USE MODE_DATETIME USE MODE_ll ! -USE MODI_WATER_SUM -USE MODI_RADAR_RAIN_ICE +USE MODI_GPS_ZENITH_GRID USE MODI_LIDAR +USE MODI_RADAR_RAIN_ICE USE MODI_WATER_SUM -USE MODI_GPS_ZENITH_GRID -USE MODD_PARAM_n, ONLY : CCLOUD -! ! IMPLICIT NONE ! @@ -125,10 +115,6 @@ IMPLICIT NONE ! ! REAL, INTENT(IN) :: PTSTEP ! time step -TYPE(DATE_TIME), INTENT(IN) :: TPDTEXP! experiment date and time -TYPE(DATE_TIME), INTENT(IN) :: TPDTMOD! model start date and time -TYPE(DATE_TIME), INTENT(IN) :: TPDTSEG! segment date and time -TYPE(DATE_TIME), INTENT(IN) :: TPDTCUR! current date and time REAL, DIMENSION(:), INTENT(IN) :: PXHAT ! x coordinate REAL, DIMENSION(:), INTENT(IN) :: PYHAT ! y coordinate REAL, DIMENSION(:,:,:), INTENT(IN) :: PZ ! z array @@ -160,7 +146,6 @@ INTEGER :: IKE INTEGER :: IIU INTEGER :: IJU INTEGER :: IKU -REAL :: ZTIMEEXP ! ! REAL, DIMENSION(SIZE(PXHAT)) :: ZXHATM ! mass point coordinates @@ -257,7 +242,6 @@ IF ( TPROFILER%T_CUR == XUNDEF ) TPROFILER%T_CUR = TPROFILER%STEP - PTSTEP ! TPROFILER%T_CUR = TPROFILER%T_CUR + PTSTEP ! -CALL DATETIME_DISTANCE(TDTEXP,TDTSEG,ZTIMEEXP) IF ( TPROFILER%T_CUR >= TPROFILER%STEP - 1.E-10 ) THEN GSTORE = .TRUE. TPROFILER%T_CUR = TPROFILER%T_CUR - TPROFILER%STEP @@ -268,23 +252,14 @@ ELSE END IF ! IF (GSTORE) THEN - TPROFILER%TIME(IN) = (IN-1) * TPROFILER%STEP + ZTIMEEXP - TPROFILER%DATIME( 1,IN) = TPDTEXP%TDATE%YEAR - TPROFILER%DATIME( 2,IN) = TPDTEXP%TDATE%MONTH - TPROFILER%DATIME( 3,IN) = TPDTEXP%TDATE%DAY - TPROFILER%DATIME( 4,IN) = TPDTEXP%TIME - TPROFILER%DATIME( 5,IN) = TPDTSEG%TDATE%YEAR - TPROFILER%DATIME( 6,IN) = TPDTSEG%TDATE%MONTH - TPROFILER%DATIME( 7,IN) = TPDTSEG%TDATE%DAY - TPROFILER%DATIME( 8,IN) = TPDTSEG%TIME - TPROFILER%DATIME( 9,IN) = TPDTMOD%TDATE%YEAR - TPROFILER%DATIME(10,IN) = TPDTMOD%TDATE%MONTH - TPROFILER%DATIME(11,IN) = TPDTMOD%TDATE%DAY - TPROFILER%DATIME(12,IN) = TPDTMOD%TIME - TPROFILER%DATIME(13,IN) = TPDTCUR%TDATE%YEAR - TPROFILER%DATIME(14,IN) = TPDTCUR%TDATE%MONTH - TPROFILER%DATIME(15,IN) = TPDTCUR%TDATE%DAY - TPROFILER%DATIME(16,IN) = TPDTCUR%TIME +#if 0 + tprofiler%tpdates(in)%date%year = tdtexp%date%year + tprofiler%tpdates(in)%date%month = tdtexp%date%month + tprofiler%tpdates(in)%date%day = tdtexp%date%day + tprofiler%tpdates(in)%time = tdtexp%time + ( in - 1 ) * tprofiler%step +#else + tprofiler%tpdates(in) = tdtcur +#endif END IF ! ! @@ -410,7 +385,6 @@ IF ((SIZE(PR,4) >= 2) .AND. NSV_C2R2END /= 0 ) THEN END IF ! IF (GSTORE) THEN - IF (TPROFILER%TIME(IN) /= XUNDEF) THEN DO I=1,NUMBPROFILER IF ((ZTHIS_PROCS(I)==1.).AND.(.NOT. TPROFILER%ERROR(I))) THEN ! @@ -608,8 +582,6 @@ ENDDO ! END IF ! -END IF -! !---------------------------------------------------------------------------- !---------------------------------------------------------------------------- ! diff --git a/src/MNH/rain_c2r2_khko.f90 b/src/MNH/rain_c2r2_khko.f90 index 07060753098a0018b03b7cd6d72bfe9f2a1e8705..cc4ef656de762010425b6441919e77ecfdf5f418 100644 --- a/src/MNH/rain_c2r2_khko.f90 +++ b/src/MNH/rain_c2r2_khko.f90 @@ -515,7 +515,7 @@ IF (ORAIN) THEN ENDIF ! IF (LBUDGET_SV) & - CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),15+(NSV_C2R2BEG-1),& + CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_C2R2BEG+2,& &'BRKU_BU_RSV') ! RCR !------------------------------------------------------------------------------- @@ -888,12 +888,12 @@ END IF ! !* 3.4 budget storage ! -IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HENU_BU_RTH') -IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),6,'HENU_BU_RRV') -IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'HENU_BU_RRC') +IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'HENU_BU_RTH') +IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RV,'HENU_BU_RRV') +IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RC,'HENU_BU_RRC') IF (LBUDGET_SV) THEN - CALL BUDGET (PCNS(:,:,:)*PRHODJ(:,:,:),13+(NSV_C2R2BEG-1),'HENU_BU_RSV') ! RCN - CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),14+(NSV_C2R2BEG-1),'HENU_BU_RSV') ! RCC + CALL BUDGET (PCNS(:,:,:)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_C2R2BEG, 'HENU_BU_RSV') ! RCN + CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_C2R2BEG+2,'HENU_BU_RSV') ! RCC END IF ! END SUBROUTINE C2R2_KHKO_NUCLEATION @@ -1088,12 +1088,12 @@ END IF !* budget storage ! ! -IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HENU_BU_RTH') -IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),6,'HENU_BU_RRV') -IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'HENU_BU_RRC') +IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'HENU_BU_RTH') +IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RV,'HENU_BU_RRV') +IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RC,'HENU_BU_RRC') IF (LBUDGET_SV) THEN - CALL BUDGET (PCNS(:,:,:)*PRHODJ(:,:,:),13+(NSV_C2R2BEG-1),'HENU_BU_RSV') ! RCN - CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),14+(NSV_C2R2BEG-1),'HENU_BU_RSV') ! RCC + CALL BUDGET (PCNS(:,:,:)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_C2R2BEG, 'HENU_BU_RSV') ! RCN + CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_C2R2BEG+1,'HENU_BU_RSV') ! RCC END IF END SUBROUTINE AER_NUCLEATION @@ -1175,7 +1175,7 @@ IF( IMICRO >= 1 ) THEN ZW(:,:,:) = PCCS(:,:,:) IF (LBUDGET_SV) CALL BUDGET ( & UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:))& - &*PRHODJ(:,:,:),14+(NSV_C2R2BEG-1),'SELF_BU_RSV') ! RCC + &*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_C2R2BEG+1,'SELF_BU_RSV') ! RCC ! !* 4.2 Autoconversion of cloud droplets ! using a Berry-Reinhardt parameterization @@ -1204,16 +1204,16 @@ IF( IMICRO >= 1 ) THEN ZW(:,:,:) = PRCS(:,:,:) IF (LBUDGET_RC) CALL BUDGET ( & UNPACK(ZRCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) & - *PRHODJ(:,:,:),7 ,'AUTO_BU_RRC') + *PRHODJ(:,:,:), NBUDGET_RC,'AUTO_BU_RRC') ZW(:,:,:) = PRRS(:,:,:) IF (LBUDGET_RR) CALL BUDGET ( & UNPACK(ZRRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) & - *PRHODJ(:,:,:),8 ,'AUTO_BU_RRR') + *PRHODJ(:,:,:), NBUDGET_RR,'AUTO_BU_RRR') ZW(:,:,:) = PCRS(:,:,:) IF (LBUDGET_SV) CALL BUDGET ( & UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) & - &*PRHODJ(:,:,:),15+(NSV_C2R2BEG-1),'AUTO_BU_RSV') ! RCR + &*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_C2R2BEG+2,'AUTO_BU_RSV') ! RCR ! ! !* 4.3 Accretion sources @@ -1263,15 +1263,15 @@ IF( IMICRO >= 1 ) THEN ZW(:,:,:) = PRCS(:,:,:) IF (LBUDGET_RC) CALL BUDGET ( & UNPACK(ZRCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) & - *PRHODJ(:,:,:),7 ,'ACCR_BU_RRC') + *PRHODJ(:,:,:), NBUDGET_RC,'ACCR_BU_RRC') ZW(:,:,:) = PRRS(:,:,:) IF (LBUDGET_RR) CALL BUDGET ( & UNPACK(ZRRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) & - *PRHODJ(:,:,:),8 ,'ACCR_BU_RRR') + *PRHODJ(:,:,:), NBUDGET_RR,'ACCR_BU_RRR') ZW(:,:,:) = PCCS(:,:,:) IF (LBUDGET_SV) CALL BUDGET ( & UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) & - *PRHODJ(:,:,:),14+(NSV_C2R2BEG-1),'ACCR_BU_RSV') ! RCC + *PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_C2R2BEG+1,'ACCR_BU_RSV') ! RCC ! !* 4.4 Self collection - Coalescence/Break-up @@ -1323,7 +1323,7 @@ IF( IMICRO >= 1 ) THEN PCRS(:,:,:) = UNPACK( ZCRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) ! IF (LBUDGET_SV) CALL BUDGET(PCRS(:,:,:)*PRHODJ(:,:,:)& - &,15+(NSV_C2R2BEG-1),'SCBU_BU_RSV') ! RCR + &,NBUDGET_SV1-1+NSV_C2R2BEG+2,'SCBU_BU_RSV') ! RCR ! DEALLOCATE(ZRCT) DEALLOCATE(ZRRT) @@ -1354,20 +1354,20 @@ ELSE ! !* 4.5 Budgets are forwarded ! - IF (LBUDGET_SV) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),14+(NSV_C2R2BEG-1),& + IF (LBUDGET_SV) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_C2R2BEG+1,& &'SELF_BU_RSV') ! RCC ! - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'AUTO_BU_RRC') - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'AUTO_BU_RRR') - IF (LBUDGET_SV) CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),15+(NSV_C2R2BEG-1),& + IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC,'AUTO_BU_RRC') + IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR,'AUTO_BU_RRR') + IF (LBUDGET_SV) CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_C2R2BEG+2,& &'AUTO_BU_RSV') ! RCR ! - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'ACCR_BU_RRC') - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'ACCR_BU_RRR') - IF (LBUDGET_SV) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),14+(NSV_C2R2BEG-1),& + IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC,'ACCR_BU_RRC') + IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR,'ACCR_BU_RRR') + IF (LBUDGET_SV) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_C2R2BEG+1,& &'ACCR_BU_RSV') ! RCC ! - IF (LBUDGET_SV) CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),15+(NSV_C2R2BEG-1),& + IF (LBUDGET_SV) CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_C2R2BEG+2,& &'SCBU_BU_RSV') ! RCR END IF ! @@ -1447,11 +1447,11 @@ IF( IMICRO >= 1 ) THEN ! !* 4.1.2 budget storage ! - IF (LBUDGET_SV) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),14+(NSV_C2R2BEG-1),& + IF (LBUDGET_SV) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_C2R2BEG+1,& &'SELF_BU_RSV') ! RCC - IF (LBUDGET_RC) CALL BUDGET (PRCS*PRHODJ(:,:,:),7 ,'AUTO_BU_RRC') - IF (LBUDGET_SV) CALL BUDGET (PCRS*PRHODJ(:,:,:),15+(NSV_C2R2BEG-1),'AUTO_BU_RSV') - IF (LBUDGET_RR) CALL BUDGET (PRRS*PRHODJ(:,:,:),8 ,'AUTO_BU_RRR') + IF (LBUDGET_RC) CALL BUDGET (PRCS*PRHODJ(:,:,:), NBUDGET_RC,'AUTO_BU_RRC') + IF (LBUDGET_SV) CALL BUDGET (PCRS*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_C2R2BEG+2,'AUTO_BU_RSV') + IF (LBUDGET_RR) CALL BUDGET (PRRS*PRHODJ(:,:,:), NBUDGET_RR,'AUTO_BU_RRR') ! !* 4.2.1 Accretion sources ! @@ -1487,24 +1487,24 @@ IF( IMICRO >= 1 ) THEN ! !* 4.2.2 budget storage ! - IF (LBUDGET_SV) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),14+(NSV_C2R2BEG-1),& + IF (LBUDGET_SV) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_C2R2BEG+1,& &'ACCR_BU_RSV') ! RCC - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'ACCR_BU_RRC') - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'ACCR_BU_RRR') + IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC,'ACCR_BU_RRC') + IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR,'ACCR_BU_RRR') ! ELSE ! !* 4.3 Budgets are forwarded ! - IF (LBUDGET_SV) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),14+(NSV_C2R2BEG-1),& + IF (LBUDGET_SV) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_C2R2BEG+1,& &'SELF_BU_RSV') ! RCC - IF (LBUDGET_RC) CALL BUDGET (PRCS*PRHODJ(:,:,:),7 ,'AUTO_BU_RRC') - IF (LBUDGET_SV) CALL BUDGET (PCRS*PRHODJ(:,:,:),15+(NSV_C2R2BEG-1),'AUTO_BU_RSV') - IF (LBUDGET_RR) CALL BUDGET (PRRS*PRHODJ(:,:,:),8 ,'AUTO_BU_RRR') - IF (LBUDGET_SV) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),14+(NSV_C2R2BEG-1),& + IF (LBUDGET_RC) CALL BUDGET (PRCS*PRHODJ(:,:,:), NBUDGET_RC,'AUTO_BU_RRC') + IF (LBUDGET_SV) CALL BUDGET (PCRS*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_C2R2BEG+2,'AUTO_BU_RSV') + IF (LBUDGET_RR) CALL BUDGET (PRRS*PRHODJ(:,:,:), NBUDGET_RR,'AUTO_BU_RRR') + IF (LBUDGET_SV) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_C2R2BEG+1,& &'ACCR_BU_RSV') ! RCC - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'ACCR_BU_RRC') - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'ACCR_BU_RRR') + IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC,'ACCR_BU_RRC') + IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR,'ACCR_BU_RRR') END IF ! @@ -1715,10 +1715,10 @@ ELSE ! KHKO END WHERE ENDIF ! -IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),6 ,'REVA_BU_RRV') -IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'REVA_BU_RRR') -IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4 ,'REVA_BU_RTH') -IF (LBUDGET_SV) CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),15+(NSV_C2R2BEG-1),'CEVA_BU_RSV') +IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RV,'REVA_BU_RRV') +IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR,'REVA_BU_RRR') +IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH,'REVA_BU_RTH') +IF (LBUDGET_SV) CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_C2R2BEG+2,'CEVA_BU_RSV') ! END SUBROUTINE C2R2_KHKO_EVAPORATION ! @@ -1929,12 +1929,12 @@ END DO !* 2.5 budget storage ! IF (LBUDGET_RC.AND.OSEDC) & - CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'SEDI_BU_RRC') -IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'SEDI_BU_RRR') + CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC,'SEDI_BU_RRC') +IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR,'SEDI_BU_RRR') IF (LBUDGET_SV) THEN - IF (OSEDC) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),14+(NSV_C2R2BEG-1),& + IF (OSEDC) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_C2R2BEG+1,& &'SEDI_BU_RSV') ! RCC - CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),15+(NSV_C2R2BEG-1),& + CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_C2R2BEG+2,& &'SEDI_BU_RSV') ! RCR END IF ! @@ -1955,9 +1955,9 @@ END IF !* 2.7 budget storage ! IF ( LBUDGET_RC .AND. LDEPOC ) & - CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'DEPO_BU_RRC') + CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC,'DEPO_BU_RRC') IF ( LBUDGET_SV .AND. LDEPOC ) & - CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),14+(NSV_C2R2BEG-1),'DEPO_BU_RSV') + CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_C2R2BEG+1,'DEPO_BU_RSV') ! END SUBROUTINE C2R2_KHKO_SEDIMENTATION !------------------------------------------------------------------------------- diff --git a/src/MNH/rain_ice.f90 b/src/MNH/rain_ice.f90 index 23d5a06c51b12c89c3b16d9c55cd4ed8c6ced3ac..a86f384b1897094e5aa356dc6f91ceb96e1e2243 100644 --- a/src/MNH/rain_ice.f90 +++ b/src/MNH/rain_ice.f90 @@ -248,8 +248,10 @@ END MODULE MODI_RAIN_ICE !* 0. DECLARATIONS ! ------------ ! -use MODD_BUDGET, only: LBU_ENABLE, LBUDGET_RC, LBUDGET_RG, LBUDGET_RH, LBUDGET_RI, & - LBUDGET_RR, LBUDGET_RS, LBUDGET_RV, LBUDGET_TH +use MODD_BUDGET, only: LBU_ENABLE, LBUDGET_TH, LBUDGET_RV, LBUDGET_RC, LBUDGET_RR, & + LBUDGET_RI, LBUDGET_RS, LBUDGET_RG, LBUDGET_RH, & + NBUDGET_TH, NBUDGET_RV, NBUDGET_RC, NBUDGET_RR, & + NBUDGET_RI, NBUDGET_RS, NBUDGET_RG, NBUDGET_RH use MODD_CONF, only: LCHECK use MODD_CST, only: XCI, XCL, XCPD, XCPV, XLSTT, XLVTT, XTT, & XALPI, XBETAI, XGAMI, XMD, XMV, XTT @@ -945,87 +947,87 @@ IF( IMICRO >= 0 ) THEN ! Reordered for compability with flexible structures like in AROME ! rain_ice_slow - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HON_BU_RTH') - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'HON_BU_RRC') - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HON_BU_RRI') - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'SFR_BU_RTH') - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'SFR_BU_RRR') - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'SFR_BU_RRG') - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'DEPS_BU_RTH') - IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),6,'DEPS_BU_RRV') - IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'DEPS_BU_RRS') - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'AGGS_BU_RRI') - IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'AGGS_BU_RRS') - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'AUTS_BU_RRI') - IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'AUTS_BU_RRS') - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'DEPG_BU_RTH') - IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),6,'DEPG_BU_RRV') - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'DEPG_BU_RRG') + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'HON_BU_RTH') + IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RC,'HON_BU_RRC') + IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RI,'HON_BU_RRI') + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'SFR_BU_RTH') + IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'SFR_BU_RRR') + IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RG,'SFR_BU_RRG') + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'DEPS_BU_RTH') + IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RV,'DEPS_BU_RRV') + IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RS,'DEPS_BU_RRS') + IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RI,'AGGS_BU_RRI') + IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RS,'AGGS_BU_RRS') + IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RI,'AUTS_BU_RRI') + IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RS,'AUTS_BU_RRS') + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'DEPG_BU_RTH') + IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RV,'DEPG_BU_RRV') + IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RG,'DEPG_BU_RRG') IF (OWARM) THEN ! rain_ice_warm - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'AUTO_BU_RRC') - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'AUTO_BU_RRR') - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'ACCR_BU_RRC') - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'ACCR_BU_RRR') - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'REVA_BU_RTH') - IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),6,'REVA_BU_RRV') - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'REVA_BU_RRR') + IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RC,'AUTO_BU_RRC') + IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'AUTO_BU_RRR') + IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RC,'ACCR_BU_RRC') + IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'ACCR_BU_RRR') + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'REVA_BU_RTH') + IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RV,'REVA_BU_RRV') + IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'REVA_BU_RRR') ENDIF !rain_ice_fast_rs - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'RIM_BU_RTH') - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'RIM_BU_RRC') - IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'RIM_BU_RRS') - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'RIM_BU_RRG') - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'ACC_BU_RTH') - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'ACC_BU_RRR') - IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'ACC_BU_RRS') - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'ACC_BU_RRG') - IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'CMEL_BU_RRS') - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'CMEL_BU_RRG') + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'RIM_BU_RTH') + IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RC,'RIM_BU_RRC') + IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RS,'RIM_BU_RRS') + IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RG,'RIM_BU_RRG') + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'ACC_BU_RTH') + IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'ACC_BU_RRR') + IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RS,'ACC_BU_RRS') + IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RG,'ACC_BU_RRG') + IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RS,'CMEL_BU_RRS') + IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RG,'CMEL_BU_RRG') !rain_ice_fast_rg - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'CFRZ_BU_RTH') - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'CFRZ_BU_RRR') - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'CFRZ_BU_RRI') - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'CFRZ_BU_RRG') - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'WETG_BU_RTH') - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'WETG_BU_RRC') - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'WETG_BU_RRR') - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'WETG_BU_RRI') - IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'WETG_BU_RRS') - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'WETG_BU_RRG') - IF (LBUDGET_RH) CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),12,'WETG_BU_RRH') - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'DRYG_BU_RTH') - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'DRYG_BU_RRC') - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'DRYG_BU_RRR') - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'DRYG_BU_RRI') - IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'DRYG_BU_RRS') - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'DRYG_BU_RRG') - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'GMLT_BU_RTH') - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'GMLT_BU_RRR') - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'GMLT_BU_RRG') + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'CFRZ_BU_RTH') + IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'CFRZ_BU_RRR') + IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RI,'CFRZ_BU_RRI') + IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RG,'CFRZ_BU_RRG') + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'WETG_BU_RTH') + IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RC,'WETG_BU_RRC') + IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'WETG_BU_RRR') + IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RI,'WETG_BU_RRI') + IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RS,'WETG_BU_RRS') + IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RG,'WETG_BU_RRG') + IF (LBUDGET_RH) CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RH,'WETG_BU_RRH') + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'DRYG_BU_RTH') + IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RC,'DRYG_BU_RRC') + IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'DRYG_BU_RRR') + IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RI,'DRYG_BU_RRI') + IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RS,'DRYG_BU_RRS') + IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RG,'DRYG_BU_RRG') + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'GMLT_BU_RTH') + IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'GMLT_BU_RRR') + IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RG,'GMLT_BU_RRG') IF(KRR==7) THEN ! rain_ice_fast_rh - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'WETH_BU_RTH') - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'WETH_BU_RRC') - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'WETH_BU_RRR') - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'WETH_BU_RRI') - IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'WETH_BU_RRS') - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'WETH_BU_RRG') - IF (LBUDGET_RH) CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),12,'WETH_BU_RRH') - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HMLT_BU_RTH') - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'HMLT_BU_RRR') - IF (LBUDGET_RH) CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),12,'HMLT_BU_RRH') + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'WETH_BU_RTH') + IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RC,'WETH_BU_RRC') + IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'WETH_BU_RRR') + IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RI,'WETH_BU_RRI') + IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RS,'WETH_BU_RRS') + IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RG,'WETH_BU_RRG') + IF (LBUDGET_RH) CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RH,'WETH_BU_RRH') + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'HMLT_BU_RTH') + IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'HMLT_BU_RRR') + IF (LBUDGET_RH) CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RH,'HMLT_BU_RRH') ENDIF !rain_ice_fast_ri - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'IMLT_BU_RTH') - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'IMLT_BU_RRC') - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'IMLT_BU_RRI') - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'BERFI_BU_RTH') - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'BERFI_BU_RRC') - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'BERFI_BU_RRI') + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'IMLT_BU_RTH') + IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RC,'IMLT_BU_RRC') + IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RI,'IMLT_BU_RRI') + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'BERFI_BU_RTH') + IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RC,'BERFI_BU_RRC') + IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RI,'BERFI_BU_RRI') ! END IF ! diff --git a/src/MNH/rain_ice_elec.f90 b/src/MNH/rain_ice_elec.f90 index 37e0c3d04d21f1f9b59f0f52c58eb84633ad6d6f..645869054d24eadaa79d8f031101830ccf847844 100644 --- a/src/MNH/rain_ice_elec.f90 +++ b/src/MNH/rain_ice_elec.f90 @@ -1107,144 +1107,144 @@ ELSE ! Reordered for compability with flexible structures like in AROME ! rain_ice_slow - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HON_BU_RTH') - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'HON_BU_RRC') - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HON_BU_RRI') - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'SFR_BU_RTH') - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'SFR_BU_RRR') - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'SFR_BU_RRG') - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'DEPS_BU_RTH') - IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),6,'DEPS_BU_RRV') - IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'DEPS_BU_RRS') - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'AGGS_BU_RRI') - IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'AGGS_BU_RRS') - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'AUTS_BU_RRI') - IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'AUTS_BU_RRS') - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'DEPG_BU_RTH') - IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),6,'DEPG_BU_RRV') - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'DEPG_BU_RRG') + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'HON_BU_RTH') + IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RC,'HON_BU_RRC') + IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RI,'HON_BU_RRI') + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'SFR_BU_RTH') + IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'SFR_BU_RRR') + IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RG,'SFR_BU_RRG') + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'DEPS_BU_RTH') + IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RV,'DEPS_BU_RRV') + IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RS,'DEPS_BU_RRS') + IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RI,'AGGS_BU_RRI') + IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RS,'AGGS_BU_RRS') + IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RI,'AUTS_BU_RRI') + IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RS,'AUTS_BU_RRS') + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'DEPG_BU_RTH') + IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RV,'DEPG_BU_RRV') + IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RG,'DEPG_BU_RRG') ! IF (OWARM) THEN ! rain_ice_warm - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'AUTO_BU_RRC') - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'AUTO_BU_RRR') - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'ACCR_BU_RRC') - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'ACCR_BU_RRR') - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'REVA_BU_RTH') - IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),6,'REVA_BU_RRV') - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'REVA_BU_RRR') + IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RC,'AUTO_BU_RRC') + IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'AUTO_BU_RRR') + IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RC,'ACCR_BU_RRC') + IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'ACCR_BU_RRR') + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'REVA_BU_RTH') + IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RV,'REVA_BU_RRV') + IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'REVA_BU_RRR') ENDIF ! ! rain_ice_fast_rs - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'RIM_BU_RTH') - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'RIM_BU_RRC') - IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'RIM_BU_RRS') - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'RIM_BU_RRG') - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'ACC_BU_RTH') - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'ACC_BU_RRR') - IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'ACC_BU_RRS') - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'ACC_BU_RRG') - IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'CMEL_BU_RRS') - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'CMEL_BU_RRG') + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'RIM_BU_RTH') + IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RC,'RIM_BU_RRC') + IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RS,'RIM_BU_RRS') + IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RG,'RIM_BU_RRG') + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'ACC_BU_RTH') + IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'ACC_BU_RRR') + IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RS,'ACC_BU_RRS') + IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RG,'ACC_BU_RRG') + IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RS,'CMEL_BU_RRS') + IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RG,'CMEL_BU_RRG') ! rain_ice_fast_rg - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'CFRZ_BU_RTH') - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'CFRZ_BU_RRR') - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'CFRZ_BU_RRI') - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'CFRZ_BU_RRG') - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'WETG_BU_RTH') - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'WETG_BU_RRC') - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'WETG_BU_RRR') - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'WETG_BU_RRI') - IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'WETG_BU_RRS') - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'WETG_BU_RRG') - IF (LBUDGET_RH) CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),12,'WETG_BU_RRH') - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'DRYG_BU_RTH') - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'DRYG_BU_RRC') - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'DRYG_BU_RRR') - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'DRYG_BU_RRI') - IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'DRYG_BU_RRS') - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'DRYG_BU_RRG') - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'GMLT_BU_RTH') - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'GMLT_BU_RRR') - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'GMLT_BU_RRG') + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'CFRZ_BU_RTH') + IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'CFRZ_BU_RRR') + IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RI,'CFRZ_BU_RRI') + IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RG,'CFRZ_BU_RRG') + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'WETG_BU_RTH') + IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RC,'WETG_BU_RRC') + IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'WETG_BU_RRR') + IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RI,'WETG_BU_RRI') + IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RS,'WETG_BU_RRS') + IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RG,'WETG_BU_RRG') + IF (LBUDGET_RH) CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RH,'WETG_BU_RRH') + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'DRYG_BU_RTH') + IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RC,'DRYG_BU_RRC') + IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'DRYG_BU_RRR') + IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RI,'DRYG_BU_RRI') + IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RS,'DRYG_BU_RRS') + IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RG,'DRYG_BU_RRG') + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'GMLT_BU_RTH') + IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'GMLT_BU_RRR') + IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RG,'GMLT_BU_RRG') IF(KRR==7) THEN ! rain_ice_fast_rh - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'WETH_BU_RTH') - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'WETH_BU_RRC') - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'WETH_BU_RRR') - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'WETH_BU_RRI') - IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'WETH_BU_RRS') - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'WETH_BU_RRG') - IF (LBUDGET_RH) CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),12,'WETH_BU_RRH') - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HMLT_BU_RTH') - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'HMLT_BU_RRR') - IF (LBUDGET_RH) CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),12,'HMLT_BU_RRH') + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'WETH_BU_RTH') + IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RC,'WETH_BU_RRC') + IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'WETH_BU_RRR') + IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RI,'WETH_BU_RRI') + IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RS,'WETH_BU_RRS') + IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RG,'WETH_BU_RRG') + IF (LBUDGET_RH) CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RH,'WETH_BU_RRH') + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'HMLT_BU_RTH') + IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'HMLT_BU_RRR') + IF (LBUDGET_RH) CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RH,'HMLT_BU_RRH') ENDIF ! rain_ice_fast_ri - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'IMLT_BU_RTH') - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'IMLT_BU_RRC') - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'IMLT_BU_RRI') - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'BERFI_BU_RTH') - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'BERFI_BU_RRC') - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'BERFI_BU_RRI') + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'IMLT_BU_RTH') + IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RC,'IMLT_BU_RRC') + IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RI,'IMLT_BU_RRI') + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'BERFI_BU_RTH') + IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RC,'BERFI_BU_RRC') + IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RI,'BERFI_BU_RRI') ! IF (LBUDGET_SV) THEN ! rain_ice_slow - CALL BUDGET (PQPIS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG, 'DEPS_BU_RSV') - CALL BUDGET (PQNIS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECEND, 'DEPS_BU_RSV') - CALL BUDGET (PQSS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+4,'DEPS_BU_RSV') - CALL BUDGET (PQIS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+3,'AGGS_BU_RSV') - CALL BUDGET (PQSS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+4,'AGGS_BU_RSV') - CALL BUDGET (PQIS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+3,'AUTS_BU_RSV') - CALL BUDGET (PQSS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+4,'AUTS_BU_RSV') - CALL BUDGET (PQPIS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG, 'DEPG_BU_RSV') - CALL BUDGET (PQNIS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECEND, 'DEPG_BU_RSV') - CALL BUDGET (PQGS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+5,'DEPG_BU_RSV') + CALL BUDGET (PQPIS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG, 'DEPS_BU_RSV') + CALL BUDGET (PQNIS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECEND, 'DEPS_BU_RSV') + CALL BUDGET (PQSS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+4,'DEPS_BU_RSV') + CALL BUDGET (PQIS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+3,'AGGS_BU_RSV') + CALL BUDGET (PQSS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+4,'AGGS_BU_RSV') + CALL BUDGET (PQIS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+3,'AUTS_BU_RSV') + CALL BUDGET (PQSS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+4,'AUTS_BU_RSV') + CALL BUDGET (PQPIS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG, 'DEPG_BU_RSV') + CALL BUDGET (PQNIS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECEND, 'DEPG_BU_RSV') + CALL BUDGET (PQGS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+5,'DEPG_BU_RSV') ! ! rain_ice_warm IF (OWARM) THEN - CALL BUDGET (PQCS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+1,'AUTO_BU_RSV') - CALL BUDGET (PQRS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+2,'AUTO_BU_RSV') - CALL BUDGET (PQCS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+1,'ACCR_BU_RSV') - CALL BUDGET (PQRS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+2,'ACCR_BU_RSV') - CALL BUDGET (PQPIS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG, 'REVA_BU_RSV') - CALL BUDGET (PQNIS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECEND, 'REVA_BU_RSV') - CALL BUDGET (PQRS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+2,'REVA_BU_RSV') + CALL BUDGET (PQCS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+1,'AUTO_BU_RSV') + CALL BUDGET (PQRS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+2,'AUTO_BU_RSV') + CALL BUDGET (PQCS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+1,'ACCR_BU_RSV') + CALL BUDGET (PQRS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+2,'ACCR_BU_RSV') + CALL BUDGET (PQPIS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG, 'REVA_BU_RSV') + CALL BUDGET (PQNIS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECEND, 'REVA_BU_RSV') + CALL BUDGET (PQRS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+2,'REVA_BU_RSV') END IF ! ! rain_ice_fast_rs - CALL BUDGET (PQCS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+1,'RIM_BU_RSV') - CALL BUDGET (PQSS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+4,'RIM_BU_RSV') - CALL BUDGET (PQGS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECEND, 'RIM_BU_RSV') - CALL BUDGET (PQRS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+2,'ACC_BU_RSV') - CALL BUDGET (PQSS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+4,'ACC_BU_RSV') - CALL BUDGET (PQGS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECEND, 'ACC_BU_RSV') - CALL BUDGET (PQSS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+4,'CMEL_BU_RSV') - CALL BUDGET (PQGS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECEND, 'CMEL_BU_RSV') + CALL BUDGET (PQCS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+1,'RIM_BU_RSV') + CALL BUDGET (PQSS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+4,'RIM_BU_RSV') + CALL BUDGET (PQGS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECEND, 'RIM_BU_RSV') + CALL BUDGET (PQRS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+2,'ACC_BU_RSV') + CALL BUDGET (PQSS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+4,'ACC_BU_RSV') + CALL BUDGET (PQGS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECEND, 'ACC_BU_RSV') + CALL BUDGET (PQSS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+4,'CMEL_BU_RSV') + CALL BUDGET (PQGS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECEND, 'CMEL_BU_RSV') ! ! rain_ice_fast_rg - CALL BUDGET (PQRS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+2,'CFRZ_BU_RSV') - CALL BUDGET (PQIS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+3,'CFRZ_BU_RSV') - CALL BUDGET (PQGS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECEND, 'CFRZ_BU_RSV') - CALL BUDGET (PQCS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+1,'WETG_BU_RSV') - CALL BUDGET (PQRS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+2,'WETG_BU_RSV') - CALL BUDGET (PQIS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+3,'WETG_BU_RSV') - CALL BUDGET (PQSS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+4,'WETG_BU_RSV') - CALL BUDGET (PQGS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECEND, 'WETG_BU_RSV') - CALL BUDGET (PQCS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+1,'DRYG_BU_RSV') - CALL BUDGET (PQRS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+2,'DRYG_BU_RSV') - CALL BUDGET (PQIS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+3,'DRYG_BU_RSV') - CALL BUDGET (PQSS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+4,'DRYG_BU_RSV') - CALL BUDGET (PQGS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECEND, 'DRYG_BU_RSV') - CALL BUDGET (PQRS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+2,'GMLT_BU_RSV') - CALL BUDGET (PQGS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECEND, 'GMLT_BU_RSV') + CALL BUDGET (PQRS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+2,'CFRZ_BU_RSV') + CALL BUDGET (PQIS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+3,'CFRZ_BU_RSV') + CALL BUDGET (PQGS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECEND, 'CFRZ_BU_RSV') + CALL BUDGET (PQCS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+1,'WETG_BU_RSV') + CALL BUDGET (PQRS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+2,'WETG_BU_RSV') + CALL BUDGET (PQIS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+3,'WETG_BU_RSV') + CALL BUDGET (PQSS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+4,'WETG_BU_RSV') + CALL BUDGET (PQGS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECEND, 'WETG_BU_RSV') + CALL BUDGET (PQCS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+1,'DRYG_BU_RSV') + CALL BUDGET (PQRS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+2,'DRYG_BU_RSV') + CALL BUDGET (PQIS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+3,'DRYG_BU_RSV') + CALL BUDGET (PQSS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+4,'DRYG_BU_RSV') + CALL BUDGET (PQGS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECEND, 'DRYG_BU_RSV') + CALL BUDGET (PQRS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+2,'GMLT_BU_RSV') + CALL BUDGET (PQGS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECEND, 'GMLT_BU_RSV') ! ! rain_ice_fast_ri - CALL BUDGET (PQCS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+1,'IMLT_BU_RSV') - CALL BUDGET (PQIS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+3,'IMLT_BU_RSV') - CALL BUDGET (PQCS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+1,'BERFI_BU_RSV') - CALL BUDGET (PQIS(:,:,:) * PRHODJ(:,:,:),12+NSV_ELECBEG+3,'BERFI_BU_RSV') + CALL BUDGET (PQCS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+1,'IMLT_BU_RSV') + CALL BUDGET (PQIS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+3,'IMLT_BU_RSV') + CALL BUDGET (PQCS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+1,'BERFI_BU_RSV') + CALL BUDGET (PQIS(:,:,:) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+3,'BERFI_BU_RSV') ! END IF END IF @@ -1974,20 +1974,20 @@ REAL :: ZVR, ZVI, ZVS, ZVG, ZETA0, ZK, ZRE0 !* 2.3 budget storage ! IF (LBUDGET_RC .AND. OSEDIC) & - CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'SEDI_BU_RRC') - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'SEDI_BU_RRR') - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9 ,'SEDI_BU_RRI') - IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'SEDI_BU_RRS') - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'SEDI_BU_RRG') + CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC,'SEDI_BU_RRC') + IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR,'SEDI_BU_RRR') + IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI,'SEDI_BU_RRI') + IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RS,'SEDI_BU_RRS') + IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RG,'SEDI_BU_RRG') IF ( KRR == 7 .AND. LBUDGET_RH) & - CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),12,'SEDI_BU_RRH') + CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RH,'SEDI_BU_RRH') ! IF (LBUDGET_SV) THEN - CALL BUDGET (PQCS(:,:,:)*PRHODJ(:,:,:),12+NSV_ELECBEG+1,'SEDI_BU_RSV') - CALL BUDGET (PQRS(:,:,:)*PRHODJ(:,:,:),12+NSV_ELECBEG+2,'SEDI_BU_RSV') - CALL BUDGET (PQIS(:,:,:)*PRHODJ(:,:,:),12+NSV_ELECBEG+3,'SEDI_BU_RSV') - CALL BUDGET (PQSS(:,:,:)*PRHODJ(:,:,:),12+NSV_ELECBEG+4,'SEDI_BU_RSV') - CALL BUDGET (PQGS(:,:,:)*PRHODJ(:,:,:),12+NSV_ELECBEG+5,'SEDI_BU_RSV') + CALL BUDGET (PQCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+1,'SEDI_BU_RSV') + CALL BUDGET (PQRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+2,'SEDI_BU_RSV') + CALL BUDGET (PQIS(:,:,:)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+3,'SEDI_BU_RSV') + CALL BUDGET (PQSS(:,:,:)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+4,'SEDI_BU_RSV') + CALL BUDGET (PQGS(:,:,:)*PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_ELECBEG+5,'SEDI_BU_RSV') END IF ! END SUBROUTINE RAIN_ICE_ELEC_SEDIMENTATION_SPLIT @@ -2369,13 +2369,13 @@ REAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) :: ZCONC3D ! !* 2.3 budget storage ! IF (LBUDGET_RC .AND. OSEDIC) & - CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'SEDI_BU_RRC') - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'SEDI_BU_RRR') - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9 ,'SEDI_BU_RRI') - IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'SEDI_BU_RRS') - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'SEDI_BU_RRG') + CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC,'SEDI_BU_RRC') + IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR,'SEDI_BU_RRR') + IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI,'SEDI_BU_RRI') + IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RS,'SEDI_BU_RRS') + IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RG,'SEDI_BU_RRG') IF (KRR == 7 .AND. LBUDGET_RH) & - CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),12,'SEDI_BU_RRH') + CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RH,'SEDI_BU_RRH') ! END SUBROUTINE RAIN_ICE_SEDIMENTATION_STAT @@ -2485,9 +2485,9 @@ END IF ! !* 3.1.3 budget storage ! -IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HENU_BU_RTH') -IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),6,'HENU_BU_RRV') -IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HENU_BU_RRI') +IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'HENU_BU_RTH') +IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RV,'HENU_BU_RRV') +IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RI,'HENU_BU_RRI') ! END SUBROUTINE RAIN_ICE_ELEC_NUCLEATION ! @@ -2532,19 +2532,19 @@ IMPLICIT NONE ! IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), & - 4,'HON_BU_RTH') + NBUDGET_TH,'HON_BU_RTH') IF (LBUDGET_RC) CALL BUDGET ( & UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 7,'HON_BU_RRC') + NBUDGET_RC,'HON_BU_RRC') IF (LBUDGET_RI) CALL BUDGET ( & UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 9,'HON_BU_RRI') + NBUDGET_RI,'HON_BU_RRI') ! IF (LBUDGET_SV) THEN CALL BUDGET (UNPACK(ZQCS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0),& - 12+NSV_ELECBEG+1,'HON_BU_RSV') + NBUDGET_SV1-1+NSV_ELECBEG+1,'HON_BU_RSV') CALL BUDGET (UNPACK(ZQIS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), & - 12+NSV_ELECBEG+3,'HON_BU_RSV') + NBUDGET_SV1-1+NSV_ELECBEG+3,'HON_BU_RSV') END IF ! !* 3.5.2 compute the spontaneous freezing source: RRHONG & QRHONG @@ -2568,19 +2568,19 @@ IMPLICIT NONE ! IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), & - 4,'SFR_BU_RTH') + NBUDGET_TH,'SFR_BU_RTH') IF (LBUDGET_RR) CALL BUDGET ( & UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 8,'SFR_BU_RRR') + NBUDGET_RR,'SFR_BU_RRR') IF (LBUDGET_RG) CALL BUDGET ( & UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 11,'SFR_BU_RRG') + NBUDGET_RG,'SFR_BU_RRG') ! IF (LBUDGET_SV) THEN CALL BUDGET (UNPACK(ZQRS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0),& - 12+NSV_ELECBEG+2,'HON_BU_RSV') + NBUDGET_SV1-1+NSV_ELECBEG+2,'HON_BU_RSV') CALL BUDGET (UNPACK(ZQGS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), & - 12+NSV_ELECEND, 'HON_BU_RSV') + NBUDGET_SV1-1+NSV_ELECEND, 'HON_BU_RSV') END IF ! @@ -2623,21 +2623,21 @@ IMPLICIT NONE ! IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), & - 4,'DEPS_BU_RTH') + NBUDGET_TH,'DEPS_BU_RTH') IF (LBUDGET_RV) CALL BUDGET ( & UNPACK(ZRVS(:),MASK=GMICRO(:,:,:),FIELD=PRVS)*PRHODJ(:,:,:), & - 6,'DEPS_BU_RRV') + NBUDGET_RV,'DEPS_BU_RRV') IF (LBUDGET_RS) CALL BUDGET ( & UNPACK(ZRSS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 10,'DEPS_BU_RRS') + NBUDGET_RS,'DEPS_BU_RRS') ! IF (LBUDGET_SV) THEN CALL BUDGET (UNPACK(ZQPIS(:), MASK=GMICRO(:,:,:), FIELD=PQPIS) & - *PRHODJ(:,:,:), 12+NSV_ELECBEG ,'DEPS_BU_RSV') + *PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_ELECBEG ,'DEPS_BU_RSV') CALL BUDGET (UNPACK(ZQNIS(:), MASK=GMICRO(:,:,:), FIELD=PQNIS) & - *PRHODJ(:,:,:), 12+NSV_ELECEND ,'DEPS_BU_RSV') + *PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_ELECEND ,'DEPS_BU_RSV') CALL BUDGET (UNPACK(ZQSS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), & - 12+NSV_ELECBEG+4,'DEPS_BU_RSV') + NBUDGET_SV1-1+NSV_ELECBEG+4,'DEPS_BU_RSV') END IF ! !* 3.5.3.4 compute the aggregation on r_s: RIAGGS & QIAGGS @@ -2669,16 +2669,16 @@ IMPLICIT NONE ! IF (LBUDGET_RI) CALL BUDGET ( & UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 9,'AGGS_BU_RRI') + NBUDGET_RI,'AGGS_BU_RRI') IF (LBUDGET_RS) CALL BUDGET ( & UNPACK(ZRSS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 10,'AGGS_BU_RRS') + NBUDGET_RS,'AGGS_BU_RRS') ! IF (LBUDGET_SV) THEN CALL BUDGET (UNPACK(ZQIS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), & - 12+NSV_ELECBEG+3,'AGGS_BU_RSV') + NBUDGET_SV1-1+NSV_ELECBEG+3,'AGGS_BU_RSV') CALL BUDGET (UNPACK(ZQSS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), & - 12+NSV_ELECBEG+4,'AGGS_BU_RSV') + NBUDGET_SV1-1+NSV_ELECBEG+4,'AGGS_BU_RSV') END IF ! CALL ELEC_IAGGS_B() ! QIAGGS_boun @@ -2689,9 +2689,9 @@ IMPLICIT NONE ! IF (LBUDGET_SV) THEN CALL BUDGET (UNPACK(ZQIS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), & - 12+NSV_ELECBEG+3,'NIIS_BU_RSV') + NBUDGET_SV1-1+NSV_ELECBEG+3,'NIIS_BU_RSV') CALL BUDGET (UNPACK(ZQSS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), & - 12+NSV_ELECBEG+4,'NIIS_BU_RSV') + NBUDGET_SV1-1+NSV_ELECBEG+4,'NIIS_BU_RSV') END IF ! !* 3.5.3.5 compute the autoconversion of r_i for r_s production: @@ -2719,16 +2719,16 @@ IMPLICIT NONE DEALLOCATE(ZCRIAUTI) IF (LBUDGET_RI) CALL BUDGET ( & UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 9,'AUTS_BU_RRI') + NBUDGET_RI,'AUTS_BU_RRI') IF (LBUDGET_RS) CALL BUDGET ( & UNPACK(ZRSS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 10,'AUTS_BU_RRS') + NBUDGET_RS,'AUTS_BU_RRS') ! IF (LBU_RSV) THEN CALL BUDGET (UNPACK(ZQIS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), & - 12+NSV_ELECBEG+3,'AUTS_BU_RSV') + NBUDGET_SV1-1+NSV_ELECBEG+3,'AUTS_BU_RSV') CALL BUDGET (UNPACK(ZQSS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), & - 12+NSV_ELECBEG+4,'AUTS_BU_RSV') + NBUDGET_SV1-1+NSV_ELECBEG+4,'AUTS_BU_RSV') END IF ! !* 3.5.3.6 compute the deposition on r_g: RVDEPG & QVDEPG @@ -2757,21 +2757,21 @@ IMPLICIT NONE ! IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), & - 4,'DEPG_BU_RTH') + NBUDGET_TH,'DEPG_BU_RTH') IF (LBUDGET_RV) CALL BUDGET ( & UNPACK(ZRVS(:),MASK=GMICRO(:,:,:),FIELD=PRVS)*PRHODJ(:,:,:), & - 6,'DEPG_BU_RRV') + NBUDGET_RV,'DEPG_BU_RRV') IF (LBUDGET_RG) CALL BUDGET ( & UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 11,'DEPG_BU_RRG') + NBUDGET_RG,'DEPG_BU_RRG') ! IF (LBU_RSV) THEN CALL BUDGET (UNPACK(ZQPIS(:), MASK=GMICRO(:,:,:), FIELD=PQPIS) & - *PRHODJ(:,:,:), 12+NSV_ELECBEG ,'DEPG_BU_RSV') + *PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_ELECBEG ,'DEPG_BU_RSV') CALL BUDGET (UNPACK(ZQNIS(:), MASK=GMICRO(:,:,:), FIELD=PQNIS) & - *PRHODJ(:,:,:), 12+NSV_ELECEND ,'DEPG_BU_RSV') + *PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_ELECEND ,'DEPG_BU_RSV') CALL BUDGET (UNPACK(ZQGS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), & - 12+NSV_ELECEND,'DEPG_BU_RSV') + NBUDGET_SV1-1+NSV_ELECEND,'DEPG_BU_RSV') END IF ! END SUBROUTINE RAIN_ICE_ELEC_SLOW @@ -2840,16 +2840,16 @@ REAL :: ZCRIAUTC ! Critical cloud mixing ratio ! IF (LBUDGET_RC) CALL BUDGET ( & UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 7,'AUTO_BU_RRC') + NBUDGET_RC,'AUTO_BU_RRC') IF (LBUDGET_RR) CALL BUDGET ( & UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 8,'AUTO_BU_RRR') + NBUDGET_RR,'AUTO_BU_RRR') ! IF (LBUDGET_SV) THEN CALL BUDGET (UNPACK(ZQCS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), & - 12+NSV_ELECBEG+1,'AUTO_BU_RSV') + NBUDGET_SV1-1+NSV_ELECBEG+1,'AUTO_BU_RSV') CALL BUDGET (UNPACK(ZQRS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), & - 12+NSV_ELECBEG+2,'AUTO_BU_RSV') + NBUDGET_SV1-1+NSV_ELECBEG+2,'AUTO_BU_RSV') END IF ! ! @@ -2874,16 +2874,16 @@ REAL :: ZCRIAUTC ! Critical cloud mixing ratio ! IF (LBUDGET_RC) CALL BUDGET ( & UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 7,'ACCR_BU_RRC') + NBUDGET_RC,'ACCR_BU_RRC') IF (LBUDGET_RR) CALL BUDGET ( & UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 8,'ACCR_BU_RRR') + NBUDGET_RR,'ACCR_BU_RRR') ! IF (LBU_RSV) THEN CALL BUDGET (UNPACK(ZQCS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), & - 12+NSV_ELECBEG+1,'ACCR_BU_RSV') + NBUDGET_SV1-1+NSV_ELECBEG+1,'ACCR_BU_RSV') CALL BUDGET (UNPACK(ZQRS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), & - 12+NSV_ELECBEG+2,'ACCR_BU_RSV') + NBUDGET_SV1-1+NSV_ELECBEG+2,'ACCR_BU_RSV') END IF ! ! @@ -2916,23 +2916,23 @@ REAL :: ZCRIAUTC ! Critical cloud mixing ratio ! IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), & - 4,'REVA_BU_RTH') + NBUDGET_TH,'REVA_BU_RTH') IF (LBUDGET_RV) CALL BUDGET ( & UNPACK(ZRVS(:),MASK=GMICRO(:,:,:),FIELD=PRVS)*PRHODJ(:,:,:), & - 6,'REVA_BU_RRV') + NBUDGET_RV,'REVA_BU_RRV') IF (LBUDGET_RR) CALL BUDGET ( & UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 8,'REVA_BU_RRR') + NBUDGET_RR,'REVA_BU_RRR') ZW(:,:,:)=PEVAP3D(:,:,:) PEVAP3D(:,:,:)=UNPACK(ZZW(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) ! IF (LBUDGET_SV) THEN CALL BUDGET (UNPACK(ZQPIS(:), MASK=GMICRO(:,:,:), FIELD=PQPIS) & - *PRHODJ(:,:,:), 12+NSV_ELECBEG ,'REVA_BU_RSV') + *PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_ELECBEG ,'REVA_BU_RSV') CALL BUDGET (UNPACK(ZQNIS(:), MASK=GMICRO(:,:,:), FIELD=PQNIS) & - *PRHODJ(:,:,:), 12+NSV_ELECEND ,'REVA_BU_RSV') + *PRHODJ(:,:,:), NBUDGET_SV1-1+NSV_ELECEND ,'REVA_BU_RSV') CALL BUDGET (UNPACK(ZQRS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), & - 12+NSV_ELECBEG+2,'REVA_BU_RSV') + NBUDGET_SV1-1+NSV_ELECBEG+2,'REVA_BU_RSV') END IF ! END SUBROUTINE RAIN_ICE_ELEC_WARM @@ -3069,25 +3069,25 @@ IMPLICIT NONE ! IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), & - 4,'RIM_BU_RTH') + NBUDGET_TH,'RIM_BU_RTH') IF (LBUDGET_RC) CALL BUDGET ( & UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 7,'RIM_BU_RRC') + NBUDGET_RC,'RIM_BU_RRC') IF (LBUDGET_RS) CALL BUDGET ( & UNPACK(ZRSS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 10,'RIM_BU_RRS') + NBUDGET_RS,'RIM_BU_RRS') IF (LBUDGET_RG) CALL BUDGET ( & UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 11,'RIM_BU_RRG') + NBUDGET_RG,'RIM_BU_RRG') ! ! IF (LBUDGET_SV) THEN CALL BUDGET (UNPACK(ZQCS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), & - 12+NSV_ELECBEG+1,'RIM_BU_RSV') + NBUDGET_SV1-1+NSV_ELECBEG+1,'RIM_BU_RSV') CALL BUDGET (UNPACK(ZQSS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), & - 12+NSV_ELECBEG+4,'RIM_BU_RSV') + NBUDGET_SV1-1+NSV_ELECBEG+4,'RIM_BU_RSV') CALL BUDGET (UNPACK(ZQGS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), & - 12+NSV_ELECEND,'RIM_BU_RSV') + NBUDGET_SV1-1+NSV_ELECEND,'RIM_BU_RSV') END IF ! DEALLOCATE(GRIM) @@ -3247,24 +3247,24 @@ IMPLICIT NONE DEALLOCATE(GACC) IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), & - 4,'ACC_BU_RTH') + NBUDGET_TH,'ACC_BU_RTH') IF (LBUDGET_RR) CALL BUDGET ( & UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 8,'ACC_BU_RRR') + NBUDGET_RR,'ACC_BU_RRR') IF (LBUDGET_RS) CALL BUDGET ( & UNPACK(ZRSS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 10,'ACC_BU_RRS') + NBUDGET_RS,'ACC_BU_RRS') IF (LBUDGET_RG) CALL BUDGET ( & UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 11,'ACC_BU_RRG') + NBUDGET_RG,'ACC_BU_RRG') ! IF (LBUDGET_SV) THEN CALL BUDGET (UNPACK(ZQRS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), & - 12+NSV_ELECBEG+2,'ACC_BU_RSV') + NBUDGET_SV1-1+NSV_ELECBEG+2,'ACC_BU_RSV') CALL BUDGET (UNPACK(ZQSS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), & - 12+NSV_ELECBEG+4,'ACC_BU_RSV') + NBUDGET_SV1-1+NSV_ELECBEG+4,'ACC_BU_RSV') CALL BUDGET (UNPACK(ZQGS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), & - 12+NSV_ELECEND,'ACC_BU_RSV') + NBUDGET_SV1-1+NSV_ELECEND,'ACC_BU_RSV') END IF ! !* 5.3 Conversion-Melting of the aggregates: RSMLT & QSMLT @@ -3303,16 +3303,16 @@ IMPLICIT NONE ! IF (LBUDGET_RS) CALL BUDGET ( & UNPACK(ZRSS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 10,'CMEL_BU_RRS') + NBUDGET_RS,'CMEL_BU_RRS') IF (LBUDGET_RG) CALL BUDGET ( & UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 11,'CMEL_BU_RRG') + NBUDGET_RG,'CMEL_BU_RRG') ! IF (LBUDGET_SV) THEN CALL BUDGET (UNPACK(ZQSS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), & - 12+NSV_ELECBEG+4,'CMEL_BU_RSV') + NBUDGET_SV1-1+NSV_ELECBEG+4,'CMEL_BU_RSV') CALL BUDGET (UNPACK(ZQGS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), & - 12+NSV_ELECEND,'CMEL_BU_RSV') + NBUDGET_SV1-1+NSV_ELECEND,'CMEL_BU_RSV') END IF ! END SUBROUTINE RAIN_ICE_ELEC_FAST_RS @@ -3368,24 +3368,24 @@ IMPLICIT NONE ! IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), & - 4,'CFRZ_BU_RTH') + NBUDGET_TH,'CFRZ_BU_RTH') IF (LBUDGET_RR) CALL BUDGET ( & UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 8,'CFRZ_BU_RRR') + NBUDGET_RR,'CFRZ_BU_RRR') IF (LBUDGET_RI) CALL BUDGET ( & UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 9,'CFRZ_BU_RRI') + NBUDGET_RI,'CFRZ_BU_RRI') IF (LBUDGET_RG) CALL BUDGET ( & UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 11,'CFRZ_BU_RRG') + NBUDGET_RG,'CFRZ_BU_RRG') ! IF (LBU_RSV) THEN CALL BUDGET (UNPACK(ZQRS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), & - 12+NSV_ELECBEG+2,'CFRZ_BU_RSV') + NBUDGET_SV1-1+NSV_ELECBEG+2,'CFRZ_BU_RSV') CALL BUDGET (UNPACK(ZQIS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), & - 12+NSV_ELECBEG+3,'CFRZ_BU_RSV') + NBUDGET_SV1-1+NSV_ELECBEG+3,'CFRZ_BU_RSV') CALL BUDGET (UNPACK(ZQGS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), & - 12+NSV_ELECEND,'CFRZ_BU_RSV') + NBUDGET_SV1-1+NSV_ELECEND,'CFRZ_BU_RSV') END IF ! ! @@ -3751,39 +3751,39 @@ IMPLICIT NONE ! IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), & - 4,'WETG_BU_RTH') + NBUDGET_TH,'WETG_BU_RTH') IF (LBUDGET_RC) CALL BUDGET ( & UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 7,'WETG_BU_RRC') + NBUDGET_RC,'WETG_BU_RRC') IF (LBUDGET_RR) CALL BUDGET ( & UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 8,'WETG_BU_RRR') + NBUDGET_RR,'WETG_BU_RRR') IF (LBUDGET_RI) CALL BUDGET ( & UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 9,'WETG_BU_RRI') + NBUDGET_RI,'WETG_BU_RRI') IF (LBUDGET_RS) CALL BUDGET ( & UNPACK(ZRSS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 10,'WETG_BU_RRS') + NBUDGET_RS,'WETG_BU_RRS') IF (LBUDGET_RG) CALL BUDGET ( & UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 11,'WETG_BU_RRG') + NBUDGET_RG,'WETG_BU_RRG') IF ( KRR == 7 ) THEN IF (LBUDGET_RH) CALL BUDGET ( & UNPACK(ZRHS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 12,'WETG_BU_RRH') + NBUDGET_RH,'WETG_BU_RRH') END IF ! IF (LBU_RSV) THEN CALL BUDGET (UNPACK(ZQCS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), & - 12+NSV_ELECBEG+1,'WETG_BU_RSV') + NBUDGET_SV1-1+NSV_ELECBEG+1,'WETG_BU_RSV') CALL BUDGET (UNPACK(ZQRS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), & - 12+NSV_ELECBEG+2,'WETG_BU_RSV') + NBUDGET_SV1-1+NSV_ELECBEG+2,'WETG_BU_RSV') CALL BUDGET (UNPACK(ZQIS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), & - 12+NSV_ELECBEG+3,'WETG_BU_RSV') + NBUDGET_SV1-1+NSV_ELECBEG+3,'WETG_BU_RSV') CALL BUDGET (UNPACK(ZQSS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), & - 12+NSV_ELECBEG+4,'WETG_BU_RSV') + NBUDGET_SV1-1+NSV_ELECBEG+4,'WETG_BU_RSV') CALL BUDGET (UNPACK(ZQGS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), & - 12+NSV_ELECEND,'WETG_BU_RSV') + NBUDGET_SV1-1+NSV_ELECEND,'WETG_BU_RSV') END IF ! WHERE (ZRGT(:) > XRTMIN(6) .AND. ZZT(:) < XTT .AND. & ! Dry @@ -3806,34 +3806,34 @@ IMPLICIT NONE ! IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), & - 4,'DRYG_BU_RTH') + NBUDGET_TH,'DRYG_BU_RTH') IF (LBUDGET_RC) CALL BUDGET ( & UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 7,'DRYG_BU_RRC') + NBUDGET_RC,'DRYG_BU_RRC') IF (LBUDGET_RR) CALL BUDGET ( & UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 8,'DRYG_BU_RRR') + NBUDGET_RR,'DRYG_BU_RRR') IF (LBUDGET_RI) CALL BUDGET ( & UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 9,'DRYG_BU_RRI') + NBUDGET_RI,'DRYG_BU_RRI') IF (LBUDGET_RS) CALL BUDGET ( & UNPACK(ZRSS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 10,'DRYG_BU_RRS') + NBUDGET_RS,'DRYG_BU_RRS') IF (LBUDGET_RG) CALL BUDGET ( & UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 11,'DRYG_BU_RRG') + NBUDGET_RG,'DRYG_BU_RRG') ! IF (LBUDGET_SV) THEN CALL BUDGET (UNPACK(ZQCS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), & - 12+NSV_ELECBEG+1,'DRYG_BU_RSV') + NBUDGET_SV1-1+NSV_ELECBEG+1,'DRYG_BU_RSV') CALL BUDGET (UNPACK(ZQRS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), & - 12+NSV_ELECBEG+2,'DRYG_BU_RSV') + NBUDGET_SV1-1+NSV_ELECBEG+2,'DRYG_BU_RSV') CALL BUDGET (UNPACK(ZQIS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), & - 12+NSV_ELECBEG+3,'DRYG_BU_RSV') + NBUDGET_SV1-1+NSV_ELECBEG+3,'DRYG_BU_RSV') CALL BUDGET (UNPACK(ZQSS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), & - 12+NSV_ELECBEG+4,'DRYG_BU_RSV') + NBUDGET_SV1-1+NSV_ELECBEG+4,'DRYG_BU_RSV') CALL BUDGET (UNPACK(ZQGS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), & - 12+NSV_ELECEND,'DRYG_BU_RSV') + NBUDGET_SV1-1+NSV_ELECEND,'DRYG_BU_RSV') END IF ! ! @@ -3853,9 +3853,9 @@ IMPLICIT NONE ! IF (LBUDGET_SV) THEN CALL BUDGET (UNPACK(ZQCS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), & - 12+NSV_ELECBEG+1,'INCG_BU_RSV') + NBUDGET_SV1-1+NSV_ELECBEG+1,'INCG_BU_RSV') CALL BUDGET (UNPACK(ZQGS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), & - 12+NSV_ELECEND,'INCG_BU_RSV') + NBUDGET_SV1-1+NSV_ELECEND,'INCG_BU_RSV') END IF ! ! @@ -3892,19 +3892,19 @@ IMPLICIT NONE ! IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& - 4,'GMLT_BU_RTH') + NBUDGET_TH,'GMLT_BU_RTH') IF (LBUDGET_RR) CALL BUDGET ( & UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 8,'GMLT_BU_RRR') + NBUDGET_RR,'GMLT_BU_RRR') IF (LBUDGET_RG) CALL BUDGET ( & UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 11,'GMLT_BU_RRG') + NBUDGET_RG,'GMLT_BU_RRG') ! IF (LBUDGET_SV) THEN CALL BUDGET (UNPACK(ZQRS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), & - 12+NSV_ELECBEG+2,'GMLT_BU_RSV') + NBUDGET_SV1-1+NSV_ELECBEG+2,'GMLT_BU_RSV') CALL BUDGET (UNPACK(ZQGS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), & - 12+NSV_ELECEND,'GMLT_BU_RSV') + NBUDGET_SV1-1+NSV_ELECEND,'GMLT_BU_RSV') END IF ! END SUBROUTINE RAIN_ICE_ELEC_FAST_RG @@ -4133,25 +4133,25 @@ IMPLICIT NONE IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& - 4,'WETH_BU_RTH') + NBUDGET_TH,'WETH_BU_RTH') IF (LBUDGET_RC) CALL BUDGET ( & UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 7,'WETH_BU_RRC') + NBUDGET_RC,'WETH_BU_RRC') IF (LBUDGET_RR) CALL BUDGET ( & UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 8,'WETH_BU_RRR') + NBUDGET_RR,'WETH_BU_RRR') IF (LBUDGET_RI) CALL BUDGET ( & UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 9,'WETH_BU_RRI') + NBUDGET_RI,'WETH_BU_RRI') IF (LBUDGET_RS) CALL BUDGET ( & UNPACK(ZRSS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 10,'WETH_BU_RRS') + NBUDGET_RS,'WETH_BU_RRS') IF (LBUDGET_RG) CALL BUDGET ( & UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 11,'WETH_BU_RRG') + NBUDGET_RG,'WETH_BU_RRG') IF (LBUDGET_RH) CALL BUDGET ( & UNPACK(ZRHS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 12,'WETH_BU_RRH') + NBUDGET_RH,'WETH_BU_RRH') ! IF (IHAIL > 0) THEN ! @@ -4192,13 +4192,13 @@ IMPLICIT NONE ! IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& - 4,'HMLT_BU_RTH') + NBUDGET_TH,'HMLT_BU_RTH') IF (LBUDGET_RR) CALL BUDGET ( & UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 8,'HMLT_BU_RRR') + NBUDGET_RR,'HMLT_BU_RRR') IF (LBUDGET_RH) CALL BUDGET ( & UNPACK(ZRHS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 12,'HMLT_BU_RRH') + NBUDGET_RH,'HMLT_BU_RRH') ! END SUBROUTINE RAIN_ICE_ELEC_FAST_RH ! @@ -4230,19 +4230,19 @@ IMPLICIT NONE ! IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), & - 4,'IMLT_BU_RTH') + NBUDGET_TH,'IMLT_BU_RTH') IF (LBUDGET_RC) CALL BUDGET ( & UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 7,'IMLT_BU_RRC') + NBUDGET_RC,'IMLT_BU_RRC') IF (LBUDGET_RI) CALL BUDGET ( & UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 9,'IMLT_BU_RRI') + NBUDGET_RI,'IMLT_BU_RRI') ! IF (LBUDGET_SV) THEN CALL BUDGET (UNPACK(ZQCS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), & - 12+NSV_ELECBEG+1,'IMLT_BU_RSV') + NBUDGET_SV1-1+NSV_ELECBEG+1,'IMLT_BU_RSV') CALL BUDGET (UNPACK(ZQIS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), & - 12+NSV_ELECBEG+3,'IMLT_BU_RSV') + NBUDGET_SV1-1+NSV_ELECBEG+3,'IMLT_BU_RSV') END IF ! !* 7.2 Bergeron-Findeisen effect: RCBERI @@ -4272,19 +4272,19 @@ IMPLICIT NONE ! IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), & - 4,'BERFI_BU_RTH') + NBUDGET_TH,'BERFI_BU_RTH') IF (LBUDGET_RC) CALL BUDGET ( & UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 7,'BERFI_BU_RRC') + NBUDGET_RC,'BERFI_BU_RRC') IF (LBUDGET_RI) CALL BUDGET ( & UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 9,'BERFI_BU_RRI') + NBUDGET_RI,'BERFI_BU_RRI') ! IF (LBUDGET_SV) THEN CALL BUDGET (UNPACK(ZQCS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), & - 12+NSV_ELECBEG+1,'BERFI_BU_RSV') + NBUDGET_SV1-1+NSV_ELECBEG+1,'BERFI_BU_RSV') CALL BUDGET (UNPACK(ZQIS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), & - 12+NSV_ELECBEG+3,'BERFI_BU_RSV') + NBUDGET_SV1-1+NSV_ELECBEG+3,'BERFI_BU_RSV') END IF ! END SUBROUTINE RAIN_ICE_ELEC_FAST_RI diff --git a/src/MNH/rain_ice_fast_rg.f90 b/src/MNH/rain_ice_fast_rg.f90 index 7c2b0aeb7a600ad27138e4e99475ae6029b53dd8..33a65180b9bed5b508857cd14a7ddf961b3e3fa2 100644 --- a/src/MNH/rain_ice_fast_rg.f90 +++ b/src/MNH/rain_ice_fast_rg.f90 @@ -28,7 +28,8 @@ SUBROUTINE RAIN_ICE_FAST_RG(KRR, OMICRO, PRHODREF, PRVT, PRCT, PRRT, PRIT, PRST, !* 0. DECLARATIONS ! ------------ ! -use MODD_BUDGET, only: LBUDGET_RC, LBUDGET_RG, LBUDGET_RH, LBUDGET_RI, LBUDGET_RR, LBUDGET_RS, LBUDGET_TH +use MODD_BUDGET, only: LBUDGET_TH, LBUDGET_RC, LBUDGET_RR, LBUDGET_RI, LBUDGET_RS, LBUDGET_RG, LBUDGET_RH, & + NBUDGET_TH, NBUDGET_RC, NBUDGET_RR, NBUDGET_RI, NBUDGET_RS, NBUDGET_RG, NBUDGET_RH use MODD_CST, only: XCI, XCL, XCPV, XESTT, XLMTT, XLVTT, XMD, XMV, XRV, XTT use MODD_RAIN_ICE_DESCR, only: XBS, XCEXVT, XCXG, XCXS, XDG, XRTMIN use MODD_RAIN_ICE_PARAM, only: NDRYLBDAG, NDRYLBDAR, NDRYLBDAS, X0DEPG, X1DEPG, XCOLEXIG, XCOLEXSG, XCOLIG, XCOLSG, XDRYINTP1G, & @@ -106,16 +107,16 @@ REAL, DIMENSION(size(PRHODREF),7) :: ZZW1 ! Work arrays END WHERE IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(PTHS(:),MASK=OMICRO(:,:,:),FIELD=PTHS3D)*PRHODJ3D(:,:,:), & - 4,'CFRZ_BU_RTH') + NBUDGET_TH,'CFRZ_BU_RTH') IF (LBUDGET_RR) CALL BUDGET ( & UNPACK(PRRS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 8,'CFRZ_BU_RRR') + NBUDGET_RR,'CFRZ_BU_RRR') IF (LBUDGET_RI) CALL BUDGET ( & UNPACK(PRIS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 9,'CFRZ_BU_RRI') + NBUDGET_RI,'CFRZ_BU_RRI') IF (LBUDGET_RG) CALL BUDGET ( & UNPACK(PRGS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 11,'CFRZ_BU_RRG') + NBUDGET_RG,'CFRZ_BU_RRG') ! !* 6.2 compute the Dry growth case ! @@ -346,26 +347,26 @@ REAL, DIMENSION(size(PRHODREF),7) :: ZZW1 ! Work arrays END IF IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(PTHS(:),MASK=OMICRO(:,:,:),FIELD=PTHS3D)*PRHODJ3D(:,:,:), & - 4,'WETG_BU_RTH') + NBUDGET_TH,'WETG_BU_RTH') IF (LBUDGET_RC) CALL BUDGET ( & UNPACK(PRCS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 7,'WETG_BU_RRC') + NBUDGET_RC,'WETG_BU_RRC') IF (LBUDGET_RR) CALL BUDGET ( & UNPACK(PRRS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 8,'WETG_BU_RRR') + NBUDGET_RR,'WETG_BU_RRR') IF (LBUDGET_RI) CALL BUDGET ( & UNPACK(PRIS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 9,'WETG_BU_RRI') + NBUDGET_RI,'WETG_BU_RRI') IF (LBUDGET_RS) CALL BUDGET ( & UNPACK(PRSS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 10,'WETG_BU_RRS') + NBUDGET_RS,'WETG_BU_RRS') IF (LBUDGET_RG) CALL BUDGET ( & UNPACK(PRGS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 11,'WETG_BU_RRG') + NBUDGET_RG,'WETG_BU_RRG') IF ( KRR == 7 ) THEN - IF (LBUDGET_RH) CALL BUDGET ( & + IF (LBUDGET_RH) CALL BUDGET ( & UNPACK(PRHS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 12,'WETG_BU_RRH') + NBUDGET_RH,'WETG_BU_RRH') END IF ! @@ -382,22 +383,22 @@ REAL, DIMENSION(size(PRHODREF),7) :: ZZW1 ! Work arrays END WHERE IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(PTHS(:),MASK=OMICRO(:,:,:),FIELD=PTHS3D)*PRHODJ3D(:,:,:), & - 4,'DRYG_BU_RTH') + NBUDGET_TH,'DRYG_BU_RTH') IF (LBUDGET_RC) CALL BUDGET ( & UNPACK(PRCS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 7,'DRYG_BU_RRC') + NBUDGET_RC,'DRYG_BU_RRC') IF (LBUDGET_RR) CALL BUDGET ( & UNPACK(PRRS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 8,'DRYG_BU_RRR') + NBUDGET_RR,'DRYG_BU_RRR') IF (LBUDGET_RI) CALL BUDGET ( & UNPACK(PRIS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 9,'DRYG_BU_RRI') + NBUDGET_RI,'DRYG_BU_RRI') IF (LBUDGET_RS) CALL BUDGET ( & UNPACK(PRSS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 10,'DRYG_BU_RRS') + NBUDGET_RS,'DRYG_BU_RRS') IF (LBUDGET_RG) CALL BUDGET ( & UNPACK(PRGS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 11,'DRYG_BU_RRG') + NBUDGET_RG,'DRYG_BU_RRG') ! ! WHERE ( PZT(:) > XTT ) ! RSWETG case only ! PRSS(:) = PRSS(:) - ZZW1(:,6) @@ -426,13 +427,13 @@ REAL, DIMENSION(size(PRHODREF),7) :: ZZW1 ! Work arrays END WHERE IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(PTHS(:),MASK=OMICRO(:,:,:),FIELD=PTHS3D)*PRHODJ3D(:,:,:), & - 4,'GMLT_BU_RTH') + NBUDGET_TH,'GMLT_BU_RTH') IF (LBUDGET_RR) CALL BUDGET ( & UNPACK(PRRS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 8,'GMLT_BU_RRR') + NBUDGET_RR,'GMLT_BU_RRR') IF (LBUDGET_RG) CALL BUDGET ( & UNPACK(PRGS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 11,'GMLT_BU_RRG') + NBUDGET_RG,'GMLT_BU_RRG') ! END SUBROUTINE RAIN_ICE_FAST_RG diff --git a/src/MNH/rain_ice_fast_rh.f90 b/src/MNH/rain_ice_fast_rh.f90 index cedf7ceb49ac1a4c725839c600fd18d0fb74e4ce..5b83463e8c0f44180a8d9d0272ff717e6ae81647 100644 --- a/src/MNH/rain_ice_fast_rh.f90 +++ b/src/MNH/rain_ice_fast_rh.f90 @@ -26,7 +26,8 @@ SUBROUTINE RAIN_ICE_FAST_RH(OMICRO, PRHODREF, PRVT, PRCT, PRIT, PRST, PRGT, PRHT !* 0. DECLARATIONS ! ------------ ! -use MODD_BUDGET, only: LBUDGET_RC, LBUDGET_RG, LBUDGET_RH, LBUDGET_RI, LBUDGET_RR, LBUDGET_RS, LBUDGET_TH +use MODD_BUDGET, only: LBUDGET_TH, LBUDGET_RC, LBUDGET_RR, LBUDGET_RI, LBUDGET_RS, LBUDGET_RG, LBUDGET_RH, & + NBUDGET_TH, NBUDGET_RC, NBUDGET_RR, NBUDGET_RI, NBUDGET_RS, NBUDGET_RG, NBUDGET_RH use MODD_CST, only: XCI, XCL, XCPV, XESTT, XLMTT, XLVTT, XMD, XMV, XRV, XTT use MODD_RAIN_ICE_DESCR, only: XBG, XBS, XCEXVT, XCXG, XCXH, XCXS, XDH, XLBEXH, XLBH, XRTMIN use MODD_RAIN_ICE_PARAM, only: NWETLBDAG, NWETLBDAH, NWETLBDAS, X0DEPH, X1DEPH, & @@ -302,25 +303,25 @@ REAL, DIMENSION(size(PRHODREF),6) :: ZZW1 ! Work arrays END IF IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(PTHS(:),MASK=OMICRO(:,:,:),FIELD=PTHS3D)*PRHODJ3D(:,:,:),& - 4,'WETH_BU_RTH') + NBUDGET_TH,'WETH_BU_RTH') IF (LBUDGET_RC) CALL BUDGET ( & UNPACK(PRCS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 7,'WETH_BU_RRC') + NBUDGET_RC,'WETH_BU_RRC') IF (LBUDGET_RR) CALL BUDGET ( & UNPACK(PRRS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 8,'WETH_BU_RRR') + NBUDGET_RR,'WETH_BU_RRR') IF (LBUDGET_RI) CALL BUDGET ( & UNPACK(PRIS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 9,'WETH_BU_RRI') + NBUDGET_RI,'WETH_BU_RRI') IF (LBUDGET_RS) CALL BUDGET ( & UNPACK(PRSS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 10,'WETH_BU_RRS') + NBUDGET_RS,'WETH_BU_RRS') IF (LBUDGET_RG) CALL BUDGET ( & UNPACK(PRGS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 11,'WETH_BU_RRG') + NBUDGET_RG,'WETH_BU_RRG') IF (LBUDGET_RH) CALL BUDGET ( & UNPACK(PRHS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 12,'WETH_BU_RRH') + NBUDGET_RH,'WETH_BU_RRH') ! ! ! ici LRECONVH et un flag pour autoriser une reconversion partielle de @@ -377,13 +378,13 @@ REAL, DIMENSION(size(PRHODREF),6) :: ZZW1 ! Work arrays IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(PTHS(:),MASK=OMICRO(:,:,:),FIELD=PTHS3D)*PRHODJ3D(:,:,:),& - 4,'HMLT_BU_RTH') + NBUDGET_TH,'HMLT_BU_RTH') IF (LBUDGET_RR) CALL BUDGET ( & UNPACK(PRRS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 8,'HMLT_BU_RRR') + NBUDGET_RR,'HMLT_BU_RRR') IF (LBUDGET_RH) CALL BUDGET ( & UNPACK(PRHS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 12,'HMLT_BU_RRH') + NBUDGET_RH,'HMLT_BU_RRH') ! END SUBROUTINE RAIN_ICE_FAST_RH diff --git a/src/MNH/rain_ice_fast_ri.f90 b/src/MNH/rain_ice_fast_ri.f90 index 782f79c9eaffbbb699c155fbb85e0872d27e23c7..67b9c233147989511a5042aa1bdd7f918016d80c 100644 --- a/src/MNH/rain_ice_fast_ri.f90 +++ b/src/MNH/rain_ice_fast_ri.f90 @@ -23,7 +23,8 @@ SUBROUTINE RAIN_ICE_FAST_RI(OMICRO, PRHODREF, PRIT, PRHODJ, PZT, PSSI, PLSFACT, !* 0. DECLARATIONS ! ------------ ! -use MODD_BUDGET, only: LBUDGET_RC, LBUDGET_RI, LBUDGET_TH +use MODD_BUDGET, only: LBUDGET_TH, LBUDGET_RC, LBUDGET_RI, & + NBUDGET_TH, NBUDGET_RC, NBUDGET_RI use MODD_CST, only: XTT use MODD_RAIN_ICE_DESCR, only: XDI, XLBEXI, XLBI, XRTMIN use MODD_RAIN_ICE_PARAM, only: X0DEPI, X2DEPI @@ -66,13 +67,13 @@ REAL, DIMENSION(size(PRHODREF)) :: ZZW ! Work array END WHERE IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(PTHS(:),MASK=OMICRO(:,:,:),FIELD=PTHS3D)*PRHODJ3D(:,:,:), & - 4,'IMLT_BU_RTH') + NBUDGET_TH,'IMLT_BU_RTH') IF (LBUDGET_RC) CALL BUDGET ( & UNPACK(PRCS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 7,'IMLT_BU_RRC') + NBUDGET_RC,'IMLT_BU_RRC') IF (LBUDGET_RI) CALL BUDGET ( & UNPACK(PRIS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 9,'IMLT_BU_RRI') + NBUDGET_RI,'IMLT_BU_RRI') ! !* 7.2 Bergeron-Findeisen effect: RCBERI ! @@ -86,13 +87,13 @@ REAL, DIMENSION(size(PRHODREF)) :: ZZW ! Work array END WHERE IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(PTHS(:),MASK=OMICRO(:,:,:),FIELD=PTHS3D)*PRHODJ3D(:,:,:), & - 4,'BERFI_BU_RTH') + NBUDGET_TH,'BERFI_BU_RTH') IF (LBUDGET_RC) CALL BUDGET ( & UNPACK(PRCS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 7,'BERFI_BU_RRC') + NBUDGET_RC,'BERFI_BU_RRC') IF (LBUDGET_RI) CALL BUDGET ( & UNPACK(PRIS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 9,'BERFI_BU_RRI') + NBUDGET_RI,'BERFI_BU_RRI') ! END SUBROUTINE RAIN_ICE_FAST_RI diff --git a/src/MNH/rain_ice_fast_rs.f90 b/src/MNH/rain_ice_fast_rs.f90 index 5f5f9713eba6e28af53732ca458c168ad098f5fb..49d7cec95fa059d58a00b62f6161b822c9f941a5 100644 --- a/src/MNH/rain_ice_fast_rs.f90 +++ b/src/MNH/rain_ice_fast_rs.f90 @@ -26,7 +26,8 @@ SUBROUTINE RAIN_ICE_FAST_RS(PTSTEP, OMICRO, PRHODREF, PRVT, PRCT, PRRT, PRST, PR !* 0. DECLARATIONS ! ------------ ! -use MODD_BUDGET, only: LBUDGET_RC, LBUDGET_RG, LBUDGET_RR, LBUDGET_RS, LBUDGET_TH +use MODD_BUDGET, only: LBUDGET_TH, LBUDGET_RC, LBUDGET_RR, LBUDGET_RS, LBUDGET_RG, & + NBUDGET_TH, NBUDGET_RC, NBUDGET_RR, NBUDGET_RS, NBUDGET_RG use MODD_CST, only: XCL, XCPV, XESTT, XLMTT, XLVTT, XMD, XMV, XRV, XTT use MODD_RAIN_ICE_DESCR, only: XBS, XCEXVT, XCXS, XRTMIN use MODD_RAIN_ICE_PARAM, only: NACCLBDAR, NACCLBDAS, NGAMINC, X0DEPS, X1DEPS, XACCINTP1R, XACCINTP1S, XACCINTP2R, XACCINTP2S, & @@ -169,16 +170,16 @@ REAL, DIMENSION(:), ALLOCATABLE :: ZZW1, ZZW2, ZZW3, ZZW4 ! Work arrays END IF IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(PTHS(:),MASK=OMICRO(:,:,:),FIELD=PTHS3D)*PRHODJ3D(:,:,:), & - 4,'RIM_BU_RTH') + NBUDGET_TH,'RIM_BU_RTH') IF (LBUDGET_RC) CALL BUDGET ( & UNPACK(PRCS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 7,'RIM_BU_RRC') + NBUDGET_RC,'RIM_BU_RRC') IF (LBUDGET_RS) CALL BUDGET ( & UNPACK(PRSS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 10,'RIM_BU_RRS') + NBUDGET_RS,'RIM_BU_RRS') IF (LBUDGET_RG) CALL BUDGET ( & UNPACK(PRGS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 11,'RIM_BU_RRG') + NBUDGET_RG,'RIM_BU_RRG') ! !* 5.2 rain accretion onto the aggregates ! @@ -312,16 +313,16 @@ REAL, DIMENSION(:), ALLOCATABLE :: ZZW1, ZZW2, ZZW3, ZZW4 ! Work arrays END IF IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(PTHS(:),MASK=OMICRO(:,:,:),FIELD=PTHS3D)*PRHODJ3D(:,:,:), & - 4,'ACC_BU_RTH') + NBUDGET_TH,'ACC_BU_RTH') IF (LBUDGET_RR) CALL BUDGET ( & UNPACK(PRRS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 8,'ACC_BU_RRR') + NBUDGET_RR,'ACC_BU_RRR') IF (LBUDGET_RS) CALL BUDGET ( & UNPACK(PRSS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 10,'ACC_BU_RRS') + NBUDGET_RS,'ACC_BU_RRS') IF (LBUDGET_RG) CALL BUDGET ( & UNPACK(PRGS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 11,'ACC_BU_RRG') + NBUDGET_RG,'ACC_BU_RRG') ! !* 5.3 Conversion-Melting of the aggregates ! @@ -346,10 +347,10 @@ REAL, DIMENSION(:), ALLOCATABLE :: ZZW1, ZZW2, ZZW3, ZZW4 ! Work arrays END WHERE IF (LBUDGET_RS) CALL BUDGET ( & UNPACK(PRSS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 10,'CMEL_BU_RRS') + NBUDGET_RS,'CMEL_BU_RRS') IF (LBUDGET_RG) CALL BUDGET ( & UNPACK(PRGS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 11,'CMEL_BU_RRG') + NBUDGET_RG,'CMEL_BU_RRG') ! END SUBROUTINE RAIN_ICE_FAST_RS diff --git a/src/MNH/rain_ice_nucleation.f90 b/src/MNH/rain_ice_nucleation.f90 index 959c7bb0ddc7511b04aec3aedc3ed7e664fac883..bcc4e79fded2e35f938f375001cffe45f89485b1 100644 --- a/src/MNH/rain_ice_nucleation.f90 +++ b/src/MNH/rain_ice_nucleation.f90 @@ -25,7 +25,8 @@ SUBROUTINE RAIN_ICE_NUCLEATION(KIB, KIE, KJB, KJE, KKTB, KKTE,KRR,PTSTEP,& !* 0. DECLARATIONS ! ------------ ! -use MODD_BUDGET, only: LBUDGET_RI, LBUDGET_RV, LBUDGET_TH +use MODD_BUDGET, only: LBUDGET_RI, LBUDGET_RV, LBUDGET_TH, & + NBUDGET_TH, NBUDGET_RV, NBUDGET_RI use MODD_CST, only: XALPI, XALPW, XBETAI, XBETAW, XCI, XCL, XCPD, XCPV, XGAMI, XGAMW, & XLSTT, XMD, XMV, XP00, XRD, XTT use MODD_RAIN_ICE_PARAM, only: XALPHA1, XALPHA2, XBETA1, XBETA2, XMNU0, XNU10, XNU20 @@ -166,9 +167,9 @@ END IF ! !* 3.1.3 budget storage ! -IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HENU_BU_RTH') -IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),6,'HENU_BU_RRV') -IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HENU_BU_RRI') +IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'HENU_BU_RTH') +IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RV,'HENU_BU_RRV') +IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RI,'HENU_BU_RRI') ! END SUBROUTINE RAIN_ICE_NUCLEATION diff --git a/src/MNH/rain_ice_red.f90 b/src/MNH/rain_ice_red.f90 index 321d59013269728a3a969e9a78fea2f9899c07e9..22b85cbcc5d7dd2e174969327ef95dc7320be80c 100644 --- a/src/MNH/rain_ice_red.f90 +++ b/src/MNH/rain_ice_red.f90 @@ -246,7 +246,9 @@ END MODULE MODI_RAIN_ICE_RED !* 0. DECLARATIONS ! ------------ ! -USE MODD_BUDGET, ONLY: LBU_ENABLE,LBUDGET_RC,LBUDGET_RR,LBUDGET_RI,LBUDGET_RS,LBUDGET_RG,LBUDGET_RH,LBUDGET_RV,LBUDGET_TH +USE MODD_BUDGET, ONLY: LBU_ENABLE, & + LBUDGET_TH, LBUDGET_RV, LBUDGET_RC, LBUDGET_RR, LBUDGET_RI, LBUDGET_RS, LBUDGET_RG, LBUDGET_RH, & + NBUDGET_TH, NBUDGET_RV, NBUDGET_RC, NBUDGET_RR, NBUDGET_RI, NBUDGET_RS, NBUDGET_RG, NBUDGET_RH USE MODD_CST, ONLY: XCI,XCL,XCPD,XCPV,XLSTT,XLVTT,XTT USE MODD_PARAMETERS, ONLY: JPVEXT,XUNDEF USE MODD_PARAM_ICE, ONLY: CSUBG_PR_PDF,CSUBG_RC_RR_ACCR,CSUBG_RR_EVAP,LDEPOSC,LFEEDBACKT,LSEDIM_AFTER, & @@ -588,15 +590,15 @@ IF(.NOT. LSEDIM_AFTER) THEN !* 2.2 budget storage ! IF (LBUDGET_RC .AND. OSEDIC) & - CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'SEDI_BU_RRC') - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'SEDI_BU_RRR') - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'SEDI_BU_RRI') - IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:), 10, 'SEDI_BU_RRS') - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:), 11, 'SEDI_BU_RRG') + CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'SEDI_BU_RRC') + IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'SEDI_BU_RRR') + IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'SEDI_BU_RRI') + IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS, 'SEDI_BU_RRS') + IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG, 'SEDI_BU_RRG') IF ( KRR == 7 .AND. LBUDGET_RH) & - CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:), 12, 'SEDI_BU_RRH') + CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RH, 'SEDI_BU_RRH') IF ( LBUDGET_RC .AND. LDEPOSC ) & - CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'DEPO_BU_RRC') + CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC,'DEPO_BU_RRC') ENDIF ! !------------------------------------------------------------------------------- @@ -1124,9 +1126,9 @@ IF(LBU_ENABLE) THEN PRIS(:,:,:) = PRIS(:,:,:) + ZW(:,:,:) PRVS(:,:,:) = PRVS(:,:,:) - ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*ZZ_LSFACT(:,:,:) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'HENU_BU_RTH') - IF (LBUDGET_RV) CALL BUDGET(PRVS(:,:,:)*PRHODJ(:,:,:), 6, 'HENU_BU_RRV') - IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'HENU_BU_RRI') + IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'HENU_BU_RTH') + IF (LBUDGET_RV) CALL BUDGET(PRVS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RV, 'HENU_BU_RRV') + IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'HENU_BU_RRI') ZW(:,:,:) = 0. DO JL=1,IMICRO @@ -1135,9 +1137,9 @@ IF(LBU_ENABLE) THEN PRIS(:,:,:) = PRIS(:,:,:) + ZW(:,:,:) PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'HON_BU_RTH') - IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'HON_BU_RRC') - IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'HON_BU_RRI') + IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'HON_BU_RTH') + IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'HON_BU_RRC') + IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'HON_BU_RRI') ZW(:,:,:) = 0. DO JL=1,IMICRO @@ -1146,9 +1148,9 @@ IF(LBU_ENABLE) THEN PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'SFR_BU_RTH') - IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'SFR_BU_RRR') - IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'SFR_BU_RRG') + IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'SFR_BU_RTH') + IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'SFR_BU_RRR') + IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG,'SFR_BU_RRG') ZW(:,:,:) = 0. DO JL=1,IMICRO @@ -1157,9 +1159,9 @@ IF(LBU_ENABLE) THEN PRSS(:,:,:) = PRSS(:,:,:) + ZW(:,:,:) PRVS(:,:,:) = PRVS(:,:,:) - ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*ZZ_LSFACT(:,:,:) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'DEPS_BU_RTH') - IF (LBUDGET_RV) CALL BUDGET(PRVS(:,:,:)*PRHODJ(:,:,:), 6, 'DEPS_BU_RRV') - IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'DEPS_BU_RRS') + IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'DEPS_BU_RTH') + IF (LBUDGET_RV) CALL BUDGET(PRVS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RV, 'DEPS_BU_RRV') + IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS,'DEPS_BU_RRS') ZW(:,:,:) = 0. DO JL=1,IMICRO @@ -1167,8 +1169,8 @@ IF(LBU_ENABLE) THEN END DO PRSS(:,:,:) = PRSS(:,:,:) + ZW(:,:,:) PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) - IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'AGGS_BU_RRI') - IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'AGGS_BU_RRS') + IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'AGGS_BU_RRI') + IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS,'AGGS_BU_RRS') ZW(:,:,:) = 0. DO JL=1,IMICRO @@ -1176,8 +1178,8 @@ IF(LBU_ENABLE) THEN END DO PRSS(:,:,:) = PRSS(:,:,:) + ZW(:,:,:) PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) - IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'AUTS_BU_RRI') - IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'AUTS_BU_RRS') + IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'AUTS_BU_RRI') + IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS,'AUTS_BU_RRS') ZW(:,:,:) = 0. DO JL=1,IMICRO @@ -1186,9 +1188,9 @@ IF(LBU_ENABLE) THEN PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) PRVS(:,:,:) = PRVS(:,:,:) - ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*ZZ_LSFACT(:,:,:) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'DEPG_BU_RTH') - IF (LBUDGET_RV) CALL BUDGET(PRVS(:,:,:)*PRHODJ(:,:,:), 6, 'DEPG_BU_RRV') - IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'DEPG_BU_RRG') + IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'DEPG_BU_RTH') + IF (LBUDGET_RV) CALL BUDGET(PRVS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RV, 'DEPG_BU_RRV') + IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG,'DEPG_BU_RRG') IF(OWARM) THEN ZW(:,:,:) = 0. @@ -1197,8 +1199,8 @@ IF(LBU_ENABLE) THEN END DO PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) PRRS(:,:,:) = PRRS(:,:,:) + ZW(:,:,:) - IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'AUTO_BU_RRC') - IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'AUTO_BU_RRR') + IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'AUTO_BU_RRC') + IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'AUTO_BU_RRR') ZW(:,:,:) = 0. DO JL=1,IMICRO @@ -1206,8 +1208,8 @@ IF(LBU_ENABLE) THEN END DO PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) PRRS(:,:,:) = PRRS(:,:,:) + ZW(:,:,:) - IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'ACCR_BU_RRC') - IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'ACCR_BU_RRR') + IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'ACCR_BU_RRC') + IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'ACCR_BU_RRR') ZW(:,:,:) = 0. DO JL=1,IMICRO @@ -1216,9 +1218,9 @@ IF(LBU_ENABLE) THEN PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:) PRVS(:,:,:) = PRVS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) - ZW(:,:,:)*ZZ_LVFACT(:,:,:) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'REVA_BU_RTH') - IF (LBUDGET_RV) CALL BUDGET(PRVS(:,:,:)*PRHODJ(:,:,:), 6, 'REVA_BU_RRV') - IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'REVA_BU_RRR') + IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'REVA_BU_RTH') + IF (LBUDGET_RV) CALL BUDGET(PRVS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RV, 'REVA_BU_RRV') + IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'REVA_BU_RRR') ENDIF ZW(:,:,:) = 0. @@ -1241,10 +1243,10 @@ IF(LBU_ENABLE) THEN END DO PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) PRSS(:,:,:) = PRSS(:,:,:) - ZW(:,:,:) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'RIM_BU_RTH') - IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'RIM_BU_RRC') - IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'RIM_BU_RRS') - IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'RIM_BU_RRG') + IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'RIM_BU_RTH') + IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'RIM_BU_RRC') + IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS,'RIM_BU_RRS') + IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG,'RIM_BU_RRG') ZW(:,:,:) = 0. DO JL=1,IMICRO @@ -1266,10 +1268,10 @@ IF(LBU_ENABLE) THEN END DO PRSS(:,:,:) = PRSS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'ACC_BU_RTH') - IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'ACC_BU_RRR') - IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'ACC_BU_RRS') - IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'ACC_BU_RRG') + IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'ACC_BU_RTH') + IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'ACC_BU_RRR') + IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS,'ACC_BU_RRS') + IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG,'ACC_BU_RRG') ZW(:,:,:) = 0. DO JL=1,IMICRO @@ -1283,10 +1285,10 @@ IF(LBU_ENABLE) THEN END DO PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) PRRS(:,:,:) = PRRS(:,:,:) + ZW(:,:,:) - IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'CMEL_BU_RRS') - IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'CMEL_BU_RRG') - IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'CMEL_BU_RRC') - IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'CMEL_BU_RRR') + IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS,'CMEL_BU_RRS') + IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG,'CMEL_BU_RRG') + IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'CMEL_BU_RRC') + IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'CMEL_BU_RRR') ZW(:,:,:) = 0. DO JL=1,IMICRO @@ -1307,10 +1309,10 @@ IF(LBU_ENABLE) THEN END DO PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) PRRS(:,:,:) = PRRS(:,:,:) + ZW(:,:,:) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'CFRZ_BU_RTH') - IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'CFRZ_BU_RRR') - IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'CFRZ_BU_RRI') - IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'CFRZ_BU_RRG') + IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'CFRZ_BU_RTH') + IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'CFRZ_BU_RRR') + IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'CFRZ_BU_RRI') + IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG,'CFRZ_BU_RRG') ZW(:,:,:) = 0. DO JL=1,IMICRO @@ -1338,12 +1340,12 @@ IF(LBU_ENABLE) THEN END DO PRSS(:,:,:) = PRSS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'WETG_BU_RTH') - IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'WETG_BU_RRC') - IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'WETG_BU_RRR') - IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'WETG_BU_RRI') - IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'WETG_BU_RRS') - IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'WETG_BU_RRG') + IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'WETG_BU_RTH') + IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'WETG_BU_RRC') + IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'WETG_BU_RRR') + IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'WETG_BU_RRI') + IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS,'WETG_BU_RRS') + IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG,'WETG_BU_RRG') IF(KRR==7) THEN ZW(:,:,:) = 0. @@ -1352,8 +1354,8 @@ IF(LBU_ENABLE) THEN END DO PRGS(:,:,:) = PRGS(:,:,:) - ZW(:,:,:) PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) - IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'GHCV_BU_RRG') - IF (LBUDGET_RH) CALL BUDGET(PRHS(:,:,:)*PRHODJ(:,:,:), 12,'GHCV_BU_RRH') + IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG,'GHCV_BU_RRG') + IF (LBUDGET_RH) CALL BUDGET(PRHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RH,'GHCV_BU_RRH') END IF ZW(:,:,:) = 0. @@ -1382,12 +1384,12 @@ IF(LBU_ENABLE) THEN END DO PRSS(:,:,:) = PRSS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'DRYG_BU_RTH') - IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'DRYG_BU_RRC') - IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'DRYG_BU_RRR') - IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'DRYG_BU_RRI') - IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'DRYG_BU_RRS') - IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'DRYG_BU_RRG') + IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'DRYG_BU_RTH') + IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'DRYG_BU_RRC') + IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'DRYG_BU_RRR') + IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'DRYG_BU_RRI') + IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS,'DRYG_BU_RRS') + IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG,'DRYG_BU_RRG') ZW(:,:,:) = 0. DO JL=1,IMICRO @@ -1396,9 +1398,9 @@ IF(LBU_ENABLE) THEN PRRS(:,:,:) = PRRS(:,:,:) + ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) - ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) - ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'GMLT_BU_RTH') - IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'GMLT_BU_RRR') - IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'GMLT_BU_RRG') + IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'GMLT_BU_RTH') + IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'GMLT_BU_RRR') + IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG,'GMLT_BU_RRG') IF(KRR==7) THEN ZW(:,:,:) = 0. @@ -1433,12 +1435,12 @@ IF(LBU_ENABLE) THEN END DO PRGS(:,:,:) = PRGS(:,:,:) - ZW(:,:,:) PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'WETH_BU_RTH') - IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'WETH_BU_RRC') - IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'WETH_BU_RRR') - IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'WETH_BU_RRI') - IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'WETH_BU_RRS') - IF (LBUDGET_RH) CALL BUDGET(PRHS(:,:,:)*PRHODJ(:,:,:), 12,'WETH_BU_RRH') + IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'WETH_BU_RTH') + IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'WETH_BU_RRC') + IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'WETH_BU_RRR') + IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'WETH_BU_RRI') + IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS,'WETH_BU_RRS') + IF (LBUDGET_RH) CALL BUDGET(PRHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RH,'WETH_BU_RRH') ZW(:,:,:) = 0. DO JL=1,IMICRO @@ -1446,8 +1448,8 @@ IF(LBU_ENABLE) THEN END DO PRGS(:,:,:) = PRGS(:,:,:) - ZW(:,:,:) PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) - IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'HGCV_BU_RRG') - IF (LBUDGET_RH) CALL BUDGET(PRHS(:,:,:)*PRHODJ(:,:,:), 12,'HGCV_BU_RRH') + IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG,'HGCV_BU_RRG') + IF (LBUDGET_RH) CALL BUDGET(PRHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RH,'HGCV_BU_RRH') ZW(:,:,:) = 0. DO JL=1,IMICRO @@ -1487,13 +1489,13 @@ IF(LBU_ENABLE) THEN END DO PRHS(:,:,:) = PRHS(:,:,:) - ZW(:,:,:) PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'DRYH_BU_RTH') - IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'DRYH_BU_RRC') - IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'DRYH_BU_RRR') - IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'DRYH_BU_RRI') - IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'DRYH_BU_RRS') - IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'DRYH_BU_RRG') - IF (LBUDGET_RH) CALL BUDGET(PRHS(:,:,:)*PRHODJ(:,:,:), 12,'DRYH_BU_RRH') + IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'DRYH_BU_RTH') + IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'DRYH_BU_RRC') + IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'DRYH_BU_RRR') + IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'DRYH_BU_RRI') + IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS,'DRYH_BU_RRS') + IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG,'DRYH_BU_RRG') + IF (LBUDGET_RH) CALL BUDGET(PRHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RH,'DRYH_BU_RRH') ZW(:,:,:) = 0. DO JL=1,IMICRO @@ -1502,9 +1504,9 @@ IF(LBU_ENABLE) THEN PRRS(:,:,:) = PRRS(:,:,:) + ZW(:,:,:) PRHS(:,:,:) = PRHS(:,:,:) - ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) - ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'HMLT_BU_RTH') - IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'HMLT_BU_RRR') - IF (LBUDGET_RH) CALL BUDGET(PRHS(:,:,:)*PRHODJ(:,:,:), 12,'HMLT_BU_RRH') + IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'HMLT_BU_RTH') + IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'HMLT_BU_RRR') + IF (LBUDGET_RH) CALL BUDGET(PRHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RH,'HMLT_BU_RRH') ENDIF ZW(:,:,:) = 0. @@ -1514,9 +1516,9 @@ IF(LBU_ENABLE) THEN PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) PRCS(:,:,:) = PRCS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) - ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'IMLT_BU_RTH') - IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'IMLT_BU_RRC') - IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'IMLT_BU_RRI') + IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'IMLT_BU_RTH') + IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'IMLT_BU_RRC') + IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'IMLT_BU_RRI') ZW(:,:,:) = 0. DO JL=1,IMICRO @@ -1525,9 +1527,9 @@ IF(LBU_ENABLE) THEN PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) PRIS(:,:,:) = PRIS(:,:,:) + ZW(:,:,:) PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'BERFI_BU_RTH') - IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'BERFI_BU_RRC') - IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'BERFI_BU_RRI') + IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'BERFI_BU_RTH') + IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'BERFI_BU_RRC') + IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'BERFI_BU_RRI') ENDIF ! !*** 7.3 Final tendencies @@ -1543,15 +1545,15 @@ IF (KRR==7) THEN ENDIF PTHS(:,:,:) = ZW_THS(:,:,:) IF(LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'CORR_BU_RTH') - IF (LBUDGET_RV) CALL BUDGET(PRVS(:,:,:)*PRHODJ(:,:,:), 6, 'CORR_BU_RRV') - IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'CORR_BU_RRC') - IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'CORR_BU_RRR') - IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'CORR_BU_RRI') - IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'CORR_BU_RRS') - IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'CORR_BU_RRG') + IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_TH, 'CORR_BU_RTH') + IF (LBUDGET_RV) CALL BUDGET(PRVS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RV, 'CORR_BU_RRV') + IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'CORR_BU_RRC') + IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'CORR_BU_RRR') + IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'CORR_BU_RRI') + IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS,'CORR_BU_RRS') + IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG,'CORR_BU_RRG') IF (KRR==7) THEN - IF (LBUDGET_RH) CALL BUDGET(PRHS(:,:,:)*PRHODJ(:,:,:), 12,'CORR_BU_RRH') + IF (LBUDGET_RH) CALL BUDGET(PRHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RH,'CORR_BU_RRH') ENDIF ENDIF ! @@ -1627,13 +1629,13 @@ IF(LSEDIM_AFTER) THEN !* 8.2 budget storage ! IF (LBUDGET_RC .AND. OSEDIC) & - CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'SEDI_BU_RRC') - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'SEDI_BU_RRR') - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'SEDI_BU_RRI') - IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:), 10, 'SEDI_BU_RRS') - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:), 11, 'SEDI_BU_RRG') + CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'SEDI_BU_RRC') + IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'SEDI_BU_RRR') + IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'SEDI_BU_RRI') + IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS, 'SEDI_BU_RRS') + IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG, 'SEDI_BU_RRG') IF ( KRR == 7 .AND. LBUDGET_RH) & - CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:), 12, 'SEDI_BU_RRH') + CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RH, 'SEDI_BU_RRH') ! !sedimentation of rain fraction CALL ICE4_RAINFR_VERT(IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKT, KKL, PRAINFR, PRRS(:,:,:)*PTSTEP) diff --git a/src/MNH/rain_ice_sedimentation_split.f90 b/src/MNH/rain_ice_sedimentation_split.f90 index 3007adf386b93b66948b6452297b6ce4a1d29934..349004ee8bcbd504b6bb0d1410061d49f5352278 100644 --- a/src/MNH/rain_ice_sedimentation_split.f90 +++ b/src/MNH/rain_ice_sedimentation_split.f90 @@ -26,7 +26,8 @@ SUBROUTINE RAIN_ICE_SEDIMENTATION_SPLIT(KIB, KIE, KJB, KJE, KKB, KKE, KKTB, KKTE !* 0. DECLARATIONS ! ------------ ! -use MODD_BUDGET, only: LBUDGET_RC, LBUDGET_RG, LBUDGET_RH, LBUDGET_RI, LBUDGET_RR, LBUDGET_RS +use MODD_BUDGET, only: LBUDGET_RC, LBUDGET_RR, LBUDGET_RI, LBUDGET_RS, LBUDGET_RG, LBUDGET_RH, & + NBUDGET_RC, NBUDGET_RR, NBUDGET_RI, NBUDGET_RS, NBUDGET_RG, NBUDGET_RH use MODD_CST, only: XCPD, XP00, XRD, XRHOLW use MODD_PARAM_ICE, only: XVDEPOSC use MODD_RAIN_ICE_DESCR, only: XCC, XCONC_LAND, xconc_sea, xconc_urban, XDC, XCEXVT, & @@ -582,13 +583,13 @@ IF (KRR == 7 .AND. (ILENALLOCH .GT. 0 )) DEALLOCATE(ZRHODREFH,ZRHS,ILISTH) !* 2.3 budget storage ! IF (LBUDGET_RC .AND. OSEDIC) & - CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'SEDI_BU_RRC') -IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'SEDI_BU_RRR') -IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9 ,'SEDI_BU_RRI') -IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'SEDI_BU_RRS') -IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'SEDI_BU_RRG') + CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC, 'SEDI_BU_RRC') +IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RR, 'SEDI_BU_RRR') +IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RI, 'SEDI_BU_RRI') +IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RS, 'SEDI_BU_RRS') +IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RG, 'SEDI_BU_RRG') IF ( KRR == 7 .AND. LBUDGET_RH) & - CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),12,'SEDI_BU_RRH') + CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RH, 'SEDI_BU_RRH') ! ! ! @@ -607,7 +608,7 @@ END IF !* 2.5 budget storage ! IF ( LBUDGET_RC .AND. ODEPOSC ) & - CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'DEPO_BU_RRC') + CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), NBUDGET_RC,'DEPO_BU_RRC') ! END SUBROUTINE RAIN_ICE_SEDIMENTATION_SPLIT diff --git a/src/MNH/rain_ice_sedimentation_stat.f90 b/src/MNH/rain_ice_sedimentation_stat.f90 index 3156ab84cf81a4df23261990ae54482257b8b646..895e2365687feb5eb637796d017c0f2b82d33729 100644 --- a/src/MNH/rain_ice_sedimentation_stat.f90 +++ b/src/MNH/rain_ice_sedimentation_stat.f90 @@ -26,7 +26,8 @@ SUBROUTINE RAIN_ICE_SEDIMENTATION_STAT( KIB, KIE, KJB, KJE, KKB, KKE, KKTB, KKTE !* 0. DECLARATIONS ! ------------ ! -use MODD_BUDGET, only: LBUDGET_RC, LBUDGET_RG, LBUDGET_RH, LBUDGET_RI, LBUDGET_RR, LBUDGET_RS +use MODD_BUDGET, only: LBUDGET_RC, LBUDGET_RR, LBUDGET_RI, LBUDGET_RS, LBUDGET_RG, LBUDGET_RH, & + NBUDGET_RC, NBUDGET_RR, NBUDGET_RI, NBUDGET_RS, NBUDGET_RG, NBUDGET_RH use MODD_CST, only: XRHOLW use MODD_PARAM_ICE, only: LDEPOSC, XVDEPOSC use MODD_RAIN_ICE_PARAM, only: XEXSEDG, XEXSEDH, XEXCSEDI, XEXSEDR, XEXSEDS, & @@ -548,13 +549,13 @@ PINPRR3D (:,:,:) = 0. !* 2.3 budget storage ! IF (LBUDGET_RC .AND. OSEDIC) & - CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'SEDI_BU_RRC') -IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'SEDI_BU_RRR') -IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9 ,'SEDI_BU_RRI') -IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'SEDI_BU_RRS') -IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'SEDI_BU_RRG') + CALL BUDGET( PRCS(:, :, : ) * PRHODJ(:, :, : ), NBUDGET_RC, 'SEDI_BU_RRC' ) +IF (LBUDGET_RR) CALL BUDGET( PRRS(:, :, : ) * PRHODJ(:, :, : ), NBUDGET_RR, 'SEDI_BU_RRR' ) +IF (LBUDGET_RI) CALL BUDGET( PRIS(:, :, : ) * PRHODJ(:, :, : ), NBUDGET_RI, 'SEDI_BU_RRI' ) +IF (LBUDGET_RS) CALL BUDGET( PRSS(:, :, : ) * PRHODJ(:, :, : ), NBUDGET_RS, 'SEDI_BU_RRS' ) +IF (LBUDGET_RG) CALL BUDGET( PRGS(:, :, : ) * PRHODJ(:, :, : ), NBUDGET_RG, 'SEDI_BU_RRG' ) IF ( KRR == 7 .AND. LBUDGET_RH) & - CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),12,'SEDI_BU_RRH') + CALL BUDGET( PRHS(:, :, : ) * PRHODJ(:, :, : ), NBUDGET_RH, 'SEDI_BU_RRH' ) ! ! !* 2.4 DROPLET DEPOSITION AT THE 1ST LEVEL ABOVE GROUND @@ -572,7 +573,7 @@ END IF !* 2.5 budget storage ! IF ( LBUDGET_RC .AND. LDEPOSC ) & - CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'DEPO_BU_RRC') + CALL BUDGET( PRCS(:, :, : ) * PRHODJ(:, :, : ), NBUDGET_RC, 'DEPO_BU_RRC' ) ! END SUBROUTINE RAIN_ICE_SEDIMENTATION_STAT diff --git a/src/MNH/rain_ice_slow.f90 b/src/MNH/rain_ice_slow.f90 index eb46ad5318796fa2e160df3f11f9714c914484c5..844d8301670c79c70714b7623e3b5d1909223b27 100644 --- a/src/MNH/rain_ice_slow.f90 +++ b/src/MNH/rain_ice_slow.f90 @@ -26,7 +26,8 @@ SUBROUTINE RAIN_ICE_SLOW(OMICRO, PINVTSTEP, PRHODREF, & !* 0. DECLARATIONS ! ------------ ! -use MODD_BUDGET, only: LBUDGET_RC, LBUDGET_RG, LBUDGET_RI, LBUDGET_RR, LBUDGET_RS, LBUDGET_RV, LBUDGET_TH +use MODD_BUDGET, only: LBUDGET_TH, LBUDGET_RV, LBUDGET_RC, LBUDGET_RR, LBUDGET_RI, LBUDGET_RS, LBUDGET_RG, & + NBUDGET_TH, NBUDGET_RV, NBUDGET_RC, NBUDGET_RR, NBUDGET_RI, NBUDGET_RS, NBUDGET_RG use MODD_CST, only: XALPI, XBETAI, XCI, XCPV, XGAMI, XLSTT, XMNH_HUGE_12_LOG, XP00, XRV, XTT use MODD_RAIN_ICE_DESCR, only: XCEXVT, XLBDAS_MAX, XLBEXG, XLBEXS, XLBG, XLBS, XRTMIN use MODD_RAIN_ICE_PARAM, only: X0DEPG, X0DEPS, X1DEPG, X1DEPS, XACRIAUTI, XALPHA3, XBCRIAUTI, XBETA3, XCOLEXIS, XCRIAUTI, & @@ -91,13 +92,13 @@ REAL, DIMENSION(size(PRHODREF)) :: ZCRIAUTI ! Snow-to-ice autoconversion thres. ! IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(PTHS(:),MASK=OMICRO(:,:,:),FIELD=PTHS3D)*PRHODJ3D(:,:,:), & - 4,'HON_BU_RTH') + NBUDGET_TH,'HON_BU_RTH') IF (LBUDGET_RC) CALL BUDGET ( & UNPACK(PRCS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 7,'HON_BU_RRC') + NBUDGET_RC,'HON_BU_RRC') IF (LBUDGET_RI) CALL BUDGET ( & UNPACK(PRIS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 9,'HON_BU_RRI') + NBUDGET_RI,'HON_BU_RRI') ! !* 3.3 compute the spontaneous freezing source: RRHONG ! @@ -111,13 +112,13 @@ REAL, DIMENSION(size(PRHODREF)) :: ZCRIAUTI ! Snow-to-ice autoconversion thres. ! IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(PTHS(:),MASK=OMICRO(:,:,:),FIELD=PTHS3D)*PRHODJ3D(:,:,:), & - 4,'SFR_BU_RTH') + NBUDGET_TH,'SFR_BU_RTH') IF (LBUDGET_RR) CALL BUDGET ( & UNPACK(PRRS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 8,'SFR_BU_RRR') + NBUDGET_RR,'SFR_BU_RRR') IF (LBUDGET_RG) CALL BUDGET ( & UNPACK(PRGS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 11,'SFR_BU_RRG') + NBUDGET_RG,'SFR_BU_RRG') ! !* 3.4 compute the deposition, aggregation and autoconversion sources ! @@ -162,13 +163,13 @@ REAL, DIMENSION(size(PRHODREF)) :: ZCRIAUTI ! Snow-to-ice autoconversion thres. END WHERE IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(PTHS(:),MASK=OMICRO(:,:,:),FIELD=PTHS3D)*PRHODJ3D(:,:,:), & - 4,'DEPS_BU_RTH') + NBUDGET_TH,'DEPS_BU_RTH') IF (LBUDGET_RV) CALL BUDGET ( & UNPACK(PRVS(:),MASK=OMICRO(:,:,:),FIELD=PRVS3D)*PRHODJ3D(:,:,:), & - 6,'DEPS_BU_RRV') + NBUDGET_RV,'DEPS_BU_RRV') IF (LBUDGET_RS) CALL BUDGET ( & UNPACK(PRSS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 10,'DEPS_BU_RRS') + NBUDGET_RS,'DEPS_BU_RRS') ! !* 3.4.4 compute the aggregation on r_s: RIAGGS ! @@ -183,10 +184,10 @@ REAL, DIMENSION(size(PRHODREF)) :: ZCRIAUTI ! Snow-to-ice autoconversion thres. END WHERE IF (LBUDGET_RI) CALL BUDGET ( & UNPACK(PRIS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 9,'AGGS_BU_RRI') + NBUDGET_RI,'AGGS_BU_RRI') IF (LBUDGET_RS) CALL BUDGET ( & UNPACK(PRSS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 10,'AGGS_BU_RRS') + NBUDGET_RS,'AGGS_BU_RRS') ! !* 3.4.5 compute the autoconversion of r_i for r_s production: RIAUTS ! @@ -201,10 +202,10 @@ REAL, DIMENSION(size(PRHODREF)) :: ZCRIAUTI ! Snow-to-ice autoconversion thres. END WHERE IF (LBUDGET_RI) CALL BUDGET ( & UNPACK(PRIS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 9,'AUTS_BU_RRI') + NBUDGET_RI,'AUTS_BU_RRI') IF (LBUDGET_RS) CALL BUDGET ( & UNPACK(PRSS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 10,'AUTS_BU_RRS') + NBUDGET_RS,'AUTS_BU_RRS') ! !* 3.4.6 compute the deposition on r_g: RVDEPG ! @@ -224,13 +225,13 @@ REAL, DIMENSION(size(PRHODREF)) :: ZCRIAUTI ! Snow-to-ice autoconversion thres. END WHERE IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(PTHS(:),MASK=OMICRO(:,:,:),FIELD=PTHS3D)*PRHODJ3D(:,:,:), & - 4,'DEPG_BU_RTH') + NBUDGET_TH,'DEPG_BU_RTH') IF (LBUDGET_RV) CALL BUDGET ( & UNPACK(PRVS(:),MASK=OMICRO(:,:,:),FIELD=PRVS3D)*PRHODJ3D(:,:,:), & - 6,'DEPG_BU_RRV') + NBUDGET_RV,'DEPG_BU_RRV') IF (LBUDGET_RG) CALL BUDGET ( & UNPACK(PRGS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 11,'DEPG_BU_RRG') + NBUDGET_RG,'DEPG_BU_RRG') ! END SUBROUTINE RAIN_ICE_SLOW diff --git a/src/MNH/rain_ice_warm.f90 b/src/MNH/rain_ice_warm.f90 index 54a8c315ce30eeab59a7a5fec15e733613710758..15f61b57067a485162324ead8a01ad9c22dacd48 100644 --- a/src/MNH/rain_ice_warm.f90 +++ b/src/MNH/rain_ice_warm.f90 @@ -25,7 +25,8 @@ SUBROUTINE RAIN_ICE_WARM(OMICRO, KMICRO, K1, K2, K3, !* 0. DECLARATIONS ! ------------ ! -use MODD_BUDGET, only: LBUDGET_RC, LBUDGET_RR, LBUDGET_RV, LBUDGET_TH +use MODD_BUDGET, only: LBUDGET_TH, LBUDGET_RV, LBUDGET_RC, LBUDGET_RR, & + NBUDGET_TH, NBUDGET_RV, NBUDGET_RC, NBUDGET_RR use MODD_CST, only: XALPW, XBETAW, XCL, XCPV, XGAMW, XLVTT, XMD, XMV, XRV, XTT use MODD_PARAM_ICE, only: CSUBG_RC_RR_ACCR, CSUBG_RR_EVAP use MODD_RAIN_ICE_DESCR, only: XCEXVT, XRTMIN @@ -99,10 +100,10 @@ REAL, DIMENSION(size(PRHODREF)) :: ZZW4 ! Work array ! IF (LBUDGET_RC) CALL BUDGET ( & UNPACK(PRCS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 7,'AUTO_BU_RRC') + NBUDGET_RC,'AUTO_BU_RRC') IF (LBUDGET_RR) CALL BUDGET ( & UNPACK(PRRS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 8,'AUTO_BU_RRR') + NBUDGET_RR,'AUTO_BU_RRR') ! !* 4.3 compute the accretion of r_c for r_r production: RCACCR ! @@ -153,10 +154,10 @@ REAL, DIMENSION(size(PRHODREF)) :: ZZW4 ! Work array IF (LBUDGET_RC) CALL BUDGET ( & UNPACK(PRCS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 7,'ACCR_BU_RRC') + NBUDGET_RC,'ACCR_BU_RRC') IF (LBUDGET_RR) CALL BUDGET ( & UNPACK(PRRS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 8,'ACCR_BU_RRR') + NBUDGET_RR,'ACCR_BU_RRR') ! !* 4.4 compute the evaporation of r_r: RREVAV ! @@ -230,13 +231,13 @@ REAL, DIMENSION(size(PRHODREF)) :: ZZW4 ! Work array IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(PTHS(:),MASK=OMICRO(:,:,:),FIELD=PTHS3D)*PRHODJ3D(:,:,:), & - 4,'REVA_BU_RTH') + NBUDGET_TH,'REVA_BU_RTH') IF (LBUDGET_RV) CALL BUDGET ( & UNPACK(PRVS(:),MASK=OMICRO(:,:,:),FIELD=PRVS3D)*PRHODJ3D(:,:,:), & - 6,'REVA_BU_RRV') + NBUDGET_RV,'REVA_BU_RRV') IF (LBUDGET_RR) CALL BUDGET ( & UNPACK(PRRS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), & - 8,'REVA_BU_RRR') + NBUDGET_RR,'REVA_BU_RRR') DO JL = 1, KMICRO PEVAP3D(K1(JL), K2(JL), K3(JL)) = ZZW( JL ) diff --git a/src/MNH/rel_forcingn.f90 b/src/MNH/rel_forcingn.f90 index e057e1223321a3a8f3f6a1748d82da97d3a72b12..e9c05ea10b1a13d97eed562531ce3e1cac1b9c59 100644 --- a/src/MNH/rel_forcingn.f90 +++ b/src/MNH/rel_forcingn.f90 @@ -249,8 +249,8 @@ END IF ! !* 3. BUDGET CALLS ! ------------ -IF (LBUDGET_TH) CALL BUDGET (PRTHS,4,'2DREL_BU_RTH') -IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),6,'2DREL_BU_RRV') +IF (LBUDGET_TH) CALL BUDGET (PRTHS,NBUDGET_TH,'2DREL_BU_RTH') +IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),NBUDGET_RV,'2DREL_BU_RRV') !---------------------------------------------------------------------------- ! END SUBROUTINE REL_FORCING_n diff --git a/src/MNH/relax2fw_ion.f90 b/src/MNH/relax2fw_ion.f90 index 001f00385fe034e52ef3128f4b0776ea90707f00..cae86dedffd855da3c36911bbe488fe8578bc611 100644 --- a/src/MNH/relax2fw_ion.f90 +++ b/src/MNH/relax2fw_ion.f90 @@ -1,7 +1,8 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2010-2019 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. +!----------------------------------------------------------------- ! ######################## MODULE MODI_RELAX2FW_ION ! ######################## @@ -102,16 +103,16 @@ END MODULE MODI_RELAX2FW_ION !* 0. DECLARATIONS ! ------------ ! +use modd_budget, only: lbudget_sv, NBUDGET_SV1 +USE MODD_CONF +USE MODD_ELEC_n, ONLY: XCION_POS_FW, XCION_NEG_FW +USE MODD_NSV, ONLY: NSV_ELECBEG, NSV_ELECEND USE MODD_PARAMETERS -USE MODD_CONF -USE MODD_BUDGET -USE MODD_NSV, ONLY: NSV_ELECBEG, NSV_ELECEND -USE MODD_ELEC_n, ONLY: XCION_POS_FW, XCION_NEG_FW ! USE MODE_ll ! -USE MODI_SHUMAN -USE MODI_BUDGET +USE MODI_BUDGET +USE MODI_SHUMAN ! IMPLICIT NONE ! @@ -212,10 +213,8 @@ END IF ! ------------------------------ ! IF (LBUDGET_SV) THEN - JSV = NSV_ELECBEG - CALL BUDGET (PRSVS(:,:,:,JSV),JSV+12,'REL_BU_RSV') - JSV = NSV_ELECEND - CALL BUDGET (PRSVS(:,:,:,JSV),JSV+12,'REL_BU_RSV') + CALL BUDGET( PRSVS(:, :, :, NSV_ELECBEG ), NBUDGET_SV1 - 1 + NSV_ELECBEG, 'REL_BU_RSV' ) + CALL BUDGET( PRSVS(:, :, :, NSV_ELECEND ), NBUDGET_SV1 - 1 + NSV_ELECEND, 'REL_BU_RSV' ) END IF ! ! diff --git a/src/MNH/relaxation.f90 b/src/MNH/relaxation.f90 index 13e62a4ab64a002543ff228b84df9a69e1ad9855..df1c4133a85c62aa643f58e17e4a6c9b768dcef4 100644 --- a/src/MNH/relaxation.f90 +++ b/src/MNH/relaxation.f90 @@ -1,7 +1,8 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-2019 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. +!----------------------------------------------------------------- ! ###################### MODULE MODI_RELAXATION ! ###################### @@ -706,21 +707,21 @@ END DO ! ------------------------------ ! CALL EXTRAPOL('W ', PRUS) -IF (LBUDGET_U) CALL BUDGET (PRUS,1,'REL_BU_RU') -IF (LBUDGET_V) CALL BUDGET (PRVS,2,'REL_BU_RV') -IF (LBUDGET_W) CALL BUDGET (PRWS,3,'REL_BU_RW') -IF (LBUDGET_TH) CALL BUDGET (PRTHS,4,'REL_BU_RTH') -IF (LBUDGET_TKE) CALL BUDGET (PRTKES,5,'REL_BU_RTKE') -IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),6,'REL_BU_RRV') -IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),7,'REL_BU_RRC') -IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3),8,'REL_BU_RRR') -IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),9,'REL_BU_RRI') -IF (LBUDGET_RS) CALL BUDGET (PRRS(:,:,:,5),10,'REL_BU_RRS') -IF (LBUDGET_RG) CALL BUDGET (PRRS(:,:,:,6),11,'REL_BU_RRG') -IF (LBUDGET_RH) CALL BUDGET (PRRS(:,:,:,7),12,'REL_BU_RRH') -IF (LBUDGET_SV) THEN +IF ( LBUDGET_U ) CALL BUDGET( PRUS, NBUDGET_U, 'REL_BU_RU') +IF ( LBUDGET_V ) CALL BUDGET( PRVS, NBUDGET_V, 'REL_BU_RV') +IF ( LBUDGET_W ) CALL BUDGET( PRWS, NBUDGET_W, 'REL_BU_RW') +IF ( LBUDGET_TH ) CALL BUDGET( PRTHS, NBUDGET_TH, 'REL_BU_RTH') +IF ( LBUDGET_TKE ) CALL BUDGET( PRTKES, NBUDGET_TKE, 'REL_BU_RTKE') +IF ( LBUDGET_RV ) CALL BUDGET( PRRS(:, :, :, 1 ), NBUDGET_RV, 'REL_BU_RRV') +IF ( LBUDGET_RC ) CALL BUDGET( PRRS(:, :, :, 2 ), NBUDGET_RC, 'REL_BU_RRC') +IF ( LBUDGET_RR ) CALL BUDGET( PRRS(:, :, :, 3 ), NBUDGET_RR, 'REL_BU_RRR') +IF ( LBUDGET_RI ) CALL BUDGET( PRRS(:, :, :, 4 ), NBUDGET_RI, 'REL_BU_RRI') +IF ( LBUDGET_RS ) CALL BUDGET( PRRS(:, :, :, 5 ), NBUDGET_RS, 'REL_BU_RRS') +IF ( LBUDGET_RG ) CALL BUDGET( PRRS(:, :, :, 6 ), NBUDGET_RG, 'REL_BU_RRG') +IF ( LBUDGET_RH ) CALL BUDGET( PRRS(:, :, :, 7 ), NBUDGET_RH, 'REL_BU_RRH') +IF ( LBUDGET_SV ) THEN DO JSV=1,KSV - CALL BUDGET (PRSVS(:,:,:,JSV),JSV+12,'REL_BU_RSV') + CALL BUDGET( PRSVS(:, :, :, JSV ), NBUDGET_SV1 - 1 + JSV, 'REL_BU_RSV' ) END DO END IF ! diff --git a/src/MNH/resolved_cloud.f90 b/src/MNH/resolved_cloud.f90 index 6116fa3f90a75778e6a4285035708a6add594dfc..f0257f5f08430f7651d2051edae09ad6c0440a1c 100644 --- a/src/MNH/resolved_cloud.f90 +++ b/src/MNH/resolved_cloud.f90 @@ -271,8 +271,10 @@ END MODULE MODI_RESOLVED_CLOUD ! !* 0. DECLARATIONS ! ------------ -USE MODD_BUDGET, ONLY: LBUDGET_TH, LBUDGET_RC, LBUDGET_RG, LBUDGET_RH, LBUDGET_RI, LBUDGET_RR, LBUDGET_RS, LBUDGET_RV, & - LBUDGET_SV +USE MODD_BUDGET, ONLY: LBUDGET_TH, LBUDGET_RV, LBUDGET_RC, LBUDGET_RR, LBUDGET_RI, LBUDGET_RS, LBUDGET_RG, LBUDGET_RH, & + LBUDGET_SV, & + NBUDGET_TH, NBUDGET_RV, NBUDGET_RC, NBUDGET_RR, NBUDGET_RI, NBUDGET_RS, NBUDGET_RG, NBUDGET_RH, & + NBUDGET_SV1 USE MODD_CH_AEROSOL, ONLY: LORILAM USE MODD_DUST, ONLY: LDUST USE MODD_CST, ONLY: XCI, XCL, XCPD, XCPV, XLSTT, XLVTT, XMNH_TINY, XP00, XRD, XRHOLW, XTT @@ -764,29 +766,29 @@ END SELECT ! ---------------------- ! IF ((HCLOUD /= 'KHKO') .AND. (HCLOUD /= 'C2R2') ) THEN - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:) * PRHODJ(:,:,:), 4,'NEGA_BU_RTH') - IF (LBUDGET_RV) CALL BUDGET (PRS(:,:,:,1) * PRHODJ(:,:,:), 6,'NEGA_BU_RRV') - IF (LBUDGET_RC) CALL BUDGET (PRS(:,:,:,2) * PRHODJ(:,:,:), 7,'NEGA_BU_RRC') + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:) * PRHODJ(:,:,:), NBUDGET_TH,'NEGA_BU_RTH') + IF (LBUDGET_RV) CALL BUDGET (PRS(:,:,:,1) * PRHODJ(:,:,:), NBUDGET_RV,'NEGA_BU_RRV') + IF (LBUDGET_RC) CALL BUDGET (PRS(:,:,:,2) * PRHODJ(:,:,:), NBUDGET_RC,'NEGA_BU_RRC') END IF -IF (LBUDGET_RR) CALL BUDGET (PRS(:,:,:,3) * PRHODJ(:,:,:), 8,'NEGA_BU_RRR') -IF (LBUDGET_RI) CALL BUDGET (PRS(:,:,:,4) * PRHODJ(:,:,:) ,9,'NEGA_BU_RRI') -IF (LBUDGET_RS) CALL BUDGET (PRS(:,:,:,5) * PRHODJ(:,:,:),10,'NEGA_BU_RRS') -IF (LBUDGET_RG) CALL BUDGET (PRS(:,:,:,6) * PRHODJ(:,:,:),11,'NEGA_BU_RRG') -IF (LBUDGET_RH) CALL BUDGET (PRS(:,:,:,7) * PRHODJ(:,:,:),12,'NEGA_BU_RRH') +IF (LBUDGET_RR) CALL BUDGET (PRS(:,:,:,3) * PRHODJ(:,:,:), NBUDGET_RR,'NEGA_BU_RRR') +IF (LBUDGET_RI) CALL BUDGET (PRS(:,:,:,4) * PRHODJ(:,:,:), NBUDGET_RI,'NEGA_BU_RRI') +IF (LBUDGET_RS) CALL BUDGET (PRS(:,:,:,5) * PRHODJ(:,:,:), NBUDGET_RS,'NEGA_BU_RRS') +IF (LBUDGET_RG) CALL BUDGET (PRS(:,:,:,6) * PRHODJ(:,:,:), NBUDGET_RG,'NEGA_BU_RRG') +IF (LBUDGET_RH) CALL BUDGET (PRS(:,:,:,7) * PRHODJ(:,:,:), NBUDGET_RH,'NEGA_BU_RRH') IF (LBUDGET_SV .AND. (HCLOUD == 'LIMA')) THEN - IF (OWARM) CALL BUDGET (ZSVS(:,:,:,NSV_LIMA_NC) * PRHODJ(:,:,:),12+NSV_LIMA_NC,'NEGA_BU_RSV') - IF (OWARM.AND.ORAIN) CALL BUDGET (ZSVS(:,:,:,NSV_LIMA_NR) * PRHODJ(:,:,:),12+NSV_LIMA_NR,'NEGA_BU_RSV') - IF (LCOLD) CALL BUDGET (ZSVS(:,:,:,NSV_LIMA_NI) * PRHODJ(:,:,:),12+NSV_LIMA_NI,'NEGA_BU_RSV') + IF (OWARM) CALL BUDGET (ZSVS(:,:,:,NSV_LIMA_NC) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_NC,'NEGA_BU_RSV') + IF (OWARM.AND.ORAIN) CALL BUDGET (ZSVS(:,:,:,NSV_LIMA_NR) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_NR,'NEGA_BU_RSV') + IF (LCOLD) CALL BUDGET (ZSVS(:,:,:,NSV_LIMA_NI) * PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_NI,'NEGA_BU_RSV') IF (NMOD_CCN.GE.1) THEN DO JL=1, NMOD_CCN CALL BUDGET ( ZSVS(:,:,:,NSV_LIMA_CCN_FREE+JL-1)* & - PRHODJ(:,:,:),12+NSV_LIMA_CCN_FREE+JL-1,'NEGA_BU_RSV') + PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_CCN_FREE+JL-1,'NEGA_BU_RSV') END DO END IF IF (NMOD_IFN.GE.1) THEN DO JL=1, NMOD_IFN CALL BUDGET ( ZSVS(:,:,:,NSV_LIMA_IFN_FREE+JL-1)* & - PRHODJ(:,:,:),12+NSV_LIMA_IFN_FREE+JL-1,'NEGA_BU_RSV') + PRHODJ(:,:,:),NBUDGET_SV1-1+NSV_LIMA_IFN_FREE+JL-1,'NEGA_BU_RSV') END DO END IF END IF @@ -1153,9 +1155,9 @@ IF ( (HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2') ) THEN ZSVS(:,:,:,JSV) = 0.0 END WHERE ENDDO - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:) * PRHODJ(:,:,:), 4,'NECON_BU_RTH') - IF (LBUDGET_RV) CALL BUDGET (PRS(:,:,:,1) * PRHODJ(:,:,:), 6,'NECON_BU_RRV') - IF (LBUDGET_RC) CALL BUDGET (PRS(:,:,:,2) * PRHODJ(:,:,:), 7,'NECON_BU_RRC') + IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:) * PRHODJ(:,:,:), NBUDGET_TH,'NECON_BU_RTH') + IF (LBUDGET_RV) CALL BUDGET (PRS(:,:,:,1) * PRHODJ(:,:,:), NBUDGET_RV,'NECON_BU_RRV') + IF (LBUDGET_RC) CALL BUDGET (PRS(:,:,:,2) * PRHODJ(:,:,:), NBUDGET_RC,'NECON_BU_RRC') END IF !------------------------------------------------------------------------------- ! diff --git a/src/MNH/resolved_elecn.f90 b/src/MNH/resolved_elecn.f90 index 71ceb8c62dcef75d0bafe62c656747b82f5d598b..535a783271b01d0fc10c22348684a1f1092b447d 100644 --- a/src/MNH/resolved_elecn.f90 +++ b/src/MNH/resolved_elecn.f90 @@ -612,18 +612,18 @@ END DO ! !* 3.4 store the budget terms ! -IF (LBUDGET_RV) CALL BUDGET (PRS(:,:,:,1) * PRHODJ(:,:,:), 6,'NEGA_BU_RRV') -IF (LBUDGET_RC) CALL BUDGET (PRS(:,:,:,2) * PRHODJ(:,:,:), 7,'NEGA_BU_RRC') -IF (LBUDGET_RR) CALL BUDGET (PRS(:,:,:,3) * PRHODJ(:,:,:), 8,'NEGA_BU_RRR') -IF (LBUDGET_RI) CALL BUDGET (PRS(:,:,:,4) * PRHODJ(:,:,:) ,9,'NEGA_BU_RRI') -IF (LBUDGET_RS) CALL BUDGET (PRS(:,:,:,5) * PRHODJ(:,:,:),10,'NEGA_BU_RRS') -IF (LBUDGET_RG) CALL BUDGET (PRS(:,:,:,6) * PRHODJ(:,:,:),11,'NEGA_BU_RRG') -IF (LBUDGET_RH) CALL BUDGET (PRS(:,:,:,7) * PRHODJ(:,:,:),12,'NEGA_BU_RRH') -IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:) * PRHODJ(:,:,:), 4,'NEGA_BU_RTH') +IF (LBUDGET_RV) CALL BUDGET (PRS(:,:,:,1) * PRHODJ(:,:,:), NBUDGET_RV, 'NEGA_BU_RRV') +IF (LBUDGET_RC) CALL BUDGET (PRS(:,:,:,2) * PRHODJ(:,:,:), NBUDGET_RC, 'NEGA_BU_RRC') +IF (LBUDGET_RR) CALL BUDGET (PRS(:,:,:,3) * PRHODJ(:,:,:), NBUDGET_RR, 'NEGA_BU_RRR') +IF (LBUDGET_RI) CALL BUDGET (PRS(:,:,:,4) * PRHODJ(:,:,:) ,NBUDGET_RI, 'NEGA_BU_RRI') +IF (LBUDGET_RS) CALL BUDGET (PRS(:,:,:,5) * PRHODJ(:,:,:), NBUDGET_RS, 'NEGA_BU_RRS') +IF (LBUDGET_RG) CALL BUDGET (PRS(:,:,:,6) * PRHODJ(:,:,:), NBUDGET_RG, 'NEGA_BU_RRG') +IF (LBUDGET_RH) CALL BUDGET (PRS(:,:,:,7) * PRHODJ(:,:,:), NBUDGET_RH, 'NEGA_BU_RRH') +IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:) * PRHODJ(:,:,:), NBUDGET_TH, 'NEGA_BU_RTH') ! IF (LBUDGET_SV) THEN DO JSV = NSV_ELECBEG, NSV_ELECEND - CALL BUDGET (PSVS(:,:,:,JSV) * PRHODJ(:,:,:), 12+JSV, 'NEGA_BU_RSV') + CALL BUDGET (PSVS(:,:,:,JSV) * PRHODJ(:,:,:), NBUDGET_SV1-1+JSV, 'NEGA_BU_RSV') END DO END IF ! diff --git a/src/MNH/seriesn.f90 b/src/MNH/seriesn.f90 index c592e4b540e9bab63c7a48062de2430efad3081b..96487fcaa6d249df646e94c072d9278a0f8f6283 100644 --- a/src/MNH/seriesn.f90 +++ b/src/MNH/seriesn.f90 @@ -40,33 +40,31 @@ !! 01/2018 (G.Delautier) SURFEX 8.1 !! 03/2018 (P.Wautelet) replace TEMPORAL_DIST by DATETIME_DISTANCE !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O +! P. Wautelet 13/09/2019: budget: simplify and modernize date/time management !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! +USE MODD_CONF, ONLY: NVERB +USE MODD_CONF_n, ONLY: LUSERV,LUSERC,LUSERR,LUSERI,LUSERS,LUSERG,LUSERH +USE MODD_FIELD_n, ONLY: XTHT,XWT,XUT,XPABST,XRT +USE MODD_GRID_n, ONLY: XZZ +USE MODD_LUNIT_n, ONLY: TLUOUT +USE MODD_MNH_SURFEX_n +USE MODD_PARAMETERS +USE MODD_PRECIP_n, ONLY: XINPRC,XINPRR,XINPRS,XINPRG,XINPRH, & + XACPRC,XACPRR,XACPRS,XACPRG,XACPRH +USE MODD_REF, ONLY: XRHODREFZ USE MODD_SERIES USE MODD_SERIES_n -USE MODD_PARAMETERS -USE MODD_CONF, ONLY: NVERB -USE MODD_REF, ONLY: XRHODREFZ -USE MODD_TIME, ONLY: TDTEXP +USE MODD_TIME_n, ONLY: TDTCUR USE MODD_TYPE_DATE -USE MODD_CONF_n, ONLY: LUSERV,LUSERC,LUSERR,LUSERI,LUSERS,LUSERG,LUSERH -USE MODD_FIELD_n, ONLY: XTHT,XWT,XUT,XPABST,XRT -USE MODD_GRID_n, ONLY: XZZ -USE MODD_LUNIT_n, ONLY: TLUOUT -USE MODD_PRECIP_n, ONLY: XINPRC,XINPRR,XINPRS,XINPRG,XINPRH, & - XACPRC,XACPRR,XACPRS,XACPRG,XACPRH -USE MODD_TIME_n, ONLY: TDTCUR -! SURFACE FIELDS -USE MODI_GET_SURF_VAR_n ! -USE MODE_DATETIME USE MODE_ll USE MODE_MSG ! -USE MODD_MNH_SURFEX_n +USE MODI_GET_SURF_VAR_n ! IMPLICIT NONE ! @@ -92,7 +90,6 @@ INTEGER :: IRESP ! Return code of FM-routines INTEGER :: ISER CHARACTER (LEN=5), DIMENSION(3) :: YSUF LOGICAL, DIMENSION(SIZE(LINBOX,1),SIZE(LINBOX,2),3) :: GINBOX -TYPE (DATE_TIME) :: TZDTCUR ! current date and time !SURFACE FIELDS REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2)) :: ZTS, ZTMNW, ZTBOT, ZCT,ZHML INTEGER :: ILOOP, JLOOP, KI @@ -168,13 +165,7 @@ IF(NVERB>=5) WRITE(ILUOUT,*) & ! NSCOUNTD=NSCOUNTD+1 ! -TZDTCUR=TDTCUR -! -CALL DATETIME_DISTANCE(TDTEXP,TZDTCUR,XSTRAJT(NSCOUNTD,1)) -XSDATIME(13,NSCOUNTD)= TZDTCUR%TDATE%YEAR -XSDATIME(14,NSCOUNTD)= TZDTCUR%TDATE%MONTH -XSDATIME(15,NSCOUNTD)= TZDTCUR%TDATE%DAY -XSDATIME(16,NSCOUNTD)= TZDTCUR%TIME +tpsdates(nscountd) = tdtcur ! !------------------------------------------------------------------------------- ! diff --git a/src/MNH/shallow_mf_pack.f90 b/src/MNH/shallow_mf_pack.f90 index 5e76f58c51e5632ec4c68795e8c7457b3d025a16..b8f8aca936bebe8dffaef772ef67fd568ebc1f0d 100644 --- a/src/MNH/shallow_mf_pack.f90 +++ b/src/MNH/shallow_mf_pack.f90 @@ -372,12 +372,12 @@ END DO !!! 7. call to MesoNH budgets -IF (LBUDGET_TH) CALL BUDGET (PRTHS,4,'MAFL_BU_RTH') -IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),6,'MAFL_BU_RRV') -IF (LBUDGET_U) CALL BUDGET (PRUS,1,'MAFL_BU_RU') -IF (LBUDGET_V) CALL BUDGET (PRVS,2,'MAFL_BU_RV') +IF (LBUDGET_TH) CALL BUDGET (PRTHS,NBUDGET_TH,'MAFL_BU_RTH') +IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),NBUDGET_RV,'MAFL_BU_RRV') +IF (LBUDGET_U) CALL BUDGET (PRUS,NBUDGET_U,'MAFL_BU_RU') +IF (LBUDGET_V) CALL BUDGET (PRVS,NBUDGET_V,'MAFL_BU_RV') DO JSV=1,ISV - IF (LBUDGET_SV) CALL BUDGET (PRSVS(:,:,:,JSV),12+JSV,'MAFL_BU_RSV') + IF (LBUDGET_SV) CALL BUDGET (PRSVS(:,:,:,JSV),NBUDGET_SV1-1+JSV,'MAFL_BU_RSV') END DO !!! 8. Prints the fluxes in output file diff --git a/src/MNH/slow_terms.f90 b/src/MNH/slow_terms.f90 index 3699b5af85b71d9d9c82ee26263c61e84a62f8c7..62ffffc269f1a2eb1b2d6fa19107cb8adcf3fa04 100644 --- a/src/MNH/slow_terms.f90 +++ b/src/MNH/slow_terms.f90 @@ -324,7 +324,7 @@ PRRS(:,:,:) = ZW1(:,:,:) / PTSTEP ! !* 2.5 budget storage ! -IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'SEDI_BU_RRR') +IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'SEDI_BU_RRR') ! !------------------------------------------------------------------------------- ! @@ -348,8 +348,8 @@ END WHERE ! !* 3.2 budget storage ! -IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'ACCR_BU_RRC') -IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'ACCR_BU_RRR') +IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RC,'ACCR_BU_RRC') +IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'ACCR_BU_RRR') ! !------------------------------------------------------------------------------- ! @@ -379,8 +379,8 @@ END IF ! !* 4.2 budget storage ! -IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'AUTO_BU_RRC') -IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'AUTO_BU_RRR') +IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RC,'AUTO_BU_RRC') +IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'AUTO_BU_RRR') ! !------------------------------------------------------------------------------- ! @@ -436,9 +436,9 @@ END WHERE ! !* 5.8 budget storage ! -IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),6,'REVA_BU_RRV') -IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'REVA_BU_RRR') -IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'REVA_BU_RTH') +IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RV,'REVA_BU_RRV') +IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),NBUDGET_RR,'REVA_BU_RRR') +IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),NBUDGET_TH,'REVA_BU_RTH') ! !------------------------------------------------------------------------------- ! diff --git a/src/MNH/stationn.f90 b/src/MNH/stationn.f90 index 2fa1ab92cfafb6252f3ea28062feacf644b2420d..33f1fa4a9ffea8542d8f8dfa55fafb3393a80b49 100644 --- a/src/MNH/stationn.f90 +++ b/src/MNH/stationn.f90 @@ -1,6 +1,6 @@ -!MNH_LIC Copyright 2002-2018 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2002-2019 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- ! ########################## @@ -10,18 +10,11 @@ MODULE MODI_STATION_n INTERFACE ! SUBROUTINE STATION_n(PTSTEP, & - TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, & PU, PV, PW, PTH, PR, PSV, PTKE, & PTS,PP ) ! -USE MODD_TYPE_DATE -! REAL, INTENT(IN) :: PTSTEP ! time step -TYPE(DATE_TIME), INTENT(IN) :: TPDTEXP! experiment date and time -TYPE(DATE_TIME), INTENT(IN) :: TPDTMOD! model start date and time -TYPE(DATE_TIME), INTENT(IN) :: TPDTSEG! segment date and time -TYPE(DATE_TIME), INTENT(IN) :: TPDTCUR! current date and time REAL, DIMENSION(:), INTENT(IN) :: PXHAT ! x coordinate REAL, DIMENSION(:), INTENT(IN) :: PYHAT ! y coordinate REAL, DIMENSION(:,:,:), INTENT(IN) :: PZ ! z array @@ -45,9 +38,8 @@ END MODULE MODI_STATION_n ! ! ######################################################## SUBROUTINE STATION_n(PTSTEP, & - TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, & - PU, PV, PW, PTH, PR, PSV, PTKE, & + PU, PV, PW, PTH, PR, PSV, PTKE, & PTS, PP ) ! ######################################################## ! @@ -86,23 +78,24 @@ END MODULE MODI_STATION_n !! C.Lac 04/2013 : Add I/J positioning !! P.Wautelet 28/03/2018 : Replace TEMPORAL_DIST by DATETIME_DISTANCE !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O -!! -!! -------------------------------------------------------------------------- -! +! P. Wautelet 13/09/2019: budget: simplify and modernize date/time management +! +! -------------------------------------------------------------------------- +! !* 0. DECLARATIONS ! ------------ ! -USE MODD_TYPE_DATE -USE MODD_STATION_n -USE MODD_SUB_STATION_n -USE MODD_DIAG_IN_RUN -USE MODD_PARAMETERS +USE MODD_CONF USE MODD_CST +USE MODD_DIAG_IN_RUN USE MODD_GRID -USE MODD_TIME -USE MODD_CONF +USE MODD_PARAMETERS +USE MODD_STATION_n +USE MODD_SUB_STATION_n +use modd_time, only: tdtexp +use modd_time_n, only: tdtcur +USE MODD_TYPE_DATE ! -USE MODE_DATETIME USE MODE_ll ! USE MODI_WATER_SUM @@ -116,10 +109,6 @@ IMPLICIT NONE ! ! REAL, INTENT(IN) :: PTSTEP ! time step -TYPE(DATE_TIME), INTENT(IN) :: TPDTEXP! experiment date and time -TYPE(DATE_TIME), INTENT(IN) :: TPDTMOD! model start date and time -TYPE(DATE_TIME), INTENT(IN) :: TPDTSEG! segment date and time -TYPE(DATE_TIME), INTENT(IN) :: TPDTCUR! current date and time REAL, DIMENSION(:), INTENT(IN) :: PXHAT ! x coordinate REAL, DIMENSION(:), INTENT(IN) :: PYHAT ! y coordinate REAL, DIMENSION(:,:,:), INTENT(IN) :: PZ ! z array @@ -144,7 +133,6 @@ INTEGER :: IIE ! INTEGER :: IJE ! INTEGER :: IIU ! INTEGER :: IJU ! -REAL :: ZTIMEEXP ! ! REAL, DIMENSION(SIZE(PXHAT)) :: ZXHATM ! mass point coordinates REAL, DIMENSION(SIZE(PYHAT)) :: ZYHATM ! mass point coordinates @@ -199,7 +187,6 @@ IF ( TSTATION%T_CUR == XUNDEF ) TSTATION%T_CUR = TSTATION%STEP - PTSTEP ! TSTATION%T_CUR = TSTATION%T_CUR + PTSTEP ! -CALL DATETIME_DISTANCE(TDTEXP,TDTSEG,ZTIMEEXP) IF ( TSTATION%T_CUR >= TSTATION%STEP - 1.E-10 ) THEN GSTORE = .TRUE. TSTATION%T_CUR = TSTATION%T_CUR - TSTATION%STEP @@ -210,24 +197,14 @@ ELSE END IF ! IF (GSTORE) THEN - ! - TSTATION%TIME(IN) = (IN-1) * TSTATION%STEP + ZTIMEEXP - TSTATION%DATIME( 1,IN) = TPDTEXP%TDATE%YEAR - TSTATION%DATIME( 2,IN) = TPDTEXP%TDATE%MONTH - TSTATION%DATIME( 3,IN) = TPDTEXP%TDATE%DAY - TSTATION%DATIME( 4,IN) = TPDTEXP%TIME - TSTATION%DATIME( 5,IN) = TPDTSEG%TDATE%YEAR - TSTATION%DATIME( 6,IN) = TPDTSEG%TDATE%MONTH - TSTATION%DATIME( 7,IN) = TPDTSEG%TDATE%DAY - TSTATION%DATIME( 8,IN) = TPDTSEG%TIME - TSTATION%DATIME( 9,IN) = TPDTMOD%TDATE%YEAR - TSTATION%DATIME(10,IN) = TPDTMOD%TDATE%MONTH - TSTATION%DATIME(11,IN) = TPDTMOD%TDATE%DAY - TSTATION%DATIME(12,IN) = TPDTMOD%TIME - TSTATION%DATIME(13,IN) = TPDTCUR%TDATE%YEAR - TSTATION%DATIME(14,IN) = TPDTCUR%TDATE%MONTH - TSTATION%DATIME(15,IN) = TPDTCUR%TDATE%DAY - TSTATION%DATIME(16,IN) = TPDTCUR%TIME +#if 0 + tstation%tpdates(in)%date%year = tdtexp%date%year + tstation%tpdates(in)%date%month = tdtexp%date%month + tstation%tpdates(in)%date%day = tdtexp%date%day + tstation%tpdates(in)%time = tdtexp%time + ( in - 1 ) * tstation%step +#else + tstation%tpdates(in) = tdtcur +#endif END IF ! ! @@ -339,10 +316,7 @@ END IF ! -------------- ! IF (GSTORE) THEN - - IF (TSTATION%TIME(IN) /= XUNDEF) THEN - - DO I=1,NUMBSTAT + DO I=1,NUMBSTAT ! IF ((ZTHIS_PROCS(I)==1.).AND.(.NOT. TSTATION%ERROR(I))) THEN IF (TSTATION%K(I)/= XUNDEF) THEN @@ -498,8 +472,6 @@ IF (GSTORE) THEN ! ENDDO ! - END IF - ! END IF ! !---------------------------------------------------------------------------- diff --git a/src/MNH/tke_eps_sources.f90 b/src/MNH/tke_eps_sources.f90 index ebb68aa19c3a01084b0c45b3032cf0bd5e053359..bb417e018c51c88157c4cd4c4d9d122e2f14ffd3 100644 --- a/src/MNH/tke_eps_sources.f90 +++ b/src/MNH/tke_eps_sources.f90 @@ -375,18 +375,18 @@ IF (LBUDGET_TKE) THEN ! add the dynamical production ! PRTKES(:,:,:) = PRTKES(:,:,:) + PDP(:,:,:) * PRHODJ(:,:,:) - CALL BUDGET (PRTKES(:,:,:),5,'DP_BU_RTKE') + CALL BUDGET (PRTKES(:,:,:),NBUDGET_TKE,'DP_BU_RTKE') ! ! add the thermal production ! PRTKES(:,:,:) = PRTKES(:,:,:) + PTP(:,:,:) * PRHODJ(:,:,:) - CALL BUDGET (PRTKES(:,:,:),5,'TP_BU_RTKE') + CALL BUDGET (PRTKES(:,:,:),NBUDGET_TKE,'TP_BU_RTKE') ! ! add the dissipation ! PRTKES(:,:,:) = PRTKES(:,:,:) - XCED * SQRT(PTKEM(:,:,:)) / PLEPS(:,:,:) * & (PEXPL*PTKEM(:,:,:) + PIMPL*ZRES(:,:,:)) * PRHODJ(:,:,:) -CALL BUDGET (PRTKES(:,:,:),5,'DISS_BU_RTKE') +CALL BUDGET (PRTKES(:,:,:),NBUDGET_TKE,'DISS_BU_RTKE') END IF ! !* 2.5 computes the final RTKE and stores the whole turbulent transport @@ -395,7 +395,7 @@ PRTKES(:,:,:) = ZRES(:,:,:) * PRHODJ(:,:,:) / PTSTEP - PRTKESM(:,:,:) ! ! stores the whole turbulent transport ! -IF (LBUDGET_TKE) CALL BUDGET (PRTKES(:,:,:),5,'TR_BU_RTKE') +IF (LBUDGET_TKE) CALL BUDGET (PRTKES(:,:,:),NBUDGET_TKE,'TR_BU_RTKE') ! ! !---------------------------------------------------------------------------- diff --git a/src/MNH/turb.f90 b/src/MNH/turb.f90 index f875c2e36bdd074f37656d2b0130be0f6760396c..96dbe560b3b6620a18e63716a24394f266eef498 100644 --- a/src/MNH/turb.f90 +++ b/src/MNH/turb.f90 @@ -1,4 +1,4 @@ - !MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-2019 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. @@ -923,34 +923,34 @@ CALL TURB_VER(KKA,KKU,KKL,KRR, KRRL, KRRI, & PDYP,PTHP,PSIGS,PWTH,PWRC,PWSV ) ! -IF (LBUDGET_U) CALL BUDGET (PRUS,1,'VTURB_BU_RU') -IF (LBUDGET_V) CALL BUDGET (PRVS,2,'VTURB_BU_RV') -IF (LBUDGET_W) CALL BUDGET (PRWS,3,'VTURB_BU_RW') +IF (LBUDGET_U) CALL BUDGET (PRUS,NBUDGET_U,'VTURB_BU_RU') +IF (LBUDGET_V) CALL BUDGET (PRVS,NBUDGET_V,'VTURB_BU_RV') +IF (LBUDGET_W) CALL BUDGET (PRWS,NBUDGET_W,'VTURB_BU_RW') IF (LBUDGET_TH) THEN IF ( KRRI >= 1 .AND. KRRL >= 1 ) THEN - CALL BUDGET (PRTHLS+ ZLVOCPEXNM * PRRS(:,:,:,2) + ZLSOCPEXNM * PRRS(:,:,:,4),4,'VTURB_BU_RTH') + CALL BUDGET (PRTHLS+ ZLVOCPEXNM * PRRS(:,:,:,2) + ZLSOCPEXNM * PRRS(:,:,:,4),NBUDGET_TH,'VTURB_BU_RTH') ELSE IF ( KRRL >= 1 ) THEN - CALL BUDGET (PRTHLS+ ZLOCPEXNM * PRRS(:,:,:,2),4,'VTURB_BU_RTH') + CALL BUDGET (PRTHLS+ ZLOCPEXNM * PRRS(:,:,:,2),NBUDGET_TH,'VTURB_BU_RTH') ELSE - CALL BUDGET (PRTHLS,4,'VTURB_BU_RTH') + CALL BUDGET (PRTHLS,NBUDGET_TH,'VTURB_BU_RTH') END IF END IF IF (LBUDGET_SV) THEN DO JSV = 1,NSV - CALL BUDGET (PRSVS(:,:,:,JSV),JSV+12,'VTURB_BU_RSV') + CALL BUDGET (PRSVS(:,:,:,JSV),NBUDGET_SV1-1+JSV,'VTURB_BU_RSV') END DO END IF IF (LBUDGET_RV) THEN IF ( KRRI >= 1 .AND. KRRL >= 1) THEN - CALL BUDGET (PRRS(:,:,:,1)-PRRS(:,:,:,2)-PRRS(:,:,:,4),6,'VTURB_BU_RRV') + CALL BUDGET (PRRS(:,:,:,1)-PRRS(:,:,:,2)-PRRS(:,:,:,4),NBUDGET_RV,'VTURB_BU_RRV') ELSE IF ( KRRL >= 1 ) THEN - CALL BUDGET (PRRS(:,:,:,1)-PRRS(:,:,:,2),6,'VTURB_BU_RRV') + CALL BUDGET (PRRS(:,:,:,1)-PRRS(:,:,:,2),NBUDGET_RV,'VTURB_BU_RRV') ELSE - CALL BUDGET (PRRS(:,:,:,1),6,'VTURB_BU_RRV') + CALL BUDGET (PRRS(:,:,:,1),NBUDGET_RV,'VTURB_BU_RRV') END IF END IF -IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),7,'VTURB_BU_RRC') -IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),9,'VTURB_BU_RRI') +IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),NBUDGET_RC,'VTURB_BU_RRC') +IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),NBUDGET_RI,'VTURB_BU_RRI') ! ! IF (HTURBDIM=='3DIM') THEN @@ -972,35 +972,35 @@ IF (HTURBDIM=='3DIM') THEN END IF ! ! -IF (LBUDGET_U) CALL BUDGET (PRUS,1,'HTURB_BU_RU') -IF (LBUDGET_V) CALL BUDGET (PRVS,2,'HTURB_BU_RV') -IF (LBUDGET_W) CALL BUDGET (PRWS,3,'HTURB_BU_RW') +IF (LBUDGET_U) CALL BUDGET (PRUS,NBUDGET_U,'HTURB_BU_RU') +IF (LBUDGET_V) CALL BUDGET (PRVS,NBUDGET_V,'HTURB_BU_RV') +IF (LBUDGET_W) CALL BUDGET (PRWS,NBUDGET_W,'HTURB_BU_RW') IF (LBUDGET_TH) THEN IF ( KRRI >= 1 .AND. KRRL >= 1 ) THEN CALL BUDGET (PRTHLS+ZLVOCPEXNM*PRRS(:,:,:,2)+ZLSOCPEXNM*PRRS(:,:,:,4) & - ,4,'HTURB_BU_RTH') + ,NBUDGET_TH,'HTURB_BU_RTH') ELSE IF ( KRRL >= 1 ) THEN - CALL BUDGET (PRTHLS+ ZLOCPEXNM * PRRS(:,:,:,2),4,'HTURB_BU_RTH') + CALL BUDGET (PRTHLS+ ZLOCPEXNM * PRRS(:,:,:,2),NBUDGET_TH,'HTURB_BU_RTH') ELSE - CALL BUDGET (PRTHLS,4,'HTURB_BU_RTH') + CALL BUDGET (PRTHLS,NBUDGET_TH,'HTURB_BU_RTH') END IF END IF IF (LBUDGET_SV) THEN DO JSV = 1,NSV - CALL BUDGET (PRSVS(:,:,:,JSV),JSV+12,'HTURB_BU_RSV') + CALL BUDGET (PRSVS(:,:,:,JSV),NBUDGET_SV1-1+JSV,'HTURB_BU_RSV') END DO END IF IF (LBUDGET_RV) THEN IF ( KRRI >= 1 .AND. KRRL >= 1) THEN - CALL BUDGET (PRRS(:,:,:,1)-PRRS(:,:,:,2)-PRRS(:,:,:,4),6,'HTURB_BU_RRV') + CALL BUDGET (PRRS(:,:,:,1)-PRRS(:,:,:,2)-PRRS(:,:,:,4),NBUDGET_RV,'HTURB_BU_RRV') ELSE IF ( KRRL >= 1 ) THEN - CALL BUDGET (PRRS(:,:,:,1)-PRRS(:,:,:,2),6,'HTURB_BU_RRV') + CALL BUDGET (PRRS(:,:,:,1)-PRRS(:,:,:,2),NBUDGET_RV,'HTURB_BU_RRV') ELSE - CALL BUDGET (PRRS(:,:,:,1),6,'HTURB_BU_RRV') + CALL BUDGET (PRRS(:,:,:,1),NBUDGET_RV,'HTURB_BU_RRV') END IF END IF -IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),7,'HTURB_BU_RRC') -IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),9,'HTURB_BU_RRI') +IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),NBUDGET_RC,'HTURB_BU_RRC') +IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),NBUDGET_RI,'HTURB_BU_RRI') ! !---------------------------------------------------------------------------- ! @@ -1024,11 +1024,11 @@ CALL TKE_EPS_SOURCES(KKA,KKU,KKL,KMI,PTKET,PLEM,ZLEPS,PDYP,ZTRH, & IF (LBUDGET_TH) THEN IF ( KRRI >= 1 .AND. KRRL >= 1 ) THEN CALL BUDGET (PRTHLS+ZLVOCPEXNM*PRRS(:,:,:,2)+ZLSOCPEXNM*PRRS(:,:,:,4) & - ,4,'DISSH_BU_RTH') + ,NBUDGET_TH,'DISSH_BU_RTH') ELSE IF ( KRRL >= 1 ) THEN - CALL BUDGET (PRTHLS+ZLOCPEXNM* PRRS(:,:,:,2),4,'DISSH_BU_RTH') + CALL BUDGET (PRTHLS+ZLOCPEXNM* PRRS(:,:,:,2),NBUDGET_TH,'DISSH_BU_RTH') ELSE - CALL BUDGET (PRTHLS,4,'DISSH_BU_RTH') + CALL BUDGET (PRTHLS,NBUDGET_TH,'DISSH_BU_RTH') END IF END IF ! @@ -1131,9 +1131,9 @@ IF ((HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2')) THEN END WHERE END DO ! - IF (LBUDGET_TH) CALL BUDGET (PRTHLS(:,:,:), 4,'NETUR_BU_RTH') - IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1), 6,'NETUR_BU_RRV') - IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2), 7,'NETUR_BU_RRC') + IF (LBUDGET_TH) CALL BUDGET (PRTHLS(:,:,:), NBUDGET_TH,'NETUR_BU_RTH') + IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1), NBUDGET_RV,'NETUR_BU_RRV') + IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2), NBUDGET_RC,'NETUR_BU_RRC') END IF ! !---------------------------------------------------------------------------- diff --git a/src/MNH/two_way.f90 b/src/MNH/two_way.f90 index 64f72579c3d267f8fee4317d90886a6a21d8b22d..ba399f93a870d44ac1d787362caff4a5756f707d 100644 --- a/src/MNH/two_way.f90 +++ b/src/MNH/two_way.f90 @@ -165,21 +165,21 @@ CALL GOTO_MODEL(KMI) !* 2. BUDGET COMPUTATION ! ------------------ ! -IF (LBUDGET_U) CALL BUDGET (PRUS,1,'NEST_BU_RU') -IF (LBUDGET_V) CALL BUDGET (PRVS,2,'NEST_BU_RV') -IF (LBUDGET_W) CALL BUDGET (PRWS,3,'NEST_BU_RW') -IF (LBUDGET_TH) CALL BUDGET (PRTHS,4,'NEST_BU_RTH') +IF (LBUDGET_U) CALL BUDGET (PRUS,NBUDGET_U,'NEST_BU_RU') +IF (LBUDGET_V) CALL BUDGET (PRVS,NBUDGET_V,'NEST_BU_RV') +IF (LBUDGET_W) CALL BUDGET (PRWS,NBUDGET_W,'NEST_BU_RW') +IF (LBUDGET_TH) CALL BUDGET (PRTHS,NBUDGET_TH,'NEST_BU_RTH') DO JRR=1,KRR - IF (JRR==1 .AND. LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,JRR),6,'NEST_BU_RRV') - IF (JRR==2 .AND. LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,JRR),7,'NEST_BU_RRC') - IF (JRR==3 .AND. LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,JRR),8,'NEST_BU_RRR') - IF (JRR==4 .AND. LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,JRR),9,'NEST_BU_RRI') - IF (JRR==5 .AND. LBUDGET_RS) CALL BUDGET (PRRS(:,:,:,JRR),10,'NEST_BU_RRS') - IF (JRR==6 .AND. LBUDGET_RG) CALL BUDGET (PRRS(:,:,:,JRR),11,'NEST_BU_RRG') - IF (JRR==7 .AND. LBUDGET_RH) CALL BUDGET (PRRS(:,:,:,JRR),12,'NEST_BU_RRH') + IF (JRR==1 .AND. LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,JRR),NBUDGET_RV,'NEST_BU_RRV') + IF (JRR==2 .AND. LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,JRR),NBUDGET_RC,'NEST_BU_RRC') + IF (JRR==3 .AND. LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,JRR),NBUDGET_RR,'NEST_BU_RRR') + IF (JRR==4 .AND. LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,JRR),NBUDGET_RI,'NEST_BU_RRI') + IF (JRR==5 .AND. LBUDGET_RS) CALL BUDGET (PRRS(:,:,:,JRR),NBUDGET_RS,'NEST_BU_RRS') + IF (JRR==6 .AND. LBUDGET_RG) CALL BUDGET (PRRS(:,:,:,JRR),NBUDGET_RG,'NEST_BU_RRG') + IF (JRR==7 .AND. LBUDGET_RH) CALL BUDGET (PRRS(:,:,:,JRR),NBUDGET_RH,'NEST_BU_RRH') ENDDO DO JSV=1,KSV - IF (LBUDGET_SV) CALL BUDGET (PRSVS(:,:,:,JSV),12+JSV,'NEST_BU_RSV') + IF (LBUDGET_SV) CALL BUDGET (PRSVS(:,:,:,JSV),NBUDGET_SV1-1+JSV,'NEST_BU_RSV') END DO !------------------------------------------------------------------------------ ! diff --git a/src/MNH/viscosity.f90 b/src/MNH/viscosity.f90 index 3b348d47d3fcd02ab1cf41e01de0606a5498808f..54d2170c1a52324b5db3370b510595760f113a42 100644 --- a/src/MNH/viscosity.f90 +++ b/src/MNH/viscosity.f90 @@ -193,7 +193,7 @@ IF (OVISC_TH) THEN ! END IF ! -IF (LBUDGET_TH) CALL BUDGET (PRTHS,4,'VISC_BU_RU') +IF (LBUDGET_TH) CALL BUDGET (PRTHS,NBUDGET_TH,'VISC_BU_RTH') ! !------------------------------------------------------------------------------- ! @@ -211,13 +211,13 @@ IF (OVISC_R .AND. (SIZE(PRT,1) > 0)) THEN ! END IF ! -IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),6,'VISC_BU_RRV') -IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),7,'VISC_BU_RRC') -IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3),8,'VISC_BU_RRR') -IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),9,'VISC_BU_RRI') -IF (LBUDGET_RS) CALL BUDGET (PRRS(:,:,:,5),10,'VISC_BU_RRS') -IF (LBUDGET_RG) CALL BUDGET (PRRS(:,:,:,6),11,'VISC_BU_RRG') -IF (LBUDGET_RH) CALL BUDGET (PRRS(:,:,:,7),12,'VISC_BU_RRH') +IF (LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),NBUDGET_RV,'VISC_BU_RRV') +IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),NBUDGET_RC,'VISC_BU_RRC') +IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3),NBUDGET_RR,'VISC_BU_RRR') +IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),NBUDGET_RI,'VISC_BU_RRI') +IF (LBUDGET_RS) CALL BUDGET (PRRS(:,:,:,5),NBUDGET_RS,'VISC_BU_RRS') +IF (LBUDGET_RG) CALL BUDGET (PRRS(:,:,:,6),NBUDGET_RG,'VISC_BU_RRG') +IF (LBUDGET_RH) CALL BUDGET (PRRS(:,:,:,7),NBUDGET_RH,'VISC_BU_RRH') ! !------------------------------------------------------------------------------- ! @@ -236,7 +236,7 @@ END IF ! IF (LBUDGET_SV) THEN DO IK = 1, KSV - CALL BUDGET (PRSVS(:,:,:,IK), 12+IK, 'VISC_BU_RSV') + CALL BUDGET (PRSVS(:,:,:,IK), NBUDGET_SV1-1+IK, 'VISC_BU_RSV') END DO END IF ! @@ -334,8 +334,8 @@ ENDIF ENDIF END IF ! -IF (LBUDGET_U) CALL BUDGET (PRUS,1,'VISC_BU_RU') -IF (LBUDGET_V) CALL BUDGET (PRVS,2,'VISC_BU_RV') -IF (LBUDGET_W) CALL BUDGET (PRWS,2,'VISC_BU_RW') +IF (LBUDGET_U) CALL BUDGET (PRUS,NBUDGET_U,'VISC_BU_RU') +IF (LBUDGET_V) CALL BUDGET (PRVS,NBUDGET_V,'VISC_BU_RV') +IF (LBUDGET_W) CALL BUDGET (PRWS,NBUDGET_V,'VISC_BU_RW') ! END SUBROUTINE VISCOSITY diff --git a/src/MNH/write_aircraft_balloon.f90 b/src/MNH/write_aircraft_balloon.f90 index 591807663ac0732ae61886606f3afb3b52c2d925..39f17c64e9220882468ff50c22dab88f199be883 100644 --- a/src/MNH/write_aircraft_balloon.f90 +++ b/src/MNH/write_aircraft_balloon.f90 @@ -63,9 +63,10 @@ END MODULE MODI_WRITE_AIRCRAFT_BALLOON !! Oct 2016 : G.Delautier LIMA !! August 2016 (M.Leriche) Add mass concentration of aerosol species !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O -!! P. Wautelet 29/01/2019: bug: moved an instruction later (to prevent access to a not allocated array) -!! -!! -------------------------------------------------------------------------- +! P. Wautelet 29/01/2019: bug: moved an instruction later (to prevent access to a not allocated array) +! P. Wautelet 13/09/2019: budget: simplify and modernize date/time management +! +! -------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ @@ -173,7 +174,6 @@ TYPE(FLYER), INTENT(IN) :: TPFLYER ! !* 0.2 declaration of local variables for diachro ! -REAL, DIMENSION(:,:), ALLOCATABLE :: ZTRAJT ! localization of the REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTRAJX ! temporal series REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTRAJY ! in t,x,y and z. REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTRAJZ ! @@ -231,23 +231,21 @@ IF (LORILAM) IPROC = IPROC + JPMODE*3 IF (LDUST) IPROC = IPROC + NMODE_DST*3 IF (SIZE(TPFLYER%TSRAD)>0) IPROC = IPROC + 1 ! -ALLOCATE (ZTRAJT( SIZE(TPFLYER%TIME),1)) -ALLOCATE (ZTRAJX(1,SIZE(TPFLYER%TIME),1)) -ALLOCATE (ZTRAJY(1,SIZE(TPFLYER%TIME),1)) -ALLOCATE (ZTRAJZ(1,SIZE(TPFLYER%TIME),1)) -ALLOCATE (ZWORK6(1,1,1,SIZE(TPFLYER%TIME),1,IPROC)) +ALLOCATE (ZTRAJX(1,size(tpflyer%tpdates),1)) +ALLOCATE (ZTRAJY(1,size(tpflyer%tpdates),1)) +ALLOCATE (ZTRAJZ(1,size(tpflyer%tpdates),1)) +ALLOCATE (ZWORK6(1,1,1,size(tpflyer%tpdates),1,IPROC)) ALLOCATE (YCOMMENT(IPROC)) ALLOCATE (YTITLE (IPROC)) ALLOCATE (YUNIT (IPROC)) ALLOCATE (IGRID (IPROC)) -ALLOCATE (ZWORKZ6(1,1,IKU,SIZE(TPFLYER%TIME),1,IPROCZ)) +ALLOCATE (ZWORKZ6(1,1,IKU,size(tpflyer%tpdates),1,IPROCZ)) ALLOCATE (YCOMMENTZ(IPROCZ)) ALLOCATE (YTITLEZ (IPROCZ)) ALLOCATE (YUNITZ (IPROCZ)) ALLOCATE (IGRIDZ (IPROCZ)) ! -ZTRAJT (:,1) = TPFLYER%TIME ZTRAJX(1,:,1) = TPFLYER%X ZTRAJY(1,:,1) = TPFLYER%Y ZTRAJZ(1,:,1) = TPFLYER%Z @@ -347,7 +345,7 @@ END DO ! !add cloud liquid water content in g/m3 to compare to measurements from FSSP !IF (.NOT.(ANY(TPFLYER%P(:) == 0.))) THEN -ALLOCATE (ZRHO(1,1,SIZE(TPFLYER%TIME))) +ALLOCATE (ZRHO(1,1,size(tpflyer%tpdates))) IF (SIZE(TPFLYER%R,2) >1) THEN !cloud water is present ZRHO(1,1,:) = 0. DO JRR=1,SIZE(TPFLYER%R,2) @@ -355,7 +353,7 @@ IF (SIZE(TPFLYER%R,2) >1) THEN !cloud water is present ENDDO ZRHO(1,1,:) = TPFLYER%TH(:) * ( 1. + XRV/XRD*TPFLYER%R(:,1) ) & / ( 1. + ZRHO(1,1,:) ) - DO JPT=1,SIZE(TPFLYER%TIME) + DO JPT=1,size(tpflyer%tpdates) IF (TPFLYER%P(JPT) == 0.) THEN ZRHO(1,1,JPT) = 0. ELSE @@ -503,12 +501,12 @@ IF (SIZE(TPFLYER%SV,2)>=1) THEN END DO IF ((LORILAM).AND. .NOT.(ANY(TPFLYER%P(:) == 0.))) THEN - ALLOCATE (ZSV(1,1,SIZE(TPFLYER%TIME),NSV_AER)) - ALLOCATE (ZRHO(1,1,SIZE(TPFLYER%TIME))) - ALLOCATE (ZN0(1,1,SIZE(TPFLYER%TIME),JPMODE)) - ALLOCATE (ZRG(1,1,SIZE(TPFLYER%TIME),JPMODE)) - ALLOCATE (ZSIG(1,1,SIZE(TPFLYER%TIME),JPMODE)) - ALLOCATE (ZPTOTA(1,1,SIZE(TPFLYER%TIME),NSP+NCARB+NSOA,JPMODE)) + ALLOCATE (ZSV(1,1,size(tpflyer%tpdates),NSV_AER)) + ALLOCATE (ZRHO(1,1,size(tpflyer%tpdates))) + ALLOCATE (ZN0(1,1,size(tpflyer%tpdates),JPMODE)) + ALLOCATE (ZRG(1,1,size(tpflyer%tpdates),JPMODE)) + ALLOCATE (ZSIG(1,1,size(tpflyer%tpdates),JPMODE)) + ALLOCATE (ZPTOTA(1,1,size(tpflyer%tpdates),NSP+NCARB+NSOA,JPMODE)) ZSV(1,1,:,1:NSV_AER) = TPFLYER%SV(:,NSV_AERBEG:NSV_AEREND) IF (SIZE(TPFLYER%R,2) >0) THEN ZRHO(1,1,:) = 0. @@ -526,7 +524,7 @@ IF (SIZE(TPFLYER%SV,2)>=1) THEN ZRG = 0. ZN0 = 0. ZPTOTA = 0. - DO JPT=1,SIZE(TPFLYER%TIME) ! prevent division by zero if ZSV = 0. + DO JPT=1,size(tpflyer%tpdates) ! prevent division by zero if ZSV = 0. IF (ALL(ZSV(1,1,JPT,:)/=0.)) THEN CALL PPP2AERO(ZSV,ZRHO, PSIG3D=ZSIG, PRG3D=ZRG, PN3D=ZN0, PCTOTA=ZPTOTA) ENDIF @@ -668,11 +666,11 @@ IF (SIZE(TPFLYER%SV,2)>=1) THEN ZWORK6 (1,1,1,:,1,JPROC) = TPFLYER%SV(:,JSV) * 1.E9 END DO IF ((LDUST).AND. .NOT.(ANY(TPFLYER%P(:) == 0.))) THEN - ALLOCATE (ZSV(1,1,SIZE(TPFLYER%TIME),NSV_DST)) - ALLOCATE (ZRHO(1,1,SIZE(TPFLYER%TIME))) - ALLOCATE (ZN0(1,1,SIZE(TPFLYER%TIME),NMODE_DST)) - ALLOCATE (ZRG(1,1,SIZE(TPFLYER%TIME),NMODE_DST)) - ALLOCATE (ZSIG(1,1,SIZE(TPFLYER%TIME),NMODE_DST)) + ALLOCATE (ZSV(1,1,size(tpflyer%tpdates),NSV_DST)) + ALLOCATE (ZRHO(1,1,size(tpflyer%tpdates))) + ALLOCATE (ZN0(1,1,size(tpflyer%tpdates),NMODE_DST)) + ALLOCATE (ZRG(1,1,size(tpflyer%tpdates),NMODE_DST)) + ALLOCATE (ZSIG(1,1,size(tpflyer%tpdates),NMODE_DST)) ZSV(1,1,:,1:NSV_DST) = TPFLYER%SV(:,NSV_DSTBEG:NSV_DSTEND) IF (SIZE(TPFLYER%R,2) >0) THEN ZRHO(1,1,:) = 0. @@ -833,23 +831,22 @@ DO IK=1, IKU END DO !---------------------------------------------------------------------------- ! -ALLOCATE (ZW6(1,1,1,SIZE(TPFLYER%TIME),1,JPROC)) +ALLOCATE (ZW6(1,1,1,size(tpflyer%tpdates),1,JPROC)) ZW6 = ZWORK6(:,:,:,:,:,:JPROC) DEALLOCATE(ZWORK6) -ALLOCATE (ZWZ6(1,1,IKU,SIZE(TPFLYER%TIME),1,JPROCZ)) +ALLOCATE (ZWZ6(1,1,IKU,size(tpflyer%tpdates),1,JPROCZ)) ZWZ6 = ZWORKZ6(:,:,:,:,:,:JPROCZ) DEALLOCATE(ZWORKZ6) ! -CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT0,YGROUP,"RSPL",IGRID, TPFLYER%DATIME, ZW6, & - ZTRAJT,YTITLE,YUNIT,YCOMMENT, & - PTRAJX=ZTRAJX, PTRAJY=ZTRAJY, PTRAJZ=ZTRAJZ ) +CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT0, YGROUP, "RSPL", IGRID, tpflyer%tpdates, & + ZW6, YTITLE(:), YUNIT(:), YCOMMENT(:), & + PTRAJX = ZTRAJX, PTRAJY = ZTRAJY, PTRAJZ = ZTRAJZ ) ! -CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT0,YGROUPZ,"CART",IGRIDZ, TPFLYER%DATIME, & - ZWZ6,ZTRAJT,YTITLEZ,YUNITZ,YCOMMENTZ, & - .TRUE.,.TRUE.,.FALSE., & - KIL=1,KIH=1,KJL=1,KJH=1,KKL=1,KKH=IKU ) +CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT0, YGROUPZ, "CART", IGRIDZ, tpflyer%tpdates, & + ZWZ6, YTITLEZ(:), YUNITZ(:), YCOMMENTZ(:), & + OICP = .TRUE., OJCP = .TRUE., OKCP = .FALSE., & + KIL = 1, KIH = 1, KJL = 1, KJH = 1, KKL = 1, KKH = IKU ) -DEALLOCATE (ZTRAJT) DEALLOCATE (ZTRAJX) DEALLOCATE (ZTRAJY) DEALLOCATE (ZTRAJZ) diff --git a/src/MNH/write_budget.f90 b/src/MNH/write_budget.f90 index b92c33c1869c6396e61b74ba0e910349c77425e5..5f6ab614abb31fa60272858b172864075c98f021 100644 --- a/src/MNH/write_budget.f90 +++ b/src/MNH/write_budget.f90 @@ -3,38 +3,53 @@ !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- -!######################## - MODULE MODI_WRITE_BUDGET -!######################## -! -INTERFACE -! - SUBROUTINE WRITE_BUDGET(TPDIAFILE,TPDTCUR, & - TPDTMOD,PTSTEP, KSV) -! -USE MODD_IO, ONLY: TFILEDATA -USE MODD_TYPE_DATE -! -TYPE(TFILEDATA), INTENT(IN) :: TPDIAFILE ! file to write -TYPE (DATE_TIME), INTENT(IN) :: TPDTCUR ! Current date and time -TYPE (DATE_TIME), INTENT(IN) :: TPDTMOD ! Creation date and time -REAL, INTENT(IN) :: PTSTEP ! time step -INTEGER, INTENT(IN) :: KSV ! Number of Scalar Variables -! -END SUBROUTINE WRITE_BUDGET -! -END INTERFACE -! -END MODULE MODI_WRITE_BUDGET -! -! -! -! ############################################ - SUBROUTINE WRITE_BUDGET(TPDIAFILE,TPDTCUR, & - TPDTMOD,PTSTEP, KSV) -! ############################################ +! Author: +! J. Nicolau (Meteo-France) 27/02/1995 +! Modifications: +! J. Stein 09/09/1996: add the writings in the diachronic file +! J.-P. Pinty 18/12/1996: clarify the coding +! J.-P. Pinty 18/03/1997: correction for the SVx +! V. Gouget M. Chong J.-P. Lafore 10/02/1998: add the BURHODJ, TSTEP and BULEN and writes in physical units +! V. Ducrocq 07/06/1999: // +! N. Asencio 18/06/1999: // budget with MASK case +! delete ZTORE arrays no longer used, so delete +! KIU,KJU,KKU arguments +! the mask is written once with a FMWRIT call outside +! write_diachro: its name is MASK_(value of NBUTSHIFT).MASK +! MENU_DIACHRO must be called after FMWRIT to be read in +! read_diachro. +! NBUTSHIFT is incremented at the beginning of the routine +! The dimensions of the XBUR.. arrays are : first one +! is the dimension along K, second one is the time, the +! third one is the number of the masks. +! G. Tanguy 10/2009: add ILENCH=LEN(YCOMMENT) after change of YCOMMENT +! J. Escobar 24/03/2014: misplaced deallocate in RSV budget +! C. Lac 11/09/2015: orrection due to FIT temporal scheme +! P. Wautelet 28/03/2018: Replace TEMPORAL_DIST by DATETIME_DISTANCE +! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O +! P. Wautelet 13/09/2019: budget: simplify and modernize date/time management +! P. Wautelet 14/10/2019: complete restructuration and deduplication of code +!----------------------------------------------------------------- + +!####################### +module mode_write_budget +!####################### + +use mode_msg + +implicit none + +private + +public :: Write_budget + +contains + +!######################################################### +subroutine Write_budget( tpdiafile, tpdtcur, ptstep, ksv ) +!######################################################### ! -!!**** *WRITE_BUDGET* - routine to write a LFIFM file for the budget. +!!**** *WRITE_BUDGET* - routine to write a budget file !! !! !! PURPOSE @@ -58,8 +73,8 @@ END MODULE MODI_WRITE_BUDGET !! IGRID = 3 for V grid point !! IGRID = 4 for w grid point !! IGRID = 0 for meaningless case -!! -!! +!! +!! !! !! EXTERNAL !! -------- @@ -68,9 +83,8 @@ END MODULE MODI_WRITE_BUDGET !! IMPLICIT ARGUMENTS !! ------------------ !! Module MODD_BUDGET -!! +!! !! CBUTYPE : Budget type (CART,MASK,SKIP or NONE) -!! CBURECORD : name of output recording files for the budgets !! CBUCOMMENT : name of a process for a budget !! NBUPROCNBR : number of processes for each variable !! NBUTIME : number of the budget time intervals ('MASK' case) @@ -88,1476 +102,550 @@ END MODULE MODI_WRITE_BUDGET !! XBURRG : budget array of the variable RRG !! XBURRH : budget array of the variable RRH !! XBURSV : budget array of the variable RSVx -!! +!! !! !! REFERENCE !! --------- !! Book2 of MESO-NH documentation (routine WRITE_BUDGET) !! -!! -!! AUTHOR -!! ------ -!! J. Nicolau * Meteo France * -!! -!! MODIFICATIONS -!! ------------- -!! Original 27/02/95 -!! J. Stein 9/9/96 add the writings in the diachronic file -!! J.-P. Pinty 18/12/96 clarify the coding -!! J.-P. Pinty 18/03/97 correction for the SVx -!! V. Gouget M. Chong J.-P. Lafore add the BURHODJ, TSTEP and BULEN -!! 10/02/98 and writes in physical units -!! V. Ducrocq 07/06/99 // -!! N. Asencio 18/06/99 // budget with MASK case -!! delete ZTORE arrays no longer used, so delete -!! KIU,KJU,KKU arguments -!! the mask is written once with a FMWRIT call outside -!! write_diachro: its name is MASK_(value of NBUTSHIFT).MASK -!! MENU_DIACHRO must be called after FMWRIT to be read in -!! read_diachro. -!! NBUTSHIFT is incremented at the beginning of the routine -!! The dimensions of the XBUR.. arrays are : first one -!! is the dimension along K, second one is the time, the -!! third one is the number of the masks. -!! October 2009 (G. Tanguy) add ILENCH=LEN(YCOMMENT) after -!! change of YCOMMENT -!! 24/03/2014 (J.Escobar ) miss placed deallocate in RSV budget -!! 11/09/2015 (C.Lac) Correction due to FIT temporal scheme -!! 28/03/2018 (P.Wautelet) Replace TEMPORAL_DIST by DATETIME_DISTANCE -!! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O -!! -!------------------------------------------------------------------------------- -! -!* 0. -! ------------ -USE MODD_BUDGET -USE MODD_IO, ONLY: TFILEDATA -USE MODD_LUNIT_n, ONLY: TLUOUT -! -USE MODE_DATETIME -USE MODE_FIELD, ONLY: TFIELDDATA, TYPEREAL -USE MODE_IO_FIELD_WRITE, only: IO_Field_write -use mode_menu_diachro, only: MENU_DIACHRO -USE MODE_TIME -USE MODE_WRITE_DIACHRO, only: WRITE_DIACHRO -! -USE MODI_END_CART_COMPRESS -USE MODI_END_MASK_COMPRESS -! -! -IMPLICIT NONE -! -! -!* 0.1 Declarations of arguments : -! -TYPE(TFILEDATA), INTENT(IN) :: TPDIAFILE ! file to write -TYPE (DATE_TIME), INTENT(IN) :: TPDTCUR ! Current date and time -TYPE (DATE_TIME), INTENT(IN) :: TPDTMOD ! Creation date and time -REAL, INTENT(IN) :: PTSTEP ! time step -INTEGER, INTENT(IN) :: KSV ! Number of Scalar Variables -! -!* 0.2 Declarations of local variables : -! -CHARACTER(LEN=NMNHNAMELGTMAX) :: YRECFM ! Name of the article to be written -INTEGER :: JT,JPROC,JMASK -! -! -REAL, ALLOCATABLE , DIMENSION(:,:,:,:,:,:) :: ZWORK, ZWORKT, ZWORKMASK ! local array - ! conformal to what is asked by the diachro format for the fields - ! and for the masks -LOGICAL :: GNOCOMPRESS ! If TRUE : no compress along x and y direction in the CART option -REAL, ALLOCATABLE , DIMENSION(:) :: ZCONVERT ! unit conversion coefficient -REAL, ALLOCATABLE , DIMENSION(:,:):: ZWORKTEMP ! time -INTEGER, ALLOCATABLE , DIMENSION(:) :: IWORKGRID ! grid label -CHARACTER (LEN=99), ALLOCATABLE , DIMENSION(:) :: YBUCOMMENT ! comment -CHARACTER (LEN=100), ALLOCATABLE , DIMENSION(:) :: YWORKCOMMENT ! comment -CHARACTER (LEN=100), ALLOCATABLE , DIMENSION(:) :: YWORKUNIT ! comment -CHARACTER (LEN=9) :: YGROUP_NAME ! group name -CHARACTER(LEN=28) :: YFILEDIA -REAL, ALLOCATABLE , DIMENSION(:,:):: ZWORKDATIME ! global time - ! info -INTEGER :: JSV ! loop index - ! over the - ! KSV SVx -INTEGER :: IP -TYPE(TFIELDDATA) :: TZFIELD -! -!------------------------------------------------------------------------------- -! -YFILEDIA = TPDIAFILE%CNAME -! -!* 1. write TSTEP and BULEN -! --------------------- -! -TZFIELD%CMNHNAME = 'TSTEP' -TZFIELD%CSTDNAME = '' -TZFIELD%CLONGNAME = 'TSTEP' -TZFIELD%CUNITS = 's' -TZFIELD%CDIR = '--' -TZFIELD%CCOMMENT = 'Time step' -TZFIELD%NGRID = 0 -TZFIELD%NTYPE = TYPEREAL -TZFIELD%NDIMS = 0 -TZFIELD%LTIMEDEP = .FALSE. -CALL IO_Field_write(TPDIAFILE,TZFIELD,PTSTEP) -! -TZFIELD%CMNHNAME = 'BULEN' -TZFIELD%CSTDNAME = '' -TZFIELD%CLONGNAME = 'BULEN' -TZFIELD%CUNITS = 's' -TZFIELD%CDIR = '--' -TZFIELD%CCOMMENT = 'Time step' -TZFIELD%NGRID = 0 -TZFIELD%NTYPE = TYPEREAL -TZFIELD%NDIMS = 0 -TZFIELD%LTIMEDEP = .FALSE. -CALL IO_Field_write(TPDIAFILE,TZFIELD,XBULEN) -! -!* 1.1 initialize NBUTSHIFT -! --------------------- -! -NBUTSHIFT = NBUTSHIFT+1 -! -! -SELECT CASE (CBUTYPE) -! !------------------------------------------------------------------------------- -! -!* 2. 'CART' CASE -! ----------- -! - CASE('CART','SKIP') - GNOCOMPRESS=(.NOT.LBU_ICP .AND. .NOT.LBU_JCP) -! -!* 2.1 Initialization -! - ALLOCATE(ZWORKTEMP(1,1)) - ALLOCATE(ZWORKDATIME(16,1)) -! - ZWORKDATIME(1,1)=TDTEXP%TDATE%YEAR - ZWORKDATIME(2,1)=TDTEXP%TDATE%MONTH - ZWORKDATIME(3,1)=TDTEXP%TDATE%DAY - ZWORKDATIME(4,1)=TDTEXP%TIME - ZWORKDATIME(5,1)=TDTSEG%TDATE%YEAR - ZWORKDATIME(6,1)=TDTSEG%TDATE%MONTH - ZWORKDATIME(7,1)=TDTSEG%TDATE%DAY - ZWORKDATIME(8,1)=TDTSEG%TIME - ZWORKDATIME(9,1)=TPDTMOD%TDATE%YEAR - ZWORKDATIME(10,1)=TPDTMOD%TDATE%MONTH - ZWORKDATIME(11,1)=TPDTMOD%TDATE%DAY - ZWORKDATIME(12,1)=TPDTMOD%TIME -! - CALL DATETIME_DISTANCE(TDTEXP,TPDTCUR,ZWORKTEMP(1,1)) -! - ZWORKTEMP(1,1)=ZWORKTEMP(1,1)+(1.-NBUSTEP*0.5)*PTSTEP -! - ZWORKDATIME(13,1)=TDTEXP%TDATE%YEAR - ZWORKDATIME(14,1)=TDTEXP%TDATE%MONTH - ZWORKDATIME(15,1)=TDTEXP%TDATE%DAY - ZWORKDATIME(16,1)=TDTEXP%TIME+ZWORKTEMP(1,1) -! -!* 2.2 storage of the budgets array -! -!* 2.2.1 RU budget -! - IF (LBU_RU) THEN -! XBURHODJU and RU budgets -! - IP=1 -! unit conversion for RU budgets - ALLOCATE(ZCONVERT(NBUPROCNBR(IP))) - ZCONVERT(1:2) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(3) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(4:NBUPROCNBR(IP)) = 1. -! - IF (GNOCOMPRESS) THEN - ALLOCATE(ZWORKT(NBUIMAX,NBUJMAX,NBUKMAX,1,1,NBUPROCNBR(IP))) ! local budget of RU - DO JPROC=1,NBUPROCNBR(IP) - ZWORKT(:,:,:,1,1,JPROC) = XBURU(:,:,:,JPROC) * ZCONVERT(JPROC) & - / XBURHODJU(:,:,:) - END DO - ELSE - ALLOCATE(ZWORK(NBUIMAX_ll,NBUJMAX_ll,NBUKMAX,1,1,1)) ! global budget of RhodjU - ZWORK(:,:,:,1,1,1)=END_CART_COMPRESS(XBURHODJU(:,:,:)) -! - ALLOCATE(ZWORKT(NBUIMAX_ll,NBUJMAX_ll,NBUKMAX,1,1,NBUPROCNBR(IP))) ! global budget of RU -! - DO JPROC=1,NBUPROCNBR(IP) - ZWORKT(:,:,:,1,1,JPROC) = END_CART_COMPRESS(XBURU(:,:,:,JPROC)) - ZWORKT(:,:,:,1,1,JPROC) = ZWORKT(:,:,:,1,1,JPROC)* ZCONVERT(JPROC) & - / ZWORK(:,:,:,1,1,1) - END DO - ENDIF - DEALLOCATE(ZCONVERT) -! -! RU budgets storage - ALLOCATE(YWORKUNIT(NBUPROCNBR(IP))) - ALLOCATE(YWORKCOMMENT(NBUPROCNBR(IP))) - ALLOCATE(IWORKGRID(NBUPROCNBR(IP))) -! - YWORKUNIT(:) = 'm s-2'; YWORKUNIT(1:3) = 'm s-1' - YWORKCOMMENT(:) = 'Budget of momentum along X axis' - IWORKGRID(:) = 2 - WRITE(YGROUP_NAME,FMT="('UU___',I4.4)") NBUTSHIFT -! - CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, 'CART', IWORKGRID, & - ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(1, :), & - YWORKUNIT, YWORKCOMMENT, & - LBU_ICP, LBU_JCP, LBU_KCP, & - NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH ) - DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID) -! -! XBURHODJU storage - IF (GNOCOMPRESS) THEN - ALLOCATE(ZWORK(NBUIMAX,NBUJMAX,NBUKMAX,1,1,1)) ! local budget of RHODJU - ZWORK(:,:,:,1,1,1) = XBURHODJU(:,:,:) - END IF - ALLOCATE(YBUCOMMENT(1)) - ALLOCATE(YWORKUNIT(1)) - ALLOCATE(YWORKCOMMENT(1)) - ALLOCATE(IWORKGRID(1)) -! - YBUCOMMENT(1) = 'RhodJX' - YWORKUNIT(1) = 'kg' - YWORKCOMMENT(1) = 'RhodJ for momentum along X axis' - IWORKGRID(1) = 2 - WRITE(YGROUP_NAME,FMT="('RJX__',I4.4)") NBUTSHIFT -! - CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME,'CART', IWORKGRID, & - ZWORKDATIME, ZWORK, ZWORKTEMP, YBUCOMMENT, & - YWORKUNIT, YWORKCOMMENT, & - LBU_ICP, LBU_JCP, LBU_KCP, & - NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH ) - DEALLOCATE(ZWORK, YBUCOMMENT, YWORKUNIT, YWORKCOMMENT, IWORKGRID) - END IF -! -!* 2.2.2 RV budget -! - IF (LBU_RV) THEN - ! XBURHODJV and RV budgets -! - IP=2 - ALLOCATE(ZCONVERT(NBUPROCNBR(IP))) - ZCONVERT(1:2) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(3) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(4:NBUPROCNBR(IP)) = 1. -! - IF (GNOCOMPRESS) THEN - ALLOCATE(ZWORKT(NBUIMAX,NBUJMAX,NBUKMAX,1,1,NBUPROCNBR(IP))) ! local budget of RV - DO JPROC=1,NBUPROCNBR(IP) - ZWORKT(:,:,:,1,1,JPROC) = XBURV(:,:,:,JPROC) * ZCONVERT(JPROC) & - / XBURHODJV(:,:,:) - END DO - ELSE - ALLOCATE(ZWORK(NBUIMAX_ll,NBUJMAX_ll,NBUKMAX,1,1,1)) ! global budget of RhodjV - ZWORK(:,:,:,1,1,1)=END_CART_COMPRESS(XBURHODJV(:,:,:)) -! - ALLOCATE(ZWORKT(NBUIMAX_ll,NBUJMAX_ll,NBUKMAX,1,1,NBUPROCNBR(IP))) ! global budget of RV -! - DO JPROC=1,NBUPROCNBR(IP) - ZWORKT(:,:,:,1,1,JPROC) = END_CART_COMPRESS(XBURV(:,:,:,JPROC)) - ZWORKT(:,:,:,1,1,JPROC) = ZWORKT(:,:,:,1,1,JPROC)* ZCONVERT(JPROC) & - / ZWORK(:,:,:,1,1,1) - END DO - ENDIF - DEALLOCATE(ZCONVERT) -! -! RV budgets storage - ALLOCATE(YWORKUNIT(NBUPROCNBR(IP))) - ALLOCATE(YWORKCOMMENT(NBUPROCNBR(IP))) - ALLOCATE(IWORKGRID(NBUPROCNBR(IP))) - ! - YWORKUNIT(:) = 'm s-2'; YWORKUNIT(1:3) = 'm s-1' - YWORKCOMMENT(:) = 'Budget of momentum along Y axis' - IWORKGRID(:) = 3 - WRITE(YGROUP_NAME,FMT="('VV___',I4.4)") NBUTSHIFT - ! - CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, 'CART', IWORKGRID, & - ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(IP, :), & - YWORKUNIT, YWORKCOMMENT, & - LBU_ICP, LBU_JCP, LBU_KCP, & - NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH ) - DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID) -! XBURHODJV storage - IF (GNOCOMPRESS) THEN - ALLOCATE(ZWORK(NBUIMAX,NBUJMAX,NBUKMAX,1,1,1)) ! local budget of RHODJV - ZWORK(:,:,:,1,1,1) = XBURHODJV(:,:,:) - END IF - ALLOCATE(YBUCOMMENT(1)) - ALLOCATE(YWORKUNIT(1)) - ALLOCATE(YWORKCOMMENT(1)) - ALLOCATE(IWORKGRID(1)) -! - YBUCOMMENT(1) = 'RhodJY' - YWORKUNIT(1) = 'kg' - YWORKCOMMENT(1) = 'RhodJ for momentum along Y axis' - IWORKGRID(1) = 3 - WRITE(YGROUP_NAME,FMT="('RJY__',I4.4)") NBUTSHIFT -! - CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME,'CART', IWORKGRID, & - ZWORKDATIME, ZWORK, ZWORKTEMP, YBUCOMMENT, & - YWORKUNIT, YWORKCOMMENT, & - LBU_ICP, LBU_JCP, LBU_KCP, & - NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH ) - DEALLOCATE(YBUCOMMENT, YWORKUNIT, YWORKCOMMENT, IWORKGRID) - DEALLOCATE(ZWORK) - END IF -! -! -!* 2.2.3 RW budget -! - IF (LBU_RW) THEN -! - IP=3 - ALLOCATE(ZCONVERT(NBUPROCNBR(IP))) - ZCONVERT(1:2) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(3) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(4:NBUPROCNBR(IP)) = 1. -! - IF (GNOCOMPRESS) THEN - ALLOCATE(ZWORKT(NBUIMAX,NBUJMAX,NBUKMAX,1,1,NBUPROCNBR(IP))) ! local budget of RW - DO JPROC=1,NBUPROCNBR(IP) - ZWORKT(:,:,:,1,1,JPROC) = XBURW(:,:,:,JPROC) * ZCONVERT(JPROC) & - / XBURHODJW(:,:,:) - END DO - ELSE - ALLOCATE(ZWORK(NBUIMAX_ll,NBUJMAX_ll,NBUKMAX,1,1,1)) ! global budget of RhodjW - ZWORK(:,:,:,1,1,1)=END_CART_COMPRESS(XBURHODJW(:,:,:)) - ! - ALLOCATE(ZWORKT(NBUIMAX_ll,NBUJMAX_ll,NBUKMAX,1,1,NBUPROCNBR(IP))) ! global budget of RW -! - DO JPROC=1,NBUPROCNBR(IP) - ZWORKT(:,:,:,1,1,JPROC) = END_CART_COMPRESS(XBURW(:,:,:,JPROC)) - ZWORKT(:,:,:,1,1,JPROC) = ZWORKT(:,:,:,1,1,JPROC)* ZCONVERT(JPROC) & - / ZWORK(:,:,:,1,1,1) - END DO - ENDIF - DEALLOCATE(ZCONVERT) -! -! RW budgets storage - ALLOCATE(YWORKUNIT(NBUPROCNBR(IP))) - ALLOCATE(YWORKCOMMENT(NBUPROCNBR(IP))) - ALLOCATE(IWORKGRID(NBUPROCNBR(IP))) -! - YWORKUNIT(:) = 'm s-2'; YWORKUNIT(1:3) = 'm s-1' - YWORKCOMMENT(:) = 'Budget of momentum along Z axis' - IWORKGRID(:) = 4 - WRITE(YGROUP_NAME,FMT="('WW___',I4.4)") NBUTSHIFT - CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, 'CART', IWORKGRID, & - ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(IP, :), & - YWORKUNIT, YWORKCOMMENT, & - LBU_ICP, LBU_JCP, LBU_KCP, & - NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH ) - DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID) -! XBURHODJW storage - IF (GNOCOMPRESS) THEN - ALLOCATE(ZWORK(NBUIMAX,NBUJMAX,NBUKMAX,1,1,1)) ! local budget of RHODJW - ZWORK(:,:,:,1,1,1) = XBURHODJW(:,:,:) - END IF - ALLOCATE(YBUCOMMENT(1)) - ALLOCATE(YWORKUNIT(1)) - ALLOCATE(YWORKCOMMENT(1)) - ALLOCATE(IWORKGRID(1)) -! - YBUCOMMENT(1) = 'RhodJZ' - YWORKUNIT(1) = 'kg' - YWORKCOMMENT(1) = 'RhodJ for momentum along Z axis' - IWORKGRID(1) = 4 - WRITE(YGROUP_NAME,FMT="('RJZ__',I4.4)") NBUTSHIFT -! - CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME,'CART', IWORKGRID, & - ZWORKDATIME, ZWORK, ZWORKTEMP, YBUCOMMENT, & - YWORKUNIT, YWORKCOMMENT, & - LBU_ICP, LBU_JCP, LBU_KCP, & - NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH ) - DEALLOCATE(YBUCOMMENT, YWORKUNIT, YWORKCOMMENT, IWORKGRID) - DEALLOCATE(ZWORK) - END IF - -! -!* 2.2.3' XBURHODJ storage for Scalars -! - IF (LBU_RTH .OR. LBU_RTKE .OR. LBU_RRV .OR. LBU_RRC .OR. LBU_RRR .OR. & - LBU_RRI .OR. LBU_RRS .OR. LBU_RRG .OR. LBU_RRH .OR. LBU_RSV ) THEN -! - IF (GNOCOMPRESS) THEN - ALLOCATE(ZWORK(NBUIMAX,NBUJMAX,NBUKMAX,1,1,1)) ! local budget of RHODJ - ZWORK(:,:,:,1,1,1) = XBURHODJ(:,:,:) - ELSE - ALLOCATE(ZWORK(NBUIMAX_ll,NBUJMAX_ll,NBUKMAX,1,1,1)) ! global budget of RodhjW - ZWORK(:,:,:,1,1,1)=END_CART_COMPRESS(XBURHODJ(:,:,:)) - END IF - ALLOCATE(YBUCOMMENT(1)) - ALLOCATE(YWORKUNIT(1)) - ALLOCATE(YWORKCOMMENT(1)) - ALLOCATE(IWORKGRID(1)) -! - YBUCOMMENT(1) = 'RhodJS' - YWORKUNIT(1) = 'kg' - YWORKCOMMENT(1) = 'RhodJ for Scalars variables' - IWORKGRID(1) = 1 - WRITE(YGROUP_NAME,FMT="('RJS__',I4.4)") NBUTSHIFT -! - CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, 'CART', IWORKGRID, & - ZWORKDATIME, ZWORK, ZWORKTEMP, YBUCOMMENT, & - YWORKUNIT, YWORKCOMMENT, & - LBU_ICP, LBU_JCP, LBU_KCP, & - NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH ) - IF (GNOCOMPRESS) THEN - DEALLOCATE(ZWORK, YBUCOMMENT, YWORKUNIT, YWORKCOMMENT, IWORKGRID) - ELSE - DEALLOCATE(YBUCOMMENT, YWORKUNIT, YWORKCOMMENT, IWORKGRID) - ENDIF -! - ENDIF -! -!* 2.2.4 RTH budget -! - IF (LBU_RTH) THEN -! RTH budgets storage - IP=4 - ALLOCATE(ZCONVERT(NBUPROCNBR(IP))) - ZCONVERT(1:2) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(3) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(4:NBUPROCNBR(IP)) = 1. -! - IF (GNOCOMPRESS) THEN - ALLOCATE(ZWORKT(NBUIMAX,NBUJMAX,NBUKMAX,1,1,NBUPROCNBR(IP))) ! local budget of RTH - DO JPROC=1,NBUPROCNBR(IP) - ZWORKT(:,:,:,1,1,JPROC) = XBURTH(:,:,:,JPROC) * ZCONVERT(JPROC) & - / XBURHODJ(:,:,:) - END DO - ELSE -! - ALLOCATE(ZWORKT(NBUIMAX_ll,NBUJMAX_ll,NBUKMAX,1,1,NBUPROCNBR(IP))) ! global budget of RTH -! - DO JPROC=1,NBUPROCNBR(IP) - ZWORKT(:,:,:,1,1,JPROC) = END_CART_COMPRESS(XBURTH(:,:,:,JPROC)) - ZWORKT(:,:,:,1,1,JPROC) = ZWORKT(:,:,:,1,1,JPROC)* ZCONVERT(JPROC) & - / ZWORK(:,:,:,1,1,1) - END DO - ENDIF - DEALLOCATE(ZCONVERT) -! - ALLOCATE(YWORKUNIT(NBUPROCNBR(IP))) - ALLOCATE(YWORKCOMMENT(NBUPROCNBR(IP))) - ALLOCATE(IWORKGRID(NBUPROCNBR(IP))) -! - YWORKUNIT(:) = 'K s-1' ; YWORKUNIT(1:3) = 'K' - YWORKCOMMENT(:) = 'Budget of potential temperature' - IWORKGRID(:) = 1 - WRITE(YGROUP_NAME,FMT="('TH___',I4.4)") NBUTSHIFT -! - CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, 'CART', IWORKGRID, & - ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(IP, :), & - YWORKUNIT, YWORKCOMMENT, & - LBU_ICP, LBU_JCP, LBU_KCP, & - NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH ) - DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID) -! - END IF -! -!* 2.2.5 RTKE budget -! - IF (LBU_RTKE) THEN -! RTKE budgets storage - IP=5 - ALLOCATE(ZCONVERT(NBUPROCNBR(IP))) - ZCONVERT(1:2) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(3) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(4:NBUPROCNBR(IP)) = 1. -! - IF (GNOCOMPRESS) THEN - ALLOCATE(ZWORKT(NBUIMAX,NBUJMAX,NBUKMAX,1,1,NBUPROCNBR(IP))) ! local budget of RTKE - DO JPROC=1,NBUPROCNBR(IP) - ZWORKT(:,:,:,1,1,JPROC) = XBURTKE(:,:,:,JPROC) * ZCONVERT(JPROC) & - / XBURHODJ(:,:,:) - END DO - ELSE -! - ALLOCATE(ZWORKT(NBUIMAX_ll,NBUJMAX_ll,NBUKMAX,1,1,NBUPROCNBR(IP))) ! global budget of RTKE -! - DO JPROC=1,NBUPROCNBR(IP) - ZWORKT(:,:,:,1,1,JPROC) = END_CART_COMPRESS(XBURTKE(:,:,:,JPROC)) - ZWORKT(:,:,:,1,1,JPROC) = ZWORKT(:,:,:,1,1,JPROC)* ZCONVERT(JPROC) & - / ZWORK(:,:,:,1,1,1) - END DO - ENDIF - DEALLOCATE(ZCONVERT) -! - ALLOCATE(YWORKUNIT(NBUPROCNBR(IP))) - ALLOCATE(YWORKCOMMENT(NBUPROCNBR(IP))) - ALLOCATE(IWORKGRID(NBUPROCNBR(IP))) -! - YWORKUNIT(:) = 'm2 s-3' ; YWORKUNIT(1:3) = 'm2 s-1' - YWORKCOMMENT(:) = 'Budget of turbulent kinetic energy' - IWORKGRID(:) = 1 - WRITE(YGROUP_NAME,FMT="('TK___',I4.4)") NBUTSHIFT -! - CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, 'CART', IWORKGRID, & - ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(IP, :), & - YWORKUNIT, YWORKCOMMENT, & - LBU_ICP, LBU_JCP, LBU_KCP, & - NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH ) - DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID) -! - END IF -! -!* 2.2.6 RRV budget -! - IF (LBU_RRV) THEN -! RRV budgets storage - IP=6 - ALLOCATE(ZCONVERT(NBUPROCNBR(IP))) - ZCONVERT(1:2) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(3) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(4:NBUPROCNBR(IP)) = 1. -! - IF (GNOCOMPRESS) THEN - ALLOCATE(ZWORKT(NBUIMAX,NBUJMAX,NBUKMAX,1,1,NBUPROCNBR(IP))) ! local budget of RTKE - DO JPROC=1,NBUPROCNBR(IP) - ZWORKT(:,:,:,1,1,JPROC) = XBURRV(:,:,:,JPROC) * ZCONVERT(JPROC) & - / XBURHODJ(:,:,:) - END DO - ELSE -! - ALLOCATE(ZWORKT(NBUIMAX_ll,NBUJMAX_ll,NBUKMAX,1,1,NBUPROCNBR(IP))) ! global budget of RTKE -! - DO JPROC=1,NBUPROCNBR(IP) - ZWORKT(:,:,:,1,1,JPROC) = END_CART_COMPRESS(XBURRV(:,:,:,JPROC)) - ZWORKT(:,:,:,1,1,JPROC) = ZWORKT(:,:,:,1,1,JPROC)* ZCONVERT(JPROC) & - / ZWORK(:,:,:,1,1,1) - END DO - ENDIF - DEALLOCATE(ZCONVERT) -! - ALLOCATE(YWORKUNIT(NBUPROCNBR(IP))) - ALLOCATE(YWORKCOMMENT(NBUPROCNBR(IP))) - ALLOCATE(IWORKGRID(NBUPROCNBR(IP))) -! - YWORKUNIT(:) = 's-1' ; YWORKUNIT(1:3) = 'kg kg-1' - YWORKCOMMENT(:) = 'Budget of water vapor mixing ratio' - IWORKGRID(:) = 1 - WRITE(YGROUP_NAME,FMT="('RV___',I4.4)") NBUTSHIFT -! - CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, 'CART', IWORKGRID, & - ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(IP, :), & - YWORKUNIT, YWORKCOMMENT, & - LBU_ICP, LBU_JCP, LBU_KCP, & - NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH ) - DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID) -! - END IF -! -!* 2.2.7 RRC budget -! - IF (LBU_RRC) THEN -! RRV budgets storage - IP=7 - ALLOCATE(ZCONVERT(NBUPROCNBR(IP))) - ZCONVERT(1:2) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(3) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(4:NBUPROCNBR(IP)) = 1. -! - IF (GNOCOMPRESS) THEN - ALLOCATE(ZWORKT(NBUIMAX,NBUJMAX,NBUKMAX,1,1,NBUPROCNBR(IP))) ! local budget of RRC - DO JPROC=1,NBUPROCNBR(IP) - ZWORKT(:,:,:,1,1,JPROC) = XBURRC(:,:,:,JPROC) * ZCONVERT(JPROC) & - / XBURHODJ(:,:,:) - END DO - ELSE -! - ALLOCATE(ZWORKT(NBUIMAX_ll,NBUJMAX_ll,NBUKMAX,1,1,NBUPROCNBR(IP))) ! global budget of RRC -! - DO JPROC=1,NBUPROCNBR(IP) - ZWORKT(:,:,:,1,1,JPROC) = END_CART_COMPRESS(XBURRC(:,:,:,JPROC)) - ZWORKT(:,:,:,1,1,JPROC) = ZWORKT(:,:,:,1,1,JPROC)* ZCONVERT(JPROC) & - / ZWORK(:,:,:,1,1,1) - END DO - ENDIF - DEALLOCATE(ZCONVERT) -! - ALLOCATE(YWORKUNIT(NBUPROCNBR(IP))) - ALLOCATE(YWORKCOMMENT(NBUPROCNBR(IP))) - ALLOCATE(IWORKGRID(NBUPROCNBR(IP))) -! - YWORKUNIT(:) = 's-1' ; YWORKUNIT(1:3) = 'kg kg-1' - YWORKCOMMENT(:) = 'Budget of cloud water mixing ratio' - IWORKGRID(:) = 1 - WRITE(YGROUP_NAME,FMT="('RC___',I4.4)") NBUTSHIFT -! - CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, 'CART', IWORKGRID, & - ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(IP, :), & - YWORKUNIT, YWORKCOMMENT, & - LBU_ICP, LBU_JCP, LBU_KCP, & - NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH ) - DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID) -! - END IF -! -!* 2.2.8 RRR budget -! - IF (LBU_RRR) THEN - IP=8 - ALLOCATE(ZCONVERT(NBUPROCNBR(IP))) - ZCONVERT(1:2) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(3) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(4:NBUPROCNBR(IP)) = 1. -! - IF (GNOCOMPRESS) THEN - ALLOCATE(ZWORKT(NBUIMAX,NBUJMAX,NBUKMAX,1,1,NBUPROCNBR(IP))) ! local budget of RRR - DO JPROC=1,NBUPROCNBR(IP) - ZWORKT(:,:,:,1,1,JPROC) = XBURRR(:,:,:,JPROC) * ZCONVERT(JPROC) & - / XBURHODJ(:,:,:) - END DO - ELSE -! - ALLOCATE(ZWORKT(NBUIMAX_ll,NBUJMAX_ll,NBUKMAX,1,1,NBUPROCNBR(IP))) ! global budget of RRR -! - DO JPROC=1,NBUPROCNBR(IP) - ZWORKT(:,:,:,1,1,JPROC) = END_CART_COMPRESS(XBURRR(:,:,:,JPROC)) - ZWORKT(:,:,:,1,1,JPROC) = ZWORKT(:,:,:,1,1,JPROC)* ZCONVERT(JPROC) & - / ZWORK(:,:,:,1,1,1) - END DO - ENDIF - DEALLOCATE(ZCONVERT) -! - ALLOCATE(YWORKUNIT(NBUPROCNBR(IP))) - ALLOCATE(YWORKCOMMENT(NBUPROCNBR(IP))) - ALLOCATE(IWORKGRID(NBUPROCNBR(IP))) -! - YWORKUNIT(:) = 's-1' ; YWORKUNIT(1:3) = 'kg kg-1' - YWORKCOMMENT(:) = 'Budget of rain water mixing ratio' - IWORKGRID(:) = 1 - WRITE(YGROUP_NAME,FMT="('RR___',I4.4)") NBUTSHIFT -! - CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, 'CART', IWORKGRID, & - ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(IP, :), & - YWORKUNIT, YWORKCOMMENT, & - LBU_ICP, LBU_JCP, LBU_KCP, & - NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH ) - DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID) -! - END IF -! -!* 2.2.9 RRI budget -! - IF (LBU_RRI) THEN - IP=9 - ALLOCATE(ZCONVERT(NBUPROCNBR(IP))) - ZCONVERT(1:2) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(3) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(4:NBUPROCNBR(IP)) = 1. -! - IF (GNOCOMPRESS) THEN - ALLOCATE(ZWORKT(NBUIMAX,NBUJMAX,NBUKMAX,1,1,NBUPROCNBR(IP))) ! local budget of RRI - DO JPROC=1,NBUPROCNBR(IP) - ZWORKT(:,:,:,1,1,JPROC) = XBURRI(:,:,:,JPROC) * ZCONVERT(JPROC) & - / XBURHODJ(:,:,:) - END DO - ELSE -! - ALLOCATE(ZWORKT(NBUIMAX_ll,NBUJMAX_ll,NBUKMAX,1,1,NBUPROCNBR(IP))) ! global budget of RRI -! - DO JPROC=1,NBUPROCNBR(IP) - ZWORKT(:,:,:,1,1,JPROC) = END_CART_COMPRESS(XBURRI(:,:,:,JPROC)) - ZWORKT(:,:,:,1,1,JPROC) = ZWORKT(:,:,:,1,1,JPROC)* ZCONVERT(JPROC) & - / ZWORK(:,:,:,1,1,1) - END DO - ENDIF - DEALLOCATE(ZCONVERT) -! - ALLOCATE(YWORKUNIT(NBUPROCNBR(IP))) - ALLOCATE(YWORKCOMMENT(NBUPROCNBR(IP))) - ALLOCATE(IWORKGRID(NBUPROCNBR(IP))) -! - YWORKUNIT(:) = 's-1' ; YWORKUNIT(1:3) = 'kg kg-1' - YWORKCOMMENT(:) = 'Budget of cloud ice mixing ratio' - IWORKGRID(:) = 1 - WRITE(YGROUP_NAME,FMT="('RI___',I4.4)") NBUTSHIFT -! - CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, 'CART', IWORKGRID, & - ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(IP, :), & - YWORKUNIT, YWORKCOMMENT, & - LBU_ICP, LBU_JCP, LBU_KCP, & - NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH ) - DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID) -! - END IF -! -!* 2.2.10 RRS budget -! - IF (LBU_RRS) THEN - IP=10 - ALLOCATE(ZCONVERT(NBUPROCNBR(IP))) - ZCONVERT(1:2) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(3) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(4:NBUPROCNBR(IP)) = 1. -! - IF (GNOCOMPRESS) THEN - ALLOCATE(ZWORKT(NBUIMAX,NBUJMAX,NBUKMAX,1,1,NBUPROCNBR(IP))) ! local budget of RRS - DO JPROC=1,NBUPROCNBR(IP) - ZWORKT(:,:,:,1,1,JPROC) = XBURRS(:,:,:,JPROC) * ZCONVERT(JPROC) & - / XBURHODJ(:,:,:) - END DO - ELSE -! - ALLOCATE(ZWORKT(NBUIMAX_ll,NBUJMAX_ll,NBUKMAX,1,1,NBUPROCNBR(IP))) ! global budget of RRS -! - DO JPROC=1,NBUPROCNBR(IP) - ZWORKT(:,:,:,1,1,JPROC) = END_CART_COMPRESS(XBURRS(:,:,:,JPROC)) - ZWORKT(:,:,:,1,1,JPROC) = ZWORKT(:,:,:,1,1,JPROC)* ZCONVERT(JPROC) & - / ZWORK(:,:,:,1,1,1) - END DO - ENDIF - DEALLOCATE(ZCONVERT) -! - ALLOCATE(YWORKUNIT(NBUPROCNBR(IP))) - ALLOCATE(YWORKCOMMENT(NBUPROCNBR(IP))) - ALLOCATE(IWORKGRID(NBUPROCNBR(IP))) -! - YWORKUNIT(:) = 's-1' ; YWORKUNIT(1:3) = 'kg kg-1' - YWORKCOMMENT(:) = 'Budget of snow/aggregate mixing ratio' - IWORKGRID(:) = 1 - WRITE(YGROUP_NAME,FMT="('RS___',I4.4)") NBUTSHIFT -! - CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, 'CART', IWORKGRID, & - ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(IP, :), & - YWORKUNIT, YWORKCOMMENT, & - LBU_ICP, LBU_JCP, LBU_KCP, & - NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH ) - DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID) -! - END IF -! -!* 2.2.11 RRG budget -! - IF (LBU_RRG) THEN - IP=11 - ALLOCATE(ZCONVERT(NBUPROCNBR(IP))) - ZCONVERT(1:2) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(3) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(4:NBUPROCNBR(IP)) = 1. -! - IF (GNOCOMPRESS) THEN - ALLOCATE(ZWORKT(NBUIMAX,NBUJMAX,NBUKMAX,1,1,NBUPROCNBR(IP))) ! local budget of RRG - DO JPROC=1,NBUPROCNBR(IP) - ZWORKT(:,:,:,1,1,JPROC) = XBURRG(:,:,:,JPROC) * ZCONVERT(JPROC) & - / XBURHODJ(:,:,:) - END DO - ELSE -! - ALLOCATE(ZWORKT(NBUIMAX_ll,NBUJMAX_ll,NBUKMAX,1,1,NBUPROCNBR(IP))) ! global budget of RRG -! - DO JPROC=1,NBUPROCNBR(IP) - ZWORKT(:,:,:,1,1,JPROC) = END_CART_COMPRESS(XBURRG(:,:,:,JPROC)) - ZWORKT(:,:,:,1,1,JPROC) = ZWORKT(:,:,:,1,1,JPROC)* ZCONVERT(JPROC) & - / ZWORK(:,:,:,1,1,1) - END DO - ENDIF - DEALLOCATE(ZCONVERT) -! - ALLOCATE(YWORKUNIT(NBUPROCNBR(IP))) - ALLOCATE(YWORKCOMMENT(NBUPROCNBR(IP))) - ALLOCATE(IWORKGRID(NBUPROCNBR(IP))) -! - YWORKUNIT(:) = 's-1' ; YWORKUNIT(1:3) = 'kg kg-1' - YWORKCOMMENT(:) = 'Budget of graupel mixing ratio' - IWORKGRID(:) = 1 - WRITE(YGROUP_NAME,FMT="('RG___',I4.4)") NBUTSHIFT -! - CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, 'CART', IWORKGRID, & - ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(IP, :), & - YWORKUNIT, YWORKCOMMENT, & - LBU_ICP, LBU_JCP, LBU_KCP, & - NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH ) - DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID) -! - END IF -! -!* 2.2.12 RRH budget -! - IF (LBU_RRH) THEN - IP=12 - ALLOCATE(ZCONVERT(NBUPROCNBR(IP))) - ZCONVERT(1:2) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(3) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(4:NBUPROCNBR(IP)) = 1. -! - IF (GNOCOMPRESS) THEN - ALLOCATE(ZWORKT(NBUIMAX,NBUJMAX,NBUKMAX,1,1,NBUPROCNBR(IP))) ! local budget of RRH - DO JPROC=1,NBUPROCNBR(IP) - ZWORKT(:,:,:,1,1,JPROC) = XBURRH(:,:,:,JPROC) * ZCONVERT(JPROC) & - / XBURHODJ(:,:,:) - END DO - ELSE -! - ALLOCATE(ZWORKT(NBUIMAX_ll,NBUJMAX_ll,NBUKMAX,1,1,NBUPROCNBR(IP))) ! global budget of RRH -! - DO JPROC=1,NBUPROCNBR(IP) - ZWORKT(:,:,:,1,1,JPROC) = END_CART_COMPRESS(XBURRH(:,:,:,JPROC)) - ZWORKT(:,:,:,1,1,JPROC) = ZWORKT(:,:,:,1,1,JPROC)* ZCONVERT(JPROC) & - / ZWORK(:,:,:,1,1,1) - END DO - ENDIF - DEALLOCATE(ZCONVERT) -! - ALLOCATE(YWORKUNIT(NBUPROCNBR(IP))) - ALLOCATE(YWORKCOMMENT(NBUPROCNBR(IP))) - ALLOCATE(IWORKGRID(NBUPROCNBR(IP))) -! - YWORKUNIT(:) = 's-1' ; YWORKUNIT(1:3) = 'kg kg-1' - YWORKCOMMENT(:) = 'Budget of hail mixing ratio' - IWORKGRID(:) = 1 - WRITE(YGROUP_NAME,FMT="('RH___',I4.4)") NBUTSHIFT -! - CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, 'CART', IWORKGRID, & - ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(IP, :), & - YWORKUNIT, YWORKCOMMENT, & - LBU_ICP, LBU_JCP, LBU_KCP, & - NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH ) - DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID) -! - END IF -! -!* 2.2.13 RSV budget -! - IF (LBU_RSV) THEN - DO JSV = 1,KSV - IP=12+JSV - ALLOCATE(ZCONVERT(NBUPROCNBR(IP))) - ZCONVERT(1:2) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(3) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(4:NBUPROCNBR(IP)) = 1. -! - IF (GNOCOMPRESS) THEN - ALLOCATE(ZWORKT(NBUIMAX,NBUJMAX,NBUKMAX,1,1,NBUPROCNBR(IP))) ! local budget of RRH - DO JPROC=1,NBUPROCNBR(IP) - ZWORKT(:,:,:,1,1,JPROC) = XBURSV(:,:,:,JPROC,JSV) * ZCONVERT(JPROC) & - / XBURHODJ(:,:,:) - END DO - ELSE -! - ALLOCATE(ZWORKT(NBUIMAX_ll,NBUJMAX_ll,NBUKMAX,1,1,NBUPROCNBR(IP))) ! global budget of RRH -! - DO JPROC=1,NBUPROCNBR(IP) - ZWORKT(:,:,:,1,1,JPROC) = END_CART_COMPRESS(XBURSV(:,:,:,JPROC,JSV)) - ZWORKT(:,:,:,1,1,JPROC) = ZWORKT(:,:,:,1,1,JPROC)* ZCONVERT(JPROC) & - / ZWORK(:,:,:,1,1,1) - END DO - DEALLOCATE(ZWORK) - ENDIF - DEALLOCATE(ZCONVERT) -! - ALLOCATE(YWORKUNIT(NBUPROCNBR(IP))) - ALLOCATE(YWORKCOMMENT(NBUPROCNBR(IP))) - ALLOCATE(IWORKGRID(NBUPROCNBR(IP))) -! - YWORKUNIT(:) = 's-1' ; YWORKUNIT(1:3) = ' ' - DO JT = 1,NBUPROCNBR(IP) - WRITE(YWORKCOMMENT(JT),FMT="('Budget of SVx=',I3.3)") JSV + use modd_budget, only: cbutype, nbumask, nbutshift, nbustep, nbuwrnb, xbulen, xbusurf, & + lbu_icp, lbu_jcp, & + lbu_ru, lbu_rv, lbu_rw, lbu_rth, lbu_rtke, lbu_rrv, lbu_rrc, lbu_rrr, & + lbu_rri, lbu_rrs, lbu_rrg, lbu_rrh, lbu_rsv, & + NBUDGET_RHO, NBUDGET_U, NBUDGET_V, NBUDGET_W, NBUDGET_TH, NBUDGET_TKE, & + NBUDGET_RV, NBUDGET_RC, NBUDGET_RR, NBUDGET_RI, NBUDGET_RS, NBUDGET_RG, NBUDGET_RH, NBUDGET_SV1, & + xburhodj, xburhodju, xburhodjv, xburhodjw, & + xburu, xburv, xburw, xburth, xburtke, & + xburrv, xburrc, xburrr, xburri, xburrs, xburrg, xburrh, xbursv + use modd_io, only: tfiledata + use modd_lunit_n, only: tluout + use modd_parameters, only: NMNHNAMELGTMAX + use modd_type_date, only: date_time + + use mode_datetime, only: datetime_distance + use mode_field, only: tfielddata, TYPEREAL + use mode_io_field_write, only: IO_Field_write + use mode_menu_diachro, only: Menu_diachro + use mode_time, only: tdtexp + + implicit none + + type(tfiledata), intent(in) :: tpdiafile ! file to write + type(date_time), intent(in) :: tpdtcur ! current date and time + real, intent(in) :: ptstep ! time step + integer, intent(in) :: ksv ! number of scalar variables + + character(len=NMNHNAMELGTMAX) :: yrecfm ! name of the article to be written + integer :: jt, jmask + integer :: jsv ! loop index over the ksv svx + logical :: gnocompress ! true: no compression along x and y direction (cart option) + real, dimension(:), allocatable :: zworktemp + real, dimension(:,:,:,:,:,:), allocatable :: zrhodjn, zworkmask + type(date_time), dimension(:), allocatable :: tzdates + type(tfielddata) :: tzfield + ! + !------------------------------------------------------------------------------- + ! + gnocompress = .true. + ! + !* Write TSTEP and BULEN + ! --------------------- + ! + TZFIELD%CMNHNAME = 'TSTEP' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'TSTEP' + TZFIELD%CUNITS = 's' + TZFIELD%CDIR = '--' + TZFIELD%CCOMMENT = 'Time step' + TZFIELD%NGRID = 0 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 0 + TZFIELD%LTIMEDEP = .FALSE. + CALL IO_Field_write(TPDIAFILE,TZFIELD,PTSTEP) + ! + TZFIELD%CMNHNAME = 'BULEN' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'BULEN' + TZFIELD%CUNITS = 's' + TZFIELD%CDIR = '--' + TZFIELD%CCOMMENT = 'Time step' + TZFIELD%NGRID = 0 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 0 + TZFIELD%LTIMEDEP = .FALSE. + CALL IO_Field_write(TPDIAFILE,TZFIELD,XBULEN) + ! + ! Initialize NBUTSHIFT + NBUTSHIFT = NBUTSHIFT+1 + ! + ! + SELECT CASE (CBUTYPE) + ! + !------------------------------------------------------------------------------- + ! + !* 2. 'CART' CASE + ! ----------- + ! + CASE('CART','SKIP') + GNOCOMPRESS=(.NOT.LBU_ICP .AND. .NOT.LBU_JCP) + ! + !* 2.1 Initialization + ! + ALLOCATE( ZWORKTEMP( 1 ) ) + allocate( tzdates( 1 ) ) + ! + !Compute time at the middle of the temporally-averaged budget timestep + !This time is computed from the beginning of the experiment + CALL DATETIME_DISTANCE(TDTEXP,TPDTCUR,ZWORKTEMP(1)) + ! + ZWORKTEMP(1)=ZWORKTEMP(1)+(1.-NBUSTEP*0.5)*PTSTEP + ! + tzdates(1)%tdate%year = tdtexp%tdate%year + tzdates(1)%tdate%month = tdtexp%tdate%month + tzdates(1)%tdate%day = tdtexp%tdate%day + tzdates(1)%time = tdtexp%time + zworktemp(1) + + DEALLOCATE ( ZWORKTEMP ) + ! + !------------------------------------------------------------------------------- + ! + !* 3. 'MASK' CASE + ! ----------- + ! + CASE('MASK') + ALLOCATE(ZWORKTEMP(NBUWRNB)) + allocate( tzdates( NBUWRNB ) ) + ALLOCATE(ZWORKMASK(SIZE(XBUSURF,1),SIZE(XBUSURF,2),1,NBUWRNB,NBUMASK,1)) + ! + ! local array + DO JMASK=1,NBUMASK + DO JT=1,NBUWRNB + ZWORKMASK(:,:,1,JT,JMASK,1) = XBUSURF(:,:,JMASK,JT) END DO - IWORKGRID(:) = 1 - WRITE(YGROUP_NAME,FMT="('SV',I3.3,I4.4)") JSV,NBUTSHIFT -! - CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, 'CART', IWORKGRID, & - ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(IP, :), & - YWORKUNIT, YWORKCOMMENT, & - LBU_ICP, LBU_JCP, LBU_KCP, & - NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH ) - DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID) -! END DO - END IF -! - IF (ALLOCATED(ZWORK)) DEALLOCATE(ZWORK) - DEALLOCATE (ZWORKTEMP, ZWORKDATIME) -!------------------------------------------------------------------------------- -! -!* 3. 'MASK' CASE -! ----------- -! - CASE('MASK') - ALLOCATE(ZWORKTEMP(NBUWRNB,1)) - ALLOCATE(ZWORKDATIME(16,NBUWRNB)) - ALLOCATE(ZWORKMASK(SIZE(XBUSURF,1),SIZE(XBUSURF,2),1,NBUWRNB,NBUMASK,1)) -! -! local array - DO JMASK=1,NBUMASK - DO JT=1,NBUWRNB - ZWORKMASK(:,:,1,JT,JMASK,1) = XBUSURF(:,:,JMASK,JT) + ! + CALL DATETIME_DISTANCE(TDTEXP,TPDTCUR,ZWORKTEMP(NBUWRNB)) + ! + ZWORKTEMP(NBUWRNB)=ZWORKTEMP(NBUWRNB)+(1.-NBUSTEP*0.5)*PTSTEP + ! + tzdates(NBUWRNB )%tdate%year = tdtexp%tdate%year + tzdates(NBUWRNB )%tdate%month = tdtexp%tdate%month + tzdates(NBUWRNB )%tdate%day = tdtexp%tdate%day + tzdates(NBUWRNB )%time = tdtexp%time + zworktemp(NBUWRNB ) + DO JT=1,NBUWRNB-1 + ZWORKTEMP(JT) = ZWORKTEMP(NBUWRNB)-NBUSTEP*PTSTEP*(NBUWRNB-JT) + tzdates(jt )%tdate%year = tdtexp%tdate%year + tzdates(jt )%tdate%month = tdtexp%tdate%month + tzdates(jt )%tdate%day = tdtexp%tdate%day + tzdates(jt )%time = tdtexp%time + zworktemp(jt ) END DO - END DO -! - ZWORKDATIME(1,:)=TDTEXP%TDATE%YEAR - ZWORKDATIME(2,:)=TDTEXP%TDATE%MONTH - ZWORKDATIME(3,:)=TDTEXP%TDATE%DAY - ZWORKDATIME(4,:)=TDTEXP%TIME - ZWORKDATIME(5,:)=TDTSEG%TDATE%YEAR - ZWORKDATIME(6,:)=TDTSEG%TDATE%MONTH - ZWORKDATIME(7,:)=TDTSEG%TDATE%DAY - ZWORKDATIME(8,:)=TDTSEG%TIME - ZWORKDATIME(9,:)=TPDTMOD%TDATE%YEAR - ZWORKDATIME(10,:)=TPDTMOD%TDATE%MONTH - ZWORKDATIME(11,:)=TPDTMOD%TDATE%DAY - ZWORKDATIME(12,:)=TPDTMOD%TIME -! - CALL DATETIME_DISTANCE(TDTEXP,TPDTCUR,ZWORKTEMP(NBUWRNB,1)) -! - ZWORKTEMP(NBUWRNB,1)=ZWORKTEMP(NBUWRNB,1)+(1.-NBUSTEP*0.5)*PTSTEP -! - ZWORKDATIME(13,NBUWRNB)=TDTEXP%TDATE%YEAR - ZWORKDATIME(14,NBUWRNB)=TDTEXP%TDATE%MONTH - ZWORKDATIME(15,NBUWRNB)=TDTEXP%TDATE%DAY - ZWORKDATIME(16,NBUWRNB)=TDTEXP%TIME+ZWORKTEMP(NBUWRNB,1) - DO JT=1,NBUWRNB-1 - ZWORKTEMP(JT,1) = ZWORKTEMP(NBUWRNB,1)-NBUSTEP*PTSTEP*(NBUWRNB-JT) - ZWORKDATIME(13,JT)=TDTEXP%TDATE%YEAR - ZWORKDATIME(14,JT)=TDTEXP%TDATE%MONTH - ZWORKDATIME(15,JT)=TDTEXP%TDATE%DAY - ZWORKDATIME(16,JT)=TDTEXP%TIME + ZWORKTEMP(JT,1) - END DO -! -!* 3.1 storage of the masks array -! - WRITE(TZFIELD%CMNHNAME,FMT="('MASK_',I4.4,'.MASK')") NBUTSHIFT - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME) - TZFIELD%CUNITS = '' - TZFIELD%CDIR = 'XY' - WRITE(TZFIELD%CCOMMENT,FMT="('X_Y_MASK',I4.4)") NBUTSHIFT - TZFIELD%NGRID = 1 - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 6 - TZFIELD%LTIMEDEP = .FALSE. - CALL IO_Field_write(TPDIAFILE,TZFIELD,ZWORKMASK(:,:,:,:,:,:)) - WRITE(YRECFM,FMT="('MASK_',I4.4)") NBUTSHIFT - CALL MENU_DIACHRO(TPDIAFILE,YRECFM) - DEALLOCATE(ZWORKMASK) -! -!* 3.2 storage of the budgets array -! -!* 3.2.1 RU budget -! + + DEALLOCATE( ZWORKTEMP ) + ! + !* 3.1 storage of the masks array + ! + WRITE(TZFIELD%CMNHNAME,FMT="('MASK_',I4.4,'.MASK')" ) nbutshift + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = '' + TZFIELD%CDIR = 'XY' + WRITE(TZFIELD%CCOMMENT,FMT="('X_Y_MASK',I4.4)" ) nbutshift + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 6 + TZFIELD%LTIMEDEP = .FALSE. + CALL IO_Field_write(TPDIAFILE,TZFIELD,ZWORKMASK(:,:,:,:,:,:)) + WRITE(YRECFM,FMT="('MASK_',I4.4)" ) nbutshift + CALL MENU_DIACHRO(TPDIAFILE,YRECFM) + DEALLOCATE(ZWORKMASK) + ! + END SELECT + ! + if ( cbutype == 'CART' .or. cbutype == 'SKIP' .or. cbutype == 'MASK' ) then + ! + !* Storage of the budgets array + ! + !* XBURHODJU and RU budgets + ! IF (LBU_RU) THEN - ! XBURHODJU storage -! - ALLOCATE(ZWORK(1,1,NBUKMAX,NBUWRNB,NBUMASK,1)) - ALLOCATE(YWORKUNIT(1)) - ALLOCATE(YWORKCOMMENT(1)) - ALLOCATE(IWORKGRID(1)) -! - ZWORK(1,1,:,:,:,1) = END_MASK_COMPRESS(XBURHODJU(:,:,:)) - WHERE (ZWORK(1,1,:,:,:,1) <= 0.) - ZWORK(1,1,:,:,:,1)=-999. - END WHERE - YWORKUNIT(:) = 'kg' - YWORKCOMMENT(:) = 'RhodJ for momentum along X axis' - IWORKGRID(:) = 2 - WRITE(YGROUP_NAME,FMT="('RJX__',I4.4)") NBUTSHIFT -! - CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, & - ZWORKDATIME, ZWORK, ZWORKTEMP, CBUCOMMENT(1, :), & - YWORKUNIT, YWORKCOMMENT, & - LBU_ICP, LBU_JCP, LBU_KCP, & - NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH ) - DEALLOCATE( YWORKUNIT, YWORKCOMMENT, IWORKGRID) -! -! unit conversion of RU budgets and storage -! ----------------------------------------- -! - ALLOCATE(ZWORKT(1,1,NBUKMAX,NBUWRNB,NBUMASK,NBUPROCNBR(1))) - ALLOCATE(YWORKUNIT(NBUPROCNBR(1))) - ALLOCATE(YWORKCOMMENT(NBUPROCNBR(1))) - ALLOCATE(IWORKGRID(NBUPROCNBR(1))) -! - ALLOCATE(ZCONVERT(NBUPROCNBR(1))) - ZCONVERT(1:2) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(3) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(4:NBUPROCNBR(1)) = 1. - DO JPROC=1,NBUPROCNBR(1) - ZWORKT(1,1,:,:,:,JPROC) = END_MASK_COMPRESS( XBURU(:,:,:,JPROC)) & - * ZCONVERT(JPROC) / ZWORK(1,1,:,:,:,1) - END DO - DEALLOCATE(ZCONVERT, ZWORK) - -! - YWORKUNIT(:) = 'm s-2'; YWORKUNIT(1:3) = 'm s-1' - YWORKCOMMENT(:) = 'Budget of momentum along X axis' - IWORKGRID(:) = 2 - WRITE(YGROUP_NAME,FMT="('UU___',I4.4)") NBUTSHIFT -! - CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, & - ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(1, :), & - YWORKUNIT, YWORKCOMMENT, & - LBU_ICP, LBU_JCP, LBU_KCP, & - NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH ) - DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID) + call Store_one_budget_rho( tpdiafile, tzdates, xburhodju, NBUDGET_U, gnocompress, zrhodjn ) + call Store_one_budget( tpdiafile, tzdates, xburu, zrhodjn, NBUDGET_U, gnocompress, ptstep ) END IF -! -!* 3.2.2 RV budget -! + ! + !* XBURHODJV and RV budgets + ! IF (LBU_RV) THEN - ! XBURHODJV storage -! - ALLOCATE(ZWORK(1,1,NBUKMAX,NBUWRNB,NBUMASK,1)) - ALLOCATE(YWORKUNIT(1)) - ALLOCATE(YWORKCOMMENT(1)) - ALLOCATE(IWORKGRID(1)) -! - ZWORK(1,1,:,:,:,1)= END_MASK_COMPRESS( XBURHODJV(:,:,:)) - WHERE ( ZWORK(1,1,:,:,:,1) <= 0.) - ZWORK(1,1,:,:,:,1)=-999. - END WHERE - YWORKUNIT(:) = 'kg' - YWORKCOMMENT(:) = 'RhodJ for momentum along Y axis' - IWORKGRID(:) = 3 - WRITE(YGROUP_NAME,FMT="('RJY__',I4.4)") NBUTSHIFT -! - CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, & - ZWORKDATIME, ZWORK, ZWORKTEMP, CBUCOMMENT(1, :), & - YWORKUNIT, YWORKCOMMENT, & - LBU_ICP, LBU_JCP, LBU_KCP, & - NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH ) - DEALLOCATE( YWORKUNIT, YWORKCOMMENT, IWORKGRID) -! -! unit conversion of RU budgets and storage -! - ALLOCATE(ZWORKT(1,1,NBUKMAX,NBUWRNB,NBUMASK,NBUPROCNBR(2))) - ALLOCATE(YWORKUNIT(NBUPROCNBR(2))) - ALLOCATE(YWORKCOMMENT(NBUPROCNBR(2))) - ALLOCATE(IWORKGRID(NBUPROCNBR(2))) -! - ALLOCATE(ZCONVERT(NBUPROCNBR(2))) - ZCONVERT(1:2) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(3) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(4:NBUPROCNBR(2)) = 1. - DO JPROC=1,NBUPROCNBR(2) - ZWORKT(1,1,:,:,:,JPROC) = END_MASK_COMPRESS( XBURV (:,:,:,JPROC)) & - * ZCONVERT(JPROC) / ZWORK(1,1,:,:,:,1) - END DO - DEALLOCATE(ZCONVERT, ZWORK) -! - YWORKUNIT(:) = 'm s-2'; YWORKUNIT(1:3) = 'm s-1' - YWORKCOMMENT(:) = 'Budget of momentum along Y axis' - IWORKGRID(:) = 3 - WRITE(YGROUP_NAME,FMT="('VV___',I4.4)") NBUTSHIFT -! - CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, & - ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(2, :), & - YWORKUNIT, YWORKCOMMENT, & - LBU_ICP, LBU_JCP, LBU_KCP, & - NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH ) - DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID) + call Store_one_budget_rho( tpdiafile, tzdates, xburhodjv, NBUDGET_V, gnocompress, zrhodjn ) + call Store_one_budget( tpdiafile, tzdates, xburv, zrhodjn, NBUDGET_V, gnocompress, ptstep ) END IF -! -!* 3.2.3 RW budget -! + ! + !* XBURHODJW and RW budgets + ! IF (LBU_RW) THEN - ! XBURHODJW storage -! - ALLOCATE(ZWORK(1,1,NBUKMAX,NBUWRNB,NBUMASK,1)) - ALLOCATE(YWORKUNIT(1)) - ALLOCATE(YWORKCOMMENT(1)) - ALLOCATE(IWORKGRID(1)) -! - ZWORK(1,1,:,:,:,1)=END_MASK_COMPRESS(XBURHODJW(:,:,:)) - WHERE (ZWORK(1,1,:,:,:,1) <= 0.) - ZWORK(1,1,:,:,:,1)=-999. - END WHERE - YWORKUNIT(:) = 'kg' - YWORKCOMMENT(:) = 'RhodJ for momentum along Z axis' - IWORKGRID(:) = 4 - WRITE(YGROUP_NAME,FMT="('RJZ__',I4.4)") NBUTSHIFT -! - CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, & - ZWORKDATIME, ZWORK, ZWORKTEMP, CBUCOMMENT(1, :), & - YWORKUNIT, YWORKCOMMENT, & - LBU_ICP, LBU_JCP, LBU_KCP, & - NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH ) - DEALLOCATE( YWORKUNIT, YWORKCOMMENT, IWORKGRID) -! -! unit conversion of RU budgets and storage -! - ALLOCATE(ZWORKT(1,1,NBUKMAX,NBUWRNB,NBUMASK,NBUPROCNBR(3))) - ALLOCATE(YWORKUNIT(NBUPROCNBR(3))) - ALLOCATE(YWORKCOMMENT(NBUPROCNBR(3))) - ALLOCATE(IWORKGRID(NBUPROCNBR(3))) -! - ALLOCATE(ZCONVERT(NBUPROCNBR(3))) - ZCONVERT(1:2) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(3) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(4:NBUPROCNBR(3)) = 1. - DO JPROC=1,NBUPROCNBR(3) - ZWORKT(1,1,:,:,:,JPROC) = END_MASK_COMPRESS( XBURW (:,:,:,JPROC)) & - * ZCONVERT(JPROC) / ZWORK(1,1,:,:,:,1) - END DO - DEALLOCATE(ZCONVERT, ZWORK) -! - YWORKUNIT(:) = 'm s-2'; YWORKUNIT(1:3) = 'm s-1' - YWORKCOMMENT(:) = 'Budget of momentum along Z axis' - IWORKGRID(:) = 4 - WRITE(YGROUP_NAME,FMT="('WW___',I4.4)") NBUTSHIFT -! - CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, & - ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(3, :), & - YWORKUNIT, YWORKCOMMENT, & - LBU_ICP, LBU_JCP, LBU_KCP, & - NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH ) - DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID) + call Store_one_budget_rho( tpdiafile, tzdates, xburhodjw, NBUDGET_W, gnocompress, zrhodjn ) + call Store_one_budget( tpdiafile, tzdates, xburw, zrhodjn, NBUDGET_W, gnocompress, ptstep ) END IF -! -!* 3.2.3' XBURHODJ storage for Scalars -! + ! + !* XBURHODJ storage for Scalars + ! IF (LBU_RTH .OR. LBU_RTKE .OR. LBU_RRV .OR. LBU_RRC .OR. LBU_RRR .OR. & LBU_RRI .OR. LBU_RRS .OR. LBU_RRG .OR. LBU_RRH .OR. LBU_RSV ) THEN -! - ALLOCATE(ZWORK(1,1,NBUKMAX,NBUWRNB,NBUMASK,1)) - ALLOCATE(YWORKUNIT(1)) - ALLOCATE(YWORKCOMMENT(1)) - ALLOCATE(IWORKGRID(1)) -! - ZWORK(1,1,:,:,:,1) = END_MASK_COMPRESS(XBURHODJ(:,:,:)) - WHERE (ZWORK(1,1,:,:,:,1) <= 0.) - ZWORK(1,1,:,:,:,1)=-999. - END WHERE - YWORKUNIT(:) = 'kg' - YWORKCOMMENT(:) = 'RhodJ for Scalars' - IWORKGRID(:) = 1 - WRITE(YGROUP_NAME,FMT="('RJS__',I4.4)") NBUTSHIFT -! - CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, & - ZWORKDATIME, ZWORK, ZWORKTEMP, CBUCOMMENT(1, :), & - YWORKUNIT, YWORKCOMMENT, & - LBU_ICP, LBU_JCP, LBU_KCP, & - NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH ) - DEALLOCATE( YWORKUNIT, YWORKCOMMENT, IWORKGRID) - END IF -! -!* 3.2.4 RTH budget -! + call Store_one_budget_rho( tpdiafile, tzdates, xburhodj, NBUDGET_RHO, gnocompress, zrhodjn ) + ENDIF + ! + !* RTH budget + ! IF (LBU_RTH) THEN - ALLOCATE(ZWORKT(1,1,NBUKMAX,NBUWRNB,NBUMASK,NBUPROCNBR(4))) - ALLOCATE(YWORKUNIT(NBUPROCNBR(4))) - ALLOCATE(YWORKCOMMENT(NBUPROCNBR(4))) - ALLOCATE(IWORKGRID(NBUPROCNBR(4))) -! - ALLOCATE(ZCONVERT(NBUPROCNBR(4))) - ZCONVERT(1:2) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(3) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(4:NBUPROCNBR(4)) = 1. - DO JPROC=1,NBUPROCNBR(4) - ZWORKT(1,1,:,:,:,JPROC) = END_MASK_COMPRESS( XBURTH (:,:,:,JPROC)) & - * ZCONVERT(JPROC) / ZWORK(1,1,:,:,:,1) - END DO - DEALLOCATE(ZCONVERT) -! - YWORKUNIT(:) = 'K s-1' ; YWORKUNIT(1:3) = 'K' - YWORKCOMMENT(:) = 'Budget of potential temperature' - IWORKGRID(:) = 1 - WRITE(YGROUP_NAME,FMT="('TH___',I4.4)") NBUTSHIFT -! - CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, & - ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(4, :), & - YWORKUNIT, YWORKCOMMENT, & - LBU_ICP, LBU_JCP, LBU_KCP, & - NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH ) - DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID) + call Store_one_budget( tpdiafile, tzdates, xburth, zrhodjn, NBUDGET_TH, gnocompress, ptstep ) END IF -! -!* 3.2.5 RTKE budget -! + ! + !* RTKE budget + ! IF (LBU_RTKE) THEN - ALLOCATE(ZWORKT(1,1,NBUKMAX,NBUWRNB,NBUMASK,NBUPROCNBR(5))) - ALLOCATE(YWORKUNIT(NBUPROCNBR(5))) - ALLOCATE(YWORKCOMMENT(NBUPROCNBR(5))) - ALLOCATE(IWORKGRID(NBUPROCNBR(5))) -! - ALLOCATE(ZCONVERT(NBUPROCNBR(5))) - ZCONVERT(1:2) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(3) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(4:NBUPROCNBR(5)) = 1. - DO JPROC=1,NBUPROCNBR(5) - ZWORKT(1,1,:,:,:,JPROC) = END_MASK_COMPRESS( XBURTKE (:,:,:,JPROC)) & - * ZCONVERT(JPROC) / ZWORK(1,1,:,:,:,1) - END DO - DEALLOCATE(ZCONVERT) -! - YWORKUNIT(:) = 'm2 s-3' ; YWORKUNIT(1:3) = 'm2 s-2' - YWORKCOMMENT(:) = 'Budget of turbulent kinetic energy' - IWORKGRID(:) = 1 - WRITE(YGROUP_NAME,FMT="('TK___',I4.4)") NBUTSHIFT -! - CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, & - ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(5, :), & - YWORKUNIT, YWORKCOMMENT, & - LBU_ICP, LBU_JCP, LBU_KCP, & - NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH ) - DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID) - END IF -! -!* 3.2.6 RRV budget -! + call Store_one_budget( tpdiafile, tzdates, xburtke, zrhodjn, NBUDGET_TKE, gnocompress, ptstep ) + END IF + ! + !* RRV budget + ! IF (LBU_RRV) THEN - ALLOCATE(ZWORKT(1,1,NBUKMAX,NBUWRNB,NBUMASK,NBUPROCNBR(6))) - ALLOCATE(YWORKUNIT(NBUPROCNBR(6))) - ALLOCATE(YWORKCOMMENT(NBUPROCNBR(6))) - ALLOCATE(IWORKGRID(NBUPROCNBR(6))) -! - ALLOCATE(ZCONVERT(NBUPROCNBR(6))) - ZCONVERT(1:2) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(3) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(4:NBUPROCNBR(6)) = 1. - DO JPROC=1,NBUPROCNBR(6) - ZWORKT(1,1,:,:,:,JPROC) = END_MASK_COMPRESS( XBURRV (:,:,:,JPROC)) & - * ZCONVERT(JPROC) / ZWORK(1,1,:,:,:,1) - END DO - DEALLOCATE(ZCONVERT) -! - YWORKUNIT(:) = 's-1' ; YWORKUNIT(1:3) = 'kg kg-1' - YWORKCOMMENT(:) = 'Budget of water vapor mixing ratio' - IWORKGRID(:) = 1 - WRITE(YGROUP_NAME,FMT="('RV___',I4.4)") NBUTSHIFT -! - CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, & - ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(6, :), & - YWORKUNIT, YWORKCOMMENT, & - LBU_ICP, LBU_JCP, LBU_KCP, & - NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH ) - DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID) + call Store_one_budget( tpdiafile, tzdates, xburrv, zrhodjn, NBUDGET_RV, gnocompress, ptstep ) END IF -! -!* 3.2.7 RRC budget -! + ! + !* RRC budget + ! IF (LBU_RRC) THEN - ALLOCATE(ZWORKT(1,1,NBUKMAX,NBUWRNB,NBUMASK,NBUPROCNBR(7))) - ALLOCATE(YWORKUNIT(NBUPROCNBR(7))) - ALLOCATE(YWORKCOMMENT(NBUPROCNBR(7))) - ALLOCATE(IWORKGRID(NBUPROCNBR(7))) -! - ALLOCATE(ZCONVERT(NBUPROCNBR(7))) - ZCONVERT(1:2) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(3) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(4:NBUPROCNBR(7)) = 1. - DO JPROC=1,NBUPROCNBR(7) - ZWORKT(1,1,:,:,:,JPROC) = END_MASK_COMPRESS( XBURRC (:,:,:,JPROC)) & - * ZCONVERT(JPROC) / ZWORK(1,1,:,:,:,1) - END DO - DEALLOCATE(ZCONVERT) -! - YWORKUNIT(:) = 's-1' ; YWORKUNIT(1:3) = 'kg kg-1' - YWORKCOMMENT(:) = 'Budget of cloud water mixing ratio' - IWORKGRID(:) = 1 - WRITE(YGROUP_NAME,FMT="('RC___',I4.4)") NBUTSHIFT -! - CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, & - ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(7, :), & - YWORKUNIT, YWORKCOMMENT, & - LBU_ICP, LBU_JCP, LBU_KCP, & - NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH ) - DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID) + call Store_one_budget( tpdiafile, tzdates, xburrc, zrhodjn, NBUDGET_RC, gnocompress, ptstep ) END IF -! -!* 3.2.8 RRR budget -! + ! + !* RRR budget + ! IF (LBU_RRR) THEN - ALLOCATE(ZWORKT(1,1,NBUKMAX,NBUWRNB,NBUMASK,NBUPROCNBR(8))) - ALLOCATE(YWORKUNIT(NBUPROCNBR(8))) - ALLOCATE(YWORKCOMMENT(NBUPROCNBR(8))) - ALLOCATE(IWORKGRID(NBUPROCNBR(8))) -! - ALLOCATE(ZCONVERT(NBUPROCNBR(8))) - ZCONVERT(1:2) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(3) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(4:NBUPROCNBR(8)) = 1. - DO JPROC=1,NBUPROCNBR(8) - ZWORKT(1,1,:,:,:,JPROC) = END_MASK_COMPRESS( XBURRR (:,:,:,JPROC)) & - * ZCONVERT(JPROC) / ZWORK(1,1,:,:,:,1) - END DO - DEALLOCATE(ZCONVERT) -! - YWORKUNIT(:) = 's-1' ; YWORKUNIT(1:3) = 'kg kg-1' - YWORKCOMMENT(:) = 'Budget of rain water mixing ratio' - IWORKGRID(:) = 1 - WRITE(YGROUP_NAME,FMT="('RR___',I4.4)") NBUTSHIFT -! - CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, & - ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(8, :), & - YWORKUNIT, YWORKCOMMENT, & - LBU_ICP, LBU_JCP, LBU_KCP, & - NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH ) - DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID) + call Store_one_budget( tpdiafile, tzdates, xburrr, zrhodjn, NBUDGET_RR, gnocompress, ptstep ) END IF -! -!* 3.2.9 RRI budget -! + ! + !* RRI budget + ! IF (LBU_RRI) THEN - ALLOCATE(ZWORKT(1,1,NBUKMAX,NBUWRNB,NBUMASK,NBUPROCNBR(9))) - ALLOCATE(YWORKUNIT(NBUPROCNBR(9))) - ALLOCATE(YWORKCOMMENT(NBUPROCNBR(9))) - ALLOCATE(IWORKGRID(NBUPROCNBR(9))) -! - ALLOCATE(ZCONVERT(NBUPROCNBR(9))) - ZCONVERT(1:2) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(3) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(4:NBUPROCNBR(9)) = 1. - DO JPROC=1,NBUPROCNBR(9) - ZWORKT(1,1,:,:,:,JPROC) = END_MASK_COMPRESS( XBURRI (:,:,:,JPROC)) & - * ZCONVERT(JPROC) / ZWORK(1,1,:,:,:,1) - END DO - DEALLOCATE(ZCONVERT) -! - YWORKUNIT(:) = 's-1' ; YWORKUNIT(1:3) = 'kg kg-1' - YWORKCOMMENT(:) = 'Budget of cloud ice mixing ratio' - IWORKGRID(:) = 1 - WRITE(YGROUP_NAME,FMT="('RI___',I4.4)") NBUTSHIFT -! - CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, & - ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(9, :), & - YWORKUNIT, YWORKCOMMENT, & - LBU_ICP, LBU_JCP, LBU_KCP, & - NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH ) - DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID) + call Store_one_budget( tpdiafile, tzdates, xburri, zrhodjn, NBUDGET_RI, gnocompress, ptstep ) END IF -! -!* 3.2.10 RRS budget -! + ! + !* RRS budget + ! IF (LBU_RRS) THEN - ALLOCATE(ZWORKT(1,1,NBUKMAX,NBUWRNB,NBUMASK,NBUPROCNBR(10))) - ALLOCATE(YWORKUNIT(NBUPROCNBR(10))) - ALLOCATE(YWORKCOMMENT(NBUPROCNBR(10))) - ALLOCATE(IWORKGRID(NBUPROCNBR(10))) -! - ALLOCATE(ZCONVERT(NBUPROCNBR(10))) - ZCONVERT(1:2) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(3) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(4:NBUPROCNBR(10)) = 1. - DO JPROC=1,NBUPROCNBR(10) - ZWORKT(1,1,:,:,:,JPROC) = END_MASK_COMPRESS( XBURRS (:,:,:,JPROC)) & - * ZCONVERT(JPROC) / ZWORK(1,1,:,:,:,1) - END DO - DEALLOCATE(ZCONVERT) -! - YWORKUNIT(:) = 's-1' ; YWORKUNIT(1:3) = 'kg kg-1' - YWORKCOMMENT(:) = 'Budget of snow/aggregate mixing ratio' - IWORKGRID(:) = 1 - WRITE(YGROUP_NAME,FMT="('RS___',I4.4)") NBUTSHIFT -! - CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, & - ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(10, :), & - YWORKUNIT, YWORKCOMMENT, & - LBU_ICP, LBU_JCP, LBU_KCP, & - NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH ) - DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID) + call Store_one_budget( tpdiafile, tzdates, xburrs, zrhodjn, NBUDGET_RS, gnocompress, ptstep ) END IF -! -!* 3.2.11 RRG budget -! + ! + !* RRG budget + ! IF (LBU_RRG) THEN - ALLOCATE(ZWORKT(1,1,NBUKMAX,NBUWRNB,NBUMASK,NBUPROCNBR(11))) - ALLOCATE(YWORKUNIT(NBUPROCNBR(11))) - ALLOCATE(YWORKCOMMENT(NBUPROCNBR(11))) - ALLOCATE(IWORKGRID(NBUPROCNBR(11))) -! - ALLOCATE(ZCONVERT(NBUPROCNBR(11))) - ZCONVERT(1:2) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(3) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(4:NBUPROCNBR(11)) = 1. - DO JPROC=1,NBUPROCNBR(11) - ZWORKT(1,1,:,:,:,JPROC) = END_MASK_COMPRESS( XBURRG (:,:,:,JPROC)) & - * ZCONVERT(JPROC) / ZWORK(1,1,:,:,:,1) - END DO - DEALLOCATE(ZCONVERT ) -! - YWORKUNIT(:) = 's-1' ; YWORKUNIT(1:3) = 'kg kg-1' - YWORKCOMMENT(:) = 'Budget of graupel mixing ratio' - IWORKGRID(:) = 1 - WRITE(YGROUP_NAME,FMT="('RG___',I4.4)") NBUTSHIFT -! - CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, & - ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(11, :), & - YWORKUNIT, YWORKCOMMENT, & - LBU_ICP, LBU_JCP, LBU_KCP, & - NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH ) - DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID) + call Store_one_budget( tpdiafile, tzdates, xburrg, zrhodjn, NBUDGET_RG, gnocompress, ptstep ) END IF -! -!* 3.2.12 RRH budget -! + ! + !* RRH budget + ! IF (LBU_RRH) THEN - ALLOCATE(ZWORKT(1,1,NBUKMAX,NBUWRNB,NBUMASK,NBUPROCNBR(12))) - ALLOCATE(YWORKUNIT(NBUPROCNBR(12))) - ALLOCATE(YWORKCOMMENT(NBUPROCNBR(12))) - ALLOCATE(IWORKGRID(NBUPROCNBR(12))) -! - ALLOCATE(ZCONVERT(NBUPROCNBR(12))) - ZCONVERT(1:2) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(3) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(4:NBUPROCNBR(12)) = 1. - DO JPROC=1,NBUPROCNBR(12) - ZWORKT(1,1,:,:,:,JPROC) = END_MASK_COMPRESS( XBURRH (:,:,:,JPROC)) & - * ZCONVERT(JPROC) / ZWORK(1,1,:,:,:,1) - END DO - DEALLOCATE(ZCONVERT) -! - YWORKUNIT(:) = 's-1' ; YWORKUNIT(1:3) = 'kg kg-1' - YWORKCOMMENT(:) = 'Budget of hail mixing ratio' - IWORKGRID(:) = 1 - WRITE(YGROUP_NAME,FMT="('RH___',I4.4)") NBUTSHIFT -! - CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, & - ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(12, :), & - YWORKUNIT, YWORKCOMMENT, & - LBU_ICP, LBU_JCP, LBU_KCP, & - NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH ) - DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID) + call Store_one_budget( tpdiafile, tzdates, xburrh, zrhodjn, NBUDGET_RH, gnocompress, ptstep ) END IF -! -!* 3.2.13 RSV budget -! + ! + !* RSV budgets + ! IF (LBU_RSV) THEN DO JSV = 1,KSV - ALLOCATE(ZWORKT(1,1,NBUKMAX,NBUWRNB,NBUMASK,NBUPROCNBR(12+JSV))) - ALLOCATE(YWORKUNIT(NBUPROCNBR(12+JSV))) - ALLOCATE(YWORKCOMMENT(NBUPROCNBR(12+JSV))) - ALLOCATE(IWORKGRID(NBUPROCNBR(12+JSV))) -! - ALLOCATE(ZCONVERT(NBUPROCNBR(12+JSV))) - ZCONVERT(1:2) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(3) = PTSTEP * REAL(NBUSTEP) - ZCONVERT(4:NBUPROCNBR(12+JSV)) = 1. - DO JPROC=1,NBUPROCNBR(12+JSV) - ZWORKT(1,1,:,:,:,JPROC) = END_MASK_COMPRESS( XBURSV (:,:,:,JPROC,JSV)) & - * ZCONVERT(JPROC) / ZWORK(1,1,:,:,:,1) - END DO - DEALLOCATE(ZCONVERT) -! - YWORKUNIT(:) = 's-1' ; YWORKUNIT(1:3) = ' ' - DO JT = 1,NBUPROCNBR(12+JSV) - WRITE(YWORKCOMMENT(JT),FMT="('Budget of SVx=',I3.3)") JSV - END DO - IWORKGRID(:) = 1 - WRITE(YGROUP_NAME,FMT="('SV',I3.3,I4.4)") JSV,NBUTSHIFT -! - CALL WRITE_DIACHRO(TPDIAFILE, TLUOUT, YGROUP_NAME, CBUTYPE, IWORKGRID, & - ZWORKDATIME, ZWORKT, ZWORKTEMP, CBUCOMMENT(12+JSV,:),& - YWORKUNIT, YWORKCOMMENT, & - LBU_ICP, LBU_JCP, LBU_KCP, & - NBUIL, NBUIH, NBUJL, NBUJH, NBUKL, NBUKH ) - DEALLOCATE(ZWORKT, YWORKUNIT, YWORKCOMMENT, IWORKGRID) + call Store_one_budget( tpdiafile, tzdates, xbursv(:, :, :, :, jsv ), zrhodjn, & + NBUDGET_SV1 + jsv - 1, gnocompress, ptstep ) END DO END IF + end if + +end subroutine Write_budget + + +subroutine Store_one_budget_rho( tpdiafile, tpdates, pburhodj, kp, knocompress, prhodjn ) + use modd_budget, only: cbutype, & + lbu_icp, lbu_jcp, lbu_kcp, & + nbuil, nbuih, nbujl, nbujh, nbukl, nbukh, & + nbuimax, nbuimax_ll, nbujmax, nbujmax_ll, nbukmax, nbutshift, & + nbumask, nbuwrnb, & + NBUDGET_RHO, NBUDGET_U, NBUDGET_V, NBUDGET_W + use modd_io, only: tfiledata + use modd_lunit_n, only: tluout + use modd_parameters, only: XNEGUNDEF + use modd_type_date, only: date_time + + use mode_write_diachro, only: Write_diachro + + use modi_end_cart_compress, only: End_cart_compress + use modi_end_mask_compress, only: End_mask_compress + + implicit none + + type(tfiledata), intent(in) :: tpdiafile ! file to write + type(date_time), dimension(:), intent(in) :: tpdates + real, dimension(:,:,:), intent(in) :: pburhodj ! budget arrays for rhodj + integer, intent(in) :: kp ! reference number of budget + logical, intent(in) :: knocompress ! compression for the cart option + real, dimension(:,:,:,:,:,:), allocatable, intent(out) :: prhodjn + + character(len=4) :: ybutype + character(len=9) :: ygroup_name ! group name + character(len=99), dimension(:), allocatable :: ybucomment ! comment + character(len=100), dimension(:), allocatable :: yworkcomment ! comment + character(len=100), dimension(:), allocatable :: yworkunit ! comment + integer, dimension(:), allocatable :: iworkgrid ! grid label + + if ( allocated( prhodjn ) ) deallocate( prhodjn ) + + ! pburhodj storage + select case ( cbutype ) + case( 'CART', 'SKIP' ) + ybutype = 'CART' + if ( knocompress ) then + allocate( prhodjn(nbuimax, nbujmax, nbukmax, 1, 1, 1 ) ) ! local budget of RHODJU + prhodjn(:, :, :, 1, 1, 1 ) = pburhodj(:, :, : ) + else + allocate( prhodjn(nbuimax_ll, nbujmax_ll, nbukmax, 1, 1, 1 ) ) ! global budget of RhodjU + prhodjn(:,:,:,1,1,1)=end_cart_compress(pburhodj(:,:,:)) + end if + case('MASK') + ybutype = 'MASK' + allocate( prhodjn(1, 1, nbukmax, nbuwrnb, nbumask, 1 ) ) + prhodjn(1, 1, :, :, :, 1 ) = End_mask_compress( pburhodj(:, :, : ) ) + where ( prhodjn(1, 1, :, :, :, 1) <= 0. ) + prhodjn(1, 1, :, :, :, 1 ) = XNEGUNDEF + end where + + case default + call Print_msg( NVERB_ERROR, 'GEN', 'Store_one_budget_rho', 'unknown CBUTYPE' ) + end select + + allocate( ybucomment(1 ) ) + allocate( yworkunit(1 ) ) + allocate( yworkcomment(1 ) ) + allocate( iworkgrid(1 ) ) + + select case( kp ) + case( NBUDGET_RHO ) + ybucomment(1) = 'RhodJS' + yworkunit(1) = 'kg' + yworkcomment(1) = 'RhodJ for Scalars variables' + iworkgrid(1) = 1 + write( ygroup_name, fmt = "('RJS__',I4.4)" ) nbutshift + + case( NBUDGET_U ) + ybucomment(1) = 'RhodJX' + yworkunit(1) = 'kg' + yworkcomment(1) = 'RhodJ for momentum along X axis' + iworkgrid(1) = 2 + write( ygroup_name, fmt = "('RJX__',I4.4)" ) nbutshift + + case( NBUDGET_V ) + ybucomment(1) = 'RhodJY' + yworkunit(1) = 'kg' + yworkcomment(1) = 'RhodJ for momentum along Y axis' + iworkgrid(1) = 3 + write( ygroup_name, fmt = "('RJX__',I4.4)" ) nbutshift + + case( NBUDGET_W ) + ybucomment(1) = 'RhodJZ' + yworkunit(1) = 'kg' + yworkcomment(1) = 'RhodJ for momentum along Z axis' + iworkgrid(1) = 4 + write( ygroup_name, fmt = "('RJZ__',I4.4)" ) nbutshift + + case default + call Print_msg( NVERB_ERROR, 'GEN', 'Store_one_budget_rho', 'unknown budget type' ) + end select + + call Write_diachro( tpdiafile, tluout, ygroup_name, ybutype, iworkgrid, & + tpdates, prhodjn, ybucomment, & + yworkunit, yworkcomment, & + oicp = lbu_icp, ojcp = lbu_jcp, okcp = lbu_kcp, & + kil = nbuil, kih = nbuih, kjl = nbujl, kjh = nbujh, kkl = nbukl, kkh = nbukh ) + deallocate( ybucomment, yworkunit, yworkcomment, iworkgrid ) + +end subroutine Store_one_budget_rho + + +subroutine Store_one_budget( tpdiafile, tpdates, pbudarray, prhodjn, kp, knocompress, ptstep ) + use modd_budget, only: cbucomment, cbutype, & + lbu_icp, lbu_jcp, lbu_kcp, & + nbuil, nbuih, nbujl, nbujh, nbukl, nbukh, & + nbuimax, nbuimax_ll, nbujmax, nbujmax_ll, nbukmax, nbuprocnbr, nbustep, nbutshift, & + nbumask, nbuwrnb, & + NBUDGET_U, NBUDGET_V, NBUDGET_W, NBUDGET_TH, NBUDGET_TKE, NBUDGET_RV, NBUDGET_RC, NBUDGET_RR, & + NBUDGET_RI, NBUDGET_RS, NBUDGET_RG, NBUDGET_RH, NBUDGET_SV1 + use modd_io, only: tfiledata + use modd_lunit_n, only: tluout + use modd_type_date, only: date_time + + use mode_write_diachro, only: Write_diachro + + use modi_end_cart_compress, only: End_cart_compress + use modi_end_mask_compress, only: End_mask_compress + + implicit none + + type(tfiledata), intent(in) :: tpdiafile ! file to write + type(date_time), dimension(:), intent(in) :: tpdates + real, dimension(:,:,:,:), intent(in) :: pbudarray ! budget array + real, dimension(:,:,:,:,:,:), allocatable, intent(in) :: prhodjn + integer, intent(in) :: kp ! reference number of budget + logical, intent(in) :: knocompress ! compression for the cart option + real, intent(in) :: ptstep ! time step + + character(len=4) :: ybutype + character(len=9) :: ygroup_name + character(len=100), dimension(:), allocatable :: yworkcomment + character(len=100), dimension(:), allocatable :: yworkunit + integer :: jproc + integer :: jsv + integer :: jt + integer, dimension(:), allocatable :: iworkgrid ! grid label + real, dimension(:), allocatable :: zconvert ! unit conversion coefficient + real, dimension(:,:,:,:,:,:), allocatable :: zworkt + + if( .not. allocated( prhodjn ) ) then + call Print_msg( NVERB_ERROR, 'GEN', 'Store_one_budget', 'prhodjn not allocated' ) + return + end if + + ! unit conversion for ru budgets + allocate( zconvert( nbuprocnbr( kp ) ) ) + zconvert(1 : 2 ) = ptstep * Real( nbustep ) + zconvert(3 ) = ptstep * Real( nbustep ) + zconvert(4 : nbuprocnbr( kp ) ) = 1. + + select case ( cbutype ) + case( 'CART', 'SKIP' ) + ybutype = 'CART' + if ( knocompress ) then + allocate( zworkt(nbuimax, nbujmax, nbukmax, 1, 1, nbuprocnbr(kp ) ) ) ! local budget of ru + do jproc = 1, nbuprocnbr(kp ) + zworkt(:, :, :, 1, 1, jproc ) = pbudarray(:, :, :, jproc ) * zconvert(jproc ) / prhodjn(:, :, :, 1, 1, 1 ) + end do + else + allocate( zworkt(nbuimax_ll, nbujmax_ll, nbukmax, 1, 1, nbuprocnbr(kp ) ) ) ! global budget of ru + ! + do jproc = 1, nbuprocnbr(kp ) + zworkt(:, :, :, 1, 1, jproc ) = End_cart_compress( pbudarray(:, :, :, jproc ) ) + zworkt(:, :, :, 1, 1, jproc ) = zworkt(:, :, :, 1, 1, jproc ) * zconvert(jproc ) / prhodjn(:, :, :, 1, 1, 1 ) + end do + endif + case('MASK') + ybutype = 'MASK' + allocate( zworkt(1, 1, nbukmax, nbuwrnb, nbumask, nbuprocnbr(kp ) ) ) + do jproc = 1, nbuprocnbr(kp ) + zworkt(1, 1, :, :, :, jproc ) = End_mask_compress( pbudarray(:, :, :, jproc ) ) & + * zconvert(jproc ) / prhodjn(1, 1, :, :, :, 1 ) + end do + + case default + call Print_msg( NVERB_ERROR, 'GEN', 'Store_one_budget', 'unknown CBUTYPE' ) + end select + + deallocate(zconvert) ! - IF (LBU_RTH .OR. LBU_RTKE .OR. LBU_RRV .OR. LBU_RRC .OR. LBU_RRR .OR. & - LBU_RRI .OR. LBU_RRS .OR. LBU_RRG .OR. LBU_RRH .OR. LBU_RSV ) THEN - DEALLOCATE(ZWORK) - END IF -! - DEALLOCATE (ZWORKTEMP, ZWORKDATIME) -! -END SELECT -! -!------------------------------------------------------------------------------- -! -END SUBROUTINE WRITE_BUDGET +! RU budgets storage + allocate( yworkunit( nbuprocnbr(kp ) ) ) + allocate( yworkcomment( nbuprocnbr(kp ) ) ) + allocate( iworkgrid( nbuprocnbr(kp ) ) ) +! + select case( kp ) + case ( NBUDGET_U ) + yworkunit(:) = 'm s-2'; yworkunit(1:3) = 'm s-1' + yworkcomment(:) = 'Budget of momentum along X axis' + iworkgrid(:) = 2 + write( ygroup_name, fmt = "('UU___',I4.4)" ) nbutshift + + case ( NBUDGET_V ) + yworkunit(:) = 'm s-2'; yworkunit(1:3) = 'm s-1' + yworkcomment(:) = 'Budget of momentum along Y axis' + iworkgrid(:) = 3 + write( ygroup_name, fmt = "('VV___',I4.4)" ) nbutshift + + case ( NBUDGET_W ) + yworkunit(:) = 'm s-2'; yworkunit(1:3) = 'm s-1' + yworkcomment(:) = 'Budget of momentum along Z axis' + iworkgrid(:) = 4 + write( ygroup_name, fmt = "('WW___',I4.4)" ) nbutshift + + case ( NBUDGET_TH ) + yworkunit(:) = 'K s-1' ; yworkunit(1:3) = 'K' + yworkcomment(:) = 'Budget of potential temperature' + iworkgrid(:) = 1 + write( ygroup_name, fmt = "('TH___',I4.4)" ) nbutshift + + case ( NBUDGET_TKE ) + yworkunit(:) = 'm2 s-3' ; yworkunit(1:3) = 'm2 s-1' + yworkcomment(:) = 'Budget of turbulent kinetic energy' + iworkgrid(:) = 1 + write( ygroup_name, fmt = "('TK___',I4.4)" ) nbutshift + + case ( NBUDGET_RV ) + yworkunit(:) = 's-1' ; yworkunit(1:3) = 'kg kg-1' + yworkcomment(:) = 'Budget of water vapor mixing ratio' + iworkgrid(:) = 1 + write( ygroup_name, fmt = "('RV___',I4.4)" ) nbutshift + + case ( NBUDGET_RC ) + yworkunit(:) = 's-1' ; yworkunit(1:3) = 'kg kg-1' + yworkcomment(:) = 'Budget of cloud water mixing ratio' + iworkgrid(:) = 1 + write( ygroup_name, fmt = "('RC___',I4.4)" ) nbutshift + + case ( NBUDGET_RR ) + yworkunit(:) = 's-1' ; yworkunit(1:3) = 'kg kg-1' + yworkcomment(:) = 'Budget of rain water mixing ratio' + iworkgrid(:) = 1 + write( ygroup_name, fmt = "('RR___',I4.4)" ) nbutshift + + case ( NBUDGET_RI ) + yworkunit(:) = 's-1' ; yworkunit(1:3) = 'kg kg-1' + yworkcomment(:) = 'Budget of cloud ice mixing ratio' + iworkgrid(:) = 1 + write( ygroup_name, fmt = "('RI___',I4.4)" ) nbutshift + + case ( NBUDGET_RS ) + yworkunit(:) = 's-1' ; yworkunit(1:3) = 'kg kg-1' + yworkcomment(:) = 'Budget of snow/aggregate mixing ratio' + iworkgrid(:) = 1 + write( ygroup_name, fmt = "('RS___',I4.4)" ) nbutshift + + case ( NBUDGET_RG ) + yworkunit(:) = 's-1' ; yworkunit(1:3) = 'kg kg-1' + yworkcomment(:) = 'Budget of graupel mixing ratio' + iworkgrid(:) = 1 + write( ygroup_name, fmt = "('RG___',I4.4)" ) nbutshift + + case ( NBUDGET_RH ) + yworkunit(:) = 's-1' ; yworkunit(1:3) = 'kg kg-1' + yworkcomment(:) = 'Budget of hail mixing ratio' + iworkgrid(:) = 1 + write( ygroup_name, fmt = "('RH___',I4.4)" ) nbutshift + + case ( NBUDGET_SV1 : ) + jsv = kp - NBUDGET_SV1 + 1 + yworkunit(:) = 's-1' ; yworkunit(1:3) = ' ' + DO JT = 1,nbuprocnbr(kp) + WRITE(yworkcomment(JT),FMT="('Budget of SVx=',I3.3)") jsv + END DO + iworkgrid(:) = 1 + write( ygroup_name, fmt = "('SV',I3.3,I4.4)") jsv, nbutshift + + case default + call Print_msg( NVERB_ERROR, 'GEN', 'Store_one_budget', 'unknown budget type' ) + end select + + CALL Write_diachro( tpdiafile, tluout, ygroup_name, ybutype, iworkgrid, & + tpdates, zworkt, cbucomment(kp, :), & + yworkunit, yworkcomment, & + oicp = lbu_icp, ojcp = lbu_jcp, okcp = lbu_kcp, & + kil = nbuil, kih = nbuih, kjl = nbujl, kjh = nbujh, kkl = nbukl, kkh = nbukh ) + + deallocate( zworkt, yworkunit, yworkcomment, iworkgrid ) + +end subroutine Store_one_budget + +end module mode_write_budget diff --git a/src/MNH/write_diachro.f90 b/src/MNH/write_diachro.f90 index 05288a97203cdbc8b4f941283ee70a96e3792c21..8934a59ceac5b00ca68730d7b955defd80812030 100644 --- a/src/MNH/write_diachro.f90 +++ b/src/MNH/write_diachro.f90 @@ -14,9 +14,9 @@ public :: Write_diachro contains ! ################################################################# SUBROUTINE WRITE_DIACHRO(TPDIAFILE,TPLUOUTDIA,HGROUP,HTYPE, & - KGRID,PDATIME,PVAR,PTRAJT, & - HTITRE,HUNITE,HCOMMENT,OICP,OJCP,OKCP,KIL,KIH,KJL,KJH,KKL,KKH, & - PTRAJX,PTRAJY,PTRAJZ,PMASK) + KGRID, tpdates, PVAR, & + HTITRE,HUNITE,HCOMMENT,OICP,OJCP,OKCP,KIL,KIH,KJL,KJH,KKL,KKH, & + PTRAJX,PTRAJY,PTRAJZ ) ! ################################################################# ! !!**** *WRITE_DIACHRO* - Ecriture d'un enregistrement dans un fichier @@ -77,6 +77,8 @@ contains !! P. Wautelet 09/06/2017: name of the variable added to the name of the written field !! and better comment (true comment + units) !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O +! P. Wautelet 13/09/2019: budget: simplify and modernize date/time management +! P. Wautelet 13/09/2019: remove never used PMASK optional dummy-argument !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -86,7 +88,11 @@ USE MODD_BUDGET USE MODD_CONF USE MODD_IO, ONLY: TFILEDATA USE MODD_PARAMETERS, ONLY: JPHEXT +use modd_time, only: tdtexp, tdtseg +use modd_time_n, only: tdtmod +use modd_type_date, only: date_time ! +use mode_datetime, only: Datetime_distance USE MODE_FIELD USE MODE_IO_FIELD_WRITE, only: IO_Field_write, IO_Field_write_box USE MODE_ll @@ -100,9 +106,8 @@ TYPE(TFILEDATA), INTENT(IN) :: TPDIAFILE ! file to writ TYPE(TFILEDATA), INTENT(IN) :: TPLUOUTDIA CHARACTER(LEN=*), INTENT(IN) :: HGROUP, HTYPE INTEGER,DIMENSION(:), INTENT(IN) :: KGRID -REAL,DIMENSION(:,:), INTENT(IN) :: PDATIME +type(date_time), dimension(:), intent(in) :: tpdates REAL,DIMENSION(:,:,:,:,:,:), INTENT(IN) :: PVAR -REAL,DIMENSION(:,:), INTENT(IN) :: PTRAJT CHARACTER(LEN=*),DIMENSION(:),INTENT(IN) :: HTITRE, HUNITE, HCOMMENT LOGICAL, INTENT(IN),OPTIONAL :: OICP, OJCP, OKCP INTEGER, INTENT(IN),OPTIONAL :: KIL, KIH @@ -111,7 +116,6 @@ INTEGER, INTENT(IN),OPTIONAL :: KKL, KKH REAL,DIMENSION(:,:,:), INTENT(IN),OPTIONAL :: PTRAJX REAL,DIMENSION(:,:,:), INTENT(IN),OPTIONAL :: PTRAJY REAL,DIMENSION(:,:,:), INTENT(IN),OPTIONAL :: PTRAJZ -REAL,DIMENSION(:,:,:,:,:,:), INTENT(IN),OPTIONAL :: PMASK ! !* 0.1 Local variables ! --------------- @@ -126,43 +130,52 @@ INTEGER :: INTRAJX, INTRAJY, INTRAJZ INTEGER :: IIMASK, IJMASK, IKMASK, ITMASK, INMASK, IPMASK INTEGER :: ICOMPX, ICOMPY, ICOMPZ INTEGER :: IIMAX_ll, IJMAX_ll ! size of the physical global domain +integer :: ji INTEGER,DIMENSION(:),ALLOCATABLE :: ITABCHAR +logical :: gicp, gjcp, gkcp LOGICAL :: GPACK +real, dimension(:,:), allocatable :: ztimes +real, dimension(:,:), allocatable :: zdatime TYPE(TFIELDDATA) :: TZFIELD !------------------------------------------------------------------------------ -! + +if ( present( oicp ) ) then + gicp = oicp +else + gicp = .false. +end if + +if ( present( ojcp ) ) then + gjcp = ojcp +else + gjcp = .false. +end if + +if ( present( okcp ) ) then + gkcp = okcp +else + gkcp = .false. +end if + GPACK=LPACK LPACK=.FALSE. YCOMMENT='NOTHING' ! ILUOUTDIA = TPLUOUTDIA%NLU ! -! BUG ...ca passe que si PRESENT(OICP) sinon OICP non defini -! Question: doit-on mettre condition comme: -! IF(HTYPE == 'CART' .AND. .NOT. PRESENT(OICP) .AND. .NOT. PRESENT(OJCP)) THEN - -! en attendant correction on debranche avec un IF Present. ENDIF av -! RETURN -IF (PRESENT(OICP) .AND. PRESENT(OJCP)) THEN - IF(HTYPE == 'CART' .AND. .NOT. OICP .AND. .NOT. OJCP) THEN +II = SIZE(PVAR,1) +IJ = SIZE(PVAR,2) +IF(HTYPE == 'CART' .AND. .NOT. GICP .AND. .NOT. GJCP) THEN !for parallel execution, PVAR is distributed on several proc - II=KIH-KIL+1 - IJ=KJH-KJL+1 - ELSE - II = SIZE(PVAR,1) - IJ = SIZE(PVAR,2) - ENDIF -ELSE - II = SIZE(PVAR,1) - IJ = SIZE(PVAR,2) - + II=KIH-KIL+1 + IJ=KJH-KJL+1 ENDIF IK = SIZE(PVAR,3) IT = SIZE(PVAR,4) IN = SIZE(PVAR,5) IP = SIZE(PVAR,6) -INTRAJT=SIZE(PTRAJT,2) +INTRAJT=SIZE(tpdates) IKTRAJX=0; IKTRAJY=0; IKTRAJZ=0 ITTRAJX=0; ITTRAJY=0; ITTRAJZ=0 @@ -190,17 +203,10 @@ IF(HTYPE == 'MASK')THEN CALL GET_GLOBALDIMS_ll (IIMAX_ll,IJMAX_ll) IIMASK=IIMAX_ll + 2 * JPHEXT IJMASK=IJMAX_ll + 2 * JPHEXT - IF(PRESENT(PMASK))THEN - IKMASK=SIZE(PMASK,3) - ITMASK=SIZE(PMASK,4) - INMASK=SIZE(PMASK,5) - IPMASK=SIZE(PMASK,6) - ELSE - IKMASK=1 - ITMASK=NBUWRNB - INMASK=NBUMASK - IPMASK=1 - ENDIF + IKMASK=1 + ITMASK=NBUWRNB + INMASK=NBUMASK + IPMASK=1 ENDIF ILENTITRE = LEN(HTITRE) @@ -208,16 +214,20 @@ ILENUNITE = LEN(HUNITE) ILENCOMMENT = LEN(HCOMMENT) ICOMPX=0; ICOMPY=0; ICOMPZ=0 -IF(PRESENT(OICP))THEN -IF(OICP)THEN - ICOMPX=1 +IF ( GICP ) THEN + ICOMPX = 1 +ELSE + ICOMPX = 0 ENDIF -IF(OJCP)THEN - ICOMPY=1 +IF ( GJCP ) THEN + ICOMPY = 1 +ELSE + ICOMPY = 0 ENDIF -IF(OKCP)THEN +IF ( GKCP ) THEN ICOMPZ=1 -ENDIF +ELSE + ICOMPZ = 0 ENDIF ! IF (NVERB>=5) THEN @@ -377,9 +387,7 @@ DO J = 1,IP ELSE IF(J >= 100 .AND. J < 1000) THEN WRITE(YJ,'(I3)')J ENDIF -! BUG ...ca passe que si PRESENT(OICP) sinon OICP non defini -IF (PRESENT(OICP) .AND. PRESENT(OJCP)) THEN - IF(HTYPE == 'CART' .AND. .NOT. OICP .AND. .NOT. OJCP) THEN + IF(HTYPE == 'CART' .AND. .NOT. GICP .AND. .NOT. GJCP) THEN TZFIELD%CMNHNAME = TRIM(HGROUP)//'.PROC'//YJ TZFIELD%CSTDNAME = '' TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME) @@ -405,19 +413,6 @@ IF (PRESENT(OICP) .AND. PRESENT(OJCP)) THEN TZFIELD%LTIMEDEP = .FALSE. CALL IO_Field_write(TPDIAFILE,TZFIELD,PVAR(:,:,:,:,:,J)) ENDIF -ELSE - TZFIELD%CMNHNAME = TRIM(HGROUP)//'.PROC'//YJ - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME) - TZFIELD%CUNITS = TRIM(HUNITE(J)) - TZFIELD%CDIR = '--' - TZFIELD%CCOMMENT = TRIM(HTITRE(J))//' - '//TRIM(HCOMMENT(J))//' ('//TRIM(HUNITE(J))//')' - TZFIELD%NGRID = KGRID(J) - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 5 - TZFIELD%LTIMEDEP = .FALSE. - CALL IO_Field_write(TPDIAFILE,TZFIELD,PVAR(:,:,:,:,:,J)) -END IF IF (NVERB>=5) THEN WRITE(ILUOUTDIA,*)J,TRIM(TZFIELD%CMNHNAME) ENDIF @@ -438,7 +433,17 @@ TZFIELD%NGRID = KGRID(1) TZFIELD%NTYPE = TYPEREAL TZFIELD%NDIMS = 2 TZFIELD%LTIMEDEP = .FALSE. -CALL IO_Field_write(TPDIAFILE,TZFIELD,PTRAJT) + +!Reconstitute old diachro format +allocate( ztimes( size( tpdates ), 1 ) ) + +do ji=1,size(tpdates) + call Datetime_distance( tdtexp, tpdates(ji ), ztimes(ji, 1 ) ) +end do + +call IO_Field_write( tpdiafile, tzfield, ztimes ) + +deallocate( ztimes ) IF (NVERB>=5) THEN WRITE(ILUOUTDIA,*)' 7th record (',TRIM(TZFIELD%CMNHNAME),'): OK' @@ -463,22 +468,6 @@ IF(PRESENT(PTRAJX))THEN CALL IO_Field_write(TPDIAFILE,TZFIELD,PTRAJX) ENDIF ! -! ou -! -IF(PRESENT(PMASK))THEN - TZFIELD%CMNHNAME = TRIM(HGROUP)//'.MASK' - TZFIELD%CSTDNAME = '' - TZFIELD%CLONGNAME = TRIM(HGROUP)//'.MASK' - TZFIELD%CUNITS = '' - TZFIELD%CDIR = 'XY' - TZFIELD%CCOMMENT = TRIM(YCOMMENT) - TZFIELD%NGRID = KGRID(1) - TZFIELD%NTYPE = TYPEREAL - TZFIELD%NDIMS = 6 - TZFIELD%LTIMEDEP = .FALSE. - CALL IO_Field_write(TPDIAFILE,TZFIELD,PMASK) -ENDIF -! ! 9eme enregistrement TRAJY ! IF(PRESENT(PTRAJY))THEN @@ -523,7 +512,30 @@ TZFIELD%NGRID = KGRID(1) TZFIELD%NTYPE = TYPEREAL TZFIELD%NDIMS = 2 TZFIELD%LTIMEDEP = .FALSE. -CALL IO_Field_write(TPDIAFILE,TZFIELD,PDATIME) + +!Reconstitute old diachro format +allocate( zdatime( 16, size(tpdates) ) ) + +zdatime(1, : ) = tdtexp%tdate%year +zdatime(2, : ) = tdtexp%tdate%month +zdatime(3, : ) = tdtexp%tdate%day +zdatime(4, : ) = tdtexp%time +zdatime(5, : ) = tdtseg%tdate%year +zdatime(6, : ) = tdtseg%tdate%month +zdatime(7, : ) = tdtseg%tdate%day +zdatime(8, : ) = tdtseg%time +zdatime(9, : ) = tdtmod%tdate%year +zdatime(10, : ) = tdtmod%tdate%month +zdatime(11, : ) = tdtmod%tdate%day +zdatime(12, : ) = tdtmod%time +zdatime(13, : ) = tpdates(:)%tdate%year +zdatime(14, : ) = tpdates(:)%tdate%month +zdatime(15, : ) = tpdates(:)%tdate%day +zdatime(16, : ) = tpdates(:)%time + +call IO_Field_write( tpdiafile, tzfield, zdatime ) + +deallocate( zdatime ) ! CALL MENU_DIACHRO(TPDIAFILE,HGROUP) LPACK=GPACK diff --git a/src/MNH/write_les_sv_budgetn.f90 b/src/MNH/write_les_sv_budgetn.f90 index 10df1eebe24ef9fa2df341213eac4eceec3bba35..7acd1ed9796df48735ec8203f64fdca4babce6ab 100644 --- a/src/MNH/write_les_sv_budgetn.f90 +++ b/src/MNH/write_les_sv_budgetn.f90 @@ -382,7 +382,7 @@ DO JSV=1,NSV END DO YTITLE = "Sv variance budget " -CALL LES_DIACHRO_SV_MASKS(TPDIAFILE,YGROUP,YSUBTITLE(:ILES),YTITLE//YSUBTITLE(:ILES),"kg2/kg2/s",ZSV_BUDGET,HLES_AVG) +CALL LES_DIACHRO_SV_MASKS(TPDIAFILE,YGROUP,YSUBTITLE(:ILES),YTITLE//YSUBTITLE(:ILES),"kg2 kg-2 s-1",ZSV_BUDGET,HLES_AVG) ! DEALLOCATE(ZSV_BUDGET) !------------------------------------------------------------------------------- @@ -752,7 +752,7 @@ DO JSV=1,NSV END DO YTITLE = "Sv flux budget " -CALL LES_DIACHRO_SV_MASKS(TPDIAFILE,YGROUP,YSUBTITLE(:ILES),YTITLE//YSUBTITLE(:ILES),"mkg/kg/s2",ZSV_BUDGET,HLES_AVG) +CALL LES_DIACHRO_SV_MASKS(TPDIAFILE,YGROUP,YSUBTITLE(:ILES),YTITLE//YSUBTITLE(:ILES),"m kg kg-1 s-2",ZSV_BUDGET,HLES_AVG) ! DEALLOCATE(ZSV_BUDGET) !------------------------------------------------------------------------------- diff --git a/src/MNH/write_lesn.f90 b/src/MNH/write_lesn.f90 index 1ae4ad90c4df2ed27e600a5de13bbcc226ba3c50..ee1d6ec45dce244b160bbb03098b5ed1105c1c7c 100644 --- a/src/MNH/write_lesn.f90 +++ b/src/MNH/write_lesn.f90 @@ -55,11 +55,11 @@ END MODULE MODI_WRITE_LES_n !! 10/10/09 (P. Aumond) Add user multimaskS !! 11/15 (C.Lac) Add production terms of TKE !! 10/2016 (C.Lac) Add droplet deposition -!! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O -!!!! 02/2019 (C. Lac) Add rain fraction as a LES diagnostic - -!! -------------------------------------------------------------------------- -! +! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O +! C. Lac 02/2019: add rain fraction as a LES diagnostic +! P. Wautelet 13/09/2019: budget: simplify and modernize date/time management +! -------------------------------------------------------------------------- +! !* 0. DECLARATIONS ! ------------ ! @@ -217,12 +217,8 @@ END IF ! NLES_CURRENT_TIMES=NLES_TIMES ! -ALLOCATE(XLES_CURRENT_TRAJT(NLES_TIMES,1)) -XLES_CURRENT_TRAJT(:,:) = XLES_TRAJT(:,:) ALLOCATE(XLES_CURRENT_Z(NLES_K)) XLES_CURRENT_Z(:) = XLES_Z(:) -ALLOCATE(XLES_CURRENT_DATIME(16,NLES_TIMES)) -XLES_CURRENT_DATIME(:,:) = XLES_DATIME(:,:) ! XLES_CURRENT_ZS = XLES_ZS ! @@ -812,7 +808,7 @@ IF (LLES_SUBGRID) THEN "Subgrid vert. flux of liquid potential temperature"//YSUBTITLE(:),"m K s-1",XLES_SUBGRID_WThl,HLES_AVG) CALL LES_DIACHRO_MASKS(TPDIAFILE,"SBG_WP ",YSUBTITLE(:), & - "Subgrid <wp> vertical Flux"//YSUBTITLE(:),"mPa/s",XLES_SUBGRID_WP,HLES_AVG) + "Subgrid <wp> vertical Flux"//YSUBTITLE(:),"m Pa s-1",XLES_SUBGRID_WP,HLES_AVG) !! !! CALL LES_DIACHRO_MASKS(TPDIAFILE,"THLUP_MF",YSUBTITLE(:), & @@ -1488,9 +1484,7 @@ IF (HLES_AVG==' ') CALL LES_SPEC_n(TPDIAFILE) !* 7. deallocations ! ------------- ! -DEALLOCATE(XLES_CURRENT_TRAJT ) DEALLOCATE(XLES_CURRENT_Z ) -DEALLOCATE(XLES_CURRENT_DATIME) IF (CLES_NORM_TYPE/='NONE' ) THEN DEALLOCATE(XLES_NORM_M ) diff --git a/src/MNH/write_profilern.f90 b/src/MNH/write_profilern.f90 index 5e618958c541543cd269a8d064009aea8d2c2570..507f7483f288dedbc181446fef1d2b85f7590827 100644 --- a/src/MNH/write_profilern.f90 +++ b/src/MNH/write_profilern.f90 @@ -60,9 +60,10 @@ END MODULE MODI_WRITE_PROFILER_n !! Oct, 2016 (C.Lac) Add visibility diagnostics for fog !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O !! J. Escobar : 16/08/2018: From Pierre & Maud , correction use CNAMES(JSV-NSV_CHEMBEG+1) -!! -!! -------------------------------------------------------------------------- -! +! P. Wautelet 13/09/2019: budget: simplify and modernize date/time management +! +! -------------------------------------------------------------------------- +! !* 0. DECLARATIONS ! ------------ ! @@ -130,7 +131,6 @@ INTEGER, INTENT(IN) :: II ! REAL, DIMENSION(:,:,:,:,:,:), ALLOCATABLE :: ZWORK6 ! contains temporal serie REAL, DIMENSION(:,:,:,:,:,:), ALLOCATABLE :: ZW6 ! contains temporal serie to write -REAL, DIMENSION(:,:), ALLOCATABLE :: ZTRAJT ! localization of the REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZSV, ZN0, ZSIG, ZRG REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRHO ! @@ -161,15 +161,12 @@ IF (LDUST) IPROC = IPROC + NMODE_DST*3 IF (LDUST .OR. LORILAM .OR. LSALT) IPROC=IPROC+NAER IF (SIZE(TPROFILER%TKE )>0) IPROC = IPROC + 1 ! -ALLOCATE (ZTRAJT( SIZE(TPROFILER%TIME),1)) -ALLOCATE (ZWORK6(1,1,IKU,SIZE(TPROFILER%TIME),1,IPROC)) +ALLOCATE (ZWORK6(1,1,IKU,size(tprofiler%tpdates),1,IPROC)) ALLOCATE (YCOMMENT(IPROC)) ALLOCATE (YTITLE (IPROC)) ALLOCATE (YUNIT (IPROC)) ALLOCATE (IGRID (IPROC)) ! -ZTRAJT (:,1) = TPROFILER%TIME(:) -! IGRID = 1 YGROUP = TPROFILER%NAME(II) ! @@ -507,11 +504,11 @@ IF (SIZE(TPROFILER%SV,4)>=1) THEN ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%SV(:,IK,II,JSV) * 1.E9 END DO IF ((LORILAM).AND. .NOT.(ANY(TPROFILER%P(:,IK,II) == 0.))) THEN - ALLOCATE (ZSV(1,1,SIZE(TPROFILER%TIME),NSV_AER)) - ALLOCATE (ZRHO(1,1,SIZE(TPROFILER%TIME))) - ALLOCATE (ZN0(1,1,SIZE(TPROFILER%TIME),JPMODE)) - ALLOCATE (ZRG(1,1,SIZE(TPROFILER%TIME),JPMODE)) - ALLOCATE (ZSIG(1,1,SIZE(TPROFILER%TIME),JPMODE)) + ALLOCATE (ZSV(1,1,size(tprofiler%tpdates),NSV_AER)) + ALLOCATE (ZRHO(1,1,size(tprofiler%tpdates))) + ALLOCATE (ZN0(1,1,size(tprofiler%tpdates),JPMODE)) + ALLOCATE (ZRG(1,1,size(tprofiler%tpdates),JPMODE)) + ALLOCATE (ZSIG(1,1,size(tprofiler%tpdates),JPMODE)) ZSV(1,1,:,1:NSV_AER) = TPROFILER%SV(:,IK,II,NSV_AERBEG:NSV_AEREND) IF (SIZE(TPROFILER%R,4) >0) THEN ZRHO(1,1,:) = 0. @@ -558,11 +555,11 @@ IF (SIZE(TPROFILER%SV,4)>=1) THEN ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%SV(:,IK,II,JSV) * 1.E9 END DO IF ((LDUST).AND. .NOT.(ANY(TPROFILER%P(:,IK,II) == 0.))) THEN - ALLOCATE (ZSV(1,1,SIZE(TPROFILER%TIME),NSV_DST)) - ALLOCATE (ZRHO(1,1,SIZE(TPROFILER%TIME))) - ALLOCATE (ZN0(1,1,SIZE(TPROFILER%TIME),NMODE_DST)) - ALLOCATE (ZRG(1,1,SIZE(TPROFILER%TIME),NMODE_DST)) - ALLOCATE (ZSIG(1,1,SIZE(TPROFILER%TIME),NMODE_DST)) + ALLOCATE (ZSV(1,1,size(tprofiler%tpdates),NSV_DST)) + ALLOCATE (ZRHO(1,1,size(tprofiler%tpdates))) + ALLOCATE (ZN0(1,1,size(tprofiler%tpdates),NMODE_DST)) + ALLOCATE (ZRG(1,1,size(tprofiler%tpdates),NMODE_DST)) + ALLOCATE (ZSIG(1,1,size(tprofiler%tpdates),NMODE_DST)) ZSV(1,1,:,1:NSV_DST) = TPROFILER%SV(:,IK,II,NSV_DSTBEG:NSV_DSTEND) IF (SIZE(TPROFILER%R,4) >0) THEN ZRHO(1,1,:) = 0. @@ -624,16 +621,15 @@ END DO !---------------------------------------------------------------------------- ! -ALLOCATE (ZW6(1,1,IKU,SIZE(TPROFILER%TIME),1,JPROC)) +ALLOCATE (ZW6(1,1,IKU,size(tprofiler%tpdates),1,JPROC)) ZW6 = ZWORK6(:,:,:,:,:,:JPROC) DEALLOCATE(ZWORK6) -CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT0,YGROUP,"CART",IGRID(:JPROC), TPROFILER%DATIME,& - ZW6,ZTRAJT,YTITLE(:JPROC),YUNIT(:JPROC),YCOMMENT(:JPROC), & - .TRUE.,.TRUE.,.FALSE., & - KIL=1,KIH=1,KJL=1,KJH=1,KKL=1,KKH=IKU ) -! -DEALLOCATE (ZTRAJT ) +CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT0, YGROUP, "CART", IGRID(:JPROC), tprofiler%tpdates, & + ZW6, YTITLE(:JPROC), YUNIT(:JPROC), YCOMMENT(:JPROC), & + OICP = .TRUE., OJCP = .TRUE., OKCP = .FALSE., & + KIL = 1, KIH = 1, KJL = 1, KJH = 1, KKL = 1, KKH = IKU ) + DEALLOCATE (ZW6 ) DEALLOCATE (YCOMMENT) DEALLOCATE (YTITLE ) diff --git a/src/MNH/write_seriesn.f90 b/src/MNH/write_seriesn.f90 index 76ff9507c3c5ac3c9aa92fed9db6b546464b7be4..18618882425b6694fe86cf3816ff93ad8fe76036 100644 --- a/src/MNH/write_seriesn.f90 +++ b/src/MNH/write_seriesn.f90 @@ -60,7 +60,8 @@ END MODULE MODI_WRITE_SERIES_n !! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! P.Wautelet: 11/07/2016 : removed MNH_NCWRIT define !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O -!! +! P. Wautelet 13/09/2019: budget: simplify and modernize date/time management +! !------------------------------------------------------------------------------- ! ! @@ -235,11 +236,11 @@ ENDIF !* 2.3 Write in diachro file ! GICP=.TRUE. ; GJCP=.TRUE. ; GKCP=.TRUE. -CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT,'TSERIES','CART',NSGRIDD1,XSDATIME(:,1:NSNBSTEPT), & - XSSERIES1(1:1,1:1,1:1,1:NSNBSTEPT,:,:), & - XSTRAJT(1:NSNBSTEPT,:),CSTITLE1,CSUNIT1,CSCOMMENT1, & - GICP,GJCP,GKCP, & - KIL=1,KIH=1,KJL=1,KJH=1,KKL=1,KKH=1) +CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT, 'TSERIES', 'CART', NSGRIDD1, tpsdates(1:nsnbstept), & + XSSERIES1(1:1,1:1,1:1,1:NSNBSTEPT,:,:), & + CSTITLE1(:), CSUNIT1(:), CSCOMMENT1(:), & + OICP = GICP, OJCP = GJCP, OKCP = GKCP, & + KIL = 1, KIH = 1, KJL = 1, KJH = 1, KKL = 1, KKH = 1 ) ! !---------------------------------------------------------------------------- ! @@ -289,11 +290,11 @@ DEALLOCATE(ZVAR3D) !* 3.2 Write in diachro file ! GICP=.TRUE. ; GJCP=.TRUE. ; GKCP=.FALSE. -CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT,'ZTSERIES','CART',NSGRIDD2,XSDATIME(:,1:NSNBSTEPT), & - XSSERIES2(1:1,1:1,1:IKMAX,1:NSNBSTEPT,:,:), & - XSTRAJT(1:NSNBSTEPT,:),CSTITLE2,CSUNIT2,CSCOMMENT2, & - GICP,GJCP,GKCP, & - KIL=1,KIH=1,KJL=1,KJH=1,KKL=IKB,KKH=IKE) +CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT, 'ZTSERIES', 'CART', NSGRIDD2, tpsdates(1:nsnbstept), & + XSSERIES2(1:1,1:1,1:1,1:NSNBSTEPT,:,:), & + CSTITLE2(:), CSUNIT2(:), CSCOMMENT2(:), & + OICP = GICP, OJCP = GJCP, OKCP = GKCP, & + KIL = 1, KIH = 1, KJL = 1, KJH = 1, KKL = IKB, KKH = IKE ) ! !---------------------------------------------------------------------------- ! @@ -347,11 +348,11 @@ DO JS=1,NBJSLICE YSTITLE3S(JT)=ADJUSTL(ADJUSTR(CSTITLE3(JT))//'Y'//YSL//'-'//YSH) END DO GICP=.FALSE. ; GJCP=.TRUE. ; GKCP=.TRUE. - CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT,YGROUP,'CART',NSGRIDD3,XSDATIME(:,1:NSNBSTEPT), & - ZSERIES3_ll(1:IIU_ll,1:1,1:1,1:NSNBSTEPT,1:1,ISB1:ISB2),& - XSTRAJT(1:NSNBSTEPT,:),YSTITLE3S,CSUNIT3,CSCOMMENT3, & - GICP,GJCP,GKCP, & - KIL=1,KIH=IIU_ll,KJL=1,KJH=1,KKL=1,KKH=1) + CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT, YGROUP, 'CART', NSGRIDD3, tpsdates(1:nsnbstept), & + ZSERIES3_ll(1:IIU_ll,1:1,1:1,1:NSNBSTEPT,1:1,ISB1:ISB2), & + YSTITLE3S(:), CSUNIT3(:), CSCOMMENT3(:), & + OICP = GICP, OJCP = GJCP, OKCP = GKCP, & + KIL = 1, KIH = IIU_ll, KJL = 1, KJH = 1, KKL = 1, KKH = 1 ) END DO DEALLOCATE(ZVAR3D,ZWORK2D,ZSERIES3_ll) ! diff --git a/src/MNH/write_stationn.f90 b/src/MNH/write_stationn.f90 index c85c58f26e3e466c478bf4002ea775d19f01ac74..4361a9a91fd94f13896036f97c2344d0779ff93e 100644 --- a/src/MNH/write_stationn.f90 +++ b/src/MNH/write_stationn.f90 @@ -57,9 +57,10 @@ END MODULE MODI_WRITE_STATION_n !! ------------- !! Original 15/02/2002 !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O -!! -!! -------------------------------------------------------------------------- -! +! P. Wautelet 13/09/2019: budget: simplify and modernize date/time management +! +! -------------------------------------------------------------------------- +! !* 0. DECLARATIONS ! ------------ ! @@ -124,9 +125,8 @@ INTEGER, INTENT(IN) :: II ! !* 0.2 declaration of local variables for diachro ! -REAL, DIMENSION(:,:,:,:,:,:), ALLOCATABLE :: ZWORK6 ! contains temporal serie -REAL, DIMENSION(:,:,:,:,:,:), ALLOCATABLE :: ZW6 ! contains temporal serie to write -REAL, DIMENSION(:,:), ALLOCATABLE :: ZTRAJT ! localization of the +REAL, DIMENSION(:,:,:,:,:,:), ALLOCATABLE :: ZWORK6 ! contains temporal series +REAL, DIMENSION(:,:,:,:,:,:), ALLOCATABLE :: ZW6 ! contains temporal series to write REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZSV, ZN0, ZSIG, ZRG REAL, DIMENSION(:,:,:,:,:), ALLOCATABLE :: ZPTOTA REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRHO @@ -158,16 +158,12 @@ IF (LSALT) IPROC = IPROC + NMODE_SLT*3 IF (SIZE(TSTATION%TSRAD)>0) IPROC = IPROC + 1 IF (SIZE(TSTATION%SFCO2,1)>0) IPROC = IPROC +1 ! -ALLOCATE (ZTRAJT( SIZE(TSTATION%TIME),1)) -ALLOCATE (ZWORK6(1,1,1,SIZE(TSTATION%TIME),1,IPROC)) +ALLOCATE (ZWORK6(1,1,1,SIZE(tstation%tpdates),1,IPROC)) ALLOCATE (YCOMMENT(IPROC)) ALLOCATE (YTITLE (IPROC)) ALLOCATE (YUNIT (IPROC)) ALLOCATE (IGRID (IPROC)) ! -ZTRAJT (:,1) = TSTATION%TIME(:) -! -! IGRID = 1 YGROUP = TSTATION%NAME(II) JPROC = 0 @@ -422,12 +418,12 @@ IF (SIZE(TSTATION%SV,3)>=1) THEN END DO IF ((LORILAM).AND. .NOT.(ANY(TSTATION%P(:,II) == 0.))) THEN - ALLOCATE (ZSV(1,1,SIZE(TSTATION%TIME),NSV_AER)) - ALLOCATE (ZRHO(1,1,SIZE(TSTATION%TIME))) - ALLOCATE (ZN0(1,1,SIZE(TSTATION%TIME),JPMODE)) - ALLOCATE (ZRG(1,1,SIZE(TSTATION%TIME),JPMODE)) - ALLOCATE (ZSIG(1,1,SIZE(TSTATION%TIME),JPMODE)) - ALLOCATE (ZPTOTA(1,1,SIZE(TSTATION%TIME),NSP+NCARB+NSOA,JPMODE)) + ALLOCATE (ZSV(1,1,SIZE(tstation%tpdates),NSV_AER)) + ALLOCATE (ZRHO(1,1,SIZE(tstation%tpdates))) + ALLOCATE (ZN0(1,1,SIZE(tstation%tpdates),JPMODE)) + ALLOCATE (ZRG(1,1,SIZE(tstation%tpdates),JPMODE)) + ALLOCATE (ZSIG(1,1,SIZE(tstation%tpdates),JPMODE)) + ALLOCATE (ZPTOTA(1,1,SIZE(tstation%tpdates),NSP+NCARB+NSOA,JPMODE)) ZSV(1,1,:,1:NSV_AER) = TSTATION%SV(:,II,NSV_AERBEG:NSV_AEREND) IF (SIZE(TSTATION%R,3) >0) THEN ZRHO(1,1,:) = 0. @@ -570,11 +566,11 @@ IF (SIZE(TSTATION%SV,3)>=1) THEN ZWORK6 (1,1,1,:,1,JPROC) = TSTATION%SV(:,II,JSV) *1.E9 END DO IF ((LDUST).AND. .NOT.(ANY(TSTATION%P(:,II) == 0.))) THEN - ALLOCATE (ZSV(1,1,SIZE(TSTATION%TIME),NSV_DST)) - ALLOCATE (ZRHO(1,1,SIZE(TSTATION%TIME))) - ALLOCATE (ZN0(1,1,SIZE(TSTATION%TIME),NMODE_DST)) - ALLOCATE (ZRG(1,1,SIZE(TSTATION%TIME),NMODE_DST)) - ALLOCATE (ZSIG(1,1,SIZE(TSTATION%TIME),NMODE_DST)) + ALLOCATE (ZSV(1,1,SIZE(tstation%tpdates),NSV_DST)) + ALLOCATE (ZRHO(1,1,SIZE(tstation%tpdates))) + ALLOCATE (ZN0(1,1,SIZE(tstation%tpdates),NMODE_DST)) + ALLOCATE (ZRG(1,1,SIZE(tstation%tpdates),NMODE_DST)) + ALLOCATE (ZSIG(1,1,SIZE(tstation%tpdates),NMODE_DST)) ZSV(1,1,:,1:NSV_DST) = TSTATION%SV(:,II,NSV_DSTBEG:NSV_DSTEND) IF (SIZE(TSTATION%R,3) >0) THEN ZRHO(1,1,:) = 0. @@ -623,11 +619,11 @@ IF (SIZE(TSTATION%SV,3)>=1) THEN ENDIF ! IF ((LSALT).AND. .NOT.(ANY(TSTATION%P(:,II) == 0.))) THEN - ALLOCATE (ZSV(1,1,SIZE(TSTATION%TIME),NSV_SLT)) - ALLOCATE (ZRHO(1,1,SIZE(TSTATION%TIME))) - ALLOCATE (ZN0(1,1,SIZE(TSTATION%TIME),NMODE_SLT)) - ALLOCATE (ZRG(1,1,SIZE(TSTATION%TIME),NMODE_SLT)) - ALLOCATE (ZSIG(1,1,SIZE(TSTATION%TIME),NMODE_SLT)) + ALLOCATE (ZSV(1,1,SIZE(tstation%tpdates),NSV_SLT)) + ALLOCATE (ZRHO(1,1,SIZE(tstation%tpdates))) + ALLOCATE (ZN0(1,1,SIZE(tstation%tpdates),NMODE_SLT)) + ALLOCATE (ZRG(1,1,SIZE(tstation%tpdates),NMODE_SLT)) + ALLOCATE (ZSIG(1,1,SIZE(tstation%tpdates),NMODE_SLT)) ZSV(1,1,:,1:NSV_SLT) = TSTATION%SV(:,II,NSV_SLTBEG:NSV_SLTEND) IF (SIZE(TSTATION%R,3) >0) THEN ZRHO(1,1,:) = 0. @@ -685,16 +681,15 @@ END IF !---------------------------------------------------------------------------- ! ! -ALLOCATE (ZW6(1,1,1,SIZE(TSTATION%TIME),1,JPROC)) +ALLOCATE (ZW6(1,1,1,SIZE(tstation%tpdates),1,JPROC)) ZW6 = ZWORK6(:,:,:,:,:,:JPROC) DEALLOCATE(ZWORK6) ! - CALL WRITE_DIACHRO(TPDIAFILE,TLUOUT0,YGROUP,"CART",IGRID, TSTATION%DATIME,& - ZW6,ZTRAJT,YTITLE,YUNIT,YCOMMENT,& - .TRUE.,.TRUE.,.FALSE., & - KIL=1,KIH=1,KJL=1,KJH=1,KKL=1,KKH=1 ) +CALL WRITE_DIACHRO( TPDIAFILE, TLUOUT0, YGROUP, "CART", IGRID, tstation%tpdates, & + ZW6(:,:,:,:,:,:), YTITLE(:), YUNIT(:), YCOMMENT(:), & + OICP = .TRUE., OJCP = .TRUE., OKCP = .FALSE., & + KIL = 1, KIH = 1, KJL = 1, KJH = 1, KKL = 1, KKH = 1 ) ! -DEALLOCATE (ZTRAJT) DEALLOCATE (ZW6) DEALLOCATE (YCOMMENT) DEALLOCATE (YTITLE )