From 8aa8478cbbe72586b9c8ab638529b43db8b35886 Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Mon, 23 Jan 2017 10:29:00 +0100 Subject: [PATCH] Philippe 23/01/2017: added several variables to TFIELDLIST --- src/LIB/SURCOUCHE/src/mode_field.f90 | 506 ++++++++++++++++++++++++++- src/MNH/modd_fieldn.f90 | 20 +- src/MNH/modd_gridn.f90 | 57 +-- src/MNH/modd_ref.f90 | 4 +- src/MNH/modd_spawn.f90 | 7 + src/MNH/spawn_grid2.f90 | 51 +-- src/MNH/spawn_pressure2.f90 | 4 +- src/MNH/spawning.f90 | 8 + src/MNH/write_lfin.f90 | 226 +++--------- 9 files changed, 630 insertions(+), 253 deletions(-) diff --git a/src/LIB/SURCOUCHE/src/mode_field.f90 b/src/LIB/SURCOUCHE/src/mode_field.f90 index b73202083..b63043c96 100644 --- a/src/LIB/SURCOUCHE/src/mode_field.f90 +++ b/src/LIB/SURCOUCHE/src/mode_field.f90 @@ -4,6 +4,7 @@ !MNH_LIC for details. version 1. MODULE MODE_FIELD ! +USE MODD_CONF, ONLY : CPROGRAM USE MODD_PARAMETERS ! IMPLICIT NONE @@ -11,6 +12,10 @@ IMPLICIT NONE INTEGER,PRIVATE,PARAMETER :: MAXFIELDS = 100 INTEGER,PARAMETER :: TYPEUNDEF = -1, TYPEINT = 1, TYPELOG = 2, TYPEREAL = 3, TYPECHAR = 4 ! +TYPE TFIELDPTR_L0D + LOGICAL, POINTER :: DATA => NULL() +END TYPE TFIELDPTR_L0D +! TYPE TFIELDPTR_X1D REAL,DIMENSION(:), POINTER :: DATA => NULL() END TYPE TFIELDPTR_X1D @@ -34,6 +39,9 @@ TYPE TFIELDDATA INTEGER :: NGRID = -1 !Localization on the model grid INTEGER :: NTYPE = TYPEUNDEF !Datatype INTEGER :: NDIMS = 0 !Number of dimensions + ! + TYPE(TFIELDPTR_L0D),DIMENSION(:),ALLOCATABLE :: TFIELD_L0D !Pointer to the scalar logical 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) @@ -46,7 +54,7 @@ CONTAINS ! SUBROUTINE INI_FIELD_LIST(KMODEL) ! -USE MODD_CONF, ONLY: NMODEL +USE MODD_CONF, ONLY: LCARTESIAN,NMODEL ! INTEGER,INTENT(IN),OPTIONAL :: KMODEL ! @@ -73,6 +81,7 @@ END IF ! IDX = 1 ! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() TFIELDLIST(IDX)%CMNHNAME = 'MASDEV' TFIELDLIST(IDX)%CSTDNAME = '' TFIELDLIST(IDX)%CLONGNAME = 'MesoNH version (without bugfix)' @@ -84,6 +93,7 @@ TFIELDLIST(IDX)%NTYPE = TYPEINT TFIELDLIST(IDX)%NDIMS = 0 IDX = IDX+1 ! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() TFIELDLIST(IDX)%CMNHNAME = 'BUGFIX' TFIELDLIST(IDX)%CSTDNAME = '' TFIELDLIST(IDX)%CLONGNAME = 'MesoNH bugfix number' @@ -95,6 +105,7 @@ TFIELDLIST(IDX)%NTYPE = TYPEINT TFIELDLIST(IDX)%NDIMS = 0 IDX = IDX+1 ! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() TFIELDLIST(IDX)%CMNHNAME = 'BIBUSER' TFIELDLIST(IDX)%CSTDNAME = '' TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: user binary library' @@ -106,6 +117,7 @@ TFIELDLIST(IDX)%NTYPE = TYPECHAR TFIELDLIST(IDX)%NDIMS = 1 IDX = IDX+1 ! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() TFIELDLIST(IDX)%CMNHNAME = 'PROGRAM' TFIELDLIST(IDX)%CSTDNAME = '' TFIELDLIST(IDX)%CLONGNAME = 'MesoNH family: used program' @@ -117,6 +129,7 @@ TFIELDLIST(IDX)%NTYPE = TYPECHAR TFIELDLIST(IDX)%NDIMS = 1 IDX = IDX+1 ! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() TFIELDLIST(IDX)%CMNHNAME = 'FILETYPE' TFIELDLIST(IDX)%CSTDNAME = '' TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: type of this file' @@ -128,6 +141,7 @@ TFIELDLIST(IDX)%NTYPE = TYPECHAR TFIELDLIST(IDX)%NDIMS = 1 IDX = IDX+1 ! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() TFIELDLIST(IDX)%CMNHNAME = 'MY_NAME' TFIELDLIST(IDX)%CSTDNAME = '' TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: filename (no extension)' @@ -139,6 +153,7 @@ TFIELDLIST(IDX)%NTYPE = TYPECHAR TFIELDLIST(IDX)%NDIMS = 1 IDX = IDX+1 ! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() TFIELDLIST(IDX)%CMNHNAME = 'DAD_NAME' TFIELDLIST(IDX)%CSTDNAME = '' TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: filename of the dad file' @@ -150,6 +165,7 @@ TFIELDLIST(IDX)%NTYPE = TYPECHAR TFIELDLIST(IDX)%NDIMS = 1 IDX = IDX+1 ! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() TFIELDLIST(IDX)%CMNHNAME = 'DXRATIO' TFIELDLIST(IDX)%CSTDNAME = '' TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: DXRATIO' @@ -161,6 +177,7 @@ TFIELDLIST(IDX)%NTYPE = TYPEINT TFIELDLIST(IDX)%NDIMS = 0 IDX = IDX+1 ! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() TFIELDLIST(IDX)%CMNHNAME = 'DYRATIO' TFIELDLIST(IDX)%CSTDNAME = '' TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: DYRATIO' @@ -172,6 +189,7 @@ TFIELDLIST(IDX)%NTYPE = TYPEINT TFIELDLIST(IDX)%NDIMS = 0 IDX = IDX+1 ! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() TFIELDLIST(IDX)%CMNHNAME = 'XOR' TFIELDLIST(IDX)%CSTDNAME = '' TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: XOR' @@ -183,6 +201,7 @@ TFIELDLIST(IDX)%NTYPE = TYPEINT TFIELDLIST(IDX)%NDIMS = 0 IDX = IDX+1 ! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() TFIELDLIST(IDX)%CMNHNAME = 'YOR' TFIELDLIST(IDX)%CSTDNAME = '' TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: YOR' @@ -194,9 +213,286 @@ TFIELDLIST(IDX)%NTYPE = TYPEINT TFIELDLIST(IDX)%NDIMS = 0 IDX = IDX+1 ! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'STORAGE_TYPE' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: STORAGE_TYPE' +TFIELDLIST(IDX)%CUNITS = '' +TFIELDLIST(IDX)%CDIR = '--' +TFIELDLIST(IDX)%CCOMMENT = 'Storage type for the information written in the FM files' +TFIELDLIST(IDX)%NGRID = 0 +TFIELDLIST(IDX)%NTYPE = TYPECHAR +TFIELDLIST(IDX)%NDIMS = 1 +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'IMAX' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: IMAX' +TFIELDLIST(IDX)%CUNITS = '' +TFIELDLIST(IDX)%CDIR = '--' +TFIELDLIST(IDX)%CCOMMENT = 'x-dimension of the physical domain' +TFIELDLIST(IDX)%NGRID = 0 +TFIELDLIST(IDX)%NTYPE = TYPEINT +TFIELDLIST(IDX)%NDIMS = 0 +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'JMAX' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: JMAX' +TFIELDLIST(IDX)%CUNITS = '' +TFIELDLIST(IDX)%CDIR = '--' +TFIELDLIST(IDX)%CCOMMENT = 'y-dimension of the physical domain' +TFIELDLIST(IDX)%NGRID = 0 +TFIELDLIST(IDX)%NTYPE = TYPEINT +TFIELDLIST(IDX)%NDIMS = 0 +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'KMAX' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: KMAX' +TFIELDLIST(IDX)%CUNITS = '' +TFIELDLIST(IDX)%CDIR = '--' +TFIELDLIST(IDX)%CCOMMENT = 'z-dimension of the physical domain' +TFIELDLIST(IDX)%NGRID = 0 +TFIELDLIST(IDX)%NTYPE = TYPEINT +TFIELDLIST(IDX)%NDIMS = 0 +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'JPHEXT' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: JPHEXT' +TFIELDLIST(IDX)%CUNITS = '' +TFIELDLIST(IDX)%CDIR = '--' +TFIELDLIST(IDX)%CCOMMENT = 'Number of horizontal external points on each side' +TFIELDLIST(IDX)%NGRID = 0 +TFIELDLIST(IDX)%NTYPE = TYPEINT +TFIELDLIST(IDX)%NDIMS = 0 +IDX = IDX+1 +! +! +IF (.NOT.LCARTESIAN) THEN +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'RPK' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: RPK' +TFIELDLIST(IDX)%CUNITS = '' +TFIELDLIST(IDX)%CDIR = '--' +TFIELDLIST(IDX)%CCOMMENT = 'Projection parameter for conformal projection' +TFIELDLIST(IDX)%NGRID = 0 +TFIELDLIST(IDX)%NTYPE = TYPEREAL +TFIELDLIST(IDX)%NDIMS = 0 +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'LONORI' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: LONORI' +TFIELDLIST(IDX)%CUNITS = 'degree' +TFIELDLIST(IDX)%CDIR = '--' +TFIELDLIST(IDX)%CCOMMENT = 'Longitude of the point of coordinates x=0, y=0 for conformal projection' +TFIELDLIST(IDX)%NGRID = 0 +TFIELDLIST(IDX)%NTYPE = TYPEREAL +TFIELDLIST(IDX)%NDIMS = 0 +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'LATORI' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: LATORI' +TFIELDLIST(IDX)%CUNITS = 'degree' +TFIELDLIST(IDX)%CDIR = '--' +TFIELDLIST(IDX)%CCOMMENT = 'Latitude of the point of coordinates x=0, y=0 for conformal projection' +TFIELDLIST(IDX)%NGRID = 0 +TFIELDLIST(IDX)%NTYPE = TYPEREAL +TFIELDLIST(IDX)%NDIMS = 0 +IDX = IDX+1 +! +END IF +! +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'THINSHELL' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: THINSHELL' +TFIELDLIST(IDX)%CUNITS = '' +TFIELDLIST(IDX)%CDIR = '--' +TFIELDLIST(IDX)%CCOMMENT = 'Logical for thinshell approximation' +TFIELDLIST(IDX)%NGRID = 0 +TFIELDLIST(IDX)%NTYPE = TYPELOG +TFIELDLIST(IDX)%NDIMS = 0 +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'LAT0' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: LAT0' +TFIELDLIST(IDX)%CUNITS = 'degree' +TFIELDLIST(IDX)%CDIR = '--' +TFIELDLIST(IDX)%CCOMMENT = 'Reference latitude for conformal projection' +TFIELDLIST(IDX)%NGRID = 0 +TFIELDLIST(IDX)%NTYPE = TYPEREAL +TFIELDLIST(IDX)%NDIMS = 0 +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'LON0' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: LON0' +TFIELDLIST(IDX)%CUNITS = 'degree' +TFIELDLIST(IDX)%CDIR = '--' +TFIELDLIST(IDX)%CCOMMENT = 'Reference longitude for conformal projection' +TFIELDLIST(IDX)%NGRID = 0 +TFIELDLIST(IDX)%NTYPE = TYPEREAL +TFIELDLIST(IDX)%NDIMS = 0 +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'BETA' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: BETA' +TFIELDLIST(IDX)%CUNITS = 'degree' +TFIELDLIST(IDX)%CDIR = '--' +TFIELDLIST(IDX)%CCOMMENT = 'Rotation angle for conformal projection' +TFIELDLIST(IDX)%NGRID = 0 +TFIELDLIST(IDX)%NTYPE = TYPEREAL +TFIELDLIST(IDX)%NDIMS = 0 +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'XHAT' +!TODO: check stdname +TFIELDLIST(IDX)%CSTDNAME = 'projection_x_coordinate' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: XHAT' +TFIELDLIST(IDX)%CUNITS = 'm' +TFIELDLIST(IDX)%CDIR = 'XX' +TFIELDLIST(IDX)%CCOMMENT = 'Position x in the conformal or cartesian plane' +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 = 'YHAT' +!TODO: check stdname +TFIELDLIST(IDX)%CSTDNAME = 'projection_y_coordinate' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: YHAT' +TFIELDLIST(IDX)%CUNITS = 'm' +TFIELDLIST(IDX)%CDIR = 'YY' +TFIELDLIST(IDX)%CCOMMENT = 'Position y in the conformal or cartesian plane' +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 = 'ZHAT' +!TODO: check stdname +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: ZHAT' +TFIELDLIST(IDX)%CUNITS = 'm' +TFIELDLIST(IDX)%CDIR = '--' +TFIELDLIST(IDX)%CCOMMENT = 'Height level without orography' +TFIELDLIST(IDX)%NGRID = 4 +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' +TFIELDLIST(IDX)%CUNITS = 'm' +TFIELDLIST(IDX)%CDIR = 'XY' +TFIELDLIST(IDX)%CCOMMENT = 'X_Y_Z_ALTitude' +TFIELDLIST(IDX)%NGRID = 4 +TFIELDLIST(IDX)%NTYPE = TYPEREAL +TFIELDLIST(IDX)%NDIMS = 3 +ALLOCATE(TFIELDLIST(IDX)%TFIELD_X3D(IMODEL)) +IDX = IDX+1 +! +! +IF (.NOT.LCARTESIAN) THEN +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'LAT' +TFIELDLIST(IDX)%CSTDNAME = 'latitude' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: LAT' +TFIELDLIST(IDX)%CUNITS = 'degree_north' +TFIELDLIST(IDX)%CDIR = 'XY' +TFIELDLIST(IDX)%CCOMMENT = 'X_Y_latitude' +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 = 'LON' +TFIELDLIST(IDX)%CSTDNAME = 'longitude' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: LON' +TFIELDLIST(IDX)%CUNITS = 'degree_east' +TFIELDLIST(IDX)%CDIR = 'XY' +TFIELDLIST(IDX)%CCOMMENT = 'X_Y_longitude' +TFIELDLIST(IDX)%NGRID = 1 +TFIELDLIST(IDX)%NTYPE = TYPEREAL +TFIELDLIST(IDX)%NDIMS = 2 +ALLOCATE(TFIELDLIST(IDX)%TFIELD_X2D(IMODEL)) +IDX = IDX+1 +! +END IF +! +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'ZS' +TFIELDLIST(IDX)%CSTDNAME = 'ground_level_altitude' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: ZS' +TFIELDLIST(IDX)%CUNITS = 'm' +TFIELDLIST(IDX)%CDIR = 'XY' +TFIELDLIST(IDX)%CCOMMENT = 'orography' +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 = 'ZSMT' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: ZSMT' +TFIELDLIST(IDX)%CUNITS = 'm' +TFIELDLIST(IDX)%CDIR = 'XY' +TFIELDLIST(IDX)%CCOMMENT = 'smooth orography' +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 = 'SLEVE' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: SLEVE' +TFIELDLIST(IDX)%CUNITS = '' +TFIELDLIST(IDX)%CDIR = '--' +TFIELDLIST(IDX)%CCOMMENT = 'Logical for SLEVE coordinate' +TFIELDLIST(IDX)%NGRID = 4 +TFIELDLIST(IDX)%NTYPE = TYPELOG +TFIELDLIST(IDX)%NDIMS = 0 +ALLOCATE(TFIELDLIST(IDX)%TFIELD_L0D(IMODEL)) +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() TFIELDLIST(IDX)%CMNHNAME = 'UT' TFIELDLIST(IDX)%CSTDNAME = 'x_wind' -TFIELDLIST(IDX)%CLONGNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: UT' TFIELDLIST(IDX)%CUNITS = 'm s-1' TFIELDLIST(IDX)%CDIR = 'XY' TFIELDLIST(IDX)%CCOMMENT = 'X_Y_Z_U component of wind (m/s)' @@ -206,9 +502,10 @@ TFIELDLIST(IDX)%NDIMS = 3 ALLOCATE(TFIELDLIST(IDX)%TFIELD_X3D(IMODEL)) IDX = IDX+1 ! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() TFIELDLIST(IDX)%CMNHNAME = 'VT' TFIELDLIST(IDX)%CSTDNAME = 'y_wind' -TFIELDLIST(IDX)%CLONGNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: VT' TFIELDLIST(IDX)%CUNITS = 'm s-1' TFIELDLIST(IDX)%CDIR = 'XY' TFIELDLIST(IDX)%CCOMMENT = 'X_Y_Z_V component of wind (m/s)' @@ -218,9 +515,10 @@ TFIELDLIST(IDX)%NDIMS = 3 ALLOCATE(TFIELDLIST(IDX)%TFIELD_X3D(IMODEL)) IDX = IDX+1 ! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() TFIELDLIST(IDX)%CMNHNAME = 'WT' TFIELDLIST(IDX)%CSTDNAME = 'upward_air_velocity' -TFIELDLIST(IDX)%CLONGNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: WT' TFIELDLIST(IDX)%CUNITS = 'm s-1' TFIELDLIST(IDX)%CDIR = 'XY' TFIELDLIST(IDX)%CCOMMENT = 'X_Y_Z_vertical wind (m/s)' @@ -230,9 +528,10 @@ TFIELDLIST(IDX)%NDIMS = 3 ALLOCATE(TFIELDLIST(IDX)%TFIELD_X3D(IMODEL)) IDX = IDX+1 ! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() TFIELDLIST(IDX)%CMNHNAME = 'THT' TFIELDLIST(IDX)%CSTDNAME = 'air_potential_temperature' -TFIELDLIST(IDX)%CLONGNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: THT' TFIELDLIST(IDX)%CUNITS = 'K' TFIELDLIST(IDX)%CDIR = 'XY' TFIELDLIST(IDX)%CCOMMENT = 'X_Y_Z_potential temperature (K)' @@ -242,9 +541,110 @@ TFIELDLIST(IDX)%NDIMS = 3 ALLOCATE(TFIELDLIST(IDX)%TFIELD_X3D(IMODEL)) IDX = IDX+1 ! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'RHOREFZ' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: RHOREFZ' +TFIELDLIST(IDX)%CUNITS = 'kg m-3' +TFIELDLIST(IDX)%CDIR = '--' +TFIELDLIST(IDX)%CCOMMENT = 'rhodz for reference state without orography' +TFIELDLIST(IDX)%NGRID = 4 +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 = 'THVREFZ' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: THVREFZ' +TFIELDLIST(IDX)%CUNITS = 'K' +TFIELDLIST(IDX)%CDIR = '--' +TFIELDLIST(IDX)%CCOMMENT = 'thetavz for reference state without orography' +TFIELDLIST(IDX)%NGRID = 4 +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 = 'EXNTOP' +TFIELDLIST(IDX)%CSTDNAME = 'dimensionless_exner_function' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: EXNTOP' +TFIELDLIST(IDX)%CUNITS = '' +TFIELDLIST(IDX)%CDIR = '--' +TFIELDLIST(IDX)%CCOMMENT = 'Exner function at model top' +TFIELDLIST(IDX)%NGRID = 4 +TFIELDLIST(IDX)%NTYPE = TYPEREAL +TFIELDLIST(IDX)%NDIMS = 0 +IDX = IDX+1 +! +! +IF (CPROGRAM == 'MESONH') THEN +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'US_PRES' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: US_PRES' +!TODO: units? +TFIELDLIST(IDX)%CUNITS = '' +TFIELDLIST(IDX)%CDIR = 'XY' +TFIELDLIST(IDX)%CCOMMENT = 'X_Y_Z_US_PRES' +TFIELDLIST(IDX)%NGRID = 2 +TFIELDLIST(IDX)%NTYPE = TYPEREAL +TFIELDLIST(IDX)%NDIMS = 3 +ALLOCATE(TFIELDLIST(IDX)%TFIELD_X3D(IMODEL)) +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'VS_PRES' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: VS_PRES' +!TODO: units? +TFIELDLIST(IDX)%CUNITS = '' +TFIELDLIST(IDX)%CDIR = 'XY' +TFIELDLIST(IDX)%CCOMMENT = 'X_Y_Z_VS_PRES' +TFIELDLIST(IDX)%NGRID = 3 +TFIELDLIST(IDX)%NTYPE = TYPEREAL +TFIELDLIST(IDX)%NDIMS = 3 +ALLOCATE(TFIELDLIST(IDX)%TFIELD_X3D(IMODEL)) +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'WS_PRES' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: WS_PRES' +!TODO: units? +TFIELDLIST(IDX)%CUNITS = '' +TFIELDLIST(IDX)%CDIR = 'XY' +TFIELDLIST(IDX)%CCOMMENT = 'X_Y_Z_US_PRES' +TFIELDLIST(IDX)%NGRID = 4 +TFIELDLIST(IDX)%NTYPE = TYPEREAL +TFIELDLIST(IDX)%NDIMS = 3 +ALLOCATE(TFIELDLIST(IDX)%TFIELD_X3D(IMODEL)) +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'THS_CLD' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: THS_CLD' +!TODO: units? +TFIELDLIST(IDX)%CUNITS = '' +TFIELDLIST(IDX)%CDIR = 'XY' +TFIELDLIST(IDX)%CCOMMENT = 'X_Y_Z_THS_CLD' +TFIELDLIST(IDX)%NGRID = 1 +TFIELDLIST(IDX)%NTYPE = TYPEREAL +TFIELDLIST(IDX)%NDIMS = 3 +ALLOCATE(TFIELDLIST(IDX)%TFIELD_X3D(IMODEL)) +IDX = IDX+1 +! +END IF +! +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() TFIELDLIST(IDX)%CMNHNAME = 'ACPRR' TFIELDLIST(IDX)%CSTDNAME = 'rainfall_amount' -TFIELDLIST(IDX)%CLONGNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: ACPRR' !PW: TODO: CF-convention prefers 'kg m-2' TFIELDLIST(IDX)%CUNITS = 'm' TFIELDLIST(IDX)%CDIR = '' @@ -259,9 +659,10 @@ PRINT *,'INFO: INI_FIELD_LIST: number of used fields=',IDX-1,' out of ',MAXFIELD ! #if 0 ! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() TFIELDLIST(IDX)%CMNHNAME = '' TFIELDLIST(IDX)%CSTDNAME = '' -TFIELDLIST(IDX)%CLONGNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'MesoNH: ' TFIELDLIST(IDX)%CUNITS = '' TFIELDLIST(IDX)%CDIR = '' TFIELDLIST(IDX)%CCOMMENT = '' @@ -271,7 +672,13 @@ TFIELDLIST(IDX)%NDIMS = ALLOCATE(TFIELDLIST(IDX)%TFIELD_xxxD(IMODEL)) IDX = IDX+1 #endif - +! +CONTAINS +SUBROUTINE ERR_INI_FIELD_LIST() + PRINT *,'FATAL: INI_FIELD_LIST: IDX>MAXFIELDS (',MAXFIELDS,')' + STOP +END SUBROUTINE ERR_INI_FIELD_LIST +! END SUBROUTINE INI_FIELD_LIST ! SUBROUTINE FIND_FIELD_ID_FROM_MNHNAME(HMNHNAME,KID,KRESP) @@ -325,7 +732,10 @@ END SUBROUTINE FIND_FIELD_ID_FROM_MNHNAME ! SUBROUTINE FIELDLIST_GOTO_MODEL(KFROM, KTO) ! +USE MODD_REF +! USE MODD_FIELD_n +USE MODD_GRID_n USE MODD_PRECIP_n ! INTEGER, INTENT(IN) :: KFROM, KTO @@ -349,6 +759,32 @@ IF (.NOT.LFIELDLIST_ISINIT) THEN RETURN END IF ! +! Initialize some pointers +! +IF (KFROM == KTO) THEN + IF (.NOT.ALLOCATED(XRHODREFZ)) THEN + PRINT *,'FATAL: INI_FIELD_LIST: XRHODREFZ not yet allocated' + STOP + END IF + CALL FIND_FIELD_ID_FROM_MNHNAME('RHOREFZ',IID,IRESP) + TFIELDLIST(IID)%TFIELD_X1D(KFROM)%DATA=>XRHODREFZ + ! + IF (.NOT.ALLOCATED(XTHVREFZ)) THEN + PRINT *,'FATAL: INI_FIELD_LIST: XTHVREFZ not yet allocated' + STOP + END IF + CALL FIND_FIELD_ID_FROM_MNHNAME('THVREFZ',IID,IRESP) + TFIELDLIST(IID)%TFIELD_X1D(KFROM)%DATA=>XTHVREFZ + ! + IF (.NOT.ASSOCIATED(LSLEVE)) THEN + PRINT *,'FATAL: INI_FIELD_LIST: LSLEVE not yet associated' + STOP + END IF + CALL FIND_FIELD_ID_FROM_MNHNAME('SLEVE',IID,IRESP) + TFIELDLIST(IID)%TFIELD_L0D(KFROM)%DATA=>LSLEVE + ! +END IF +! ! Save current state for allocated arrays ! CALL FIND_FIELD_ID_FROM_MNHNAME('UT',IID,IRESP) @@ -359,6 +795,32 @@ 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 +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 ! @@ -373,6 +835,34 @@ 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 +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 +CALL FIND_FIELD_ID_FROM_MNHNAME('SLEVE',IID,IRESP) +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 END IF diff --git a/src/MNH/modd_fieldn.f90 b/src/MNH/modd_fieldn.f90 index 4e15f456f..82a544c66 100644 --- a/src/MNH/modd_fieldn.f90 +++ b/src/MNH/modd_fieldn.f90 @@ -67,10 +67,10 @@ TYPE FIELD_t ! U,V,W at time t REAL, DIMENSION(:,:,:), POINTER :: XRUS=>NULL(),XRVS=>NULL(),XRWS=>NULL() ! Source of (rho U), (rho V), (rho w) - REAL, DIMENSION(:,:,:), POINTER :: XRUS_PRES=>NULL(),XRVS_PRES=>NULL(),XRWS_PRES=>NULL() +! REAL, DIMENSION(:,:,:), POINTER :: XRUS_PRES=>NULL(),XRVS_PRES=>NULL(),XRWS_PRES=>NULL() ! REAL, DIMENSION(:,:,:), POINTER :: XTHT=>NULL() ! (rho theta) at time t REAL, DIMENSION(:,:,:), POINTER :: XRTHS=>NULL() ! Source of (rho theta) - REAL, DIMENSION(:,:,:), POINTER :: XRTHS_CLD=>NULL() ! Source of (rho theta) from resolved_cloud +! REAL, DIMENSION(:,:,:), POINTER :: XRTHS_CLD=>NULL() ! Source of (rho theta) from resolved_cloud REAL, DIMENSION(:,:,:), POINTER :: XSUPSAT=>NULL() ! Sursat ! at time t REAL, DIMENSION(:,:,:), POINTER :: XNACT=>NULL() ! Sursat @@ -157,12 +157,12 @@ INTEGER :: IID,IRESP FIELD_MODEL(KFROM)%XRUS=>XRUS FIELD_MODEL(KFROM)%XRVS=>XRVS FIELD_MODEL(KFROM)%XRWS=>XRWS -FIELD_MODEL(KFROM)%XRUS_PRES=>XRUS_PRES -FIELD_MODEL(KFROM)%XRVS_PRES=>XRVS_PRES -FIELD_MODEL(KFROM)%XRWS_PRES=>XRWS_PRES +!FIELD_MODEL(KFROM)%XRUS_PRES=>XRUS_PRES !Done in FIELDLIST_GOTO_MODEL +!FIELD_MODEL(KFROM)%XRVS_PRES=>XRVS_PRES !Done in FIELDLIST_GOTO_MODEL +!FIELD_MODEL(KFROM)%XRWS_PRES=>XRWS_PRES !Done in FIELDLIST_GOTO_MODEL !FIELD_MODEL(KFROM)%XTHT=>XTHT !Done in FIELDLIST_GOTO_MODEL FIELD_MODEL(KFROM)%XRTHS=>XRTHS -FIELD_MODEL(KFROM)%XRTHS_CLD=>XRTHS_CLD +!FIELD_MODEL(KFROM)%XRTHS_CLD=>XRTHS_CLD !Done in FIELDLIST_GOTO_MODEL FIELD_MODEL(KFROM)%XSUPSAT=>XSUPSAT FIELD_MODEL(KFROM)%XNACT=>XNACT FIELD_MODEL(KFROM)%XNPRO=>XNPRO @@ -192,12 +192,12 @@ FIELD_MODEL(KFROM)%XRCM=>XRCM XRUS=>FIELD_MODEL(KTO)%XRUS XRVS=>FIELD_MODEL(KTO)%XRVS XRWS=>FIELD_MODEL(KTO)%XRWS -XRUS_PRES=>FIELD_MODEL(KTO)%XRUS_PRES -XRVS_PRES=>FIELD_MODEL(KTO)%XRVS_PRES -XRWS_PRES=>FIELD_MODEL(KTO)%XRWS_PRES +!XRUS_PRES=>FIELD_MODEL(KTO)%XRUS_PRES !Done in FIELDLIST_GOTO_MODEL +!XRVS_PRES=>FIELD_MODEL(KTO)%XRVS_PRES !Done in FIELDLIST_GOTO_MODEL +!XRWS_PRES=>FIELD_MODEL(KTO)%XRWS_PRES !Done in FIELDLIST_GOTO_MODEL !XTHT=>FIELD_MODEL(KTO)%XTHT !Done in FIELDLIST_GOTO_MODEL XRTHS=>FIELD_MODEL(KTO)%XRTHS -XRTHS_CLD=>FIELD_MODEL(KTO)%XRTHS_CLD +!XRTHS_CLD=>FIELD_MODEL(KTO)%XRTHS_CLD !Done in FIELDLIST_GOTO_MODEL XSUPSAT=>FIELD_MODEL(KTO)%XSUPSAT XNACT=>FIELD_MODEL(KTO)%XNACT XSSPRO=>FIELD_MODEL(KTO)%XSSPRO diff --git a/src/MNH/modd_gridn.f90 b/src/MNH/modd_gridn.f90 index b44a4ac05..ad6b44aae 100644 --- a/src/MNH/modd_gridn.f90 +++ b/src/MNH/modd_gridn.f90 @@ -49,19 +49,19 @@ USE MODD_PARAMETERS, ONLY: JPMODELMAX IMPLICIT NONE TYPE GRID_t - REAL, DIMENSION(:,:), POINTER :: XLON=>NULL(),XLAT=>NULL() ! Longitude and latitude +! 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 :: 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 :: 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 @@ -72,10 +72,10 @@ TYPE GRID_t 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 +! 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 +! REAL, DIMENSION(:,:), POINTER :: XZSMT=>NULL() ! smooth orography for SLEVE coordinate END TYPE GRID_t TYPE(GRID_t), DIMENSION(JPMODELMAX), TARGET, SAVE :: GRID_MODEL @@ -100,46 +100,49 @@ 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 -GRID_MODEL(KFROM)%XLAT=>XLAT -GRID_MODEL(KFROM)%XXHAT=>XXHAT -GRID_MODEL(KFROM)%XYHAT=>XYHAT +!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 -GRID_MODEL(KFROM)%XZZ=>XZZ -GRID_MODEL(KFROM)%XZHAT=>XZHAT +!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 +!GRID_MODEL(KFROM)%XZSMT=>XZSMT !Done in FIELDLIST_GOTO_MODEL ! ! Current model is set to model KTO -XLON=>GRID_MODEL(KTO)%XLON -XLAT=>GRID_MODEL(KTO)%XLAT -XXHAT=>GRID_MODEL(KTO)%XXHAT -XYHAT=>GRID_MODEL(KTO)%XYHAT +!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 -XZZ=>GRID_MODEL(KTO)%XZZ -XZHAT=>GRID_MODEL(KTO)%XZHAT +!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 +!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 +!XZSMT=>GRID_MODEL(KTO)%XZSMT !Done in FIELDLIST_GOTO_MODEL + +IF (.NOT.ASSOCIATED(LSLEVE)) ALLOCATE(LSLEVE) END SUBROUTINE GRID_GOTO_MODEL diff --git a/src/MNH/modd_ref.f90 b/src/MNH/modd_ref.f90 index e7b396101..b2605f1c1 100644 --- a/src/MNH/modd_ref.f90 +++ b/src/MNH/modd_ref.f90 @@ -45,9 +45,9 @@ ! IMPLICIT NONE ! -REAL,SAVE, DIMENSION(:), ALLOCATABLE :: XRHODREFZ ! rhod(z) for reference +REAL,SAVE, DIMENSION(:), ALLOCATABLE, TARGET :: XRHODREFZ ! rhod(z) for reference ! state without orography -REAL,SAVE, DIMENSION(:), ALLOCATABLE :: XTHVREFZ ! Thetav(z) for reference +REAL,SAVE, DIMENSION(:), ALLOCATABLE, TARGET :: XTHVREFZ ! Thetav(z) for reference ! state without orography REAL,SAVE :: XEXNTOP ! Exner function at model top LOGICAL, SAVE :: LBOUSS ! Boussinesq approximation diff --git a/src/MNH/modd_spawn.f90 b/src/MNH/modd_spawn.f90 index 4edb589ff..0d8e13504 100644 --- a/src/MNH/modd_spawn.f90 +++ b/src/MNH/modd_spawn.f90 @@ -64,6 +64,13 @@ CHARACTER (LEN=28) :: CDADSPAFILE ! DAD fm-file for spawning file ! if LBAL_ONLY=T ! ! Pointers to the data of the mesh #1 +REAL,DIMENSION(:), SAVE,POINTER :: XXHAT1 +REAL,DIMENSION(:), SAVE,POINTER :: XYHAT1 +REAL,DIMENSION(:), SAVE,POINTER :: XZHAT1 +REAL,DIMENSION(:,:), SAVE,POINTER :: XZS1 +REAL,DIMENSION(:,:), SAVE,POINTER :: XZSMT1 +REAL,DIMENSION(:,:,:),SAVE,POINTER :: XZZ1 +LOGICAL, SAVE,POINTER :: LSLEVE1 REAL,DIMENSION(:,:), SAVE,POINTER :: XACPRR1 REAL,DIMENSION(:,:,:),SAVE,POINTER :: XTHT1 REAL,DIMENSION(:,:,:),SAVE,POINTER :: XUT1 diff --git a/src/MNH/spawn_grid2.f90 b/src/MNH/spawn_grid2.f90 index 3fa646362..34920a8bc 100644 --- a/src/MNH/spawn_grid2.f90 +++ b/src/MNH/spawn_grid2.f90 @@ -142,7 +142,7 @@ END MODULE MODI_SPAWN_GRID2 !! Modification 20/04/99 (J. Stein) bug on the last point if the whole !! domain is used (2D case along y for instance !! Modification 15/03/99 (V.Masson) cover types -!! Modification 04/07/01 (J.Stein) convergence test set to 1 millimeter for GRID_MODEL(1)%XZS +!! Modification 04/07/01 (J.Stein) convergence test set to 1 millimeter for XZS1 !! Modification 05/09/05 (J. Escobar) change INTENT(OUT) --> INTENT(INOUT) !! to avoid problem when Input parameter and GRID1 parameter !! are exactly the same !!! @@ -157,6 +157,7 @@ END MODULE MODI_SPAWN_GRID2 ! USE MODD_PARAMETERS ! Declarative modules USE MODD_CONF +USE MODD_SPAWN ! USE MODD_GRID, ONLY: XLONORI,XLATORI USE MODD_GRID_n, ONLY: GRID_MODEL @@ -285,19 +286,19 @@ ENDIF CALL FMLOOK_ll(CLUOUT,CLUOUT,ILUOUT,IRESP) ! !* 1.3 checks that model 2 domain is included in the one of model 1 -IF ( (IXEND_F) > SIZE(GRID_MODEL(1)%XXHAT) ) THEN +IF ( (IXEND_F) > SIZE(XXHAT1) ) THEN WRITE(ILUOUT,FMT=*) 'SPAWN_MODEL2: MODEL 2 DOMAIN OUTSIDE THE MODEL1 DOMAIN ', & ' IXOR_F = ', IXOR_F,' IXEND_F = ', IXEND_F, & - ' IIU of model1 = ',SIZE(GRID_MODEL(1)%XXHAT) + ' IIU of model1 = ',SIZE(XXHAT1) !callabortstop CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP) CALL ABORT STOP END IF -IF ( (IYEND_F) > SIZE(GRID_MODEL(1)%XYHAT) ) THEN +IF ( (IYEND_F) > SIZE(XYHAT1) ) THEN WRITE(ILUOUT,FMT=*) 'SPAWN_MODEL2: MODEL 2 DOMAIN OUTSIDE THE MODEL1 DOMAIN ', & ' IYOR_F = ', IYOR_F,' IYEND_F = ', IYEND_F, & - ' IJU of model1 = ',SIZE(GRID_MODEL(1)%XYHAT) + ' IJU of model1 = ',SIZE(XYHAT1) !callabortstop CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP) CALL ABORT @@ -309,8 +310,8 @@ END IF !* 2. INITIALIZATION OF THE GRID OF MODEL 2: ! -------------------------------------- ! -PZHAT(:) = GRID_MODEL(1)%XZHAT(:) -OSLEVE = GRID_MODEL(1)%LSLEVE +PZHAT(:) = XZHAT1(:) +OSLEVE = LSLEVE1 PLEN1 = GRID_MODEL(1)%XLEN1 PLEN2 = GRID_MODEL(1)%XLEN2 ! @@ -318,12 +319,12 @@ IF (KDXRATIO == 1 .AND. KDYRATIO == 1 ) THEN ! !* 2.1 special case of spawning - no change of resolution : !$ in our case we don't get them here ! - PXHAT(:) = GRID_MODEL(1)%XXHAT(KXOR:KXEND) - PYHAT(:) = GRID_MODEL(1)%XYHAT(KYOR:KYEND) - PZS (:,:) = GRID_MODEL(1)%XZS (KXOR:KXEND,KYOR:KYEND) - PZS_LS(:,:)= GRID_MODEL(1)%XZS (KXOR:KXEND,KYOR:KYEND) - PZSMT (:,:) = GRID_MODEL(1)%XZSMT(KXOR:KXEND,KYOR:KYEND) - PZSMT_LS(:,:) = GRID_MODEL(1)%XZSMT(KXOR:KXEND,KYOR:KYEND) + PXHAT(:) = XXHAT1(KXOR:KXEND) + PYHAT(:) = XYHAT1(KYOR:KYEND) + PZS (:,:) = XZS1 (KXOR:KXEND,KYOR:KYEND) + PZS_LS(:,:)= XZS1 (KXOR:KXEND,KYOR:KYEND) + PZSMT (:,:) = XZSMT1(KXOR:KXEND,KYOR:KYEND) + PZSMT_LS(:,:) = XZSMT1(KXOR:KXEND,KYOR:KYEND) ! ELSE ! @@ -336,13 +337,13 @@ ELSE ! !JUAN A REVOIR TODO_JPHEXT ! <<<<<<< spawn_grid2.f90 - IXSIZE1_F=SIZE(GRID_MODEL(1)%XXHAT) - IYSIZE1_F=SIZE(GRID_MODEL(1)%XYHAT) + IXSIZE1_F=SIZE(XXHAT1) + IYSIZE1_F=SIZE(XYHAT1) ! before the interpolation of XXHAT into PXHAT, we need to use LS_FORCING_ll ! to communicate the values on the subdomains of the son grid to the appropriate processes ! LS_FORCING_ll does not work on 1D arrays, so we have to construct a temporary pseudo-2D array ALLOCATE(ZXHAT_2D_F(IXSIZE1_F,IYSIZE1_F)) - ZXHAT_2D_F(:,:) = SPREAD(GRID_MODEL(1)%XXHAT(:),DIM=2,NCOPIES=IYSIZE1_F) + ZXHAT_2D_F(:,:) = SPREAD(XXHAT1(:),DIM=2,NCOPIES=IYSIZE1_F) CALL GOTO_MODEL(1) CALL GO_TOMODEL_ll(1, IINFO_ll) CALL GET_CHILD_DIM_ll(IMI, IDIMX_C, IDIMY_C, IINFO_ll) @@ -403,7 +404,7 @@ ELSE ! to communicate the values on the subdomains of the son grid to the appropriate processes ! LS_FORCING_ll does not work on 1D arrays, so we have to construct a temporary pseudo-2D array ALLOCATE(ZYHAT_2D_F(IXSIZE1_F,IYSIZE1_F)) - ZYHAT_2D_F(:,:) = SPREAD(GRID_MODEL(1)%XYHAT(:),DIM=1,NCOPIES=IXSIZE1_F) + ZYHAT_2D_F(:,:) = SPREAD(XYHAT1(:),DIM=1,NCOPIES=IXSIZE1_F) CALL GOTO_MODEL(1) CALL GO_TOMODEL_ll(1, IINFO_ll) CALL GET_CHILD_DIM_ll(IMI, IDIMX_C, IDIMY_C, IINFO_ll) @@ -455,10 +456,10 @@ ELSE DEALLOCATE(ZYHAT_EXTENDED_C) DEALLOCATE(ZYHAT_2D_C) !!$======= -!!$ IXSIZE1=SIZE(GRID_MODEL(1)%XXHAT) +!!$ IXSIZE1=SIZE(XXHAT1) !!$ ALLOCATE(ZXHAT_EXTENDED(IXSIZE1+1)) -!!$ ZXHAT_EXTENDED(1:IXSIZE1)=GRID_MODEL(1)%XXHAT(:) -!!$ ZXHAT_EXTENDED(IXSIZE1+1)=2.*GRID_MODEL(1)%XXHAT(IXSIZE1)-GRID_MODEL(1)%XXHAT(IXSIZE1-1) +!!$ ZXHAT_EXTENDED(1:IXSIZE1)=XXHAT1(:) +!!$ ZXHAT_EXTENDED(IXSIZE1+1)=2.*XXHAT1(IXSIZE1)-XXHAT1(IXSIZE1-1) !!$ DO JEPSX = 1,KDXRATIO !!$ ZPOND2 = FLOAT(JEPSX-1)/FLOAT(KDXRATIO) !!$ ZPOND1 = 1.-ZPOND2 @@ -471,10 +472,10 @@ ELSE !!$ END DO !!$ DEALLOCATE(ZXHAT_EXTENDED) !!$! -!!$ IYSIZE1=SIZE(GRID_MODEL(1)%XYHAT) +!!$ IYSIZE1=SIZE(XYHAT1) !!$ ALLOCATE(ZYHAT_EXTENDED(IYSIZE1+1)) -!!$ ZYHAT_EXTENDED(1:IYSIZE1)=GRID_MODEL(1)%XYHAT(:) -!!$ ZYHAT_EXTENDED(IYSIZE1+1)=2.*GRID_MODEL(1)%XYHAT(IYSIZE1)-GRID_MODEL(1)%XYHAT(IYSIZE1-1) +!!$ ZYHAT_EXTENDED(1:IYSIZE1)=XYHAT1(:) +!!$ ZYHAT_EXTENDED(IYSIZE1+1)=2.*XYHAT1(IYSIZE1)-XYHAT1(IYSIZE1-1) !!$ DO JEPSY = 1,KDYRATIO !!$ ZPOND2 = FLOAT(JEPSY-1)/FLOAT(KDYRATIO) !!$ ZPOND1 = 1.-ZPOND2 @@ -501,9 +502,9 @@ PLATOR = XLATORI !* 3. INITIALIZATION OF ZS and ZSMT: ! ------------------------------ CALL SPAWN_ZS(IXOR_F,IXEND_F,IYOR_F,IYEND_F,KDXRATIO,KDYRATIO,IDIMX_C,IDIMY_C,LBC_MODEL(1)%CLBCX,LBC_MODEL(1)%CLBCY,CLUOUT, & - GRID_MODEL(1)%XZS, PZS, 'ZS ',PZS_LS) + XZS1, PZS, 'ZS ',PZS_LS) CALL SPAWN_ZS(IXOR_F,IXEND_F,IYOR_F,IYEND_F,KDXRATIO,KDYRATIO,IDIMX_C,IDIMY_C,LBC_MODEL(1)%CLBCX,LBC_MODEL(1)%CLBCY,CLUOUT, & - GRID_MODEL(1)%XZSMT,PZSMT,'ZSMT ',PZSMT_LS) + XZSMT1,PZSMT,'ZSMT ',PZSMT_LS) ! CALL MPPDB_CHECK2D(PZS,"SPAWN_GRID2:PZS",PRECISION) CALL MPPDB_CHECK2D(PZSMT,"SPAWN_GRID2:PZSMT",PRECISION) diff --git a/src/MNH/spawn_pressure2.f90 b/src/MNH/spawn_pressure2.f90 index be300a2b4..431f13a82 100644 --- a/src/MNH/spawn_pressure2.f90 +++ b/src/MNH/spawn_pressure2.f90 @@ -259,7 +259,7 @@ END IF ! !* iterative loop DO JCOUNT=1,10 - CALL COMPUTE_EXNER_FROM_TOP(ZTHV1(:,:,IKE-1:IKE+1),GRID_MODEL(1)%XZZ(:,:,IKE-1:IKE+1), & + CALL COMPUTE_EXNER_FROM_TOP(ZTHV1(:,:,IKE-1:IKE+1),XZZ1(:,:,IKE-1:IKE+1), & ZHYDEXNTOP1(:,:), & ZWORK(:,:,IKE-1:IKE+1),ZHYDEXN1(:,:,IKE-1:IKE+1)) ZHYDEXNTOP1(:,:)=ZHYDEXNTOP1(:,:)+ZEXN1(:,:,IKE)-ZHYDEXN1(:,:,IKE) @@ -269,7 +269,7 @@ END IF !* 2.3 Model 1 hydrostatic pressure ! ---------------------------- ! - CALL COMPUTE_EXNER_FROM_TOP(ZTHV1,GRID_MODEL(1)%XZZ,ZHYDEXNTOP1,ZWORK,ZHYDEXN1) + CALL COMPUTE_EXNER_FROM_TOP(ZTHV1,XZZ1,ZHYDEXNTOP1,ZWORK,ZHYDEXN1) ! DEALLOCATE(ZTHV1) DEALLOCATE(ZWORK) diff --git a/src/MNH/spawning.f90 b/src/MNH/spawning.f90 index f24887195..ce4070b7b 100644 --- a/src/MNH/spawning.f90 +++ b/src/MNH/spawning.f90 @@ -261,8 +261,16 @@ END SUBROUTINE UPDATE_MODD_FROM_NMLVAR SUBROUTINE SET_POINTERS_TO_MODEL1() ! USE MODD_FIELD_n +USE MODD_GRID_n USE MODD_PRECIP_n ! +XXHAT1 => XXHAT +XYHAT1 => XYHAT +XZHAT1 => XZHAT +XZS1 => XZS +XZSMT1 => XZSMT +XZZ1 => XZZ +LSLEVE1 => LSLEVE XACPRR1 => XACPRR XTHT1 => XTHT XUT1 => XUT diff --git a/src/MNH/write_lfin.f90 b/src/MNH/write_lfin.f90 index 4d95b32e3..a60fe02f3 100644 --- a/src/MNH/write_lfin.f90 +++ b/src/MNH/write_lfin.f90 @@ -365,58 +365,20 @@ END IF ! !* 1.1 Type and Dimensions : ! -YDIR='--' -! -YRECFM='STORAGE_TYPE' -YCOMMENT=' ' -IGRID=0 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,CSTORAGE_TYPE,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='IMAX' -YCOMMENT=' ' -IGRID=0 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,NIMAX_ll,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='JMAX' -YCOMMENT=' ' -IGRID=0 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,NJMAX_ll,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_WRITE_FIELD(TPFILE,'STORAGE_TYPE',CLUOUT,IRESP,CSTORAGE_TYPE) ! -YRECFM='JPHEXT' -YCOMMENT=' ' -IGRID=0 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,JPHEXT,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_WRITE_FIELD(TPFILE,'IMAX',CLUOUT,IRESP,NIMAX_ll) +CALL IO_WRITE_FIELD(TPFILE,'JMAX',CLUOUT,IRESP,NJMAX_ll) +CALL IO_WRITE_FIELD(TPFILE,'KMAX',CLUOUT,IRESP,NKMAX) ! -YRECFM='KMAX' -YCOMMENT=' ' -IGRID=0 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,NKMAX,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_WRITE_FIELD(TPFILE,'JPHEXT',CLUOUT,IRESP,JPHEXT) ! !* 1.2 Grid variables : ! IF (.NOT.LCARTESIAN) THEN - YRECFM='RPK' - YCOMMENT=' ' - IGRID=0 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XRPK,IGRID,ILENCH,YCOMMENT,IRESP) -! - YRECFM='LONORI' - YCOMMENT='DEGREES' - IGRID=0 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XLONORI,IGRID,ILENCH,YCOMMENT,IRESP) -! - YRECFM='LATORI' - YCOMMENT='DEGREES' - IGRID=0 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XLATORI,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_WRITE_FIELD(TPFILE,'RPK', CLUOUT,IRESP,XRPK) + CALL IO_WRITE_FIELD(TPFILE,'LONORI',CLUOUT,IRESP,XLONORI) + CALL IO_WRITE_FIELD(TPFILE,'LATORI',CLUOUT,IRESP,XLATORI) ! !* diagnostic of 1st mass point ! @@ -428,109 +390,48 @@ IF (.NOT.LCARTESIAN) THEN CALL SM_LATLON(XLATORI,XLONORI,ZXHATM,ZYHATM,ZLATOR,ZLONOR) DEALLOCATE(ZXHAT_ll,ZYHAT_ll) ! - YRECFM='LONOR' - YCOMMENT='DEGREES' - IGRID=0 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,ZLONOR,IGRID,ILENCH,YCOMMENT,IRESP) -! - YRECFM='LATOR' - YCOMMENT='DEGREES' - IGRID=0 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,ZLATOR,IGRID,ILENCH,YCOMMENT,IRESP) + !LONOR and LATOR not in TFIELDLIST bacause local variables + TZFIELD%CMNHNAME = 'LONOR' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: LONOR' + TZFIELD%CUNITS = 'degree' + TZFIELD%CDIR = '--' + TZFIELD%CCOMMENT = 'Longitude of 1st mass point' + TZFIELD%NGRID = 0 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 0 + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZLONOR) +! + TZFIELD%CMNHNAME = 'LATOR' + TZFIELD%CLONGNAME = 'MesoNH: LATOR' + TZFIELD%CCOMMENT = 'Latitude of 1st mass point' + CALL IO_WRITE_FIELD(TPFILE,TZFIELD,CLUOUT,IRESP,ZLATOR) END IF ! -YRECFM='THINSHELL' -YCOMMENT=' ' -IGRID=0 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,LTHINSHELL,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='LAT0' -YCOMMENT='reference latitude for conformal projection (DEGREES)' -IGRID=0 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XLAT0,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='LON0' -YCOMMENT='reference longitude for conformal projection (DEGREES)' -IGRID=0 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XLON0,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='BETA' -YCOMMENT='rotation angle (DEGREES)' -IGRID=0 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XBETA,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='XHAT' -YDIR='XX' -YCOMMENT='Position x in the conformal or cartesian plane (METERS)' -IGRID=2 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XXHAT,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_WRITE_FIELD(TPFILE,'THINSHELL',CLUOUT,IRESP,LTHINSHELL) +CALL IO_WRITE_FIELD(TPFILE,'LAT0',CLUOUT,IRESP,XLAT0) +CALL IO_WRITE_FIELD(TPFILE,'LON0',CLUOUT,IRESP,XLON0) +CALL IO_WRITE_FIELD(TPFILE,'BETA',CLUOUT,IRESP,XBETA) ! -YRECFM='YHAT' -YDIR='YY' -YCOMMENT='Position y in the conformal or cartesian plane (METERS)' -IGRID=3 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XYHAT,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_WRITE_FIELD(TPFILE,'XHAT',CLUOUT,IRESP,XXHAT) +CALL IO_WRITE_FIELD(TPFILE,'YHAT',CLUOUT,IRESP,XYHAT) +CALL IO_WRITE_FIELD(TPFILE,'ZHAT',CLUOUT,IRESP,XZHAT) ! -YRECFM='ZHAT' -YDIR='--' -YCOMMENT='height level without orography (METERS)' -IGRID=4 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XZHAT,IGRID,ILENCH,YCOMMENT,IRESP) ! #ifdef MNH_NCWRIT ! ! ! !*SB*MAY2012 ! !*SB* * WRITE ALT -! IF (LNETCDF) THEN -! YRECFM='ALT' -! YCOMMENT='X_Y_Z_ALTitude (M)' -! IGRID=4 -! ILENCH=LEN(YCOMMENT) -! CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XZZ,IGRID,ILENCH,YCOMMENT,IRESP) -! END IF +! IF (LNETCDF) CALL IO_WRITE_FIELD(TPFILE,'ALT',CLUOUT,IRESP,XZZ) ! #endif +! IF (.NOT.LCARTESIAN) THEN - YRECFM='LAT' - YCOMMENT='X_Y_latitude (degree)' - IGRID=1 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XLAT,IGRID,ILENCH,YCOMMENT,IRESP) - - YRECFM='LON' - YCOMMENT='X_Y_longitude (degree)' - IGRID=1 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,'XY',XLON,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_WRITE_FIELD(TPFILE,'LAT',CLUOUT,IRESP,XLAT) + CALL IO_WRITE_FIELD(TPFILE,'LON',CLUOUT,IRESP,XLON) END IF ! -YRECFM='ZS' -YDIR='XY' -YCOMMENT='orography (METERS)' -IGRID=4 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XZS,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='ZSMT' -YDIR='XY' -YCOMMENT='smooth orography (METERS)' -IGRID=4 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XZSMT,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='SLEVE' -YDIR='--' -YCOMMENT='' -IGRID=4 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,LSLEVE,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_WRITE_FIELD(TPFILE,'ZS', CLUOUT,IRESP,XZS) +CALL IO_WRITE_FIELD(TPFILE,'ZSMT', CLUOUT,IRESP,XZSMT) +CALL IO_WRITE_FIELD(TPFILE,'SLEVE',CLUOUT,IRESP,LSLEVE) ! IF (LSLEVE) THEN YRECFM='LEN1' @@ -1639,54 +1540,21 @@ END IF ! !* 1.5 Reference state variables : ! -YDIR='--' -! -YRECFM='RHOREFZ' -YCOMMENT='rhodz for reference state without orography (kg/m3)' -IGRID=4 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XRHODREFZ,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='THVREFZ' -YCOMMENT='thetavz for reference state without orography (K)' -IGRID=4 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XTHVREFZ,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_WRITE_FIELD(TPFILE,'RHOREFZ',CLUOUT,IRESP,XRHODREFZ) +CALL IO_WRITE_FIELD(TPFILE,'THVREFZ',CLUOUT,IRESP,XTHVREFZ) +CALL IO_WRITE_FIELD(TPFILE,'EXNTOP', CLUOUT,IRESP,XEXNTOP) ! -YRECFM='EXNTOP' -YCOMMENT='Exner function at model top' -IGRID=4 -ILENCH=LEN(YCOMMENT) -CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XEXNTOP,IGRID,ILENCH,YCOMMENT,IRESP) +YDIR='--' ! !* 1.6 Tendencies ! IF (CPROGRAM == 'MESONH') THEN - + CALL IO_WRITE_FIELD(TPFILE,'US_PRES',CLUOUT,IRESP,XRUS_PRES) + CALL IO_WRITE_FIELD(TPFILE,'VS_PRES',CLUOUT,IRESP,XRVS_PRES) + CALL IO_WRITE_FIELD(TPFILE,'WS_PRES',CLUOUT,IRESP,XRWS_PRES) + CALL IO_WRITE_FIELD(TPFILE,'THS_CLD',CLUOUT,IRESP,XRTHS_CLD) +! YDIR='XY' - YRECFM='US_PRES' - YCOMMENT='X_Y_Z_US_PRES' - IGRID=2 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XRUS_PRES,IGRID,ILENCH,YCOMMENT,IRESP) -! - YRECFM='VS_PRES' - YCOMMENT='X_Y_Z_VS_PRES' - IGRID=3 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XRVS_PRES,IGRID,ILENCH,YCOMMENT,IRESP) -! - YRECFM='WS_PRES' - YCOMMENT='X_Y_Z_WS_PRES' - IGRID=4 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XRWS_PRES,IGRID,ILENCH,YCOMMENT,IRESP) -! - YRECFM='THS_CLD' - YCOMMENT='X_Y_Z_THS_CLD' - IGRID=1 - ILENCH=LEN(YCOMMENT) - CALL FMWRIT(YFMFILE,YRECFM,CLUOUT,YDIR,XRTHS_CLD,IGRID,ILENCH,YCOMMENT,IRESP) ! IF (NRR >=1) THEN IRR=0 -- GitLab