SURFEX v8.1
General documentation of Surfex
write_tfield_1d_patch.F90
Go to the documentation of this file.
1 !SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
2 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
3 !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SFX_LIC for details. version 1.
5 SUBROUTINE write_tfield_1d_patch(HSELECT,HPROGRAM,HRECFM,HCOMMENT,KP,KMASK,TFIELD_IN,KSIZE,TPDATE_WR)
6 !
8 !
10 !
11 USE modd_surf_par, ONLY : xundef, nundef
12 !
15 !
16 IMPLICIT NONE
17 !
18  CHARACTER(LEN=*), DIMENSION(:), INTENT(IN) :: HSELECT
19  CHARACTER(LEN=*), INTENT(IN) :: HPROGRAM
20  CHARACTER(LEN=*), INTENT(IN) :: HRECFM
21  CHARACTER(LEN=*), INTENT(IN) :: HCOMMENT
22 INTEGER, INTENT(IN) :: KP
23 INTEGER, DIMENSION(:), INTENT(IN) :: KMASK
24 TYPE(date_time), DIMENSION(:), INTENT(IN) :: TFIELD_IN
25 TYPE(date_time), DIMENSION(:,:), INTENT(INOUT) :: TPDATE_WR
26 INTEGER, INTENT(IN) :: KSIZE
27 !
28 INTEGER, DIMENSION(SIZE(TFIELD_IN)) :: ZINT1
29 INTEGER, DIMENSION(KSIZE) :: ZINT2
30 REAL, DIMENSION(SIZE(TFIELD_IN)) :: ZINT1R
31 REAL, DIMENSION(KSIZE) :: ZINT2R
32 TYPE(date_time), DIMENSION(KSIZE) :: TZWORK
33 !
34  CHARACTER(LEN=12) :: YRECFM
35  CHARACTER(LEN=2) :: YPAT
36 INTEGER :: IRESP
37 !
38 yrecfm=adjustl(hrecfm(:len_trim(hrecfm)))
39 IF (lsplit_patch) THEN
40  IF (kp/=0) THEN
41  WRITE(ypat,'(I2)') kp
42  yrecfm=adjustl(hrecfm(:len_trim(hrecfm)))//'P'//adjustl(ypat(:len_trim(ypat)))
43  ENDIF
44 ENDIF
45 !
46 zint1 = tfield_in(:)%TDATE%YEAR
47  CALL unpack_same_rank(kmask,zint1,zint2,nundef)
48 tzwork(:)%TDATE%YEAR = zint2
49 zint1 = tfield_in(:)%TDATE%MONTH
50  CALL unpack_same_rank(kmask,zint1,zint2,nundef)
51 tzwork(:)%TDATE%MONTH = zint2
52 zint1 = tfield_in(:)%TDATE%DAY
53  CALL unpack_same_rank(kmask,zint1,zint2,nundef)
54 tzwork(:)%TDATE%DAY = zint2
55 zint1r = tfield_in(:)%TIME
56  CALL unpack_same_rank(kmask,zint1r,zint2r,xundef)
57 tzwork(:)%TIME = zint2r
58 !
59 IF (lsplit_patch) THEN
60  CALL write_surf(hselect,hprogram,yrecfm,tzwork,iresp,hcomment=hcomment)
61 ELSE
62  IF (kp/=0) THEN
63  tpdate_wr(:,kp)%TDATE%YEAR = tzwork(:)%TDATE%YEAR
64  tpdate_wr(:,kp)%TDATE%MONTH = tzwork(:)%TDATE%MONTH
65  tpdate_wr(:,kp)%TDATE%DAY = tzwork(:)%TDATE%DAY
66  tpdate_wr(:,kp)%TIME = tzwork(:)%TIME
67  IF ( kp==SIZE(tpdate_wr,2) ) THEN
68  CALL write_surf(hselect,hprogram,yrecfm,tpdate_wr,iresp,hcomment=hcomment)
69  ENDIF
70  ELSE
71  CALL write_surf(hselect,hprogram,yrecfm,tzwork,iresp,hcomment=hcomment)
72  ENDIF
73 ENDIF
74 !
75 END SUBROUTINE write_tfield_1d_patch
real, parameter xundef
integer, parameter nundef
subroutine write_tfield_1d_patch(HSELECT, HPROGRAM, HRECFM, HCOMMENT, KP, KMASK, TFIELD_IN, KSIZE, TPDATE_WR)