diff --git a/src/LIB/SURCOUCHE/src/io_write_field.f90 b/src/LIB/SURCOUCHE/src/io_write_field.f90 index 6213e0ece1bd83072c8dfadf647a89b9e7417d4f..834c7258130797ac7484709a193c34feae8e79e0 100644 --- a/src/LIB/SURCOUCHE/src/io_write_field.f90 +++ b/src/LIB/SURCOUCHE/src/io_write_field.f90 @@ -46,6 +46,19 @@ DO JI = 1,SIZE(TPOUTPUT%NFIELDLIST) END IF CALL IO_WRITE_FIELD(TPOUTPUT%TFILE,TFIELDLIST(IDX),HFIPRI,IRESP,TFIELDLIST(IDX)%TFIELD_L0D(IMI)%DATA) ! + !0D real + ! + CASE (TYPEREAL) + IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_X0D) ) THEN + PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_X0D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME) + STOP + END IF + IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_X0D(IMI)%DATA) ) THEN + PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_X0D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME) + STOP + END IF + CALL IO_WRITE_FIELD(TPOUTPUT%TFILE,TFIELDLIST(IDX),HFIPRI,IRESP,TFIELDLIST(IDX)%TFIELD_X0D(IMI)%DATA) + ! !0D other types ! CASE DEFAULT diff --git a/src/LIB/SURCOUCHE/src/mode_field.f90 b/src/LIB/SURCOUCHE/src/mode_field.f90 index 5a3dfb321f43f1f1fefa281720015208b7709ead..df87dded9351d1d11a6458326ac9a5c1a1382d13 100644 --- a/src/LIB/SURCOUCHE/src/mode_field.f90 +++ b/src/LIB/SURCOUCHE/src/mode_field.f90 @@ -18,6 +18,10 @@ TYPE TFIELDPTR_L0D LOGICAL, POINTER :: DATA => NULL() END TYPE TFIELDPTR_L0D ! +TYPE TFIELDPTR_X0D + REAL, POINTER :: DATA => NULL() +END TYPE TFIELDPTR_X0D +! TYPE TFIELDPTR_X1D REAL,DIMENSION(:), POINTER :: DATA => NULL() END TYPE TFIELDPTR_X1D @@ -44,6 +48,7 @@ TYPE TFIELDDATA ! TYPE(TFIELDPTR_L0D),DIMENSION(:),ALLOCATABLE :: TFIELD_L0D !Pointer to the scalar logical fields (one per nested mesh) ! + TYPE(TFIELDPTR_X0D),DIMENSION(:),ALLOCATABLE :: TFIELD_X0D !Pointer to the scalar real fields (one per nested mesh) TYPE(TFIELDPTR_X1D),DIMENSION(:),ALLOCATABLE :: TFIELD_X1D !Pointer to the real 1D fields (one per nested mesh) TYPE(TFIELDPTR_X2D),DIMENSION(:),ALLOCATABLE :: TFIELD_X2D !Pointer to the real 2D fields (one per nested mesh) TYPE(TFIELDPTR_X3D),DIMENSION(:),ALLOCATABLE :: TFIELD_X3D !Pointer to the real 3D fields (one per nested mesh) @@ -69,7 +74,6 @@ CHARACTER(LEN=40) :: YMSG ! CCOMMENT='X_Y_Z_U component of wind (m/s)',NGRID=2) ! CALL PRINT_MSG(NVERB_DEBUG,'GEN','INI_FIELD_LIST','called') -print *,'PW: nmodel=',nmodel IF (LFIELDLIST_ISINIT) THEN CALL PRINT_MSG(NVERB_ERROR,'GEN','INI_FIELD_LIST','already called') RETURN @@ -409,6 +413,34 @@ ALLOCATE(TFIELDLIST(IDX)%TFIELD_X1D(IMODEL)) IDX = IDX+1 ! IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'DXHAT' +!TODO: check stdname +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: DXHAT' +TFIELDLIST(IDX)%CUNITS = 'm' +TFIELDLIST(IDX)%CDIR = 'XX' +TFIELDLIST(IDX)%CCOMMENT = 'Horizontal stretching in x' +TFIELDLIST(IDX)%NGRID = 2 +TFIELDLIST(IDX)%NTYPE = TYPEREAL +TFIELDLIST(IDX)%NDIMS = 1 +ALLOCATE(TFIELDLIST(IDX)%TFIELD_X1D(IMODEL)) +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'DYHAT' +!TODO: check stdname +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: DYHAT' +TFIELDLIST(IDX)%CUNITS = 'm' +TFIELDLIST(IDX)%CDIR = 'YY' +TFIELDLIST(IDX)%CCOMMENT = 'Horizontal stretching in y' +TFIELDLIST(IDX)%NGRID = 3 +TFIELDLIST(IDX)%NTYPE = TYPEREAL +TFIELDLIST(IDX)%NDIMS = 1 +ALLOCATE(TFIELDLIST(IDX)%TFIELD_X1D(IMODEL)) +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() TFIELDLIST(IDX)%CMNHNAME = 'ALT' TFIELDLIST(IDX)%CSTDNAME = 'altitude' TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: ALT' @@ -421,10 +453,89 @@ TFIELDLIST(IDX)%NDIMS = 3 ALLOCATE(TFIELDLIST(IDX)%TFIELD_X3D(IMODEL)) IDX = IDX+1 ! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'DIRCOSXW' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: DIRCOSXW' +TFIELDLIST(IDX)%CUNITS = '' +TFIELDLIST(IDX)%CDIR = 'XY' +TFIELDLIST(IDX)%CCOMMENT = 'X director cosinus of the normal to the ground surface' +TFIELDLIST(IDX)%NGRID = 4 +TFIELDLIST(IDX)%NTYPE = TYPEREAL +TFIELDLIST(IDX)%NDIMS = 2 +ALLOCATE(TFIELDLIST(IDX)%TFIELD_X2D(IMODEL)) +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'DIRCOSYW' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: DIRCOSYW' +TFIELDLIST(IDX)%CUNITS = '' +TFIELDLIST(IDX)%CDIR = 'XY' +TFIELDLIST(IDX)%CCOMMENT = 'Y director cosinus of the normal to the ground surface' +TFIELDLIST(IDX)%NGRID = 4 +TFIELDLIST(IDX)%NTYPE = TYPEREAL +TFIELDLIST(IDX)%NDIMS = 2 +ALLOCATE(TFIELDLIST(IDX)%TFIELD_X2D(IMODEL)) +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'DIRCOSZW' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: DIRCOSZW' +TFIELDLIST(IDX)%CUNITS = '' +TFIELDLIST(IDX)%CDIR = 'XY' +TFIELDLIST(IDX)%CCOMMENT = 'Z director cosinus of the normal to the ground surface' +TFIELDLIST(IDX)%NGRID = 4 +TFIELDLIST(IDX)%NTYPE = TYPEREAL +TFIELDLIST(IDX)%NDIMS = 2 +ALLOCATE(TFIELDLIST(IDX)%TFIELD_X2D(IMODEL)) +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'COSSLOPE' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: COSSLOPE' +TFIELDLIST(IDX)%CUNITS = '' +TFIELDLIST(IDX)%CDIR = 'XY' +TFIELDLIST(IDX)%CCOMMENT = 'cosinus of the angle between i and the slope vector' +TFIELDLIST(IDX)%NGRID = 4 +TFIELDLIST(IDX)%NTYPE = TYPEREAL +TFIELDLIST(IDX)%NDIMS = 2 +ALLOCATE(TFIELDLIST(IDX)%TFIELD_X2D(IMODEL)) +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'SINSLOPE' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: SINSLOPE' +TFIELDLIST(IDX)%CUNITS = '' +TFIELDLIST(IDX)%CDIR = 'XY' +TFIELDLIST(IDX)%CCOMMENT = 'sinus of the angle between i and the slope vector' +TFIELDLIST(IDX)%NGRID = 4 +TFIELDLIST(IDX)%NTYPE = TYPEREAL +TFIELDLIST(IDX)%NDIMS = 2 +ALLOCATE(TFIELDLIST(IDX)%TFIELD_X2D(IMODEL)) +IDX = IDX+1 +! ! IF (.NOT.LCARTESIAN) THEN ! IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'MAP' +!TODO: check stdname +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: MAP' +TFIELDLIST(IDX)%CUNITS = '' +TFIELDLIST(IDX)%CDIR = 'XY' +TFIELDLIST(IDX)%CCOMMENT = 'Map factor' +TFIELDLIST(IDX)%NGRID = 1 +TFIELDLIST(IDX)%NTYPE = TYPEREAL +TFIELDLIST(IDX)%NDIMS = 2 +ALLOCATE(TFIELDLIST(IDX)%TFIELD_X2D(IMODEL)) +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() TFIELDLIST(IDX)%CMNHNAME = 'LAT' TFIELDLIST(IDX)%CSTDNAME = 'latitude' TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: LAT' @@ -493,6 +604,32 @@ ALLOCATE(TFIELDLIST(IDX)%TFIELD_L0D(IMODEL)) IDX = IDX+1 ! IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'LEN1' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: LEN1' +TFIELDLIST(IDX)%CUNITS = '' +TFIELDLIST(IDX)%CDIR = '--' +TFIELDLIST(IDX)%CCOMMENT = 'Decay scale for smooth topography' +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 = 'LEN2' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: LEN2' +TFIELDLIST(IDX)%CUNITS = '' +TFIELDLIST(IDX)%CDIR = '--' +TFIELDLIST(IDX)%CCOMMENT = 'Decay scale for small-scale topography deviation' +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 = 'UT' TFIELDLIST(IDX)%CSTDNAME = 'x_wind' TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: UT' @@ -736,8 +873,40 @@ END IF ! END SUBROUTINE FIND_FIELD_ID_FROM_MNHNAME ! +! +SUBROUTINE INI_FIELD_SCALARS +! +USE MODD_GRID_n +! +INTEGER :: IID,IRESP +! +CALL PRINT_MSG(NVERB_DEBUG,'GEN','INI_FIELD_SCALARS','called') +! +IF (.NOT.ASSOCIATED(LSLEVE)) THEN + CALL PRINT_MSG(NVERB_DEBUG,'GEN','INI_FIELD_SCALARS',' LSLEVE not yet associated') + ALLOCATE(LSLEVE) + CALL FIND_FIELD_ID_FROM_MNHNAME('SLEVE',IID,IRESP) + TFIELDLIST(IID)%TFIELD_L0D(1)%DATA=>LSLEVE +END IF +IF (.NOT.ASSOCIATED(XLEN1)) THEN + CALL PRINT_MSG(NVERB_DEBUG,'GEN','INI_FIELD_SCALARS',' XLEN1 not yet associated') + ALLOCATE(XLEN1) + CALL FIND_FIELD_ID_FROM_MNHNAME('LEN1',IID,IRESP) + TFIELDLIST(IID)%TFIELD_X0D(1)%DATA=>XLEN1 +END IF +IF (.NOT.ASSOCIATED(XLEN2)) THEN + CALL PRINT_MSG(NVERB_DEBUG,'GEN','INI_FIELD_SCALARS',' XLEN2 not yet associated') + ALLOCATE(XLEN2) + CALL FIND_FIELD_ID_FROM_MNHNAME('LEN2',IID,IRESP) + TFIELDLIST(IID)%TFIELD_X0D(1)%DATA=>XLEN2 +END IF +! +END SUBROUTINE INI_FIELD_SCALARS +! +! SUBROUTINE FIELDLIST_GOTO_MODEL(KFROM, KTO) ! +USE MODD_CONF, ONLY: LCARTESIAN USE MODD_REF ! USE MODD_FIELD_n @@ -770,107 +939,137 @@ END IF ! Initialize some pointers ! IF (KFROM == KTO) THEN - IF (.NOT.ALLOCATED(XRHODREFZ)) THEN + IF (.NOT.ALLOCATED(XRHODREFZ) .AND. CPROGRAM/='NESPGD') 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)) THEN + IF (.NOT.ALLOCATED(XTHVREFZ) .AND. CPROGRAM/='NESPGD') 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) TFIELDLIST(IID)%TFIELD_X1D(KFROM)%DATA=>XTHVREFZ ! IF (.NOT.ASSOCIATED(LSLEVE)) THEN - CALL PRINT_MSG(NVERB_FATAL,'GEN','FIELDLIST_GOTO_MODEL',' LSLEVE not yet associated') - STOP + CALL PRINT_MSG(NVERB_DEBUG,'GEN','FIELDLIST_GOTO_MODEL',' LSLEVE not yet associated') + ALLOCATE(LSLEVE) END IF CALL FIND_FIELD_ID_FROM_MNHNAME('SLEVE',IID,IRESP) TFIELDLIST(IID)%TFIELD_L0D(KFROM)%DATA=>LSLEVE ! + IF (.NOT.ASSOCIATED(XLEN1)) THEN + CALL PRINT_MSG(NVERB_DEBUG,'GEN','FIELDLIST_GOTO_MODEL',' XLEN1 not yet associated') + ALLOCATE(XLEN1) + END IF + CALL FIND_FIELD_ID_FROM_MNHNAME('LEN1',IID,IRESP) + TFIELDLIST(IID)%TFIELD_X0D(KFROM)%DATA=>XLEN1 + ! + IF (.NOT.ASSOCIATED(XLEN2)) THEN + CALL PRINT_MSG(NVERB_DEBUG,'GEN','FIELDLIST_GOTO_MODEL',' XLEN2 not yet associated') + ALLOCATE(XLEN2) + END IF + CALL FIND_FIELD_ID_FROM_MNHNAME('LEN2',IID,IRESP) + TFIELDLIST(IID)%TFIELD_X0D(KFROM)%DATA=>XLEN2 END IF ! ! Save current state for allocated arrays ! -CALL FIND_FIELD_ID_FROM_MNHNAME('UT',IID,IRESP) -TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XUT -CALL FIND_FIELD_ID_FROM_MNHNAME('VT',IID,IRESP) -TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XVT -CALL FIND_FIELD_ID_FROM_MNHNAME('WT',IID,IRESP) -TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XWT -CALL FIND_FIELD_ID_FROM_MNHNAME('THT',IID,IRESP) -TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XTHT +CALL FIND_FIELD_ID_FROM_MNHNAME('UT', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XUT +CALL FIND_FIELD_ID_FROM_MNHNAME('VT', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XVT +CALL FIND_FIELD_ID_FROM_MNHNAME('WT', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XWT +CALL FIND_FIELD_ID_FROM_MNHNAME('THT',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XTHT IF (CPROGRAM == 'MESONH') THEN - CALL FIND_FIELD_ID_FROM_MNHNAME('US_PRES',IID,IRESP) - TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XRUS_PRES - CALL FIND_FIELD_ID_FROM_MNHNAME('VS_PRES',IID,IRESP) - TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XRVS_PRES - CALL FIND_FIELD_ID_FROM_MNHNAME('WS_PRES',IID,IRESP) - TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XRWS_PRES - CALL FIND_FIELD_ID_FROM_MNHNAME('THS_CLD',IID,IRESP) - TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XRTHS_CLD + CALL FIND_FIELD_ID_FROM_MNHNAME('US_PRES',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XRUS_PRES + CALL FIND_FIELD_ID_FROM_MNHNAME('VS_PRES',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XRVS_PRES + CALL FIND_FIELD_ID_FROM_MNHNAME('WS_PRES',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XRWS_PRES + CALL FIND_FIELD_ID_FROM_MNHNAME('THS_CLD',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XRTHS_CLD END IF -CALL FIND_FIELD_ID_FROM_MNHNAME('LAT',IID,IRESP) -TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA=>XLAT -CALL FIND_FIELD_ID_FROM_MNHNAME('LON',IID,IRESP) -TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA=>XLON -CALL FIND_FIELD_ID_FROM_MNHNAME('ZS',IID,IRESP) -TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA=>XZS -CALL FIND_FIELD_ID_FROM_MNHNAME('ZSMT',IID,IRESP) -TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA=>XZSMT -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('ALT',IID,IRESP) -TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XZZ -CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRR',IID,IRESP) -TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA=>XACPRR +! +! MODD_GRID_n variables +! +CALL FIND_FIELD_ID_FROM_MNHNAME('ZS', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA=>XZS +CALL FIND_FIELD_ID_FROM_MNHNAME('ZSMT', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA=>XZSMT +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('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 +CALL FIND_FIELD_ID_FROM_MNHNAME('DIRCOSZW',IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA=>XDIRCOSZW +CALL FIND_FIELD_ID_FROM_MNHNAME('COSSLOPE',IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA=>XCOSSLOPE +CALL FIND_FIELD_ID_FROM_MNHNAME('SINSLOPE',IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA=>XSINSLOPE +IF (.NOT.LCARTESIAN) THEN + CALL FIND_FIELD_ID_FROM_MNHNAME('MAP', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA=>XMAP + CALL FIND_FIELD_ID_FROM_MNHNAME('LAT', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA=>XLAT + CALL FIND_FIELD_ID_FROM_MNHNAME('LON', IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA=>XLON +END IF +! +! +CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRR',IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA=>XACPRR ! ! Current model is set to model KTO ! IF( KFROM/=KTO) THEN -CALL FIND_FIELD_ID_FROM_MNHNAME('UT',IID,IRESP) -XUT=>TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA -CALL FIND_FIELD_ID_FROM_MNHNAME('VT',IID,IRESP) -XVT=>TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA -CALL FIND_FIELD_ID_FROM_MNHNAME('WT',IID,IRESP) -XWT=>TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA -CALL FIND_FIELD_ID_FROM_MNHNAME('THT',IID,IRESP) -XTHT=>TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA +CALL FIND_FIELD_ID_FROM_MNHNAME('UT', IID,IRESP); XUT=> TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA +CALL FIND_FIELD_ID_FROM_MNHNAME('VT', IID,IRESP); XVT=> TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA +CALL FIND_FIELD_ID_FROM_MNHNAME('WT', IID,IRESP); XWT=> TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA +CALL FIND_FIELD_ID_FROM_MNHNAME('THT',IID,IRESP); XTHT=>TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA IF (CPROGRAM == 'MESONH') THEN - CALL FIND_FIELD_ID_FROM_MNHNAME('US_PRES',IID,IRESP) - XRUS_PRES=>TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA - CALL FIND_FIELD_ID_FROM_MNHNAME('VS_PRES',IID,IRESP) - XRVS_PRES=>TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA - CALL FIND_FIELD_ID_FROM_MNHNAME('WS_PRES',IID,IRESP) - XRWS_PRES=>TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA - CALL FIND_FIELD_ID_FROM_MNHNAME('THS_CLD',IID,IRESP) - XRTHS_CLD=>TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA + CALL FIND_FIELD_ID_FROM_MNHNAME('US_PRES',IID,IRESP);XRUS_PRES=>TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA + CALL FIND_FIELD_ID_FROM_MNHNAME('VS_PRES',IID,IRESP);XRVS_PRES=>TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA + CALL FIND_FIELD_ID_FROM_MNHNAME('WS_PRES',IID,IRESP);XRWS_PRES=>TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA + CALL FIND_FIELD_ID_FROM_MNHNAME('THS_CLD',IID,IRESP);XRTHS_CLD=>TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA END IF -CALL FIND_FIELD_ID_FROM_MNHNAME('LAT',IID,IRESP) -XLAT=>TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA -CALL FIND_FIELD_ID_FROM_MNHNAME('LON',IID,IRESP) -XLON=>TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA -CALL FIND_FIELD_ID_FROM_MNHNAME('ZS',IID,IRESP) -XZS=>TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA -CALL FIND_FIELD_ID_FROM_MNHNAME('ZSMT',IID,IRESP) -XZSMT=>TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA -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 +! +! MODD_GRID_n variables +! +CALL FIND_FIELD_ID_FROM_MNHNAME('ZS', IID,IRESP); XZS=> TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA +CALL FIND_FIELD_ID_FROM_MNHNAME('ZSMT', IID,IRESP); XZSMT=> TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA +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('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 +! CALL FIND_FIELD_ID_FROM_MNHNAME('SLEVE',IID,IRESP) +IF (.NOT.ASSOCIATED(TFIELDLIST(IID)%TFIELD_L0D(KTO)%DATA)) THEN + CALL PRINT_MSG(NVERB_DEBUG,'GEN','FIELDLIST_GOTO_MODEL',' TFIELDLIST(IID)%TFIELD_L0D(KTO)%DATA not yet associated') + ALLOCATE(TFIELDLIST(IID)%TFIELD_L0D(KTO)%DATA) +END IF LSLEVE=>TFIELDLIST(IID)%TFIELD_L0D(KTO)%DATA -CALL FIND_FIELD_ID_FROM_MNHNAME('ALT',IID,IRESP) -XZZ=>TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA -CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRR',IID,IRESP) -XACPRR=>TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA +! +CALL FIND_FIELD_ID_FROM_MNHNAME('LEN1',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 not yet associated') + ALLOCATE(TFIELDLIST(IID)%TFIELD_X0D(KTO)%DATA) +END IF +XLEN1=>TFIELDLIST(IID)%TFIELD_X0D(KTO)%DATA +! +CALL FIND_FIELD_ID_FROM_MNHNAME('LEN2',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 not yet associated') + ALLOCATE(TFIELDLIST(IID)%TFIELD_X0D(KTO)%DATA) +END IF +XLEN2=>TFIELDLIST(IID)%TFIELD_X0D(KTO)%DATA +! +CALL FIND_FIELD_ID_FROM_MNHNAME('ALT', IID,IRESP); XZZ=> TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA +CALL FIND_FIELD_ID_FROM_MNHNAME('DIRCOSXW',IID,IRESP); XDIRCOSXW=>TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA +CALL FIND_FIELD_ID_FROM_MNHNAME('DIRCOSYW',IID,IRESP); XDIRCOSYW=>TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA +CALL FIND_FIELD_ID_FROM_MNHNAME('DIRCOSZW',IID,IRESP); XDIRCOSZW=>TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA +CALL FIND_FIELD_ID_FROM_MNHNAME('COSSLOPE',IID,IRESP); XCOSSLOPE=>TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA +CALL FIND_FIELD_ID_FROM_MNHNAME('SINSLOPE',IID,IRESP); XSINSLOPE=>TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA +IF (.NOT.LCARTESIAN) THEN + CALL FIND_FIELD_ID_FROM_MNHNAME('MAP', IID,IRESP); XMAP=> TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA + CALL FIND_FIELD_ID_FROM_MNHNAME('LAT', IID,IRESP); XLAT=> TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA + CALL FIND_FIELD_ID_FROM_MNHNAME('LON', IID,IRESP); XLON=> TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA +END IF +! +! +CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRR',IID,IRESP); XACPRR=>TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA END IF ! END SUBROUTINE FIELDLIST_GOTO_MODEL diff --git a/src/MNH/goto_model_wrapper.f90 b/src/MNH/goto_model_wrapper.f90 index 1d861c630265f76711e56ec16accf36377b5797e..bdbd8e0eea93c32c177d270fc8411915373b0d5c 100644 --- a/src/MNH/goto_model_wrapper.f90 +++ b/src/MNH/goto_model_wrapper.f90 @@ -147,7 +147,6 @@ CALL GR_FIELD_GOTO_MODEL(KFROM, KTO) !$20140403 add grid_conf_proj_goto_model !CALL GRID_CONF_PROJ_GOTO_MODEL(KFROM,KTO) !$ -CALL GRID_GOTO_MODEL(KFROM, KTO) CALL HURR_FIELD_GOTO_MODEL(KFROM, KTO) !$20140403 add io_surf_mnh_goto_model!! CALL IO_SURF_MNH_GOTO_MODEL(KFROM, KTO) diff --git a/src/MNH/init_mnh.f90 b/src/MNH/init_mnh.f90 index 9405e8e55261a5b566af703d03a8b55962939813..f98cf0960f2bd6ca01c180ac5ce43d4a536972c9 100644 --- a/src/MNH/init_mnh.f90 +++ b/src/MNH/init_mnh.f90 @@ -209,15 +209,24 @@ 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) ! IF (CPROGRAM=='SPAWN ' .OR. CPROGRAM=='REAL ') THEN CALL READ_ALL_NAMELISTS(YSURF_CUR,'MESONH','PRE',.FALSE.) - CALL INI_FIELD_LIST(2) ELSE CALL READ_ALL_NAMELISTS(YSURF_CUR,'MESONH','ALL',.TRUE.) - CALL INI_FIELD_LIST() ENDIF ENDDO ! diff --git a/src/MNH/modd_gridn.f90 b/src/MNH/modd_gridn.f90 index ad6b44aae42337e8145bcdb53bc5e0ba71eedc4c..68e03c97e19f9d42233d9c0780cb29fcba0ccdbc 100644 --- a/src/MNH/modd_gridn.f90 +++ b/src/MNH/modd_gridn.f90 @@ -48,102 +48,23 @@ USE MODD_PARAMETERS, ONLY: JPMODELMAX IMPLICIT NONE -TYPE GRID_t -! REAL, DIMENSION(:,:), POINTER :: XLON=>NULL(),XLAT=>NULL() ! Longitude and latitude -! -! REAL, DIMENSION(:), POINTER :: XXHAT=>NULL() ! Position x in the -! ! conformal or cartesian plane -! REAL, DIMENSION(:), POINTER :: XYHAT=>NULL() ! Position y in the -! ! conformal or cartesian plane - REAL, DIMENSION(:), POINTER :: XDXHAT=>NULL() ! horizontal stretching in x - REAL, DIMENSION(:), POINTER :: XDYHAT=>NULL() ! horizontal stretching in y - REAL, DIMENSION(:,:), POINTER :: XMAP=>NULL() ! Map factor -! -! REAL, DIMENSION(:,:), POINTER :: XZS=>NULL() ! orography -! REAL, DIMENSION(:,:,:), POINTER :: XZZ=>NULL() ! height z -! 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 -! - REAL, DIMENSION(:,:), POINTER :: XCOSSLOPE=>NULL() ! cosinus of the angle - ! between i and the slope vector - REAL, DIMENSION(:,:), POINTER :: XSINSLOPE=>NULL() ! sinus of the angle - ! between i and the slope vector -! quantities for SLEVE vertical coordinate -! LOGICAL :: LSLEVE ! Logical for SLEVE coordinate - REAL :: XLEN1 ! Decay scale for smooth topography - REAL :: XLEN2 ! Decay scale for small-scale topography deviation -! REAL, DIMENSION(:,:), POINTER :: XZSMT=>NULL() ! smooth orography for SLEVE coordinate -END TYPE GRID_t - -TYPE(GRID_t), DIMENSION(JPMODELMAX), TARGET, SAVE :: GRID_MODEL - -REAL, DIMENSION(:,:), POINTER :: XLON=>NULL(),XLAT=>NULL() -REAL, DIMENSION(:), POINTER :: XXHAT=>NULL() -REAL, DIMENSION(:), POINTER :: XYHAT=>NULL() -REAL, DIMENSION(:), POINTER :: XDXHAT=>NULL() -REAL, DIMENSION(:), POINTER :: XDYHAT=>NULL() -REAL, DIMENSION(:,:), POINTER :: XMAP=>NULL() -REAL, DIMENSION(:,:), POINTER :: XZS=>NULL() -REAL, DIMENSION(:,:,:), POINTER :: XZZ=>NULL() -REAL, DIMENSION(:), POINTER :: XZHAT=>NULL() -REAL, DIMENSION(:,:) , POINTER :: XDIRCOSXW=>NULL(),XDIRCOSYW=>NULL(),XDIRCOSZW=>NULL() -REAL, DIMENSION(:,:), POINTER :: XCOSSLOPE=>NULL() -REAL, DIMENSION(:,:), POINTER :: XSINSLOPE=>NULL() -LOGICAL, POINTER :: LSLEVE=>NULL() -REAL, POINTER :: XLEN1=>NULL() -REAL, POINTER :: XLEN2=>NULL() -REAL, DIMENSION(:,:), POINTER :: XZSMT=>NULL() - -CONTAINS - -SUBROUTINE GRID_GOTO_MODEL(KFROM, KTO) -! -INTEGER, INTENT(IN) :: KFROM, KTO -! -! Save current state for allocated arrays -!GRID_MODEL(KFROM)%XLON=>XLON !Done in FIELDLIST_GOTO_MODEL -!GRID_MODEL(KFROM)%XLAT=>XLAT !Done in FIELDLIST_GOTO_MODEL -!GRID_MODEL(KFROM)%XXHAT=>XXHAT !Done in FIELDLIST_GOTO_MODEL -!GRID_MODEL(KFROM)%XYHAT=>XYHAT !Done in FIELDLIST_GOTO_MODEL -GRID_MODEL(KFROM)%XDXHAT=>XDXHAT -GRID_MODEL(KFROM)%XDYHAT=>XDYHAT -GRID_MODEL(KFROM)%XMAP=>XMAP -!GRID_MODEL(KFROM)%XZS=>XZS !Done in FIELDLIST_GOTO_MODEL -!GRID_MODEL(KFROM)%XZZ=>XZZ !Done in FIELDLIST_GOTO_MODEL -!GRID_MODEL(KFROM)%XZHAT=>XZHAT !Done in FIELDLIST_GOTO_MODEL -GRID_MODEL(KFROM)%XDIRCOSXW=>XDIRCOSXW -GRID_MODEL(KFROM)%XDIRCOSYW=>XDIRCOSYW -GRID_MODEL(KFROM)%XDIRCOSZW=>XDIRCOSZW -GRID_MODEL(KFROM)%XCOSSLOPE=>XCOSSLOPE -GRID_MODEL(KFROM)%XSINSLOPE=>XSINSLOPE -!GRID_MODEL(KFROM)%XZSMT=>XZSMT !Done in FIELDLIST_GOTO_MODEL -! -! Current model is set to model KTO -!XLON=>GRID_MODEL(KTO)%XLON !Done in FIELDLIST_GOTO_MODEL -!XLAT=>GRID_MODEL(KTO)%XLAT !Done in FIELDLIST_GOTO_MODEL -!XXHAT=>GRID_MODEL(KTO)%XXHAT !Done in FIELDLIST_GOTO_MODEL -!XYHAT=>GRID_MODEL(KTO)%XYHAT !Done in FIELDLIST_GOTO_MODEL -XDXHAT=>GRID_MODEL(KTO)%XDXHAT -XDYHAT=>GRID_MODEL(KTO)%XDYHAT -XMAP=>GRID_MODEL(KTO)%XMAP -!XZS=>GRID_MODEL(KTO)%XZS !Done in FIELDLIST_GOTO_MODEL -!XZZ=>GRID_MODEL(KTO)%XZZ !Done in FIELDLIST_GOTO_MODEL -!XZHAT=>GRID_MODEL(KTO)%XZHAT !Done in FIELDLIST_GOTO_MODEL -XDIRCOSXW=>GRID_MODEL(KTO)%XDIRCOSXW -XDIRCOSYW=>GRID_MODEL(KTO)%XDIRCOSYW -XDIRCOSZW=>GRID_MODEL(KTO)%XDIRCOSZW -XCOSSLOPE=>GRID_MODEL(KTO)%XCOSSLOPE -XSINSLOPE=>GRID_MODEL(KTO)%XSINSLOPE -!LSLEVE=>GRID_MODEL(KTO)%LSLEVE !Done in FIELDLIST_GOTO_MODEL -XLEN1=>GRID_MODEL(KTO)%XLEN1 -XLEN2=>GRID_MODEL(KTO)%XLEN2 -!XZSMT=>GRID_MODEL(KTO)%XZSMT !Done in FIELDLIST_GOTO_MODEL - -IF (.NOT.ASSOCIATED(LSLEVE)) ALLOCATE(LSLEVE) - -END SUBROUTINE GRID_GOTO_MODEL +REAL, DIMENSION(:,:), POINTER :: XLON=>NULL(),XLAT=>NULL() ! Longitude and latitude +REAL, DIMENSION(:), POINTER :: XXHAT=>NULL() ! Position x in the conformal or cartesian plane +REAL, DIMENSION(:), POINTER :: XYHAT=>NULL() ! Position y in the conformal or cartesian plane +REAL, DIMENSION(:), POINTER :: XDXHAT=>NULL() ! horizontal stretching in x +REAL, DIMENSION(:), POINTER :: XDYHAT=>NULL() ! horizontal stretching in y +REAL, DIMENSION(:,:), POINTER :: XMAP=>NULL() ! Map factor +REAL, DIMENSION(:,:), POINTER :: XZS=>NULL() ! orography +REAL, DIMENSION(:,:,:),POINTER :: XZZ=>NULL() ! height z +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 +REAL, DIMENSION(:,:), POINTER :: XCOSSLOPE=>NULL() ! cosinus of the angle between i and the slope vector +REAL, DIMENSION(:,:), POINTER :: XSINSLOPE=>NULL() ! sinus of the angle between i and the slope vector +! Quantities for SLEVE vertical coordinate +LOGICAL, POINTER :: LSLEVE=>NULL() ! Logical for SLEVE coordinate +REAL, POINTER :: XLEN1=>NULL() ! Decay scale for smooth topography +REAL, POINTER :: XLEN2=>NULL() ! Decay scale for small-scale topography deviation +REAL, DIMENSION(:,:), POINTER :: XZSMT=>NULL() ! smooth orography for SLEVE coordinate END MODULE MODD_GRID_n diff --git a/src/MNH/modd_spawn.f90 b/src/MNH/modd_spawn.f90 index 0d8e13504f642b178820c6d5f76d6f0798759777..8af3b8458657413151bfe60b53e625799d2c6ff9 100644 --- a/src/MNH/modd_spawn.f90 +++ b/src/MNH/modd_spawn.f90 @@ -71,6 +71,8 @@ REAL,DIMENSION(:,:), SAVE,POINTER :: XZS1 REAL,DIMENSION(:,:), SAVE,POINTER :: XZSMT1 REAL,DIMENSION(:,:,:),SAVE,POINTER :: XZZ1 LOGICAL, SAVE,POINTER :: LSLEVE1 +REAL, SAVE,POINTER :: XLEN11 +REAL, SAVE,POINTER :: XLEN21 REAL,DIMENSION(:,:), SAVE,POINTER :: XACPRR1 REAL,DIMENSION(:,:,:),SAVE,POINTER :: XTHT1 REAL,DIMENSION(:,:,:),SAVE,POINTER :: XUT1 diff --git a/src/MNH/open_nestpgd_files.f90 b/src/MNH/open_nestpgd_files.f90 index e9b5de36a9cae42a682435663c8c158394d0071e..08e9a6e1c39bd7b170559b879a7e3b1ea65c26b1 100644 --- a/src/MNH/open_nestpgd_files.f90 +++ b/src/MNH/open_nestpgd_files.f90 @@ -81,6 +81,7 @@ USE MODD_PARAMETERS ! USE MODI_OPEN_LUOUTn ! +USE MODE_FIELD, ONLY : INI_FIELD_LIST USE MODE_IO_ll USE MODE_FM USE MODE_POS @@ -317,6 +318,8 @@ END DO !* 7. OPENING OF OUPUT LISTING FILES FOR ALL MODELS ! ---------------------------------------------- ! +CALL INI_FIELD_LIST() +! DO JPGD=1,NMODEL CALL GOTO_MODEL(JPGD) WRITE(YLUOUT,'("OUTPUT_LISTING",I0)') JPGD diff --git a/src/MNH/prep_ideal_case.f90 b/src/MNH/prep_ideal_case.f90 index c7061ece35bc46544251eff9183efec681e19d65..17bdf5bba002902959a890bcfa76bbf774d9765f 100644 --- a/src/MNH/prep_ideal_case.f90 +++ b/src/MNH/prep_ideal_case.f90 @@ -865,6 +865,10 @@ CALL INI_NSV(1) LHORELAX_SV(:)=.FALSE. IF(.NOT. L1D) LHORELAX_SV(1:NSV)=.TRUE. ! +CALL INI_FIELD_LIST() +! +CALL INI_FIELD_SCALARS() +! !------------------------------------------------------------------------------- ! !* 4. ALLOCATE MEMORY FOR ARRAYS : @@ -1749,8 +1753,6 @@ TZFILE%CMODE = 'WRITE' TZFILE%NLFITYPE = NTYPE TZFILE%NLFIVERB = NVERB ! -CALL INI_FIELD_LIST() -! CALL IO_FILE_OPEN_ll(TZFILE,CLUOUT,NRESP) ! CALL WRITE_DESFM_n(1,CDESFM,CLUOUT) diff --git a/src/MNH/prep_real_case.f90 b/src/MNH/prep_real_case.f90 index 74cfd64df8890b3bbb8ffd856636203f727fc9e3..ba202ec021959ab332f5544c087aa48fa7b54448 100644 --- a/src/MNH/prep_real_case.f90 +++ b/src/MNH/prep_real_case.f90 @@ -395,6 +395,7 @@ USE MODE_IO_ll USE MODE_ll USE MODE_MODELN_HANDLER USE MODE_FMREAD +USE MODE_FIELD USE MODN_CONFZ ! USE MODI_DEFAULT_DESFM_n ! interface modules @@ -633,6 +634,10 @@ CALL INIT_NMLVAR CALL POSNAM(IPRE_REAL1,'NAM_REAL_CONF',GFOUND,ILUOUT0) IF (GFOUND) READ(IPRE_REAL1,NAM_REAL_CONF) ! +CALL INI_FIELD_LIST() +! +CALL INI_FIELD_SCALARS() +! !* 4.2 reading of values of some configuration variables in namelist ! ! diff --git a/src/MNH/spawn_field2.f90 b/src/MNH/spawn_field2.f90 index 3a54d23dbf53f44650e8000b1756e557249c6961..c5306792d969afa7215840b2b1c5f7ec3397016c 100644 --- a/src/MNH/spawn_field2.f90 +++ b/src/MNH/spawn_field2.f90 @@ -155,7 +155,6 @@ USE MODD_PARAMETERS ! Declarative modules USE MODD_CONF USE MODD_CST ! -USE MODD_GRID_n, ONLY: GRID_MODEL USE MODD_CONF_n, ONLY: CONF_MODEL USE MODD_LBC_n, ONLY: LBC_MODEL USE MODD_LUNIT_n, ONLY: LUNIT_MODEL diff --git a/src/MNH/spawn_grid2.f90 b/src/MNH/spawn_grid2.f90 index 34920a8bc4cfe18da32d857808ba6c02c63d92b4..450d7dbf67d1de638aad61da2e165f99aa1569c6 100644 --- a/src/MNH/spawn_grid2.f90 +++ b/src/MNH/spawn_grid2.f90 @@ -160,7 +160,6 @@ USE MODD_CONF USE MODD_SPAWN ! USE MODD_GRID, ONLY: XLONORI,XLATORI -USE MODD_GRID_n, ONLY: GRID_MODEL USE MODD_TIME_n, ONLY: TIME_MODEL USE MODD_LBC_n, ONLY: LBC_MODEL ! @@ -312,8 +311,8 @@ END IF ! PZHAT(:) = XZHAT1(:) OSLEVE = LSLEVE1 -PLEN1 = GRID_MODEL(1)%XLEN1 -PLEN2 = GRID_MODEL(1)%XLEN2 +PLEN1 = XLEN11 +PLEN2 = XLEN21 ! IF (KDXRATIO == 1 .AND. KDYRATIO == 1 ) THEN ! diff --git a/src/MNH/spawn_pressure2.f90 b/src/MNH/spawn_pressure2.f90 index 431f13a8258f89662097a21dd55b0b7e8dd1c00c..6d657354b69444eec55cbdb017757ba8bf3ab492 100644 --- a/src/MNH/spawn_pressure2.f90 +++ b/src/MNH/spawn_pressure2.f90 @@ -115,7 +115,6 @@ USE MODD_PARAMETERS ! Declarative modules USE MODD_CONF USE MODD_CST ! -USE MODD_GRID_n, ONLY: GRID_MODEL USE MODD_CONF_n, ONLY: CONF_MODEL USE MODD_LBC_n, ONLY: LBC_MODEL USE MODD_LUNIT_n,ONLY: LUNIT_MODEL diff --git a/src/MNH/spawning.f90 b/src/MNH/spawning.f90 index ce4070b7b02ce2e821d42b3d9c3915a16715858a..4a0dfa97375090633154d84c9521970ce781dc53 100644 --- a/src/MNH/spawning.f90 +++ b/src/MNH/spawning.f90 @@ -109,6 +109,7 @@ USE MODD_PARAM_n USE MODD_REF_n USE MODD_TIME_n USE MODD_CH_MNHC_n +USE MODD_GRID_n ! USE MODE_IO_ll USE MODE_ll @@ -271,6 +272,8 @@ XZS1 => XZS XZSMT1 => XZSMT XZZ1 => XZZ LSLEVE1 => LSLEVE +XLEN11 => XLEN1 +XLEN21 => XLEN2 XACPRR1 => XACPRR XTHT1 => XTHT XUT1 => XUT diff --git a/src/MNH/write_lfin.f90 b/src/MNH/write_lfin.f90 index a60fe02f31edf92c84b0214421e3683cb9365493..c6236e57e18dfdbd11df5a5199c21acb83cb1526 100644 --- a/src/MNH/write_lfin.f90 +++ b/src/MNH/write_lfin.f90 @@ -434,19 +434,8 @@ CALL IO_WRITE_FIELD(TPFILE,'ZSMT', CLUOUT,IRESP,XZSMT) CALL IO_WRITE_FIELD(TPFILE,'SLEVE',CLUOUT,IRESP,LSLEVE) ! IF (LSLEVE) THEN - YRECFM='LEN1' - YDIR='--' - YCOMMENT='' - IGRID=4 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XLEN1,IGRID,ILENCH,YCOMMENT,IRESP) - ! - YRECFM='LEN2' - YDIR='--' - YCOMMENT='' - IGRID=4 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XLEN2,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_WRITE_FIELD(TPFILE,'LEN1',CLUOUT,IRESP,XLEN1) + CALL IO_WRITE_FIELD(TPFILE,'LEN2',CLUOUT,IRESP,XLEN2) END IF ! YDIR='--'