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

Philippe 20/02/2023: scalar variables: CSV is now allocated on each model

parent a6076a6b
No related branches found
No related tags found
No related merge requests found
......@@ -590,7 +590,7 @@ IF(LBLOWSNOW) THEN
ELSE
KSV_SURF = NSV
ALLOCATE(YSV_SURF(KSV_SURF))
YSV_SURF(:) = CSV(:)
YSV_SURF(:) = CSV(1:NSV)
ENDIF
!
!-------------------------------------------------------------------------------
......
......@@ -744,13 +744,11 @@ IF (LBLOWSNOW) XSVMIN(NSV_SNWBEG_A(KMI):NSV_SNWEND_A(KMI))=XMNH_TINY
!
! NAME OF THE SCALAR VARIABLES IN THE DIFFERENT SV GROUPS
!
IF (ALLOCATED(CSV)) DEALLOCATE(CSV)
ALLOCATE(CSV(NSV))
CSV(:) = ' '
CSV_A(:, KMI) = ' '
IF (LLG) THEN
CSV(NSV_LGBEG_A(KMI) ) = 'X0 '
CSV(NSV_LGBEG_A(KMI)+1) = 'Y0 '
CSV(NSV_LGEND_A(KMI) ) = 'Z0 '
CSV_A(NSV_LGBEG_A(KMI), KMI) = 'X0 '
CSV_A(NSV_LGBEG_A(KMI)+1, KMI) = 'Y0 '
CSV_A(NSV_LGEND_A(KMI), KMI) = 'Z0 '
ENDIF
! Initialize scalar variable names for dust
......
!MNH_LIC Copyright 2001-2022 CNRS, Meteo-France and Universite Paul Sabatier
!MNH_LIC Copyright 2001-2023 CNRS, Meteo-France and Universite Paul Sabatier
!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
!MNH_LIC for details. version 1.
......@@ -52,6 +52,7 @@ REAL,DIMENSION(JPSVMAX) :: XSVMIN ! minimum value for SV variables
LOGICAL :: LINI_NSV(JPMODELMAX) = .FALSE. ! becomes True when routine INI_NSV is called
!
CHARACTER(LEN=NMNHNAMELGTMAX), DIMENSION(:,:), ALLOCATABLE, TARGET :: CSV_CHEM_LIST_A !Names of all the chemical variables
CHARACTER(LEN=6), DIMENSION(:,:), ALLOCATABLE, TARGET :: CSV_A !Names of the scalar variables
TYPE(tfieldmetadata), DIMENSION(:,:), ALLOCATABLE, TARGET :: TSVLIST_A !Metadata of all the scalar variables
INTEGER,DIMENSION(JPMODELMAX)::NSV_A = 0 ! total number of scalar variables
......@@ -166,9 +167,9 @@ INTEGER,DIMENSION(JPMODELMAX)::NSV_SNWEND_A = 0 ! NSV_SNWBEG_A...NSV_SNWEND_A
! variables updated for the current model
!
CHARACTER(LEN=NMNHNAMELGTMAX), DIMENSION(:), POINTER :: CSV_CHEM_LIST !Names of all the chemical variables
TYPE(tfieldmetadata), DIMENSION(:), POINTER :: TSVLIST !Metadata of all the scalar variables
CHARACTER(LEN=6), DIMENSION(:), POINTER :: CSV !Names of the scalar variables
CHARACTER(LEN=6), DIMENSION(:), ALLOCATABLE :: CSV ! name of the scalar variables
TYPE(tfieldmetadata), DIMENSION(:), POINTER :: TSVLIST !Metadata of all the scalar variables
INTEGER :: NSV = 0 ! total number of user scalar variables
!
......
......@@ -28,7 +28,7 @@ END MODULE MODI_UPDATE_NSV
! P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
! P. Wautelet 26/11/2021: add TSVLIST and TSVLIST_A to store the metadata of all the scalar variables
! P. Wautelet 14/01/2022: add CSV_CHEM_LIST(_A) to store the list of all chemical variables
! P. Wautelet 20/02/2023: bugfix: reallocate size was wrong in some scenarii
! P. Wautelet 20/02/2023: manage CSV(_A) + bugfix: reallocate size was wrong in some scenarii
!-------------------------------------------------------------------------------
!
USE MODD_CONF, ONLY: NVERB
......@@ -43,6 +43,7 @@ IMPLICIT NONE
INTEGER, INTENT(IN) :: KMI ! Model index
CHARACTER(LEN=JPSVNAMELGTMAX), DIMENSION(:,:), ALLOCATABLE :: YSVNAMES_TMP
CHARACTER(LEN=6), DIMENSION(:,:), ALLOCATABLE :: YSV_TMP
CHARACTER(LEN=NMNHNAMELGTMAX), DIMENSION(:,:), ALLOCATABLE :: YSVCHEM_LIST_TMP
INTEGER :: JI, JJ
TYPE(tfieldmetadata), DIMENSION(:,:), ALLOCATABLE :: YSVLIST_TMP
......@@ -71,6 +72,21 @@ END IF
CSV_CHEM_LIST => CSV_CHEM_LIST_A(:,KMI)
! Allocate/reallocate CSV_A
IF ( .NOT. ALLOCATED( CSV_A ) ) ALLOCATE( CSV_A( NSV_A(KMI), KMI) )
!If CSV_A is too small, enlarge it and transfer data
IF ( SIZE( CSV_A, 1 ) < NSV_A(KMI) .OR. SIZE( CSV_A, 2 ) < KMI ) THEN
ALLOCATE( YSV_TMP( MAX( SIZE(CSV_A,1), NSV_A(KMI) ), MAX( SIZE(CSV_A,2), KMI ) ) )
DO JJ = 1, SIZE( CSV_A, 2 )
DO JI = 1, SIZE( CSV_A, 1 )
YSV_TMP(JI, JJ) = CSV_A(JI, JJ)
END DO
END DO
CALL MOVE_ALLOC( FROM = YSV_TMP, TO = CSV_A )
END IF
CSV => CSV_A(:,KMI)
! Allocate/reallocate TSVLIST_A
IF ( .NOT. ALLOCATED( TSVLIST_A ) ) ALLOCATE( TSVLIST_A( NSV_A(KMI), KMI) )
!If TSVLIST_A is too small, enlarge it and transfer data
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment