From d14b099b5bb354180f67480fca8b2b8661b63dcd Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Mon, 15 Jan 2018 14:36:45 +0100 Subject: [PATCH] Philippe 15/01/2018: IO: write horizontal dimensions in NC4 files: improvements + problem corrections --- src/LIB/SURCOUCHE/src/mode_netcdf.f90 | 33 +++++++++++++++++---------- src/MNH/diag.f90 | 4 ++-- src/MNH/open_nestpgd_files.f90 | 7 +++--- src/MNH/pgd_grid_io_init_mnh.f90 | 4 ++++ src/MNH/prep_nest_pgd.f90 | 2 ++ src/MNH/prep_real_case.f90 | 7 +++--- 6 files changed, 36 insertions(+), 21 deletions(-) diff --git a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 b/src/LIB/SURCOUCHE/src/mode_netcdf.f90 index 1c039e8d1..be013b70d 100644 --- a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 +++ b/src/LIB/SURCOUCHE/src/mode_netcdf.f90 @@ -69,6 +69,8 @@ TYPE(IOCDF), POINTER :: NEWIOCDF TYPE(IOCDF), POINTER :: TZIOCDF INTEGER :: IRESP +CALL PRINT_MSG(NVERB_DEBUG,'IO','NEWIOCDF','called') + ALLOCATE(TZIOCDF, STAT=IRESP) IF (IRESP > 0) THEN CALL PRINT_MSG(NVERB_FATAL,'IO','NEWIOCDF','memory allocation error') @@ -111,7 +113,7 @@ END SUBROUTINE CLEANIOCDF SUBROUTINE IO_SET_KNOWNDIMS_NC4(TPFILE) -USE MODD_DIM_ll, ONLY: NIMAX_ll, NJMAX_ll, NKMAX_ll +USE MODD_DIM_n, ONLY: NIMAX_ll, NJMAX_ll, NKMAX USE MODD_PARAMETERS_ll, ONLY: JPHEXT, JPVEXT TYPE(TFILEDATA),INTENT(IN) :: TPFILE @@ -119,13 +121,13 @@ TYPE(TFILEDATA),INTENT(IN) :: TPFILE INTEGER :: IIU_ll, IJU_ll, IKU TYPE(IOCDF), POINTER :: PIOCDF -CALL PRINT_MSG(NVERB_DEBUG,'IO','SET_KNOWN_NC_DIMS','called') +CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_SET_KNOWNDIMS_NC4','called') PIOCDF => TPFILE%TNCDIMS IIU_ll = NIMAX_ll + 2*JPHEXT IJU_ll = NJMAX_ll + 2*JPHEXT -IKU = NKMAX_ll + 2*JPVEXT +IKU = NKMAX + 2*JPVEXT IF (.NOT. ASSOCIATED(PIOCDF%DIM_NI)) PIOCDF%DIM_NI => GETDIMCDF(TPFILE, IIU_ll, 'ni') IF (.NOT. ASSOCIATED(PIOCDF%DIM_NJ)) PIOCDF%DIM_NJ => GETDIMCDF(TPFILE, IJU_ll, 'nj') @@ -157,16 +159,16 @@ PIOCDF => TPFILE%TNCDIMS INCID = TPFILE%NNCID IF (TPFILE%LMASTER) THEN - CALL WRITE_COORD(PIOCDF%DIM_NI,'x-dimension of the grid','x_grid_index','X',0.,JPHEXT) - CALL WRITE_COORD(PIOCDF%DIM_NJ,'y-dimension of the grid','y_grid_index','Y',0.,JPHEXT) - CALL WRITE_COORD(PIOCDF%DIM_NI_U,'x-dimension of the grid at u location','x_grid_index_at_u_location','X',-0.5,JPHEXT) - CALL WRITE_COORD(PIOCDF%DIM_NJ_U,'y-dimension of the grid at u location','y_grid_index_at_u_location','Y', 0., JPHEXT) - CALL WRITE_COORD(PIOCDF%DIM_NI_V,'x-dimension of the grid at v location','x_grid_index_at_v_location','X', 0., JPHEXT) - CALL WRITE_COORD(PIOCDF%DIM_NJ_V,'y-dimension of the grid at v location','y_grid_index_at_v_location','Y',-0.5,JPHEXT) + CALL WRITE_HOR_COORD(PIOCDF%DIM_NI,'x-dimension of the grid','x_grid_index','X',0.,JPHEXT) + CALL WRITE_HOR_COORD(PIOCDF%DIM_NJ,'y-dimension of the grid','y_grid_index','Y',0.,JPHEXT) + CALL WRITE_HOR_COORD(PIOCDF%DIM_NI_U,'x-dimension of the grid at u location','x_grid_index_at_u_location','X',-0.5,JPHEXT) + CALL WRITE_HOR_COORD(PIOCDF%DIM_NJ_U,'y-dimension of the grid at u location','y_grid_index_at_u_location','Y', 0., JPHEXT) + CALL WRITE_HOR_COORD(PIOCDF%DIM_NI_V,'x-dimension of the grid at v location','x_grid_index_at_v_location','X', 0., JPHEXT) + CALL WRITE_HOR_COORD(PIOCDF%DIM_NJ_V,'y-dimension of the grid at v location','y_grid_index_at_v_location','Y',-0.5,JPHEXT) ENDIF CONTAINS -SUBROUTINE WRITE_COORD(TDIM,HLONGNAME,HSTDNAME,HAXIS,PSHIFT,KBOUND) +SUBROUTINE WRITE_HOR_COORD(TDIM,HLONGNAME,HSTDNAME,HAXIS,PSHIFT,KBOUND) TYPE(DIMCDF), POINTER, INTENT(IN) :: TDIM CHARACTER(LEN=*), INTENT(IN) :: HLONGNAME CHARACTER(LEN=*), INTENT(IN) :: HSTDNAME @@ -221,7 +223,7 @@ SUBROUTINE WRITE_COORD(TDIM,HLONGNAME,HSTDNAME,HAXIS,PSHIFT,KBOUND) DEALLOCATE(ZTAB) -END SUBROUTINE WRITE_COORD +END SUBROUTINE WRITE_HOR_COORD END SUBROUTINE IO_WRITE_COORDVAR_NC4 @@ -234,7 +236,7 @@ INTEGER, OPTIONAL, INTENT(OUT) :: KRESP CHARACTER(LEN=6) :: YLINE -WRITE(YLINE,*) LINE +WRITE(YLINE,'( I6 )') LINE ! Don't stop (by default) the code when KRESP is present ! and ensure KRESP is a negative integer @@ -383,6 +385,8 @@ INTEGER(KIND=IDCDF_KIND) :: STATUS LOGICAL :: GCHKLEN !Check if KLEN is valid TYPE(IOCDF), POINTER :: PIOCDF +CALL PRINT_MSG(NVERB_DEBUG,'IO','GETDIMCDF','called') + PIOCDF => TPFILE%TNCDIMS GCHKLEN = .TRUE. @@ -424,6 +428,7 @@ IF (.NOT. ASSOCIATED(TMP)) THEN NULLIFY(TMP%NEXT) TMP%NEXT => PIOCDF%DIMLIST PIOCDF%DIMLIST => TMP +CALL PRINT_MSG(NVERB_DEBUG,'IO','GETDIMCDF','new dimension: '//TRIM(TMP%NAME)) END IF GETDIMCDF => TMP @@ -441,6 +446,8 @@ CHARACTER(LEN=8) :: YDIMNAME CHARACTER(LEN=20) :: YLEN INTEGER(KIND=IDCDF_KIND) :: STATUS +CALL PRINT_MSG(NVERB_DEBUG,'IO','GETSTRDIMID','called') + IF (KLEN < 1) THEN WRITE(YLEN,*) KLEN CALL PRINT_MSG(NVERB_FATAL,'IO','GETSTRDIMID','KLEN='//TRIM(YLEN)) @@ -481,6 +488,8 @@ INTEGER :: II TYPE(DIMCDF), POINTER :: PTDIM TYPE(IOCDF), POINTER :: PIOCDF +CALL PRINT_MSG(NVERB_DEBUG,'IO','FILLVDIMS','called') + IF (SIZE(KSHAPE) < 1) CALL PRINT_MSG(NVERB_FATAL,'IO','FILLVDIMS','empty KSHAPE') PIOCDF => TPFILE%TNCDIMS diff --git a/src/MNH/diag.f90 b/src/MNH/diag.f90 index a6882d355..cf7926b09 100644 --- a/src/MNH/diag.f90 +++ b/src/MNH/diag.f90 @@ -434,8 +434,6 @@ INPRAR = 24 +2*(4+NRR+NSV) ! CALL IO_FILE_ADD2LIST(TOUTDATAFILE,TRIM(CINIFILE)//YSUFFIX,'DIAG','WRITE',KLFINPRAR=INPRAR,KLFITYPE=1,KLFIVERB=NVERB) ! -CALL IO_FILE_OPEN_ll(TOUTDATAFILE) -! CALL SECOND_MNH2(ZTIME2) ZSTART=ZTIME2-ZTIME1 ZTIME1=ZTIME2 @@ -480,6 +478,8 @@ ENDIF ! !* 4.0 Stores the fields in MESONH files if necessary ! +CALL IO_FILE_OPEN_ll(TOUTDATAFILE) +! CALL WRITE_LFIFM1_FOR_DIAG(TOUTDATAFILE,CDAD_NAME(1)) ! WRITE(ILUOUT0,*) ' ' diff --git a/src/MNH/open_nestpgd_files.f90 b/src/MNH/open_nestpgd_files.f90 index f76445939..cde53086b 100644 --- a/src/MNH/open_nestpgd_files.f90 +++ b/src/MNH/open_nestpgd_files.f90 @@ -319,12 +319,13 @@ END DO CALL IO_FILE_CLOSE_ll(TZPRE_NEST_PGD) !------------------------------------------------------------------------------- ! -!* 7. OPENING OF INPUT AND OUTPUT PGD FILES -! ------------------------------------- +!* 7. OPENING OF INPUT PGD FILES +! -------------------------- +! +!Remark: output PGD files are opened later when the mesh dimensions are known ! DO JPGD=1,NMODEL CALL IO_FILE_OPEN_ll(TPFILEPGD(JPGD) %TZFILE,OPARALLELIO=.FALSE.) - CALL IO_FILE_OPEN_ll(TPFILENESTPGD(JPGD)%TZFILE,OPARALLELIO=.FALSE.) END DO ! !------------------------------------------------------------------------------- diff --git a/src/MNH/pgd_grid_io_init_mnh.f90 b/src/MNH/pgd_grid_io_init_mnh.f90 index 93f379cff..bf3dce484 100644 --- a/src/MNH/pgd_grid_io_init_mnh.f90 +++ b/src/MNH/pgd_grid_io_init_mnh.f90 @@ -143,6 +143,7 @@ USE MODE_ll USE MODE_FM USE MODD_PARAMETERS, ONLY : JPHEXT, JPVEXT, JPMODELMAX USE MODD_CONF, ONLY : CPROGRAM, L1D, L2D, LPACK +USE MODD_DIM_n, ONLY : NIMAX_ll, NJMAX_ll, NKMAX ! !JUANZ USE MODE_SPLITTINGZ_ll @@ -225,6 +226,9 @@ LPACK=L1D.OR.L2D CALL SET_FMPACK_ll(L1D,L2D,LPACK) CALL SET_JP_ll(JPMODELMAX,JPHEXT,JPVEXT,JPHEXT) CALL SET_DAD0_ll() +NIMAX_ll = IIMAX +NJMAX_ll = IJMAX +NKMAX = 1 CALL SET_DIM_ll(IIMAX, IJMAX, 1) CALL SET_LBX_ll('OPEN',1) CALL SET_LBY_ll('OPEN', 1) diff --git a/src/MNH/prep_nest_pgd.f90 b/src/MNH/prep_nest_pgd.f90 index c23ec43fa..0bbe9f542 100644 --- a/src/MNH/prep_nest_pgd.f90 +++ b/src/MNH/prep_nest_pgd.f90 @@ -336,6 +336,8 @@ DO JPGD=1,NMODEL TPGDFILE => TZFILEPGD(JPGD)%TZFILE TOUTDATAFILE => TZFILENESTPGD(JPGD)%TZFILE CALL GOTO_MODEL(JPGD) + !Open done here because grid dimensions have to be known + CALL IO_FILE_OPEN_ll(TZFILENESTPGD(JPGD)%TZFILE,OPARALLELIO=.FALSE.) CALL GOTO_SURFEX(JPGD) TFILE_SURFEX => TZFILENESTPGD(JPGD)%TZFILE CALL WRITE_PGD_SURF_ATM_n(YSURF_CUR,'MESONH') diff --git a/src/MNH/prep_real_case.f90 b/src/MNH/prep_real_case.f90 index 4d459f06c..0d15c94ea 100644 --- a/src/MNH/prep_real_case.f90 +++ b/src/MNH/prep_real_case.f90 @@ -580,10 +580,6 @@ TLUOUT => TLUOUT0 ! TPGDFILE => TZPGDFILE ! -CALL IO_FILE_ADD2LIST(TINIFILE,CINIFILE,'PREPREALCASE','WRITE',KLFITYPE=1,KLFIVERB=NVERB) -! -CALL IO_FILE_OPEN_ll(TINIFILE) -! IF (YATMFILETYPE=='MESONH') THEN LSHIFT = .FALSE. ELSE IF (YATMFILETYPE=='GRIBEX') THEN @@ -757,6 +753,9 @@ CALL SECOND_MNH(ZTIME2) ZREAD = ZTIME2 - ZTIME1 - ZHORI !------------------------------------------------------------------------------- ! +CALL IO_FILE_ADD2LIST(TINIFILE,CINIFILE,'PREPREALCASE','WRITE',KLFITYPE=1,KLFIVERB=NVERB) +CALL IO_FILE_OPEN_ll(TINIFILE) +! ZTIME1=ZTIME2 ! !* 6. CONFIGURATION VARIABLES -- GitLab