Newer
Older
SUBROUTINE WRITE_SURFC0_MNH(HREC,HFIELD,KRESP,HCOMMENT)
! #############################################################
!

WAUTELET Philippe
committed
!!**** *WRITEC0* - routine to write an integer
!!
!! PURPOSE
!! -------
!

WAUTELET Philippe
committed
! The purpose of WRITEC0 is
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
!
!!** METHOD
!! ------
!!
!! EXTERNAL
!! --------
!!
!!
!!
!! IMPLICIT ARGUMENTS
!! ------------------
!!
!!
!! REFERENCE
!! ---------
!!
!!
!! AUTHOR
!! ------
!!
!! S.Malardel *METEO-FRANCE*
!!
!! MODIFICATIONS
!! -------------
!!
!! original 01/08/03
!----------------------------------------------------------------------------
!
!* 0. DECLARATIONS
! ------------
!

WAUTELET Philippe
committed
USE MODE_IO_WRITE_FIELD
USE MODE_FIELD, ONLY: TFIELDDATA,TYPECHAR,TYPELOG
USE MODE_MSG

WAUTELET Philippe
committed
USE MODD_CONF_n, ONLY: CSTORAGE_TYPE
USE MODD_IO_ll, ONLY: TFILE_SURFEX
USE MODD_IO_SURF_MNH, ONLY: COUT, NLUOUT, NIU_ALL, NJU_ALL
!
IMPLICIT NONE
!
!* 0.1 Declarations of arguments
!

WAUTELET Philippe
committed
CHARACTER(LEN=LEN_HREC),INTENT(IN) :: HREC ! name of the article to write
CHARACTER(LEN=40), INTENT(IN) :: HFIELD ! the string to write
INTEGER, INTENT(OUT) :: KRESP ! return-code if a problem appears
CHARACTER(LEN=100), INTENT(IN) :: HCOMMENT ! Comment string
!
!* 0.2 Declarations of local variables
!

WAUTELET Philippe
committed
LOGICAL :: GCARTESIAN
TYPE(TFIELDDATA) :: TZFIELD
CHARACTER(LEN=5) :: YMSG
!-------------------------------------------------------------------------------
!

WAUTELET Philippe
committed
CALL PRINT_MSG(NVERB_DEBUG,'IO','WRITE_SURFC0_MNH','writing '//TRIM(HREC))
!
IF ( (CSTORAGE_TYPE=='PG' .OR. CSTORAGE_TYPE=='SU') &
.AND. HREC=='GRID_TYPE ' ) THEN
IF (HFIELD(1:10)=='CONF PROJ ') THEN
GCARTESIAN = .FALSE.
ELSE IF (HFIELD(1:10)=='CARTESIAN ') THEN
GCARTESIAN = .TRUE.
END IF

WAUTELET Philippe
committed
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
!
TZFIELD%CMNHNAME = 'CARTESIAN'
TZFIELD%CSTDNAME = ''
TZFIELD%CLONGNAME = 'SURFEX: CARTESIAN'
TZFIELD%CUNITS = ''
TZFIELD%CDIR = '--'
TZFIELD%CCOMMENT = ''
TZFIELD%NGRID = 0
TZFIELD%NTYPE = TYPELOG
TZFIELD%NDIMS = 0
CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,COUT,KRESP,GCARTESIAN)
!
END IF
!
TZFIELD%CMNHNAME = TRIM(HREC)
TZFIELD%CSTDNAME = ''
TZFIELD%CLONGNAME = 'SURFEX: '//TRIM(HREC)
TZFIELD%CUNITS = ''
TZFIELD%CDIR = '--'
TZFIELD%CCOMMENT = TRIM(HCOMMENT)
TZFIELD%NGRID = 0
TZFIELD%NTYPE = TYPECHAR
TZFIELD%NDIMS = 0
CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,COUT,KRESP,HFIELD)
!
IF (KRESP /=0) THEN
WRITE ( YMSG, '( I5 )' ) KRESP
CALL PRINT_MSG(NVERB_ERROR,'IO','WRITE_SURFC0_MNH','error when writing article '//TRIM(HREC)//' KRESP='//YMSG)
END IF
!-------------------------------------------------------------------------------
END SUBROUTINE WRITE_SURFC0_MNH
!
! #############################################################
SUBROUTINE WRITE_SURFL1_MNH(HREC,KL,OFIELD,KRESP,HCOMMENT,HDIR)
! #############################################################
!

WAUTELET Philippe
committed
!!**** *WRITEL1* - routine to write a logical array
!!
!! PURPOSE
!! -------
!

WAUTELET Philippe
committed
! The purpose of WRITEL1 is
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
!
!!** METHOD
!! ------
!!
!! EXTERNAL
!! --------
!!
!!
!!
!! IMPLICIT ARGUMENTS
!! ------------------
!!
!!
!! REFERENCE
!! ---------
!!
!!
!! AUTHOR
!! ------
!!
!! S.Malardel *METEO-FRANCE*
!!
!! MODIFICATIONS
!! -------------
!!
!! original 01/08/03
!----------------------------------------------------------------------------
!
!* 0. DECLARATIONS
! ------------
!

WAUTELET Philippe
committed
USE MODE_IO_WRITE_FIELD
USE MODE_FIELD, ONLY: TFIELDDATA,TYPEINT,TYPELOG
USE MODE_MSG

WAUTELET Philippe
committed
USE MODD_CONF_n, ONLY: CSTORAGE_TYPE
USE MODD_IO_ll, ONLY: TFILE_SURFEX
USE MODD_IO_SURF_MNH, ONLY: COUT, NLUOUT, NMASK, CMASK, &
NIU, NJU, NIB, NJB, NIE, NJE

WAUTELET Philippe
committed
USE MODI_UNPACK_1D_2D
!
IMPLICIT NONE
!
!* 0.1 Declarations of arguments
!

WAUTELET Philippe
committed
CHARACTER(LEN=LEN_HREC),INTENT(IN) :: HREC ! name of the article to write
INTEGER, INTENT(IN) :: KL ! number of points
LOGICAL, DIMENSION(KL), INTENT(IN) :: OFIELD ! array containing the data field

WAUTELET Philippe
committed
INTEGER, INTENT(OUT) :: KRESP ! return-code if a problem appears
CHARACTER(LEN=100), INTENT(IN) :: HCOMMENT ! Comment string
CHARACTER(LEN=1), INTENT(IN) :: HDIR ! type of field :
! ! 'H' : field with
! ! horizontal spatial dim.
! ! '-' : no horizontal dim.
!
!* 0.2 Declarations of local variables
!
LOGICAL, DIMENSION(:,:), ALLOCATABLE :: GWORK ! work array written in the file
INTEGER, DIMENSION(:,:), ALLOCATABLE :: IWORK ! work array written in the file

WAUTELET Philippe
committed
!
CHARACTER(LEN=5) :: YMSG
TYPE(TFIELDDATA) :: TZFIELD
!-------------------------------------------------------------------------------

WAUTELET Philippe
committed
!
CALL PRINT_MSG(NVERB_DEBUG,'IO','WRITE_SURFL1_MNH','writing '//TRIM(HREC))
!
IF (HDIR=='-') THEN
IF( (CMASK /= 'FULL ').AND. (HREC=='COVER') ) THEN

WAUTELET Philippe
committed
CALL PRINT_MSG(NVERB_DEBUG,'IO','WRITE_SURFL1_MNH',TRIM(HREC)//' with mask '// &
TRIM(CMASK)//' not written in file by externalized surface')

WAUTELET Philippe
committed
TZFIELD%CMNHNAME = TRIM(HREC)
TZFIELD%CSTDNAME = ''
TZFIELD%CLONGNAME = 'SURFEX: '//TRIM(HREC)
TZFIELD%CUNITS = ''
TZFIELD%CDIR = '--'
TZFIELD%CCOMMENT = TRIM(HCOMMENT)
TZFIELD%NGRID = 0
TZFIELD%NTYPE = TYPELOG
TZFIELD%NDIMS = 1

WAUTELET Philippe
committed
CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,COUT,KRESP,OFIELD(:))

WAUTELET Philippe
committed
!

WAUTELET Philippe
committed
!
ALLOCATE(GWORK(NIU,NJU))
GWORK(:,:) = .FALSE.

WAUTELET Philippe
committed
!
CALL UNPACK_1D_2D(NMASK,OFIELD,GWORK(NIB:NIE,NJB:NJE))

WAUTELET Philippe
committed
!
ALLOCATE(IWORK(NIU,NJU))
IWORK = 0
WHERE(GWORK) IWORK = 1

WAUTELET Philippe
committed
!
TZFIELD%CMNHNAME = TRIM(HREC)
TZFIELD%CSTDNAME = ''
TZFIELD%CLONGNAME = 'SURFEX: '//TRIM(HREC)
TZFIELD%CUNITS = ''
TZFIELD%CDIR = 'XY'
TZFIELD%CCOMMENT = TRIM(HCOMMENT)
TZFIELD%NGRID = 4
TZFIELD%NTYPE = TYPEINT
TZFIELD%NDIMS = 2
CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,COUT,KRESP,IWORK(:,:))

WAUTELET Philippe
committed
DEALLOCATE(IWORK)
DEALLOCATE(GWORK)
!
END IF
!

WAUTELET Philippe
committed
IF (KRESP /=0) THEN
WRITE ( YMSG, '( I5 )' ) KRESP
CALL PRINT_MSG(NVERB_ERROR,'IO','WRITE_SURFL1_MNH','error when writing article '//TRIM(HREC)//' KRESP='//YMSG)
END IF
!-------------------------------------------------------------------------------
END SUBROUTINE WRITE_SURFL1_MNH
!
!
! #############################################################
SUBROUTINE WRITE_SURFL0_MNH(HREC,OFIELD,KRESP,HCOMMENT)
! #############################################################
!

WAUTELET Philippe
committed
!!**** *WRITEL1* - routine to write a logical
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
!!
!! PURPOSE
!! -------
!
!
!!** METHOD
!! ------
!!
!! EXTERNAL
!! --------
!!
!!
!!
!! IMPLICIT ARGUMENTS
!! ------------------
!!
!!
!! REFERENCE
!! ---------
!!
!!
!! AUTHOR
!! ------
!!
!! S.Malardel *METEO-FRANCE*
!!
!! MODIFICATIONS
!! -------------
!!
!! original 01/08/03
!----------------------------------------------------------------------------
!
!* 0. DECLARATIONS
! ------------
!

WAUTELET Philippe
committed
USE MODE_IO_WRITE_FIELD
USE MODE_FIELD, ONLY: TFIELDDATA,TYPELOG
USE MODE_MSG

WAUTELET Philippe
committed
USE MODD_CONF_n, ONLY: CSTORAGE_TYPE
USE MODD_IO_ll, ONLY: TFILE_SURFEX
USE MODD_IO_SURF_MNH, ONLY: COUT, NLUOUT, CMASK
!
IMPLICIT NONE
!
!* 0.1 Declarations of arguments
!

WAUTELET Philippe
committed
CHARACTER(LEN=LEN_HREC),INTENT(IN) :: HREC ! name of the article to write
LOGICAL, INTENT(IN) :: OFIELD ! array containing the data field
INTEGER, INTENT(OUT) :: KRESP ! return-code if a problem appears
CHARACTER(LEN=100), INTENT(IN) :: HCOMMENT ! Comment string
!
!* 0.2 Declarations of local variables
!

WAUTELET Philippe
committed
CHARACTER(LEN=5) :: YMSG
TYPE(TFIELDDATA) :: TZFIELD

WAUTELET Philippe
committed
CALL PRINT_MSG(NVERB_DEBUG,'IO','WRITE_SURFL0_MNH','writing '//TRIM(HREC))
!
IF( (CMASK /= 'FULL ').AND. (HREC=='COVER') ) THEN
CALL PRINT_MSG(NVERB_DEBUG,'IO','WRITE_SURFL0_MNH',TRIM(HREC)//' with mask '// &
TRIM(CMASK)//' not written in file by externalized surface')
RETURN

WAUTELET Philippe
committed
TZFIELD%CMNHNAME = TRIM(HREC)
TZFIELD%CSTDNAME = ''
TZFIELD%CLONGNAME = 'SURFEX: '//TRIM(HREC)
TZFIELD%CUNITS = ''
TZFIELD%CDIR = '--'
TZFIELD%CCOMMENT = TRIM(HCOMMENT)
TZFIELD%NGRID = 0
TZFIELD%NTYPE = TYPELOG
TZFIELD%NDIMS = 0
CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,COUT,KRESP,OFIELD)
END IF
!
IF (KRESP /=0) THEN
WRITE ( YMSG, '( I5 )' ) KRESP
CALL PRINT_MSG(NVERB_ERROR,'IO','WRITE_SURFL0_MNH','error when writing article '//TRIM(HREC)//' KRESP='//YMSG)
END IF
!-------------------------------------------------------------------------------
END SUBROUTINE WRITE_SURFL0_MNH
!
! #############################################################
SUBROUTINE WRITE_SURFT0_MNH(HREC,KYEAR,KMONTH,KDAY,PTIME,KRESP,HCOMMENT)
! #############################################################
!

WAUTELET Philippe
committed
!!**** *WRITET0* - routine to write a MESO-NH date_time scalar
!!
!! PURPOSE
!! -------
!

WAUTELET Philippe
committed
! The purpose of WRITET0 is
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
!
!!** METHOD
!! ------
!!
!! EXTERNAL
!! --------
!!
!!
!!
!! IMPLICIT ARGUMENTS
!! ------------------
!!
!!
!! REFERENCE
!! ---------
!!
!!
!! AUTHOR
!! ------
!!
!! V. MASSON *METEO-FRANCE*
!!
!! MODIFICATIONS
!! -------------
!!
!! original 18/08/97
!----------------------------------------------------------------------------
!
!* 0. DECLARATIONS
! ------------
!
USE MODE_FIELD, ONLY: TFIELDDATA, TYPEDATE

WAUTELET Philippe
committed
USE MODE_MSG
USE MODD_CONF_n, ONLY : CSTORAGE_TYPE
USE MODD_IO_ll, ONLY: TFILE_SURFEX
USE MODD_IO_SURF_MNH, ONLY : COUT, COUTFILE, NLUOUT
USE MODD_TYPE_DATE
!
!
IMPLICIT NONE
!
!* 0.1 Declarations of arguments
!

WAUTELET Philippe
committed
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
REAL, INTENT(IN) :: PTIME ! time
INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
CHARACTER(LEN=100), INTENT(IN) :: HCOMMENT ! Comment string
!* 0.2 Declarations of local variables
!
!
CHARACTER(LEN=LEN_HREC) :: YRECFM ! Name of the article to be written

WAUTELET Philippe
committed
CHARACTER(LEN=5) :: YMSG
TYPE (DATE_TIME) :: TZDATA
TYPE(TFIELDDATA) :: TZFIELD
!-------------------------------------------------------------------------------
!

WAUTELET Philippe
committed
CALL PRINT_MSG(NVERB_DEBUG,'IO','WRITE_SURFT0_MNH','writing '//TRIM(HREC))
!
IF( HREC=='DTCUR' .AND. CSTORAGE_TYPE/='SU' ) THEN

WAUTELET Philippe
committed
CALL PRINT_MSG(NVERB_DEBUG,'IO','WRITE_SURFT0_MNH',TRIM(HREC)//' not written in file by externalized surface')
RETURN
TZDATA%TDATE = DATE(KYEAR,KMONTH,KDAY)
TZDATA%TIME = PTIME
!
TZFIELD%CMNHNAME = TRIM(HREC)
TZFIELD%CSTDNAME = ''
TZFIELD%CLONGNAME = 'SURFEX: '//TRIM(HREC)
TZFIELD%CUNITS = ''
TZFIELD%CDIR = '--'
TZFIELD%CCOMMENT = TRIM(HCOMMENT)
TZFIELD%NGRID = 0
TZFIELD%NTYPE = TYPEDATE
TZFIELD%NDIMS = 0
!
CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,COUT,KRESP,TZDATA)
END IF

WAUTELET Philippe
committed
!
IF (KRESP /=0) THEN
WRITE ( YMSG, '( I5 )' ) KRESP
CALL PRINT_MSG(NVERB_ERROR,'IO','WRITE_SURFT0_MNH','error when writing article '//TRIM(HREC)//' KRESP='//YMSG)

WAUTELET Philippe
committed
!

WAUTELET Philippe
committed
!
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
! #############################################################
SUBROUTINE WRITE_SURFT1_MNH(HREC,KL1,KYEAR,KMONTH,KDAY,PTIME,KRESP,HCOMMENT)
! #############################################################
!
!!**** * - routine to write a date vector
!!
!! PURPOSE
!! -------
!
!
!!** METHOD
!! ------
!!
!! EXTERNAL
!! --------
!!
!!
!!
!! IMPLICIT ARGUMENTS
!! ------------------
!!
!!
!! REFERENCE
!! ---------
!!
!!
!! AUTHOR
!! ------
!!
!! G.TANGUY *METEO-FRANCE*
!!
!! MODIFICATIONS
!! -------------
!!
!! original 03/03/09
!----------------------------------------------------------------------------
!
!* 0. DECLARATIONS
! ------------
!
USE MODE_FM
USE MODE_FMWRIT

WAUTELET Philippe
committed
USE MODE_MSG
!
USE MODD_IO_SURF_MNH, ONLY : COUT, COUTFILE, NLUOUT
USE MODD_CONF_n, ONLY : CSTORAGE_TYPE
!
!
IMPLICIT NONE
!
!* 0.1 Declarations of arguments
!

WAUTELET Philippe
committed
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
INTEGER, DIMENSION(KL1), INTENT(IN) :: KDAY ! day
REAL, DIMENSION(KL1), INTENT(IN) :: PTIME ! time
INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears
CHARACTER(LEN=100), INTENT(IN) :: HCOMMENT ! Comment string
!* 0.2 Declarations of local variables
!
!
CHARACTER(LEN=LEN_HREC) :: YRECFM ! Name of the article to be written
INTEGER, DIMENSION(3,KL1) :: ITDATE

WAUTELET Philippe
committed
CHARACTER(LEN=5) :: YMSG
!-------------------------------------------------------------------------------
!

WAUTELET Philippe
committed
CALL PRINT_MSG(NVERB_DEBUG,'IO','WRITE_SURFT1_MNH','writing '//TRIM(HREC))
!
IF( HREC=='DTCUR' .AND. CSTORAGE_TYPE/='SU' ) THEN

WAUTELET Philippe
committed
CALL PRINT_MSG(NVERB_DEBUG,'IO','WRITE_SURFT1_MNH',TRIM(HREC)//' not written in file by externalized surface')
RETURN

WAUTELET Philippe
committed
YRECFM=TRIM(HREC)//'%TDATE'
!
ITDATE(1,:) = KYEAR (:)
ITDATE(2,:) = KMONTH (:)
ITDATE(3,:) = KDAY (:)
CALL FMWRIT(COUTFILE,YRECFM,COUT,'--',ITDATE(:,:),0,LEN(HCOMMENT),HCOMMENT,KRESP)
!
IF (KRESP /=0) THEN
WRITE ( YMSG, '( I5 )' ) KRESP
CALL PRINT_MSG(NVERB_ERROR,'IO','WRITE_SURFT1_MNH','error when writing article '//TRIM(HREC)//' KRESP='//YMSG)
END IF
!
YRECFM=TRIM(HREC)//'%TIME'
CALL FMWRIT(COUTFILE,YRECFM,COUT,'--',PTIME(:),0,LEN(HCOMMENT),HCOMMENT,KRESP)
!
IF (KRESP /=0) THEN
WRITE ( YMSG, '( I5 )' ) KRESP
CALL PRINT_MSG(NVERB_ERROR,'IO','WRITE_SURFT1_MNH','error when writing article '//TRIM(HREC)//' KRESP='//YMSG)
END IF

WAUTELET Philippe
committed
!