From 29eac313a7690dba51b43d479a2cfa79adfb8d4a Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Fri, 10 Mar 2017 10:10:03 +0100 Subject: [PATCH] Philippe 10/03/2017: bug corrections and (partial) use of file structures in apps * several errors and problems corrected in mode_field.f90 * moved INI_FIELD_LIST call earlier in init_mnh.f90 * IO now works for: DIAG, PREP_IDEAL_CASE, PREP_NEST_PGD, PREP_PGD, PREP_REAL_CASE and SPAWNING --- src/LIB/SURCOUCHE/src/mode_field.f90 | 56 +++++++------- src/LIB/SURCOUCHE/src/mode_fm.f90 | 19 ++++- src/MNH/diag.f90 | 30 +++++++- src/MNH/init_mnh.f90 | 25 ++++--- src/MNH/open_nestpgd_files.f90 | 107 +++++++++++++++++---------- src/MNH/prep_ideal_case.f90 | 47 +++++++++--- src/MNH/prep_nest_pgd.f90 | 84 +++++++++++---------- src/MNH/prep_pgd.f90 | 33 ++++++++- src/MNH/prep_real_case.f90 | 45 ++++++++--- src/MNH/spawn_model2.f90 | 46 +++++++++--- src/MNH/write_surf_mnh.f90 | 44 +++++------ 11 files changed, 353 insertions(+), 183 deletions(-) diff --git a/src/LIB/SURCOUCHE/src/mode_field.f90 b/src/LIB/SURCOUCHE/src/mode_field.f90 index 6f2dc6936..cf38d78bd 100644 --- a/src/LIB/SURCOUCHE/src/mode_field.f90 +++ b/src/LIB/SURCOUCHE/src/mode_field.f90 @@ -1898,6 +1898,7 @@ END SUBROUTINE FIND_FIELD_ID_FROM_MNHNAME SUBROUTINE ALLOC_FIELD_SCALARS ! USE MODD_DYN_n +USE MODD_PARAM_n ! CALL PRINT_MSG(NVERB_DEBUG,'GEN','ALLOC_FIELD_SCALARS','called') ! @@ -1922,6 +1923,10 @@ IF (.NOT.ASSOCIATED(LHORELAX_TKE)) THEN CALL PRINT_MSG(NVERB_DEBUG,'GEN','ALLOC_FIELD_SCALARS',' LHORELAX_TKE was not associated') ALLOCATE(LHORELAX_TKE) END IF +IF (.NOT.ASSOCIATED(CSURF)) THEN + CALL PRINT_MSG(NVERB_DEBUG,'GEN','ALLOC_FIELD_SCALARS',' CSURF was not associated') + ALLOCATE(CHARACTER(LEN=4) :: CSURF) +END IF ! END SUBROUTINE ALLOC_FIELD_SCALARS ! @@ -2002,9 +2007,9 @@ END IF IF (.NOT.ASSOCIATED(CSURF)) THEN CALL PRINT_MSG(NVERB_DEBUG,'GEN','INI_FIELD_SCALARS',' CSURF was not associated') ALLOCATE(CHARACTER(LEN=4) :: CSURF) - CALL FIND_FIELD_ID_FROM_MNHNAME('SURF',IID,IRESP) - TFIELDLIST(IID)%TFIELD_C0D(1)%DATA=>CSURF END IF +CALL FIND_FIELD_ID_FROM_MNHNAME('SURF',IID,IRESP) +TFIELDLIST(IID)%TFIELD_C0D(1)%DATA=>CSURF ! IF (.NOT.ASSOCIATED(XDRYMASST)) THEN CALL PRINT_MSG(NVERB_DEBUG,'GEN','INI_FIELD_SCALARS',' XDRYMASST was not associated') @@ -2089,13 +2094,13 @@ END IF ! Initialize some pointers ! IF (KFROM == KTO) THEN - IF (.NOT.ALLOCATED(XRHODREFZ) .AND. CPROGRAM/='NESPGD') THEN + IF (.NOT.ALLOCATED(XRHODREFZ) .AND. CPROGRAM/='NESPGD' .AND. CPROGRAM/='PGD') THEN CALL PRINT_MSG(NVERB_FATAL,'GEN','FIELDLIST_GOTO_MODEL','XRHODREFZ not yet allocated') END IF CALL FIND_FIELD_ID_FROM_MNHNAME('RHOREFZ',IID,IRESP) TFIELDLIST(IID)%TFIELD_X1D(KFROM)%DATA=>XRHODREFZ ! - IF (.NOT.ALLOCATED(XTHVREFZ) .AND. CPROGRAM/='NESPGD') THEN + IF (.NOT.ALLOCATED(XTHVREFZ) .AND. CPROGRAM/='NESPGD' .AND. CPROGRAM/='PGD') THEN CALL PRINT_MSG(NVERB_FATAL,'GEN','FIELDLIST_GOTO_MODEL','XTHVREFZ not yet allocated') END IF CALL FIND_FIELD_ID_FROM_MNHNAME('THVREFZ',IID,IRESP) @@ -2215,7 +2220,6 @@ CALL FIND_FIELD_ID_FROM_MNHNAME('YHAT', IID,IRESP); TFIELDLIST(IID)%TFIELD_X1D(K CALL FIND_FIELD_ID_FROM_MNHNAME('ZHAT', IID,IRESP); TFIELDLIST(IID)%TFIELD_X1D(KFROM)%DATA => XZHAT CALL FIND_FIELD_ID_FROM_MNHNAME('DXHAT',IID,IRESP); TFIELDLIST(IID)%TFIELD_X1D(KFROM)%DATA => XDXHAT CALL FIND_FIELD_ID_FROM_MNHNAME('DYHAT',IID,IRESP); TFIELDLIST(IID)%TFIELD_X1D(KFROM)%DATA => XDYHAT -CALL FIND_FIELD_ID_FROM_MNHNAME('DYHAT',IID,IRESP); TFIELDLIST(IID)%TFIELD_X1D(KFROM)%DATA => XDYHAT CALL FIND_FIELD_ID_FROM_MNHNAME('ALT', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XZZ CALL FIND_FIELD_ID_FROM_MNHNAME('DIRCOSXW',IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XDIRCOSXW CALL FIND_FIELD_ID_FROM_MNHNAME('DIRCOSYW',IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XDIRCOSYW @@ -2238,37 +2242,37 @@ END IF ! ! MODD_TURB_n variables ! -CALL FIND_FIELD_ID_FROM_MNHNAME('WTHVMF',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA => XWTHVMF +CALL FIND_FIELD_ID_FROM_MNHNAME('WTHVMF',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XWTHVMF ! ! MODD_RADIATIONS_n variables ! IF (CPROGRAM=='MESONH') THEN IF (CRAD /= 'NONE') THEN - CALL FIND_FIELD_ID_FROM_MNHNAME('DTHRAD', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA => XDTHRAD - CALL FIND_FIELD_ID_FROM_MNHNAME('FLALWD', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA => XFLALWD - CALL FIND_FIELD_ID_FROM_MNHNAME('DIRFLASWD', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA => XDIRFLASWD - CALL FIND_FIELD_ID_FROM_MNHNAME('SCAFLASWD', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA => XSCAFLASWD - CALL FIND_FIELD_ID_FROM_MNHNAME('DIRSRFSWD', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA => XDIRSRFSWD - CALL FIND_FIELD_ID_FROM_MNHNAME('CLEARCOL_TM1',IID,IRESP); TFIELDLIST(IID)%TFIELD_N2D(KTO)%DATA => NCLEARCOL_TM1 - CALL FIND_FIELD_ID_FROM_MNHNAME('ZENITH', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA => XZENITH - CALL FIND_FIELD_ID_FROM_MNHNAME('AZIM', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA => XAZIM - CALL FIND_FIELD_ID_FROM_MNHNAME('DIR_ALB', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA => XDIR_ALB - CALL FIND_FIELD_ID_FROM_MNHNAME('SCA_ALB', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA => XSCA_ALB - CALL FIND_FIELD_ID_FROM_MNHNAME('EMIS', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA => XEMIS - CALL FIND_FIELD_ID_FROM_MNHNAME('TSRAD', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA => XTSRAD + CALL FIND_FIELD_ID_FROM_MNHNAME('DTHRAD', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XDTHRAD + CALL FIND_FIELD_ID_FROM_MNHNAME('FLALWD', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XFLALWD + CALL FIND_FIELD_ID_FROM_MNHNAME('DIRFLASWD', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XDIRFLASWD + CALL FIND_FIELD_ID_FROM_MNHNAME('SCAFLASWD', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XSCAFLASWD + CALL FIND_FIELD_ID_FROM_MNHNAME('DIRSRFSWD', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XDIRSRFSWD + CALL FIND_FIELD_ID_FROM_MNHNAME('CLEARCOL_TM1',IID,IRESP); TFIELDLIST(IID)%TFIELD_N2D(KFROM)%DATA => NCLEARCOL_TM1 + CALL FIND_FIELD_ID_FROM_MNHNAME('ZENITH', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XZENITH + CALL FIND_FIELD_ID_FROM_MNHNAME('AZIM', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XAZIM + CALL FIND_FIELD_ID_FROM_MNHNAME('DIR_ALB', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XDIR_ALB + CALL FIND_FIELD_ID_FROM_MNHNAME('SCA_ALB', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XSCA_ALB + CALL FIND_FIELD_ID_FROM_MNHNAME('EMIS', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XEMIS + CALL FIND_FIELD_ID_FROM_MNHNAME('TSRAD', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XTSRAD END IF END IF ! ! MODD_GR_FIELD_n variables ! -CALL FIND_FIELD_ID_FROM_MNHNAME('SSO_ANIS', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA => XSSO_ANISOTROPY -CALL FIND_FIELD_ID_FROM_MNHNAME('SSO_SLOPE',IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA => XSSO_SLOPE -CALL FIND_FIELD_ID_FROM_MNHNAME('SSO_DIR', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA => XSSO_DIRECTION -CALL FIND_FIELD_ID_FROM_MNHNAME('AVG_ZS', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA => XAVG_ZS -CALL FIND_FIELD_ID_FROM_MNHNAME('SIL_ZS', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA => XSIL_ZS -CALL FIND_FIELD_ID_FROM_MNHNAME('MAX_ZS', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA => XMAX_ZS -CALL FIND_FIELD_ID_FROM_MNHNAME('MIN_ZS', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA => XMIN_ZS -CALL FIND_FIELD_ID_FROM_MNHNAME('SSO_STDEV',IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA => XSSO_STDEV +CALL FIND_FIELD_ID_FROM_MNHNAME('SSO_ANIS', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XSSO_ANISOTROPY +CALL FIND_FIELD_ID_FROM_MNHNAME('SSO_SLOPE',IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XSSO_SLOPE +CALL FIND_FIELD_ID_FROM_MNHNAME('SSO_DIR', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XSSO_DIRECTION +CALL FIND_FIELD_ID_FROM_MNHNAME('AVG_ZS', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XAVG_ZS +CALL FIND_FIELD_ID_FROM_MNHNAME('SIL_ZS', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XSIL_ZS +CALL FIND_FIELD_ID_FROM_MNHNAME('MAX_ZS', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XMAX_ZS +CALL FIND_FIELD_ID_FROM_MNHNAME('MIN_ZS', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XMIN_ZS +CALL FIND_FIELD_ID_FROM_MNHNAME('SSO_STDEV',IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XSSO_STDEV ! ! MODD_PRECIP_n variables ! diff --git a/src/LIB/SURCOUCHE/src/mode_fm.f90 b/src/LIB/SURCOUCHE/src/mode_fm.f90 index f60f9fb4c..57fc85553 100644 --- a/src/LIB/SURCOUCHE/src/mode_fm.f90 +++ b/src/LIB/SURCOUCHE/src/mode_fm.f90 @@ -132,7 +132,7 @@ END IF END SUBROUTINE FMLOOK_ll -SUBROUTINE IO_FILE_OPEN_ll(TPFILE,HFIPRI,KRESP) +SUBROUTINE IO_FILE_OPEN_ll(TPFILE,HFIPRI,KRESP,OPARALLELIO) ! USE MODD_IO_ll, ONLY: ISP,LIOCDF4,TFILEDATA USE MODE_FD_ll, ONLY: FD_ll,GETFD @@ -141,6 +141,7 @@ USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_FIND_BYNAME TYPE(TFILEDATA), INTENT(INOUT) :: TPFILE ! File structure CHARACTER(LEN=*), INTENT(IN) :: HFIPRI ! File for prints in FM INTEGER, INTENT(OUT) :: KRESP ! Return code +LOGICAL, INTENT(IN), OPTIONAL :: OPARALLELIO ! INTEGER :: ININAR ! Number of articles present in LFI file (unused here) INTEGER :: JI,IRESP @@ -155,7 +156,12 @@ IF (TPFILE%LOPENED) THEN RETURN END IF ! -CALL FMOPEN_ll(TPFILE%CNAME,TPFILE%CMODE,HFIPRI,TPFILE%NLFINPRAR,TPFILE%NLFITYPE,TPFILE%NLFIVERB,ININAR,KRESP,TPFILE=TPFILE) +IF (.NOT.PRESENT(OPARALLELIO)) THEN + CALL FMOPEN_ll(TPFILE%CNAME,TPFILE%CMODE,HFIPRI,TPFILE%NLFINPRAR,TPFILE%NLFITYPE,TPFILE%NLFIVERB,ININAR,KRESP,TPFILE=TPFILE) +ELSE + CALL FMOPEN_ll(TPFILE%CNAME,TPFILE%CMODE,HFIPRI,TPFILE%NLFINPRAR,TPFILE%NLFITYPE,TPFILE%NLFIVERB,ININAR,KRESP,& + TPFILE=TPFILE,OPARALLELIO=OPARALLELIO) +END IF ! TPFILE%LOPENED = .TRUE. TPFILE%NOPEN = TPFILE%NOPEN + 1 @@ -404,7 +410,7 @@ KRESP=IRESP RETURN END SUBROUTINE FMOPEN_ll -SUBROUTINE IO_FILE_CLOSE_ll(TPFILE,HFIPRI,KRESP) +SUBROUTINE IO_FILE_CLOSE_ll(TPFILE,HFIPRI,KRESP,OPARALLELIO) ! USE MODD_IO_ll, ONLY: TFILEDATA USE MODE_FD_ll, ONLY: FD_ll,GETFD @@ -413,6 +419,7 @@ USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_FIND_BYNAME TYPE(TFILEDATA), INTENT(INOUT) :: TPFILE ! File structure CHARACTER(LEN=*), INTENT(IN) :: HFIPRI ! File for prints in FM INTEGER, INTENT(OUT) :: KRESP ! Return code +LOGICAL, INTENT(IN), OPTIONAL :: OPARALLELIO ! INTEGER :: INB_PROCIO, IRESP, JI CHARACTER (LEN=3) :: YNUMBER ! Character string for Z-level @@ -430,7 +437,11 @@ ENDIF TZFDLFI=>GETFD(ADJUSTL(TRIM(TPFILE%CNAME)//'.lfi')) INB_PROCIO=TZFDLFI%NB_PROCIO ! -CALL FMCLOS_ll(TPFILE%CNAME,'KEEP',HFIPRI,KRESP,TPFILE=TPFILE) +IF (.NOT.PRESENT(OPARALLELIO)) THEN + CALL FMCLOS_ll(TPFILE%CNAME,'KEEP',HFIPRI,KRESP,TPFILE=TPFILE) +ELSE + CALL FMCLOS_ll(TPFILE%CNAME,'KEEP',HFIPRI,KRESP,OPARALLELIO=OPARALLELIO,TPFILE=TPFILE) +END IF ! TPFILE%LOPENED = .FALSE. TPFILE%NCLOSE = TPFILE%NCLOSE + 1 diff --git a/src/MNH/diag.f90 b/src/MNH/diag.f90 index 73e49a0be..a172b73d0 100644 --- a/src/MNH/diag.f90 +++ b/src/MNH/diag.f90 @@ -124,6 +124,7 @@ USE MODD_LES_BUDGET USE MODD_BUDGET USE MODD_RADAR USE MODD_PARAM_LIMA, ONLY : LLIMA_DIAG +USE MODD_IO_ll, ONLY: TFILEDATA,TFILE_SURFEX ! USE MODN_DIAG_BLANK ! @@ -141,6 +142,7 @@ USE MODE_FM USE MODE_IO_ll USE MODE_ll USE MODE_MODELN_HANDLER +USE MODE_MSG ! USE MODD_AIRCRAFT_BALLOON USE MODD_PROFILER_n @@ -200,6 +202,8 @@ INTEGER :: IIU, IJU, IKU INTEGER :: IINFO_ll ! return code for _ll routines REAL, DIMENSION(:,:),ALLOCATABLE :: ZSEA,ZTOWN ! +TYPE(TFILEDATA),TARGET :: TZFILE +! NAMELIST/NAM_DIAG/ CISO, LVAR_RS, LVAR_LS, & NCONV_KF, NRAD_3D, CRAD_SAT, NRTTOVINFO, LRAD_SUBG_COND, & LVAR_TURB,LTURBFLX,LTURBDIAG,LMFFLX,XDTSTEP, & @@ -446,9 +450,29 @@ ENDIF ! INPRAR = 24 +2*(4+NRR+NSV) YFMFILE=ADJUSTL(ADJUSTR(CINIFILE)//YSUFFIX) -CALL FMOPEN_ll(YFMFILE,'WRITE',CLUOUT,INPRAR,ITYPE,NVERB,INPRAR,IRESP) COUTFMFILE=YFMFILE ! +TZFILE%CNAME = TRIM(YFMFILE) +TZFILE%CTYPE = 'DIAG' +IF (LCDF4) THEN + IF (.NOT.LLFIOUT) THEN + TZFILE%CFORMAT='NETCDF4' + ELSE + TZFILE%CFORMAT='LFICDF4' + TZFILE%NLFINPRAR= INPRAR + END IF +ELSE IF (LLFIOUT) THEN + TZFILE%CFORMAT='LFI' + TZFILE%NLFINPRAR= INPRAR +ELSE + CALL PRINT_MSG(NVERB_FATAL,'IO','DIAG','unknown backup/output fileformat') +ENDIF +TZFILE%CMODE = 'WRITE' +TZFILE%NLFITYPE = ITYPE +TZFILE%NLFIVERB = NVERB +! +CALL IO_FILE_OPEN_ll(TZFILE,CLUOUT,IRESP) +! CALL SECOND_MNH2(ZTIME2) ZSTART=ZTIME2-ZTIME1 ZTIME1=ZTIME2 @@ -695,11 +719,13 @@ ZTIME1=ZTIME2 ! IF (CSURF=='EXTE') THEN CALL GOTO_SURFEX(1) + TFILE_SURFEX => TZFILE CALL WRITE_SURF_ATM_n(YSURF_CUR,'MESONH','ALL',.FALSE.) CALL DIAG_SURF_ATM_n(YSURF_CUR%IM%DGEI, YSURF_CUR%FM%DGF, YSURF_CUR%DGL, YSURF_CUR%IM%DGI, & YSURF_CUR%SM%DGS, YSURF_CUR%DGU, YSURF_CUR%TM%DGT, YSURF_CUR%WM%DGW, & YSURF_CUR%U, YSURF_CUR%USS,'MESONH') CALL WRITE_DIAG_SURF_ATM_n(YSURF_CUR,'MESONH','ALL') + NULLIFY(TFILE_SURFEX) WRITE(ILUOUT0,*) ' ' WRITE(ILUOUT0,*) 'DIAG AFTER WRITE_DIAG_SURF_ATM_n' ENDIF @@ -735,7 +761,7 @@ ZTIME1=ZTIME2 DEALLOCATE(GMASKkids) IF (GCLOSE_OUT) THEN GCLOSE_OUT=.FALSE. - CALL FMCLOS_ll(YFMFILE,'KEEP',CLUOUT,IRESP) + CALL IO_FILE_CLOSE_ll(TZFILE,CLUOUT,IRESP) END IF ! CALL CLOSE_ll (CLUOUT,IOSTAT=IRESP) diff --git a/src/MNH/init_mnh.f90 b/src/MNH/init_mnh.f90 index 22875c5e9..9d533aa6c 100644 --- a/src/MNH/init_mnh.f90 +++ b/src/MNH/init_mnh.f90 @@ -173,11 +173,23 @@ IF (CPROGRAM=='SPAWN ' .OR. CPROGRAM=='DIAG ' .OR. CPROGRAM=='SPEC ' .OR. CPRO CALL ALLOC_FIELD_SCALARS() END IF ! -DO JMI=1,JPMODELMAX +CALL GOTO_MODEL(1) +CALL INI_SEG_n(1,YLUOUT(1),YINIFILE(1),YINIFILEPGD(1),ZTSTEP_ALL) +! +IF (CPROGRAM=='SPAWN ') THEN + CALL INI_FIELD_LIST(2) +ELSE IF (CPROGRAM/='REAL ' .AND. CPROGRAM/='IDEAL ' ) THEN + CALL INI_FIELD_LIST() +END IF +IF (CPROGRAM=='SPAWN ' .OR. CPROGRAM=='DIAG ' .OR. CPROGRAM=='SPEC ' .OR. CPROGRAM=='MESONH') THEN + CALL INI_FIELD_SCALARS() +END IF +! +DO JMI=2,NMODEL CALL GOTO_MODEL(JMI) CALL INI_SEG_n(JMI,YLUOUT(JMI),YINIFILE(JMI),YINIFILEPGD(JMI),ZTSTEP_ALL) - IF (JMI.EQ.NMODEL) EXIT END DO +! IF (CPROGRAM=='SPAWN ') THEN !bypass NHALO = 1 @@ -214,15 +226,6 @@ CALL INI_PARAZ_ll(IINFO_ll) ! Allocations of Surfex Types CALL SURFEX_ALLOC_LIST(NMODEL) ! -IF (CPROGRAM=='SPAWN ') THEN - CALL INI_FIELD_LIST(2) -ELSE IF (CPROGRAM/='REAL ' .AND. CPROGRAM/='IDEAL ' ) THEN - CALL INI_FIELD_LIST() -END IF -IF (CPROGRAM=='SPAWN ' .OR. CPROGRAM=='DIAG ' .OR. CPROGRAM=='SPEC ' .OR. CPROGRAM=='MESONH') THEN - CALL INI_FIELD_SCALARS() -END IF -! DO JMI=1,NMODEL YSURF_CUR => YSURF_LIST(JMI) ! diff --git a/src/MNH/open_nestpgd_files.f90 b/src/MNH/open_nestpgd_files.f90 index 08e9a6e1c..a3413c3fc 100644 --- a/src/MNH/open_nestpgd_files.f90 +++ b/src/MNH/open_nestpgd_files.f90 @@ -12,16 +12,19 @@ MODULE MODI_OPEN_NESTPGD_FILES !############################# ! INTERFACE - SUBROUTINE OPEN_NESTPGD_FILES(HPGD,HNESTPGD) + SUBROUTINE OPEN_NESTPGD_FILES(TPFILEPGD,TPFILENESTPGD) +! +USE MODD_IO_ll, ONLY : TFILEDATA +! +TYPE(TFILEDATA),DIMENSION(:),ALLOCATABLE,INTENT(OUT) :: TPFILEPGD ! Input PGD files +TYPE(TFILEDATA),DIMENSION(:),ALLOCATABLE,INTENT(OUT) :: TPFILENESTPGD ! Output PGD files ! -CHARACTER(LEN=28), DIMENSION(:), INTENT(OUT) :: HPGD ! name of the input pgd files -CHARACTER(LEN=28), DIMENSION(:), INTENT(OUT) :: HNESTPGD ! name of the output pgd files END SUBROUTINE OPEN_NESTPGD_FILES END INTERFACE END MODULE MODI_OPEN_NESTPGD_FILES -! ############################################ - SUBROUTINE OPEN_NESTPGD_FILES(HPGD,HNESTPGD) -! ############################################ +! ###################################################### + SUBROUTINE OPEN_NESTPGD_FILES(TPFILEPGD,TPFILENESTPGD) +! ###################################################### ! !!**** *OPEN_NESTPGD_FILES* - openning of the files used in PREP_NEST_PGD !! @@ -78,6 +81,7 @@ USE MODD_LUNIT USE MODD_CONF USE MODD_NESTING USE MODD_PARAMETERS +USE MODD_IO_ll, ONLY : TFILEDATA ! USE MODI_OPEN_LUOUTn ! @@ -85,6 +89,7 @@ USE MODE_FIELD, ONLY : INI_FIELD_LIST USE MODE_IO_ll USE MODE_FM USE MODE_POS +USE MODE_MSG ! USE MODE_MODELN_HANDLER ! @@ -100,34 +105,32 @@ IMPLICIT NONE !* 0.1 Declaration of arguments ! ------------------------ ! -CHARACTER(LEN=28), DIMENSION(:), INTENT(OUT) :: HPGD ! name of the input pgd files -CHARACTER(LEN=28), DIMENSION(:), INTENT(OUT) :: HNESTPGD ! name of the output pgd files +TYPE(TFILEDATA),DIMENSION(:),ALLOCATABLE,INTENT(OUT) :: TPFILEPGD ! Input PGD files +TYPE(TFILEDATA),DIMENSION(:),ALLOCATABLE,INTENT(OUT) :: TPFILENESTPGD ! Output PGD files ! !* 0.2 Declaration of local variables ! ------------------------------ ! INTEGER :: IRESP ! return-code if problems eraised INTEGER :: ILUOUT0 ! logical unit for listing file -INTEGER :: ININAR ! number of articles initially present in a FM file LOGICAL :: GFOUND ! Return code when searching namelist ! CHARACTER(LEN=28) :: HPRE_NEST_PGD ! name of namelist file INTEGER :: IPRE_NEST_PGD ! logical unit of namelist file ! -CHARACTER(LEN=28) :: YPGD ! name of the pgd file for each model -CHARACTER(LEN=28) :: YLUOUT ! name of output listing file for each model -CHARACTER(LEN=2) :: YNEST ! to define the output pgd file names -CHARACTER(LEN=28) :: YPGD1, YPGD2, YPGD3, YPGD4, & - YPGD5, YPGD6, YPGD7, YPGD8 -! ! name of all pgd files -! ! in the namelist -INTEGER :: IDAD ! father of one model -INTEGER :: JPGD ! loop counter -LOGICAL :: GADD ! -CHARACTER(LEN=21), DIMENSION(JPMODELMAX) :: YSHORTPGD -INTEGER :: NHALO_MNH -! -INTEGER :: ILUNAM,ILUOUT ! Logical unit number for the EXSPA file +CHARACTER(LEN=28) :: YPGD ! name of the pgd file for each model +CHARACTER(LEN=28) :: YLUOUT ! name of output listing file for each model +CHARACTER(LEN=2) :: YNEST ! to define the output pgd file names +CHARACTER(LEN=28) :: YPGD1, YPGD2, YPGD3, YPGD4, & + YPGD5, YPGD6, YPGD7, YPGD8 +! ! name of all pgd files +! ! in the namelist +INTEGER :: IDAD ! father of one model +INTEGER :: JPGD ! loop counter +LOGICAL :: GADD ! +INTEGER :: NHALO_MNH +! +INTEGER :: ILUOUT ! Logical unit number for the EXSPA file ! !* 0.3 Declaration of namelists ! ------------------------ @@ -147,11 +150,6 @@ NAMELIST/NAM_CONF_NEST/JPHEXT, NHALO_MNH !* 1. SET DEFAULT NAMES ! ----------------- ! -DO JPGD=1,JPMODELMAX - HPGD (JPGD)=' ' - HNESTPGD(JPGD)=' ' -END DO -! HPRE_NEST_PGD='PRE_NEST_PGD1.nam' CLUOUT0='OUTPUT_LISTING0' ! @@ -278,7 +276,6 @@ DO JPGD=1,JPMODELMAX END IF ! NDAD(JPGD)=IDAD - HPGD(JPGD)=YPGD END IF END DO ! @@ -289,18 +286,50 @@ END DO ! CALL POSNAM(IPRE_NEST_PGD,'NAM_NEST_PGD',GFOUND,ILUOUT0) IF (GFOUND) READ(UNIT=IPRE_NEST_PGD,NML=NAM_NEST_PGD) -HNESTPGD(:) = ' ' -! -YSHORTPGD(:)=HPGD(:) -DO JPGD=1,NMODEL - HNESTPGD(JPGD) = ADJUSTR( YSHORTPGD(JPGD))//'.nest'//ADJUSTL(YNEST) - HNESTPGD(JPGD) = ADJUSTL(HNESTPGD(JPGD)) -END DO ! CALL POSNAM(IPRE_NEST_PGD,'NAM_CONFIO',GFOUND,ILUOUT0) IF (GFOUND) READ(UNIT=IPRE_NEST_PGD,NML=NAM_CONFIO) CALL SET_CONFIO_ll(LCDF4, LLFIOUT, LLFIREAD) ! +ALLOCATE(TPFILEPGD (NMODEL)) +ALLOCATE(TPFILENESTPGD(NMODEL)) +! +IF (NMODEL>=1) TPFILEPGD(1)%CNAME = TRIM(YPGD1) +IF (NMODEL>=2) TPFILEPGD(2)%CNAME = TRIM(YPGD2) +IF (NMODEL>=3) TPFILEPGD(3)%CNAME = TRIM(YPGD3) +IF (NMODEL>=4) TPFILEPGD(4)%CNAME = TRIM(YPGD4) +IF (NMODEL>=5) TPFILEPGD(5)%CNAME = TRIM(YPGD5) +IF (NMODEL>=6) TPFILEPGD(6)%CNAME = TRIM(YPGD6) +IF (NMODEL>=7) TPFILEPGD(7)%CNAME = TRIM(YPGD7) +IF (NMODEL>=8) TPFILEPGD(8)%CNAME = TRIM(YPGD8) +! +DO JPGD=1,NMODEL + TPFILENESTPGD(JPGD)%CNAME = TRIM(TPFILEPGD(JPGD)%CNAME)//'.nest'//ADJUSTL(YNEST) +END DO +! +TPFILEPGD(:) %CTYPE = 'PREPPGD' +TPFILENESTPGD(:)%CTYPE = 'PREPNESTPGD' +IF (LCDF4) THEN + IF (.NOT.LLFIOUT) THEN + TPFILEPGD(:) %CFORMAT = 'NETCDF4' + TPFILENESTPGD(:)%CFORMAT = 'NETCDF4' + ELSE + TPFILEPGD(:) %CFORMAT = 'LFICDF4' + TPFILENESTPGD(:)%CFORMAT = 'LFICDF4' + END IF +ELSE IF (LLFIOUT) THEN + TPFILEPGD(:) %CFORMAT = 'LFI' + TPFILENESTPGD(:)%CFORMAT = 'LFI' +ELSE + CALL PRINT_MSG(NVERB_FATAL,'IO','OPEN_NESTPGD_FILES','unknown backup/output fileformat') +ENDIF +TPFILEPGD(:) %CMODE = 'READ' +TPFILENESTPGD(:)%CMODE = 'WRITE' +TPFILEPGD(:) %NLFITYPE = 2 +TPFILENESTPGD(:)%NLFITYPE = 1 +TPFILEPGD(:) %NLFIVERB = NVERB +TPFILENESTPGD(:)%NLFIVERB = NVERB +! !------------------------------------------------------------------------------- CALL CLOSE_ll(HPRE_NEST_PGD) !------------------------------------------------------------------------------- @@ -309,13 +338,13 @@ CALL CLOSE_ll(HPRE_NEST_PGD) ! ------------------------------------- ! DO JPGD=1,NMODEL - CALL FMOPEN_ll(HPGD(JPGD),'READ',CLUOUT0,0,2,NVERB,ININAR,IRESP,OPARALLELIO=.FALSE.) - CALL FMOPEN_ll(HNESTPGD(JPGD),'WRITE',CLUOUT0,0,1,NVERB,ININAR,IRESP,OPARALLELIO=.FALSE.) + CALL IO_FILE_OPEN_ll(TPFILEPGD(JPGD), CLUOUT0,IRESP,OPARALLELIO=.FALSE.) + CALL IO_FILE_OPEN_ll(TPFILENESTPGD(JPGD),CLUOUT0,IRESP,OPARALLELIO=.FALSE.) END DO ! !------------------------------------------------------------------------------- ! -!* 7. OPENING OF OUPUT LISTING FILES FOR ALL MODELS +!* 7. OPENING OF OUTPUT LISTING FILES FOR ALL MODELS ! ---------------------------------------------- ! CALL INI_FIELD_LIST() diff --git a/src/MNH/prep_ideal_case.f90 b/src/MNH/prep_ideal_case.f90 index ffa22a9ef..808cb2ba8 100644 --- a/src/MNH/prep_ideal_case.f90 +++ b/src/MNH/prep_ideal_case.f90 @@ -362,6 +362,7 @@ USE MODE_ll USE MODD_ARGSLIST_ll, ONLY : LIST_ll USE MODE_MODELN_HANDLER USE MODE_FIELD +USE MODE_MSG ! USE MODI_DEFAULT_DESFM_n ! Interface modules USE MODI_DEFAULT_EXPRE @@ -422,10 +423,12 @@ USE MODE_FMWRIT USE MODI_WRITE_HGRID USE MODD_MPIF USE MODD_VAR_ll -USE MODD_IO_ll, ONLY: TFILEDATA +USE MODD_IO_ll, ONLY: TFILEDATA,TFILE_SURFEX ! USE MODE_MPPDB ! +USE MODD_GET_n +! IMPLICIT NONE ! !* 0.1 Declarations of global variables not declared in the modules @@ -571,7 +574,7 @@ REAL :: XHSLOP=1.2 ! if LHSLOP filtering of slopes higher REAL :: ZZS_MAX, ZZS_MAX_ll INTEGER :: IJPHEXT ! -TYPE(TFILEDATA) :: TZFILE +TYPE(TFILEDATA),TARGET :: TZFILE ! ! !* 0.2 Namelist declarations @@ -837,13 +840,34 @@ ELSE END IF ! NRR=0 -IF (LUSERV) NRR=NRR+1 -IF (LUSERC) NRR=NRR+1 -IF (LUSERR) NRR=NRR+1 -IF (LUSERI) NRR=NRR+1 -IF (LUSERS) NRR=NRR+1 -IF (LUSERG) NRR=NRR+1 -IF (LUSERH) NRR=NRR+1 +IF (LUSERV) THEN + NRR=NRR+1 + IDX_RVT = NRR +END IF +IF (LUSERC) THEN + NRR=NRR+1 + IDX_RCT = NRR +END IF +IF (LUSERR) THEN + NRR=NRR+1 + IDX_RRT = NRR +END IF +IF (LUSERI) THEN + NRR=NRR+1 + IDX_RIT = NRR +END IF +IF (LUSERS) THEN + NRR=NRR+1 + IDX_RST = NRR +END IF +IF (LUSERG) THEN + NRR=NRR+1 + IDX_RGT = NRR +END IF +IF (LUSERH) THEN + NRR=NRR+1 + IDX_RHT = NRR +END IF ! ! NRR=4 for RSOU case because RI and Rc always computed IF (CIDEAL == 'RSOU' .AND. NRR < 4 ) NRR=4 @@ -1748,8 +1772,7 @@ ELSE IF (LLFIOUT) THEN TZFILE%CFORMAT='LFI' TZFILE%NLFINPRAR= NNPRAR ELSE - PRINT *,'Error: unknown backup/output fileformat' - CALL ABORT + CALL PRINT_MSG(NVERB_FATAL,'IO','PREP_IDEAL_CASE','unknown backup/output fileformat') ENDIF TZFILE%CMODE = 'WRITE' TZFILE%NLFITYPE = NTYPE @@ -1829,7 +1852,9 @@ IF (CSURF =='EXTE') THEN !* rereading of physiographic fields and definition of prognostic fields !* writing of all surface fields COUTFMFILE = CINIFILE + TFILE_SURFEX => TZFILE CALL PREP_SURF_MNH(' ',' ') + NULLIFY(TFILE_SURFEX) CALL SURFEX_DEALLO_LIST ELSE CSURF = "NONE" diff --git a/src/MNH/prep_nest_pgd.f90 b/src/MNH/prep_nest_pgd.f90 index b82bc4d0b..8a9c9577a 100644 --- a/src/MNH/prep_nest_pgd.f90 +++ b/src/MNH/prep_nest_pgd.f90 @@ -105,6 +105,7 @@ USE MODD_CST USE MODD_LUNIT USE MODD_NESTING USE MODD_CONF_n +USE MODD_IO_ll, ONLY : TFILEDATA, TFILE_SURFEX ! USE MODI_OPEN_NESTPGD_FILES USE MODI_RETRIEVE1_NEST_INFO_n @@ -141,9 +142,6 @@ IMPLICIT NONE !* 0.1 Declaration of local variables ! ------------------------------ ! -CHARACTER(LEN=28), DIMENSION(JPMODELMAX) :: CPGD ! name of input pgd files -CHARACTER(LEN=28), DIMENSION(JPMODELMAX) :: CNESTPGD ! name of output pgd files -! INTEGER, DIMENSION(JPMODELMAX) :: NXSIZE ! number of grid points for each model INTEGER, DIMENSION(JPMODELMAX) :: NYSIZE ! in x and y-directions ! relatively to its father grid @@ -158,7 +156,6 @@ INTEGER :: IGRID, ILENCH LOGICAL, DIMENSION(JPMODELMAX) :: L1D_ALL ! Flag for 1D conf. for each PGD LOGICAL, DIMENSION(JPMODELMAX) :: L2D_ALL ! Flag for 2D conf. for each PGD LOGICAL, DIMENSION(JPMODELMAX) :: LPACK_ALL! Flag for packing conf. for each PGD - ! INTEGER :: JTIME,ITIME INTEGER :: IIMAX,IJMAX,IKMAX @@ -167,6 +164,9 @@ INTEGER :: IDAD INTEGER :: II LOGICAL :: GISINIT ! +TYPE(TFILEDATA),DIMENSION(:),ALLOCATABLE :: TZFILEPGD ! Input PGD files +TYPE(TFILEDATA),DIMENSION(:),ALLOCATABLE,TARGET :: TZFILENESTPGD ! Output PGD files +! !------------------------------------------------------------------------------- ! CALL MPPDB_INIT() @@ -191,7 +191,7 @@ CALL INI_CST ! NVERB=1 ! -CALL OPEN_NESTPGD_FILES(CPGD,CNESTPGD) +CALL OPEN_NESTPGD_FILES(TZFILEPGD,TZFILENESTPGD) CALL SET_JP_ll(JPMODELMAX,JPHEXT,JPVEXT,JPHEXT) ! CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP) @@ -218,14 +218,14 @@ CALL MPI_COMM_SIZE(NMNH_COMM_WORLD, NPROC, IINFO_ll) CALL SET_DAD0_ll() DO JPGD=1,NMODEL ! read and set dimensions and ratios of model JPGD - CALL FMREAD(CPGD(JPGD),'IMAX',CLUOUT0,'--',IIMAX,IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(CPGD(JPGD),'JMAX',CLUOUT0,'--',IJMAX,IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(CPGD(JPGD),'DXRATIO',CLUOUT0,'--',NDXRATIO_ALL(JPGD),IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(CPGD(JPGD),'DYRATIO',CLUOUT0,'--',NDYRATIO_ALL(JPGD),IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(CPGD(JPGD),'XSIZE',CLUOUT0,'--',NXSIZE(JPGD),IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(CPGD(JPGD),'YSIZE',CLUOUT0,'--',NYSIZE(JPGD),IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(CPGD(JPGD),'XOR',CLUOUT0,'--',NXOR_ALL(JPGD),IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(CPGD(JPGD),'YOR',CLUOUT0,'--',NYOR_ALL(JPGD),IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TZFILEPGD(JPGD)%CNAME,'IMAX',CLUOUT0,'--',IIMAX,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TZFILEPGD(JPGD)%CNAME,'JMAX',CLUOUT0,'--',IJMAX,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TZFILEPGD(JPGD)%CNAME,'DXRATIO',CLUOUT0,'--',NDXRATIO_ALL(JPGD),IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TZFILEPGD(JPGD)%CNAME,'DYRATIO',CLUOUT0,'--',NDYRATIO_ALL(JPGD),IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TZFILEPGD(JPGD)%CNAME,'XSIZE',CLUOUT0,'--',NXSIZE(JPGD),IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TZFILEPGD(JPGD)%CNAME,'YSIZE',CLUOUT0,'--',NYSIZE(JPGD),IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TZFILEPGD(JPGD)%CNAME,'XOR',CLUOUT0,'--',NXOR_ALL(JPGD),IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TZFILEPGD(JPGD)%CNAME,'YOR',CLUOUT0,'--',NYOR_ALL(JPGD),IGRID,ILENCH,YCOMMENT,IRESP) CALL SET_DIM_ll(IIMAX, IJMAX, 1) ! compute origin and end of local subdomain of model JPGD ! initialize variables from MODD_NESTING, origin and end of global model JPGD in coordinates of its father @@ -262,11 +262,11 @@ DO JPGD=1,NMODEL CALL GOTO_MODEL(JPGD) CALL GO_TOMODEL_ll(JPGD,IINFO_ll) CALL GOTO_SURFEX(JPGD) - CALL FMREAD(CPGD(JPGD),'L1D ',CLUOUT0,'--',L1D_ALL(JPGD),IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(CPGD(JPGD),'L2D ',CLUOUT0,'--',L2D_ALL(JPGD),IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(CPGD(JPGD),'PACK ',CLUOUT0,'--',LPACK_ALL(JPGD),IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TZFILEPGD(JPGD)%CNAME,'L1D ',CLUOUT0,'--',L1D_ALL(JPGD),IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TZFILEPGD(JPGD)%CNAME,'L2D ',CLUOUT0,'--',L2D_ALL(JPGD),IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TZFILEPGD(JPGD)%CNAME,'PACK ',CLUOUT0,'--',LPACK_ALL(JPGD),IGRID,ILENCH,YCOMMENT,IRESP) CALL SET_FMPACK_ll(L1D_ALL(JPGD),L2D_ALL(JPGD),LPACK_ALL(JPGD)) - CALL READ_HGRID(JPGD,CPGD(JPGD),YMY_NAME,YDAD_NAME,YSTORAGE_TYPE) + CALL READ_HGRID(JPGD,TZFILEPGD(JPGD)%CNAME,YMY_NAME,YDAD_NAME,YSTORAGE_TYPE) CSTORAGE_TYPE='PG' END DO CALL INI_PARAZ_ll(IINFO_ll) @@ -317,9 +317,9 @@ END DO ! ---------------------- ! DO JPGD=1,NMODEL - IF (LEN_TRIM(CPGD(JPGD))>0) THEN + IF (LEN_TRIM(TZFILEPGD(JPGD)%CNAME)>0) THEN CALL GO_TOMODEL_ll(JPGD,IINFO_ll) - CPGDFILE = CPGD(JPGD) + CPGDFILE = TZFILEPGD(JPGD)%CNAME CALL GOTO_MODEL(JPGD) CALL GOTO_SURFEX(JPGD) CALL INIT_PGD_SURF_ATM(YSURF_CUR,'MESONH','PGD', & @@ -347,12 +347,14 @@ END DO ! DO JPGD=1,NMODEL CALL GO_TOMODEL_ll(JPGD,IINFO_ll) - CPGDFILE = CPGD(JPGD) - COUTFMFILE = CNESTPGD(JPGD) + CPGDFILE = TZFILEPGD(JPGD)%CNAME + COUTFMFILE = TZFILENESTPGD(JPGD)%CNAME CALL GOTO_MODEL(JPGD) CALL GOTO_SURFEX(JPGD) + TFILE_SURFEX => TZFILENESTPGD(JPGD) CALL WRITE_PGD_SURF_ATM_n(YSURF_CUR,'MESONH') - CALL WRITE_ZSMT_n(CNESTPGD(JPGD)) + NULLIFY(TFILE_SURFEX) + CALL WRITE_ZSMT_n(TZFILENESTPGD(JPGD)%CNAME) END DO ! !------------------------------------------------------------------------------- @@ -362,29 +364,29 @@ END DO ! ! DO JPGD=1,NMODEL - CALL FMWRIT(CNESTPGD(JPGD),'MASDEV ',CLUOUT0,'--',NMASDEV,0,1,' ',IRESP) - CALL FMWRIT(CNESTPGD(JPGD),'BUGFIX ',CLUOUT0,'--',NBUGFIX,0,1,' ',IRESP) - CALL FMWRIT(CNESTPGD(JPGD),'BIBUSER ',CLUOUT0,'--',CBIBUSER,0,1,' ',IRESP) - CALL FMWRIT(CNESTPGD(JPGD),'PROGRAM ',CLUOUT0,'--',CPROGRAM,0,1,' ',IRESP) - CALL FMWRIT(CNESTPGD(JPGD),'STORAGE_TYPE',CLUOUT0,'--',CSTORAGE_TYPE,0,1,' ',IRESP) - CALL FMWRIT(CNESTPGD(JPGD),'MY_NAME ',CLUOUT0,'--',CNESTPGD(JPGD),0,1,' ',IRESP) + CALL FMWRIT(TZFILENESTPGD(JPGD)%CNAME,'MASDEV ',CLUOUT0,'--',NMASDEV,0,1,' ',IRESP) + CALL FMWRIT(TZFILENESTPGD(JPGD)%CNAME,'BUGFIX ',CLUOUT0,'--',NBUGFIX,0,1,' ',IRESP) + CALL FMWRIT(TZFILENESTPGD(JPGD)%CNAME,'BIBUSER ',CLUOUT0,'--',CBIBUSER,0,1,' ',IRESP) + CALL FMWRIT(TZFILENESTPGD(JPGD)%CNAME,'PROGRAM ',CLUOUT0,'--',CPROGRAM,0,1,' ',IRESP) + CALL FMWRIT(TZFILENESTPGD(JPGD)%CNAME,'STORAGE_TYPE',CLUOUT0,'--',CSTORAGE_TYPE,0,1,' ',IRESP) + CALL FMWRIT(TZFILENESTPGD(JPGD)%CNAME,'MY_NAME ',CLUOUT0,'--',TZFILENESTPGD(JPGD)%CNAME,0,1,' ',IRESP) IF (NDAD(JPGD)>=1) THEN - YDAD_NAME = CNESTPGD(NDAD(JPGD)) + YDAD_NAME = TZFILENESTPGD(NDAD(JPGD))%CNAME ELSE YDAD_NAME = ' ' END IF - CALL FMWRIT(CNESTPGD(JPGD),'DAD_NAME ',CLUOUT0,'--',YDAD_NAME,0,1,' ',IRESP) + CALL FMWRIT(TZFILENESTPGD(JPGD)%CNAME,'DAD_NAME ',CLUOUT0,'--',YDAD_NAME,0,1,' ',IRESP) IF (LEN_TRIM(YDAD_NAME)>0) THEN - CALL FMWRIT(CNESTPGD(JPGD),'DXRATIO ',CLUOUT0,'--',NDXRATIO_ALL(JPGD),0,1,' ',IRESP) - CALL FMWRIT(CNESTPGD(JPGD),'DYRATIO ',CLUOUT0,'--',NDYRATIO_ALL(JPGD),0,1,' ',IRESP) - CALL FMWRIT(CNESTPGD(JPGD),'XOR ',CLUOUT0,'--',NXOR_ALL(JPGD),0,1,' ',IRESP) - CALL FMWRIT(CNESTPGD(JPGD),'YOR ',CLUOUT0,'--',NYOR_ALL(JPGD),0,1,' ',IRESP) + CALL FMWRIT(TZFILENESTPGD(JPGD)%CNAME,'DXRATIO ',CLUOUT0,'--',NDXRATIO_ALL(JPGD),0,1,' ',IRESP) + CALL FMWRIT(TZFILENESTPGD(JPGD)%CNAME,'DYRATIO ',CLUOUT0,'--',NDYRATIO_ALL(JPGD),0,1,' ',IRESP) + CALL FMWRIT(TZFILENESTPGD(JPGD)%CNAME,'XOR ',CLUOUT0,'--',NXOR_ALL(JPGD),0,1,' ',IRESP) + CALL FMWRIT(TZFILENESTPGD(JPGD)%CNAME,'YOR ',CLUOUT0,'--',NYOR_ALL(JPGD),0,1,' ',IRESP) END IF - CALL FMWRIT(CNESTPGD(JPGD),'SURF ',CLUOUT0,'--','EXTE',0,1,' ',IRESP) - CALL FMWRIT(CNESTPGD(JPGD),'L1D ',CLUOUT0,'--',L1D_ALL(JPGD),0,1,' ',IRESP) - CALL FMWRIT(CNESTPGD(JPGD),'L2D ',CLUOUT0,'--',L2D_ALL(JPGD),0,1,' ',IRESP) - CALL FMWRIT(CNESTPGD(JPGD),'PACK ',CLUOUT0,'--',LPACK_ALL(JPGD),0,1,' ',IRESP) - CALL FMWRIT(CNESTPGD(JPGD),'JPHEXT ',CLUOUT0,'--',JPHEXT,0,1,' ',IRESP) + CALL FMWRIT(TZFILENESTPGD(JPGD)%CNAME,'SURF ',CLUOUT0,'--','EXTE',0,1,' ',IRESP) + CALL FMWRIT(TZFILENESTPGD(JPGD)%CNAME,'L1D ',CLUOUT0,'--',L1D_ALL(JPGD),0,1,' ',IRESP) + CALL FMWRIT(TZFILENESTPGD(JPGD)%CNAME,'L2D ',CLUOUT0,'--',L2D_ALL(JPGD),0,1,' ',IRESP) + CALL FMWRIT(TZFILENESTPGD(JPGD)%CNAME,'PACK ',CLUOUT0,'--',LPACK_ALL(JPGD),0,1,' ',IRESP) + CALL FMWRIT(TZFILENESTPGD(JPGD)%CNAME,'JPHEXT ',CLUOUT0,'--',JPHEXT,0,1,' ',IRESP) END DO ! !------------------------------------------------------------------------------- @@ -393,8 +395,8 @@ END DO ! -------------------- ! DO JPGD=1,NMODEL - CALL FMCLOS_ll(CPGD (JPGD),'KEEP',CLUOUT0,IRESP,OPARALLELIO=.FALSE.) - CALL FMCLOS_ll(CNESTPGD(JPGD),'KEEP',CLUOUT0,IRESP,OPARALLELIO=.FALSE.) + CALL IO_FILE_CLOSE_ll(TZFILEPGD(JPGD), CLUOUT0,IRESP,OPARALLELIO=.FALSE.) + CALL IO_FILE_CLOSE_ll(TZFILENESTPGD(JPGD),CLUOUT0,IRESP,OPARALLELIO=.FALSE.) END DO ! !* loop to spare enough time to transfer commands before end of program diff --git a/src/MNH/prep_pgd.f90 b/src/MNH/prep_pgd.f90 index 0bbe1ca7a..b3a322d17 100644 --- a/src/MNH/prep_pgd.f90 +++ b/src/MNH/prep_pgd.f90 @@ -80,7 +80,7 @@ USE MODD_CONF, ONLY : CPROGRAM, NMASDEV, NBUGFIX, CBIBUSER, & USE MODD_CONF_n,ONLY : CSTORAGE_TYPE USE MODD_LUNIT, ONLY : CLUOUT0, COUTFMFILE USE MODD_PARAMETERS, ONLY : XUNDEF -USE MODD_IO_ll, ONLY : GSMONOPROC +USE MODD_IO_ll, ONLY : GSMONOPROC, TFILEDATA, TFILE_SURFEX USE MODD_IO_SURF_MNH, ONLY : NHALO USE MODD_SPAWN, ONLY : NDXRATIO,NDYRATIO,NXSIZE,NYSIZE,NXOR,NYOR ! @@ -89,6 +89,8 @@ USE MODE_FMWRIT USE MODE_IO_ll USE MODE_FM USE MODE_MODELN_HANDLER +USE MODE_MSG +USE MODE_FIELD ! USE MODI_ZSMT_PGD ! @@ -138,6 +140,7 @@ INTEGER :: ILENCH ! length of comment string CHARACTER(LEN=100):: YCOMMENT ! comment string INTEGER :: IIMAX, IJMAX INTEGER :: NHALO_MNH +TYPE(TFILEDATA),TARGET :: TZFILE ! NAMELIST/NAM_PGDFILE/CPGDFILE, NHALO NAMELIST/NAM_ZSFILTER/NZSFILTER,LHSLOP,XHSLOP @@ -202,6 +205,8 @@ CALL SURFEX_ALLOC_LIST(1) YSURF_CUR => YSURF_LIST(1) CALL READ_ALL_NAMELISTS(YSURF_CUR,'MESONH','PRE',.FALSE.) ! +CALL INI_FIELD_LIST(1) +! CALL GOTO_MODEL(1) CALL GOTO_SURFEX(1) ! @@ -233,8 +238,28 @@ CALL PGD_SURF_ATM(YSURF_CUR,'MESONH',' ',' ',.FA !* 3. Writes the physiographic fields ! ------------------------------- ! +TZFILE%CNAME = CPGDFILE +TZFILE%CTYPE = 'PREPPGD' +IF (LCDF4) THEN + IF (.NOT.LLFIOUT) THEN + TZFILE%CFORMAT= 'NETCDF4' + ELSE + TZFILE%CFORMAT= 'LFICDF4' + TZFILE%NLFINPRAR= 1 + END IF +ELSE IF (LLFIOUT) THEN + TZFILE%CFORMAT = 'LFI' + TZFILE%NLFINPRAR= 1 +ELSE + CALL PRINT_MSG(NVERB_FATAL,'IO','PREP_PGD','unknown backup/output fileformat') +ENDIF +TZFILE%CMODE = 'WRITE' +TZFILE%NLFITYPE = 1 +TZFILE%NLFIVERB = 5 +! +CALL IO_FILE_OPEN_ll(TZFILE,CLUOUT0,IRESP,OPARALLELIO=.FALSE.) +! COUTFMFILE = CPGDFILE -CALL FMOPEN_ll(COUTFMFILE,'WRITE',CLUOUT0,1,1,5,ININAR,IRESP,OPARALLELIO=.FALSE.) ! CALL FMWRIT(COUTFMFILE,'MASDEV ',CLUOUT0,'--',NMASDEV,0,1,' ',IRESP) CALL FMWRIT(COUTFMFILE,'BUGFIX ',CLUOUT0,'--',NBUGFIX,0,1,' ',IRESP) @@ -267,7 +292,9 @@ CALL FMWRIT(COUTFMFILE,'XOR ',CLUOUT0,'--',NXOR,0,1,' ',IRESP) CALL FMWRIT(COUTFMFILE,'YOR ',CLUOUT0,'--',NYOR,0,1,' ',IRESP) CALL FMWRIT(COUTFMFILE,'JPHEXT ',CLUOUT0,'--',JPHEXT,0,1,' ',IRESP) ! +TFILE_SURFEX => TZFILE CALL WRITE_PGD_SURF_ATM_n(YSURF_CUR,'MESONH') +NULLIFY(TFILE_SURFEX) !Probably not necessary !* 4. Computes and writes smooth orography for SLEVE coordinate ! --------------------------------------------------------- !CALL ZSMT_PGD(COUTFMFILE,NZSFILTER,NSLEVE,XSMOOTH_ZS,LHSLOP,XHSLOP) @@ -323,7 +350,7 @@ WRITE(ILUOUT0,*) '***************************' ! ---------------------- ! CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP,OPARALLELIO=.FALSE.) -CALL FMCLOS_ll(COUTFMFILE,'KEEP',CLUOUT0,IRESP,OPARALLELIO=.FALSE.) +CALL IO_FILE_CLOSE_ll(TZFILE,CLUOUT0,IRESP,OPARALLELIO=.FALSE.) ! CALL END_PARA_ll(IINFO_ll) ! diff --git a/src/MNH/prep_real_case.f90 b/src/MNH/prep_real_case.f90 index dc93b290b..0280429b7 100644 --- a/src/MNH/prep_real_case.f90 +++ b/src/MNH/prep_real_case.f90 @@ -446,7 +446,7 @@ USE MODD_CH_AEROSOL, ONLY: LORILAM, LINITPM, XINIRADIUSI, XINIRADIUSJ,& XINISIGI, XINISIGJ, XN0IMIN, XN0JMIN, CRGUNIT USE MODD_DUST, ONLY: LDUST, NMODE_DST, CRGUNITD, XINISIG, XINIRADIUS, XN0MIN USE MODD_SALT, ONLY: LSALT, NMODE_SLT, CRGUNITS, XINISIG_SLT, XINIRADIUS_SLT, XN0MIN_SLT -USE MODD_IO_ll, ONLY : GSMONOPROC,TFILEDATA,LIOCDF4,LLFIOUT +USE MODD_IO_ll, ONLY : GSMONOPROC,TFILEDATA,LIOCDF4,LLFIOUT, TFILE_SURFEX USE MODD_PREP_REAL USE MODD_CH_MNHC_n, ONLY: LUSECHAQ_n=>LUSECHAQ,LUSECHIC_n=>LUSECHIC, LUSECHEM_n=>LUSECHEM USE MODI_READ_VER_GRID @@ -512,7 +512,7 @@ LOGICAL :: LUSECHAQ LOGICAL :: LUSECHIC LOGICAL :: LUSECHEM ! -TYPE(TFILEDATA) :: TZFILE +TYPE(TFILEDATA),TARGET :: TZFILE ! ! !* 0.3 Declaration of namelists @@ -561,6 +561,7 @@ CALL ALLOC_FIELD_SCALARS() ! CALL DEFAULT_DESFM_n(1) NRR=1 +IDX_RVT = 1 ! !------------------------------------------------------------------------------- ! @@ -588,8 +589,7 @@ ELSE IF (LLFIOUT) THEN TZFILE%CFORMAT='LFI' TZFILE%NLFINPRAR= 0 ELSE - PRINT *,'Error: unknown backup/output fileformat' - CALL ABORT + CALL PRINT_MSG(NVERB_FATAL,'IO','PREP_REAL_CASE','unknown backup/output fileformat') ENDIF TZFILE%CMODE = 'WRITE' TZFILE%NLFITYPE = 1 @@ -1034,13 +1034,34 @@ CSTORAGE_TYPE='TT' IF (YATMFILETYPE=='GRIBEX') THEN CSURF = "EXTE" DO JRR=1,NRR - IF (JRR==1) LUSERV=.TRUE. - IF (JRR==2) LUSERC=.TRUE. - IF (JRR==3) LUSERR=.TRUE. - IF (JRR==4) LUSERI=.TRUE. - IF (JRR==5) LUSERS=.TRUE. - IF (JRR==6) LUSERG=.TRUE. - IF (JRR==7) LUSERH=.TRUE. + IF (JRR==1) THEN + LUSERV=.TRUE. + IDX_RVT = JRR + END IF + IF (JRR==2) THEN + LUSERC=.TRUE. + IDX_RCT = JRR + END IF + IF (JRR==3) THEN + LUSERR=.TRUE. + IDX_RRT = JRR + END IF + IF (JRR==4) THEN + LUSERI=.TRUE. + IDX_RIT = JRR + END IF + IF (JRR==5) THEN + LUSERS=.TRUE. + IDX_RST = JRR + END IF + IF (JRR==6) THEN + LUSERG=.TRUE. + IDX_RGT = JRR + END IF + IF (JRR==7) THEN + LUSERH=.TRUE. + IDX_RHT = JRR + END IF END DO END IF ! @@ -1083,7 +1104,9 @@ IF (.NOT. LCOUPLING ) THEN CALL READ_ALL_NAMELISTS(YSURF_CUR,'MESONH','PRE',.FALSE.) ENDIF CALL GOTO_SURFEX(1) + TFILE_SURFEX => TZFILE CALL PREP_SURF_MNH(YSURFFILE,YSURFFILETYPE) + NULLIFY(TFILE_SURFEX) CALL SURFEX_DEALLO_LIST ENDIF ! diff --git a/src/MNH/spawn_model2.f90 b/src/MNH/spawn_model2.f90 index 023138a47..e2dae103f 100644 --- a/src/MNH/spawn_model2.f90 +++ b/src/MNH/spawn_model2.f90 @@ -228,11 +228,12 @@ USE MODD_CH_MNHC_n USE MODD_PASPOL_n !$20140515 USE MODD_VAR_ll, ONLY : NPROC -USE MODD_IO_ll, ONLY: TFILEDATA,LIOCDF4,LLFIOUT +USE MODD_IO_ll, ONLY: TFILEDATA,LIOCDF4,LLFIOUT,TFILE_SURFEX ! USE MODE_GRIDCART ! Executive modules USE MODE_GRIDPROJ USE MODE_ll +USE MODE_MSG ! USE MODI_READ_HGRID USE MODI_SPAWN_GRID2 @@ -388,7 +389,7 @@ INTEGER,DIMENSION(:,:),ALLOCATABLE :: IJCOUNT ! REAL :: ZZS_MAX, ZZS_MAX_ll ! -TYPE(TFILEDATA) :: TZFILE +TYPE(TFILEDATA),TARGET :: TZFILE !------------------------------------------------------------------------------- ! ! Save model index and switch to model 2 variables @@ -608,13 +609,35 @@ ENDIF CALL INI_NSV(2) ! NSV* are set equal for model 2 and model 1. ! NSV is set to the total number of SV for model 2 ! -IF (NRR==0) LUSERV=.FALSE. ! as the default is .T. -IF (NRR>1) LUSERC=.TRUE. -IF (NRR>2) LUSERR=.TRUE. -IF (NRR>3) LUSERI=.TRUE. -IF (NRR>4) LUSERS=.TRUE. -IF (NRR>5) LUSERG=.TRUE. -IF (NRR>6) LUSERH=.TRUE. +IF (NRR==0) THEN + LUSERV=.FALSE. ! as the default is .T. +ELSE + IDX_RVT = 1 +END IF +IF (NRR>1) THEN + LUSERC=.TRUE. + IDX_RCT = 2 +END IF +IF (NRR>2) THEN + LUSERR=.TRUE. + IDX_RRT = 2 +END IF +IF (NRR>3) THEN + LUSERI=.TRUE. + IDX_RIT = 2 +END IF +IF (NRR>4) THEN + LUSERS=.TRUE. + IDX_RST = 2 +END IF +IF (NRR>5) THEN + LUSERG=.TRUE. + IDX_RGT = 2 +END IF +IF (NRR>6) THEN + LUSERH=.TRUE. + IDX_RHT = 2 +END IF ! ! ! @@ -1442,8 +1465,7 @@ ELSE IF (LLFIOUT) THEN TZFILE%CFORMAT='LFI' TZFILE%NLFINPRAR= INPRAR ELSE - PRINT *,'Error: unknown backup/output fileformat' - CALL ABORT + CALL PRINT_MSG(NVERB_FATAL,'IO','SPAWN_MODEL2','unknown backup/output fileformat') ENDIF TZFILE%CMODE = 'WRITE' TZFILE%NLFITYPE = ITYPE @@ -1489,7 +1511,9 @@ ZWRITE = ZTIME2 - ZTIME1 ! ZTIME1 = ZTIME2 ! +TFILE_SURFEX => TZFILE CALL SPAWN_SURF(HINIFILE,HINIFILEPGD,OSPAWN_SURF) +NULLIFY(TFILE_SURFEX) ! CALL SECOND_MNH(ZTIME2) ! diff --git a/src/MNH/write_surf_mnh.f90 b/src/MNH/write_surf_mnh.f90 index 8fa02f488..ec451e3bf 100644 --- a/src/MNH/write_surf_mnh.f90 +++ b/src/MNH/write_surf_mnh.f90 @@ -11,12 +11,12 @@ SUBROUTINE WRITE_SURFX0_MNH(HREC,PFIELD,KRESP,HCOMMENT) ! ############################################################# ! -!!**** *READX0* - routine to read a real scalar +!!**** *WRITEX0* - routine to write a real scalar !! !! PURPOSE !! ------- ! -! The purpose of READX0 is +! The purpose of WRITEX0 is ! !!** METHOD !! ------ @@ -112,7 +112,7 @@ END SUBROUTINE WRITE_SURFX0_MNH SUBROUTINE WRITE_SURFX1_MNH(HREC,KL,PFIELD,KRESP,HCOMMENT,HDIR) ! ############################################################# ! -!!**** *READX1* - routine to fill a real 1D array for the externalised surface +!!**** *WRITEX1* - routine to fill a real 1D array for the externalised surface !! !! PURPOSE !! ------- @@ -411,7 +411,7 @@ END SUBROUTINE WRITE_SURFX1_MNH SUBROUTINE WRITE_SURFX2COV_MNH(HREC,KL1,KL2,PFIELD,OFLAG,KRESP,HCOMMENT,HDIR) ! ############################################################# ! -!!**** *READX1* - routine to fill a real 1D array for the externalised surface +!!**** *WRITEX1* - routine to fill a real 1D array for the externalised surface !! !! PURPOSE !! ------- @@ -612,7 +612,7 @@ END SUBROUTINE WRITE_SURFX2COV_MNH SUBROUTINE WRITE_SURFX2_MNH(HREC,KL1,KL2,PFIELD,KRESP,HCOMMENT,HDIR) ! ############################################################# ! -!!**** *READX2* - routine to fill a real 2D array for the externalised surface +!!**** *WRITEX2* - routine to fill a real 2D array for the externalised surface !! !! PURPOSE !! ------- @@ -786,12 +786,12 @@ END SUBROUTINE WRITE_SURFX2_MNH SUBROUTINE WRITE_SURFN0_MNH(HREC,KFIELD,KRESP,HCOMMENT) ! ############################################################# ! -!!**** *READN0* - routine to read an integer +!!**** *WRITEN0* - routine to write an integer !! !! PURPOSE !! ------- ! -! The purpose of READN0 is +! The purpose of WRITEN0 is ! !!** METHOD !! ------ @@ -884,12 +884,12 @@ END SUBROUTINE WRITE_SURFN0_MNH SUBROUTINE WRITE_SURFN1_MNH(HREC,KL,KFIELD,KRESP,HCOMMENT,HDIR) ! ############################################################# ! -!!**** *READN0* - routine to read an integer +!!**** *WRITEN0* - routine to write an integer !! !! PURPOSE !! ------- ! -! The purpose of READN0 is +! The purpose of WRITEN0 is ! !!** METHOD !! ------ @@ -967,9 +967,7 @@ IF (HDIR=='-') THEN TZFIELD%NGRID = 0 TZFIELD%NTYPE = TYPEINT TZFIELD%NDIMS = 1 -CALL PRINT_MSG(NVERB_ERROR,'IO','WRITE_SURFN1_MNH','not yet fully implemented') -RETURN -!PW: TODO ! CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,COUT,KRESP,KFIELD) + CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,COUT,KRESP,KFIELD) ! ELSE IF (HDIR=='H') THEN ! @@ -1003,12 +1001,12 @@ END SUBROUTINE WRITE_SURFN1_MNH SUBROUTINE WRITE_SURFC0_MNH(HREC,HFIELD,KRESP,HCOMMENT) ! ############################################################# ! -!!**** *READC0* - routine to read an integer +!!**** *WRITEC0* - routine to write an integer !! !! PURPOSE !! ------- ! -! The purpose of READC0 is +! The purpose of WRITEC0 is ! !!** METHOD !! ------ @@ -1109,12 +1107,12 @@ END SUBROUTINE WRITE_SURFC0_MNH SUBROUTINE WRITE_SURFL1_MNH(HREC,KL,OFIELD,KRESP,HCOMMENT,HDIR) ! ############################################################# ! -!!**** *READL1* - routine to read a logical array +!!**** *WRITEL1* - routine to write a logical array !! !! PURPOSE !! ------- ! -! The purpose of READL1 is +! The purpose of WRITEL1 is ! !!** METHOD !! ------ @@ -1197,9 +1195,7 @@ IF (HDIR=='-') THEN TZFIELD%NGRID = 0 TZFIELD%NTYPE = TYPELOG TZFIELD%NDIMS = 1 -CALL PRINT_MSG(NVERB_ERROR,'IO','WRITE_SURFL1_MNH','not yet fully implemented') -RETURN -!PW: TODO ! CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,COUT,KRESP,OFIELD(:)) + CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,COUT,KRESP,OFIELD(:)) END IF ! ELSE IF (HDIR=='H') THEN @@ -1241,7 +1237,7 @@ END SUBROUTINE WRITE_SURFL1_MNH SUBROUTINE WRITE_SURFL0_MNH(HREC,OFIELD,KRESP,HCOMMENT) ! ############################################################# ! -!!**** *WRITEL1* - routine to read a logical +!!**** *WRITEL1* - routine to write a logical !! !! PURPOSE !! ------- @@ -1329,12 +1325,12 @@ END SUBROUTINE WRITE_SURFL0_MNH SUBROUTINE WRITE_SURFT0_MNH(HREC,KYEAR,KMONTH,KDAY,PTIME,KRESP,HCOMMENT) ! ############################################################# ! -!!**** *READT0* - routine to read a MESO-NH date_time scalar +!!**** *WRITET0* - routine to write a MESO-NH date_time scalar !! !! PURPOSE !! ------- ! -! The purpose of READT0 is +! The purpose of WRITET0 is ! !!** METHOD !! ------ @@ -1378,7 +1374,7 @@ IMPLICIT NONE ! !* 0.1 Declarations of arguments ! -CHARACTER(LEN=LEN_HREC), INTENT(IN) :: HREC ! name of the article to be read +CHARACTER(LEN=LEN_HREC), INTENT(IN) :: HREC ! name of the article to be written INTEGER, INTENT(IN) :: KYEAR ! year INTEGER, INTENT(IN) :: KMONTH ! month INTEGER, INTENT(IN) :: KDAY ! day @@ -1476,7 +1472,7 @@ IMPLICIT NONE ! !* 0.1 Declarations of arguments ! -CHARACTER(LEN=LEN_HREC), INTENT(IN) :: HREC ! name of the article to be read +CHARACTER(LEN=LEN_HREC), INTENT(IN) :: HREC ! name of the article to be written INTEGER, INTENT(IN) :: KL1 ! number of points INTEGER, DIMENSION(KL1), INTENT(IN) :: KYEAR ! year INTEGER, DIMENSION(KL1), INTENT(IN) :: KMONTH ! month -- GitLab