SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
init_write_bin.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 ! #########
6  SUBROUTINE init_write_bin (DGU, U, &
7  hrec,kpatch,owfl)
8 ! ######################
9 !
10 !!**** *INIT_WRITE_BIN_n* Initialize array name to be written and associated
11 !! unit number
12 !!
13 !! PURPOSE
14 !! -------
15 !
16 !!
17 !!** IMPLICIT ARGUMENTS
18 !! ------------------
19 !! None
20 !!
21 !! REFERENCE
22 !! ---------
23 !!
24 !! AUTHOR
25 !! ------
26 !! A. LEMONSU *Meteo France*
27 !!
28 !! MODIFICATIONS
29 !! -------------
30 !!
31 !
32 !* 0. DECLARATIONS
33 ! ------------
34 !
35 !
36 !
38 USE modd_surf_atm_n, ONLY : surf_atm_t
39 !
40 USE modd_io_surf_bin,ONLY:nmask, nfull, cmask
41 USE modd_write_bin, ONLY:nunit0, nvar, cvar, jpvar, nind
42 !
43 USE modi_abor1_sfx
44 USE modi_test_record_len
45 !
46 USE yomhook ,ONLY : lhook, dr_hook
47 USE parkind1 ,ONLY : jprb
48 !
49 IMPLICIT NONE
50 !
51 !
52 TYPE(diag_surf_atm_t), INTENT(INOUT) :: dgu
53 TYPE(surf_atm_t), INTENT(INOUT) :: u
54 !
55  CHARACTER(LEN=12), INTENT(IN) :: hrec
56 INTEGER, INTENT(IN) :: kpatch
57 LOGICAL, INTENT(INOUT) :: owfl
58 INTEGER :: ip, ivar, ifield, jfield
59 INTEGER :: ireclen
60 LOGICAL :: lmatch
61 REAL(KIND=JPRB) :: zhook_handle
62 !
63 !------------------------------------------------------------------------------
64 IF (lhook) CALL dr_hook('INIT_WRITE_BIN',0,zhook_handle)
65 ireclen=u%NDIM_FULL*kpatch*4
66 !
67 ivar=nunit0
68 DO ip=1, jpvar
69  IF (hrec==cvar(ip)) THEN
70  ivar=nvar(ip)
71  EXIT
72  ENDIF
73 ENDDO
74 !
75 !
76 IF (ivar.NE.nunit0) THEN
77 !
78  owfl=.true.
79 !
80 ELSE
81 !
82  IF (cvar(1).NE.' ') ivar=maxval(nvar(:))
83 !
84 !
85  IF (.NOT.dgu%LSELECT) THEN
86 !
87  IF ( (hrec(1:2)/='D_' ) .AND. &
88  (hrec(1:2)/='DX' ) .AND. &
89  (hrec(1:2)/='DY' ) .AND. &
90  (hrec(1:4)/='CLAY' ) .AND. &
91  (hrec(1:4)/='SAND' ) .AND. &
92  (hrec(1:2)/='ZS' ) .AND. &
93  (hrec(1:4)/='SSO_' ) .AND. &
94  (hrec(1:4)/='Q2M_' ) .AND. &
95  (hrec(1:4)/='RESA' ) .AND. &
96  (hrec(1:3)/='RI_' ) .AND. &
97  (hrec(1:5)/='REG_L' ) .AND. &
98  (hrec(1:3)/='AOS' ) .AND. &
99  (hrec(1:3)/='HO2' ) .AND. &
100  (hrec(1:3)/='RGL' ) .AND. &
101  (hrec(1:3)/='SWD' ) .AND. &
102  (hrec(1:3)/='SWU' ) .AND. &
103  (hrec(1:3)/='LWD' ) .AND. &
104  (hrec(1:3)/='LWU' ) .AND. &
105  (hrec(1:3)/='ALB' ) .AND. &
106  (hrec(1:2)/='DG' ) .AND. &
107  (hrec(1:2)/='CV' ) .AND. &
108  (hrec(1:5)/='GAMMA' ) .AND. &
109  (hrec(1:5)/='RSMIN' ) .AND. &
110  (hrec(1:5)/='WRMAX' ) .AND. &
111  (hrec(1:5)/='Z0REL' ) .AND. &
112  (hrec(1:5)/='Z0SEA' ) .AND. &
113  (hrec(1:7)/='Z0WATER' ) .AND. &
114  (hrec(4:6)/='_ZS' ) .AND. &
115  (hrec(1:7)/='VEGTYPE' ) .AND. &
116  (hrec(1:5)/='COVER' ) .AND. &
117  (hrec(1:5)/='IRRIG' ) .AND. &
118  (hrec(1:4)/='TI_R' ) .AND. &
119  (hrec(1:3)/='CD_' ) .AND. &
120  (hrec(1:3)/='CE_' ) .AND. &
121  (hrec(1:3)/='CH_' ) .AND. &
122  (hrec(1:4)/='FMU_' ) .AND. &
123  (hrec(1:4)/='FMV_' ) .AND. &
124  (hrec(1:5)/='DRAIN' ) .AND. &
125  (hrec(1:4)/='EVAP' ) .AND. &
126  (hrec(1:6)/='GFLUXC' ) .AND. &
127  (hrec(1:6)/='GFLUX_' ) .AND. &
128  (hrec(1:6)/='HORTON' ) .AND. &
129  (hrec(1:6)/='RUNOFF' ) .AND. &
130  (hrec(1:6)/='SNMELT' ) .AND. &
131  (hrec(1:6)/='DRIVEG' ) .AND. &
132  (hrec(1:2)/='Z0' ) ) THEN
133 
134  ivar = ivar+1
135  IF (ivar-nunit0>jpvar) THEN
136  CALL abor1_sfx('TOO MANY FIELDS TO BE WRITTEN IN THE "BINARY" TYPE TIMESERIES')
137  END IF
138  cvar(ivar-nunit0) = hrec
139  nvar(ivar-nunit0) = ivar
140  OPEN(unit=ivar,file=trim(hrec)//'.BIN',form='UNFORMATTED',access='DIRECT',recl=ireclen)
141  owfl=.true.
142 
143  ELSE
144  owfl=.false.
145  ENDIF
146 !
147  ELSE
148 !
149  ifield=0
150  DO jfield=1,SIZE(dgu%CSELECT)
151  IF (dgu%CSELECT(jfield)== ' ') EXIT
152  ifield=ifield+1
153  ENDDO
154 
155  CALL test_record_len(dgu, &
156  "ASCII ",hrec,lmatch)
157 
158  IF (.NOT. lmatch ) THEN
159 
160  ivar = ivar+1
161  IF (ivar-nunit0>jpvar) THEN
162  CALL abor1_sfx('TOO MANY FIELDS TO BE WRITTEN IN THE "BINARY" TYPE TIMESERIES')
163  END IF
164  cvar(ivar-nunit0) = hrec
165  nvar(ivar-nunit0) = ivar
166  OPEN(unit=ivar,file=trim(hrec)//'.BIN',form='UNFORMATTED',access='DIRECT',recl=ireclen)
167  owfl=.true.
168 
169  ELSE
170  owfl=.false.
171  ENDIF
172 
173  ENDIF
174 ENDIF
175 
176 nind=ivar
177 IF (lhook) CALL dr_hook('INIT_WRITE_BIN',1,zhook_handle)
178 !
179 !------------------------------------------------------------------------------
180 !
181 END SUBROUTINE init_write_bin
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:6
subroutine init_write_bin(DGU, U, HREC, KPATCH, OWFL)
subroutine test_record_len(DGU, HPROGRAM, HREC, ONOWRITE)