SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
read_seaflux_date.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 read_seaflux_date (O, &
7  hprogram,hinit,kluout,hatmfile,hatmfiletype,&
8  kyear,kmonth,kday,ptime,tptime)
9 ! #######################################################
10 !
11 !!**** *READ_SEAFLUX_DATE* - initializes the date TTIME of MODD_SEAFLUX
12 !!
13 !! PURPOSE
14 !! -------
15 !!
16 !!** METHOD
17 !! ------
18 !!
19 !! EXTERNAL
20 !! --------
21 !!
22 !!
23 !! IMPLICIT ARGUMENTS
24 !! ------------------
25 !!
26 !! REFERENCE
27 !! ---------
28 !!
29 !!
30 !! AUTHOR
31 !! ------
32 !! S.Malardel *Meteo France*
33 !!
34 !! MODIFICATIONS
35 !! -------------
36 !! Original 01/2004
37 !! P. Le Moigne 10/2005, Phasage Arome
38 !-------------------------------------------------------------------------------
39 !
40 !* 0. DECLARATIONS
41 ! ------------
42 !
43 !
44 !
45 !
46 USE modd_ocean_n, ONLY : ocean_t
47 !
49 USE modd_surf_par, ONLY : nundef, xundef
50 !
51 USE modi_read_pre_seaf_dat_conf
52 USE modi_read_pre_surfa_dat_conf
53 USE modi_read_prep_seaflux_conf
54 USE modi_read_prep_file_date
55 !
56 !
57 USE yomhook ,ONLY : lhook, dr_hook
58 USE parkind1 ,ONLY : jprb
59 !
60 USE modi_abor1_sfx
61 !
62 IMPLICIT NONE
63 !
64 !* 0.1 Declarations of arguments
65 ! -------------------------
66 !
67 !
68 TYPE(ocean_t), INTENT(INOUT) :: o
69 !
70  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! program calling
71  CHARACTER(LEN=3), INTENT(IN) :: hinit ! fields to initialize 'ALL', 'PRE', 'PGD'
72  CHARACTER(LEN=28), INTENT(IN) :: hatmfile ! atmospheric file name
73  CHARACTER(LEN=6), INTENT(IN) :: hatmfiletype! atmospheric file type
74 INTEGER, INTENT(IN) :: kyear ! current year (UTC)
75 INTEGER, INTENT(IN) :: kmonth ! current month (UTC)
76 INTEGER, INTENT(IN) :: kday ! current day (UTC)
77 REAL, INTENT(IN) :: ptime ! current time since midnight (UTC, s)
78 TYPE (date_time), INTENT(OUT) ::tptime ! time and date
79 INTEGER, INTENT(IN) :: kluout ! logical unit of output listing
80 !
81 !
82 !* 0.2 Declarations of local variables
83 ! -------------------------------
84 !
85  CHARACTER(LEN=28) :: yfile ! file name
86  CHARACTER(LEN=6) :: yfiletype ! file type
87  CHARACTER(LEN=28) :: yfilepgd ! file name
88  CHARACTER(LEN=6) :: yfilepgdtype ! file type
89  CHARACTER(LEN=28) :: yfilepgdin ! file name
90  CHARACTER(LEN=6) :: yfilepgdintype ! file type
91 !
92 LOGICAL :: gunif ! flag for prescribed uniform field
93 REAL(KIND=JPRB) :: zhook_handle
94 !
95 !-------------------------------------------------------------------------------
96 !
97 IF (lhook) CALL dr_hook('READ_SEAFLUX_DATE',0,zhook_handle)
98 yfile = ' '
99 yfiletype = ' '
100 !
101 yfilepgdin = ' '
102 yfilepgdintype = ' '
103 !
104 !-------------------------------------------------------------------------------
105 !
106 !* look for a date in the namelist NAM_PREP_SEAFLUX or NAM_PREP_SURF_ATM
107 !-----------------------------------------------------------------------
108 !
109  CALL read_pre_seaf_dat_conf(hprogram,kluout,tptime)
110 !
111 IF (tptime%TDATE%YEAR==nundef.OR.tptime%TDATE%MONTH==nundef &
112  .OR.tptime%TDATE%DAY==nundef.OR.tptime%TIME==xundef) THEN
113  CALL read_pre_surfa_dat_conf(hprogram,kluout,tptime)
114 END IF
115 !
116 !* If no date in the namelist, look for a file
117 ! ---------------
118 !
119 IF (tptime%TDATE%YEAR==nundef.OR.tptime%TDATE%MONTH==nundef &
120  .OR.tptime%TDATE%DAY==nundef.OR.tptime%TIME==xundef) THEN
121  !
122  CALL read_prep_seaflux_conf(o, &
123  hprogram,'DATE ',yfile,yfiletype,yfilepgd,yfilepgdtype,&
124  hatmfile,hatmfiletype,yfilepgdin,yfilepgdintype,kluout,gunif)
125  !
126  IF (len_trim(yfiletype)/=0) &
127  CALL read_prep_file_date(&
128  hprogram,yfile,yfiletype,tptime,kluout)
129  !
130 END IF
131 !
132 !* If no file and no date in the namelist, test if atmospheric date
133 !------------------------------------------------------------------
134 !
135 IF (len_trim(yfile)==0 .AND. (tptime%TDATE%YEAR==nundef.OR.tptime%TDATE%MONTH==nundef &
136  .OR.tptime%TDATE%DAY==nundef.OR.tptime%TIME==xundef)) THEN
137 !
138  IF (kyear /= nundef .AND. kmonth /= nundef .AND. kday /= nundef .AND. ptime /= xundef) THEN
139  tptime%TDATE%YEAR = kyear
140  tptime%TDATE%MONTH= kmonth
141  tptime%TDATE%DAY = kday
142  tptime%TIME = ptime
143  ELSE
144 !
145 !* If no file, no date in the namelist and no atmospheric date : stop
146 !-----------------------------------------------------------------------
147 !
148  CALL abor1_sfx('READ_SEAFLUX_DATE: DATE NOT SET')
149  END IF
150 ENDIF
151 !
152 !* Test of date coherence?
153 !------------------------
154 !
155 IF (kyear /= nundef .AND. kmonth /= nundef .AND. kday /= nundef .AND. ptime /= xundef) THEN
156  IF (kyear /= tptime%TDATE%YEAR .OR. kmonth /= tptime%TDATE%MONTH .OR. kday /= tptime%TDATE%DAY .AND. ptime /= tptime%TIME) THEN
157  WRITE(unit=kluout, fmt=*) 'WARNING in READ_SEAFLUX_DATE'
158  WRITE(unit=kluout, fmt=*) 'ATMOSPHERIC AND SURFACE DATES ARE NOT THE SAME'
159  WRITE(unit=kluout, fmt=*)'ATMOSPHERIC DATE in READ_SEAFLUX_DATE'
160  WRITE(unit=kluout, fmt='(" YEAR=",I4)') kyear
161  WRITE(unit=kluout, fmt='(" MONTH=",I4)') kmonth
162  WRITE(unit=kluout, fmt='(" DAY=",I4)') kday
163  WRITE(unit=kluout, fmt='(" TIME=",E13.6)') ptime
164  WRITE(unit=kluout, fmt=*)'SURFACE DATE in READ_SEAFLUX_DATE'
165  WRITE(unit=kluout, fmt='(" YEAR=",I4)') tptime%TDATE%YEAR
166  WRITE(unit=kluout, fmt='(" MONTH=",I4)') tptime%TDATE%MONTH
167  WRITE(unit=kluout, fmt='(" DAY=",I4)') tptime%TDATE%DAY
168  WRITE(unit=kluout, fmt='(" TIME=",E13.6)') tptime%TIME
169  ELSE
170  WRITE(unit=kluout, fmt=*)'SAME ATMOSPHERIC AND SURFACE DATES'
171  WRITE(unit=kluout, fmt=*)'DATE in READ_SEAFLUX_DATE'
172  WRITE(unit=kluout, fmt='(" YEAR=",I4," MONTH=",I4," DAY=",I4)') &
173  kyear,kmonth,kday
174  WRITE(unit=kluout, fmt='(" TIME=",E13.6)') ptime
175  ENDIF
176 ENDIF
177 IF (lhook) CALL dr_hook('READ_SEAFLUX_DATE',1,zhook_handle)
178 !------------------------------------------------------------------------------
179 !
180 END SUBROUTINE read_seaflux_date
subroutine read_prep_file_date(HPROGRAM, HFILE, HFILETYPE, TPTIME, KLUOUT)
subroutine read_pre_surfa_dat_conf(HPROGRAM, KLUOUT, TPTIME)
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:6
subroutine read_pre_seaf_dat_conf(HPROGRAM, KLUOUT, TPTIME)
subroutine read_seaflux_date(O, HPROGRAM, HINIT, KLUOUT, HATMFILE, HATMFILETYPE, KYEAR, KMONTH, KDAY, PTIME, TPTIME)
subroutine read_prep_seaflux_conf(O, HPROGRAM, HVAR, HFILE, HFILETYPE, HFILEPGD, HFILEPGDTYPE, HATMFILE, HATMFILETYPE, HPGDFILE, HPGDFILETYPE, KLUOUT, OUNIF)