From 9e7ae5bd8b8e870949e8ea0418ff4840fd9d200a Mon Sep 17 00:00:00 2001
From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr>
Date: Wed, 10 Mar 2021 15:46:11 +0100
Subject: [PATCH] Philippe 10/03/2021: budgets: use csvnames for name of scalar
 variables groups + name + comment

---
 src/MNH/ini_budget.f90    | 15 ++++++---------
 src/MNH/modd_budget.f90   |  1 +
 src/MNH/write_budget.f90  |  6 ++++--
 src/MNH/write_diachro.f90 |  4 ++++
 4 files changed, 15 insertions(+), 11 deletions(-)

diff --git a/src/MNH/ini_budget.f90 b/src/MNH/ini_budget.f90
index bf86f65d3..22303fd0c 100644
--- a/src/MNH/ini_budget.f90
+++ b/src/MNH/ini_budget.f90
@@ -22,11 +22,10 @@ use modd_budget, only: nbudgets, tbudgets,
                        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_nsv,    only: nsv
+use modd_nsv,    only: csvnames, nsv
 
 use mode_msg
 
-character(len=3) :: ybudgetnum
 integer          :: ibudget
 integer          :: jsv
 
@@ -90,9 +89,8 @@ tbudgets(NBUDGET_RH)%nid      = NBUDGET_RH
 
 do jsv = 1, nsv
   ibudget = NBUDGET_SV1 - 1 + jsv
-  write ( ybudgetnum, '( i3.3 )' ) jsv
-  tbudgets(ibudget)%cname    = 'BU_RSV_' // ybudgetnum
-  tbudgets(ibudget)%ccomment = 'Budget for scalar variable ' // ybudgetnum
+  tbudgets(ibudget)%cname    = Trim( csvnames(jsv) )
+  tbudgets(ibudget)%ccomment = 'Budget for scalar variable ' // Trim( csvnames(jsv) )
   tbudgets(ibudget)%nid      = ibudget
 end do
 
@@ -224,7 +222,8 @@ use modd_dyn,           only: lcorio, xseglen
 use modd_dyn_n,         only: xtstep
 use modd_elec_descr,    only: linductive, lrelax2fw_ion
 use modd_field,         only: TYPEREAL
-use modd_nsv,           only: nsv_aerbeg, nsv_aerend, nsv_aerdepbeg, nsv_aerdepend, nsv_c2r2beg, nsv_c2r2end,      &
+use modd_nsv,           only: csvnames,                                                                            &
+                              nsv_aerbeg, nsv_aerend, nsv_aerdepbeg, nsv_aerdepend, nsv_c2r2beg, nsv_c2r2end,      &
                               nsv_chembeg, nsv_chemend, nsv_chicbeg, nsv_chicend, nsv_csbeg, nsv_csend,            &
                               nsv_dstbeg, nsv_dstend, nsv_dstdepbeg, nsv_dstdepend, nsv_elecbeg, nsv_elecend,      &
 #ifdef MNH_FOREFIRE
@@ -320,7 +319,6 @@ INTEGER :: IBUDIM2                                        ! second dimension of
 INTEGER :: IBUDIM3                                        ! third dimension of the budget arrays
                                                           ! = NBUKMAX in CART case
                                                           ! = NBUMASK in MASK case
-character(len=3)    :: ybudgetnum
 INTEGER             :: JSV               ! loop indice for the SVs
 INTEGER             :: IINFO_ll ! return status of the interface routine
 integer             :: ibudget
@@ -2751,7 +2749,6 @@ if ( ksv > 999 ) call Print_msg( NVERB_FATAL, 'BUD', 'Ini_budget', 'number of sc
 
 SV_BUDGETS: do jsv = 1, ksv
   ibudget = NBUDGET_SV1 - 1 + jsv
-  write ( ybudgetnum, '( i3.3 )' ) jsv
 
   tbudgets(ibudget)%lenabled = lbu_rsv
 
@@ -2768,7 +2765,7 @@ SV_BUDGETS: do jsv = 1, ksv
 
     tbudgets(ibudget)%tsources(:)%ngroup = 0
 
-    tzsource%ccomment = 'Budget of scalar variable ' // ybudgetnum
+    tzsource%ccomment = 'Budget of scalar variable ' // csvnames(jsv)
     tzsource%ngrid    = 1
 
     tzsource%cunits   = '1'
diff --git a/src/MNH/modd_budget.f90 b/src/MNH/modd_budget.f90
index cd64563ae..344de27dd 100644
--- a/src/MNH/modd_budget.f90
+++ b/src/MNH/modd_budget.f90
@@ -147,6 +147,7 @@ type :: tbudiachrometadata
   integer :: njh = -1
   integer :: nkl = -1
   integer :: nkh = -1
+  integer :: nsv = -1 !Reference number of the corresponding scalar variable
 end type tbudiachrometadata
 type(tbudgetdata), dimension(:), allocatable, save :: tbudgets
 type(tburhodata),                pointer,     save :: tburhodj => null() ! Budget array for rhodj used inside some tbudgets
diff --git a/src/MNH/write_budget.f90 b/src/MNH/write_budget.f90
index 266d0125d..72a9ec46f 100644
--- a/src/MNH/write_budget.f90
+++ b/src/MNH/write_budget.f90
@@ -592,6 +592,7 @@ subroutine Store_one_budget( tpdiafile, tpdates, tpbudget, prhodjn, knocompress,
                                     TYPEREAL
   use modd_io,                only: tfiledata
   use modd_lunit_n,           only: tluout
+  use modd_nsv,               only: csvnames
   use modd_parameters,        only: NBUNAMELGTMAX
   use modd_type_date,         only: date_time
 
@@ -674,6 +675,7 @@ subroutine Store_one_budget( tpdiafile, tpdates, tpbudget, prhodjn, knocompress,
 
   deallocate(zconvert)
 
+  jsv = -1
   select case( tpbudget%nid )
     case ( NBUDGET_U )
       ygroup_name = 'UU'
@@ -713,8 +715,7 @@ subroutine Store_one_budget( tpdiafile, tpdates, tpbudget, prhodjn, knocompress,
 
     case ( NBUDGET_SV1 : )
       jsv = tpbudget%nid - NBUDGET_SV1 + 1
-      Allocate( character(len=5) :: ygroup_name )
-      write( ygroup_name, fmt = "('SV',I3.3)") jsv
+      ygroup_name = csvnames(jsv)
 
     case default
       call Print_msg( NVERB_ERROR, 'BUD', 'Store_one_budget', 'unknown budget type' )
@@ -813,6 +814,7 @@ subroutine Store_one_budget( tpdiafile, tpdates, tpbudget, prhodjn, knocompress,
   tzbudiachro%njh        = nbujh
   tzbudiachro%nkl        = nbukl
   tzbudiachro%nkh        = nbukh
+  tzbudiachro%nsv        = jsv
 
   call Write_diachro( tpdiafile, tzbudiachro, tzfields, tpdates, zworkt, osplit = .true. )
 
diff --git a/src/MNH/write_diachro.f90 b/src/MNH/write_diachro.f90
index cc4e2625f..c55511e3b 100644
--- a/src/MNH/write_diachro.f90
+++ b/src/MNH/write_diachro.f90
@@ -208,6 +208,7 @@ tzfile%cformat = 'LFI'
 
 YCOMMENT='NOTHING'
 
+!Set ygroup to preserve backward compatibility of LFI files
 if (      Any( tpbudiachro%cgroupname == [ 'RJS', 'RJX', 'RJY', 'RJZ'] )                                              &
      .or. Any( tpbudiachro%cgroupname == [ 'UU', 'VV', 'WW', 'TH', 'TK', 'RV', 'RC', 'RR', 'RI', 'RS', 'RG', 'RH' ] ) &
      .or.    ( tpbudiachro%cgroupname(1:2) == 'SV' .and. Len_trim( tpbudiachro%cgroupname ) == 5 )                    ) then
@@ -217,6 +218,9 @@ if (      Any( tpbudiachro%cgroupname == [ 'RJS', 'RJX', 'RJY', 'RJZ'] )
     ygroup(ji : ji) = '_'
   end do
   Write( ygroup(6:9), '( i4.4 )' ) nbutshift
+else if ( tpbudiachro%nsv > 0 ) then
+  Allocate( character(len=9) :: ygroup )
+  Write( ygroup, '( "SV", i3.3, i4.4 )' ) tpbudiachro%nsv, nbutshift
 else
   ygroup = Trim( tpbudiachro%cgroupname )
 end if
-- 
GitLab