diff --git a/src/LIB/SURCOUCHE/src/mode_field.f90 b/src/LIB/SURCOUCHE/src/mode_field.f90 index f039d2212fa6b025b41defa2213240159afc26c3..90704a8933e1c3f03a7262bdf8bd63db510f0de6 100644 --- a/src/LIB/SURCOUCHE/src/mode_field.f90 +++ b/src/LIB/SURCOUCHE/src/mode_field.f90 @@ -510,6 +510,19 @@ ALLOCATE(TFIELDLIST(IDX)%TFIELD_X1D(IMODEL)) IDX = IDX+1 ! IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'ZTOP' +TFIELDLIST(IDX)%CSTDNAME = 'altitude_at_top_of_atmosphere_model' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: ZTOP' +TFIELDLIST(IDX)%CUNITS = 'm' +TFIELDLIST(IDX)%CDIR = '--' +TFIELDLIST(IDX)%CCOMMENT = 'Height of top level' +TFIELDLIST(IDX)%NGRID = 4 +TFIELDLIST(IDX)%NTYPE = TYPEREAL +TFIELDLIST(IDX)%NDIMS = 0 +ALLOCATE(TFIELDLIST(IDX)%TFIELD_X0D(IMODEL)) +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() TFIELDLIST(IDX)%CMNHNAME = 'DXHAT' !TODO: check stdname TFIELDLIST(IDX)%CSTDNAME = '' @@ -3210,6 +3223,13 @@ IF (.NOT.LFIELDLIST_ISINIT) THEN END IF ! ! +IF (.NOT.ASSOCIATED(XZTOP)) THEN + CALL PRINT_MSG(NVERB_DEBUG,'GEN','INI_FIELD_SCALARS',' XZTOP was not associated') + ALLOCATE(XZTOP) + CALL FIND_FIELD_ID_FROM_MNHNAME('ZTOP',IID,IRESP) + TFIELDLIST(IID)%TFIELD_X0D(1)%DATA=>XZTOP +END IF +! IF (.NOT.ASSOCIATED(LSLEVE)) THEN CALL PRINT_MSG(NVERB_DEBUG,'GEN','INI_FIELD_SCALARS',' LSLEVE was not associated') ALLOCATE(LSLEVE) @@ -3527,6 +3547,7 @@ CALL FIND_FIELD_ID_FROM_MNHNAME('ZSMT', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(K CALL FIND_FIELD_ID_FROM_MNHNAME('XHAT', IID,IRESP); TFIELDLIST(IID)%TFIELD_X1D(KFROM)%DATA => XXHAT CALL FIND_FIELD_ID_FROM_MNHNAME('YHAT', IID,IRESP); TFIELDLIST(IID)%TFIELD_X1D(KFROM)%DATA => XYHAT CALL FIND_FIELD_ID_FROM_MNHNAME('ZHAT', IID,IRESP); TFIELDLIST(IID)%TFIELD_X1D(KFROM)%DATA => XZHAT +CALL FIND_FIELD_ID_FROM_MNHNAME('ZTOP', IID,IRESP); TFIELDLIST(IID)%TFIELD_X0D(KFROM)%DATA => XZTOP 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('ALT', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XZZ @@ -3856,6 +3877,15 @@ CALL FIND_FIELD_ID_FROM_MNHNAME('ZSMT', IID,IRESP); XZSMT => TFIELDLIST(IID)%TF CALL FIND_FIELD_ID_FROM_MNHNAME('XHAT', IID,IRESP); XXHAT => TFIELDLIST(IID)%TFIELD_X1D(KTO)%DATA CALL FIND_FIELD_ID_FROM_MNHNAME('YHAT', IID,IRESP); XYHAT => TFIELDLIST(IID)%TFIELD_X1D(KTO)%DATA CALL FIND_FIELD_ID_FROM_MNHNAME('ZHAT', IID,IRESP); XZHAT => TFIELDLIST(IID)%TFIELD_X1D(KTO)%DATA +! +CALL FIND_FIELD_ID_FROM_MNHNAME('ZTOP', IID,IRESP) +IF (.NOT.ASSOCIATED(TFIELDLIST(IID)%TFIELD_X0D(KTO)%DATA)) THEN + CALL PRINT_MSG(NVERB_DEBUG,'GEN','FIELDLIST_GOTO_MODEL',& + 'TFIELDLIST(IID)%TFIELD_X0D(KTO)%DATA was not associated for '//TFIELDLIST(IID)%CMNHNAME) + ALLOCATE(TFIELDLIST(IID)%TFIELD_X0D(KTO)%DATA) +END IF +XZTOP => TFIELDLIST(IID)%TFIELD_X0D(KTO)%DATA +! CALL FIND_FIELD_ID_FROM_MNHNAME('DXHAT',IID,IRESP); XDXHAT => TFIELDLIST(IID)%TFIELD_X1D(KTO)%DATA CALL FIND_FIELD_ID_FROM_MNHNAME('DYHAT',IID,IRESP); XDYHAT => TFIELDLIST(IID)%TFIELD_X1D(KTO)%DATA ! diff --git a/src/MNH/ini_modeln.f90 b/src/MNH/ini_modeln.f90 index 5fc10c2580f319cdedd65e570aa20f9aa402db6b..0a896fe3cd477132771dd11450fb937265ac243c 100644 --- a/src/MNH/ini_modeln.f90 +++ b/src/MNH/ini_modeln.f90 @@ -584,6 +584,7 @@ IKU=NKMAX+2*JPVEXT ! ALLOCATE(XZHAT(IKU)) CALL IO_READ_FIELD(TPINIFILE,'ZHAT',XZHAT) +CALL IO_READ_FIELD(TPINIFILE,'ZTOP',XZTOP) IF (XALZBOT>=XZHAT(IKU) .AND. LVE_RELAX) THEN WRITE(ILUOUT,FMT=*) "INI_MODEL_n ERROR: you want to use vertical relaxation" WRITE(ILUOUT,FMT=*) " but bottom of layer XALZBOT(",XALZBOT,")" @@ -1563,7 +1564,7 @@ CALL SET_GRID(KMI,TPINIFILE,IIU,IJU,IKU,NIMAX_ll,NJMAX_ll, & XTSTEP,XSEGLEN, & XLONORI,XLATORI,XLON,XLAT, & XXHAT,XYHAT,XDXHAT,XDYHAT, XMAP, & - XZS,XZZ,XZHAT,LSLEVE,XLEN1,XLEN2,XZSMT, & + XZS,XZZ,XZHAT,XZTOP,LSLEVE,XLEN1,XLEN2,XZSMT, & ZJ, & TDTMOD,TDTCUR,NSTOP,NBAK_NUMB,NOUT_NUMB,TBACKUPN,TOUTPUTN) ! diff --git a/src/MNH/ini_spectren.f90 b/src/MNH/ini_spectren.f90 index 384d41ffa6d7acb244d48811d16d0b10569fa937..384f43ed65612064af202f8d310078611e33b0dd 100644 --- a/src/MNH/ini_spectren.f90 +++ b/src/MNH/ini_spectren.f90 @@ -224,6 +224,7 @@ IKU=NKMAX+2*JPVEXT ! ALLOCATE(XZHAT(IKU)) CALL IO_READ_FIELD(TPINIFILE,'ZHAT',XZHAT) +CALL IO_READ_FIELD(TPINIFILE,'ZTOP',XZTOP) IF (XALZBOT>=XZHAT(IKU) .AND. LVE_RELAX) THEN WRITE(ILUOUT,FMT=*) "INI_SPECTRE_n ERROR: you want to use vertical relaxation" WRITE(ILUOUT,FMT=*) " but bottom of layer XALZBOT(",XALZBOT,")" @@ -716,7 +717,7 @@ CALL SET_GRID(KMI,TPINIFILE,IIU,IJU,IKU,NIMAX_ll,NJMAX_ll, & XTSTEP,XSEGLEN, & XLONORI,XLATORI,XLON,XLAT, & XXHAT,XYHAT,XDXHAT,XDYHAT, XMAP, & - XZS,XZZ,XZHAT,LSLEVE,XLEN1,XLEN2,XZSMT, & + XZS,XZZ,XZHAT,XZTOP,LSLEVE,XLEN1,XLEN2,XZSMT, & ZJ, & TDTMOD,TDTCUR,NSTOP,NBAK_NUMB,NOUT_NUMB,TBACKUPN,TOUTPUTN) ! diff --git a/src/MNH/init_for_convlfi.f90 b/src/MNH/init_for_convlfi.f90 index c3d723b7498cf523b5534c58adce41bf2a85c2b3..2479f6880c402f5ef869300da0b128886d2254b8 100644 --- a/src/MNH/init_for_convlfi.f90 +++ b/src/MNH/init_for_convlfi.f90 @@ -235,6 +235,7 @@ IF (IRESP/=0) XZSMT(:,:)=XZS(:,:) ! ALLOCATE(XZHAT(IKU)) CALL IO_READ_FIELD(TPINIFILE,'ZHAT',XZHAT) +CALL IO_READ_FIELD(TPINIFILE,'ZTOP',XZTOP) ! CALL IO_READ_FIELD(TPINIFILE,'SLEVE',LSLEVE,IRESP) IF (IRESP/=0) LSLEVE = .FALSE. diff --git a/src/MNH/mnh2lpdm_ini.f90 b/src/MNH/mnh2lpdm_ini.f90 index d91ef88d968ab641526ea723f1be87cfa8de9230..9852c2aa24620b3f93ba2608b031ab350b08eca4 100644 --- a/src/MNH/mnh2lpdm_ini.f90 +++ b/src/MNH/mnh2lpdm_ini.f90 @@ -197,6 +197,7 @@ ALLOCATE( XSFV(NIU,NJU)) !* 2.6 Decoupage vertical. ! CALL IO_READ_FIELD(TPFILE1,'ZHAT',XZHAT) +CALL IO_READ_FIELD(TPFILE1,'ZTOP',XZTOP) ! !* 2.7 Orographie. ! diff --git a/src/MNH/modd_gridn.f90 b/src/MNH/modd_gridn.f90 index 68e03c97e19f9d42233d9c0780cb29fcba0ccdbc..75fd2f485e38b8796365db1534fa1f6202b823f2 100644 --- a/src/MNH/modd_gridn.f90 +++ b/src/MNH/modd_gridn.f90 @@ -56,6 +56,7 @@ REAL, DIMENSION(:), POINTER :: XDYHAT=>NULL() ! horizontal stretch REAL, DIMENSION(:,:), POINTER :: XMAP=>NULL() ! Map factor REAL, DIMENSION(:,:), POINTER :: XZS=>NULL() ! orography REAL, DIMENSION(:,:,:),POINTER :: XZZ=>NULL() ! height z +REAL, POINTER :: XZTOP=>NULL() ! model top (m) REAL, DIMENSION(:), POINTER :: XZHAT=>NULL() ! height level without orography REAL, DIMENSION(:,:), POINTER :: XDIRCOSXW=>NULL(),XDIRCOSYW=>NULL(),XDIRCOSZW=>NULL() ! director cosinus of the normal ! to the ground surface diff --git a/src/MNH/read_ver_grid.f90 b/src/MNH/read_ver_grid.f90 index 0bb587beb87a96e72da5ed5bb746edb19fc4f04e..2593caab7cebbbb89b65bb055893b2bdf31ee242 100644 --- a/src/MNH/read_ver_grid.f90 +++ b/src/MNH/read_ver_grid.f90 @@ -320,6 +320,9 @@ CASE DEFAULT CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_VER_GRID','') END SELECT ! +!Set model top +XZTOP = XZHAT(IKU) +! !------------------------------------------------------------------------------- ! !* 5. TEST ON STRETCHING : diff --git a/src/MNH/set_grid.f90 b/src/MNH/set_grid.f90 index a9d5d2fca18976cb98c5a6b1e4c2eb47c12890fe..1e2d99424246b106b90dbe543d6f880dc0f49226 100644 --- a/src/MNH/set_grid.f90 +++ b/src/MNH/set_grid.f90 @@ -23,7 +23,7 @@ INTERFACE PTSTEP,PSEGLEN, & PLONORI,PLATORI,PLON,PLAT, & PXHAT,PYHAT,PDXHAT,PDYHAT, PMAP, & - PZS,PZZ,PZHAT,OSLEVE,PLEN1,PLEN2,PZSMT, & + PZS,PZZ,PZHAT,PZTOP,OSLEVE,PLEN1,PLEN2,PZSMT, & PJ, & TPDTMOD,TPDTCUR,KSTOP, & KBAK_NUMB,KOUT_NUMB,TPBACKUPN,TPOUTPUTN ) @@ -75,6 +75,7 @@ REAL, DIMENSION(:,:), INTENT(OUT) :: PMAP ! Map factor REAL, DIMENSION(:,:), INTENT(OUT) :: PZS ! orography REAL, DIMENSION(:,:,:), INTENT(OUT) :: PZZ ! Height z REAL, DIMENSION(:), INTENT(OUT) :: PZHAT ! Height level +REAL, INTENT(OUT) :: PZTOP ! Model top LOGICAL, INTENT(OUT) :: OSLEVE ! flag for SLEVE coordinate REAL, INTENT(OUT) :: PLEN1 ! Decay scale for smooth topography REAL, INTENT(OUT) :: PLEN2 ! Decay scale for small-scale topography deviation @@ -112,7 +113,7 @@ END MODULE MODI_SET_GRID PTSTEP,PSEGLEN, & PLONORI,PLATORI,PLON,PLAT, & PXHAT,PYHAT,PDXHAT,PDYHAT, PMAP, & - PZS,PZZ,PZHAT,OSLEVE,PLEN1,PLEN2,PZSMT, & + PZS,PZZ,PZHAT,PZTOP,OSLEVE,PLEN1,PLEN2,PZSMT, & PJ, & TPDTMOD,TPDTCUR,KSTOP, & KBAK_NUMB,KOUT_NUMB,TPBACKUPN,TPOUTPUTN ) @@ -304,6 +305,7 @@ REAL, DIMENSION(:,:), INTENT(OUT) :: PMAP ! Map factor REAL, DIMENSION(:,:), INTENT(OUT) :: PZS ! orography REAL, DIMENSION(:,:,:), INTENT(OUT) :: PZZ ! Height z REAL, DIMENSION(:), INTENT(OUT) :: PZHAT ! Height level +REAL, INTENT(OUT) :: PZTOP ! Model top LOGICAL, INTENT(OUT) :: OSLEVE ! flag for SLEVE coordinate REAL, INTENT(OUT) :: PLEN1 ! Decay scale for smooth topography REAL, INTENT(OUT) :: PLEN2 ! Decay scale for small-scale topography deviation @@ -401,6 +403,7 @@ END IF CALL IO_READ_FIELD(TPINIFILE,'ZS',PZS) CALL IO_READ_FIELD(TPINIFILE,'ZHAT',PZHAT) +CALL IO_READ_FIELD(TPINIFILE,'ZTOP',PZTOP) ! CALL DEFAULT_SLEVE(OSLEVE,PLEN1,PLEN2) ! diff --git a/src/MNH/write_lfifm1_for_diag.f90 b/src/MNH/write_lfifm1_for_diag.f90 index 24bdb779f5a2b313076d478b61b405b5c89916a2..25cd9b3f5b156b8688379882349ae1507f79abc4 100644 --- a/src/MNH/write_lfifm1_for_diag.f90 +++ b/src/MNH/write_lfifm1_for_diag.f90 @@ -428,6 +428,7 @@ CALL IO_WRITE_FIELD(TPFILE,'BETA',XBETA) CALL IO_WRITE_FIELD(TPFILE,'XHAT',XXHAT) CALL IO_WRITE_FIELD(TPFILE,'YHAT',XYHAT) CALL IO_WRITE_FIELD(TPFILE,'ZHAT',XZHAT) +CALL IO_WRITE_FIELD(TPFILE,'ZTOP',XZTOP) ! CALL IO_WRITE_FIELD(TPFILE,'ZS', XZS) CALL IO_WRITE_FIELD(TPFILE,'ZSMT', XZSMT) diff --git a/src/MNH/write_lfifmn_fordiachron.f90 b/src/MNH/write_lfifmn_fordiachron.f90 index b40493e3fc00ec90904acf2aeea6ce106f726d03..d152d850d364a977de8f594ccc6311417ca7a10a 100644 --- a/src/MNH/write_lfifmn_fordiachron.f90 +++ b/src/MNH/write_lfifmn_fordiachron.f90 @@ -202,6 +202,7 @@ CALL IO_WRITE_FIELD(TPFILE,'BETA',XBETA) CALL IO_WRITE_FIELD(TPFILE,'XHAT',XXHAT) CALL IO_WRITE_FIELD(TPFILE,'YHAT',XYHAT) CALL IO_WRITE_FIELD(TPFILE,'ZHAT',XZHAT) +CALL IO_WRITE_FIELD(TPFILE,'ZTOP',XZTOP) ! CALL IO_WRITE_FIELD(TPFILE,'ZS', XZS) CALL IO_WRITE_FIELD(TPFILE,'ZSMT', XZSMT) diff --git a/src/MNH/write_lfin.f90 b/src/MNH/write_lfin.f90 index 04e74197343343c39de925bdf7370be4eb3f5119..3bbbacb6aa89255a67dd572d2ef584ddeff8387e 100644 --- a/src/MNH/write_lfin.f90 +++ b/src/MNH/write_lfin.f90 @@ -396,6 +396,7 @@ CALL IO_WRITE_FIELD(TPFILE,'BETA',XBETA) CALL IO_WRITE_FIELD(TPFILE,'XHAT',XXHAT) CALL IO_WRITE_FIELD(TPFILE,'YHAT',XYHAT) CALL IO_WRITE_FIELD(TPFILE,'ZHAT',XZHAT) +CALL IO_WRITE_FIELD(TPFILE,'ZTOP',XZTOP) ! ! #ifdef MNH_NCWRIT ! !