SURFEX v8.1
General documentation of Surfex
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 (OMERCATOR, &
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 LOGICAL, INTENT(IN) :: OMERCATOR
68 !
69  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling
70  CHARACTER(LEN=3), INTENT(IN) :: HINIT ! fields to initialize 'ALL', 'PRE', 'PGD'
71  CHARACTER(LEN=28), INTENT(IN) :: HATMFILE ! atmospheric file name
72  CHARACTER(LEN=6), INTENT(IN) :: HATMFILETYPE! atmospheric file type
73 INTEGER, INTENT(IN) :: KYEAR ! current year (UTC)
74 INTEGER, INTENT(IN) :: KMONTH ! current month (UTC)
75 INTEGER, INTENT(IN) :: KDAY ! current day (UTC)
76 REAL, INTENT(IN) :: PTIME ! current time since midnight (UTC, s)
77 type(date_time), INTENT(OUT) ::tptime ! time and date
78 INTEGER, INTENT(IN) :: KLUOUT ! logical unit of output listing
79 !
80 !
81 !* 0.2 Declarations of local variables
82 ! -------------------------------
83 !
84  CHARACTER(LEN=28) :: YFILE ! file name
85  CHARACTER(LEN=6) :: YFILETYPE ! file type
86  CHARACTER(LEN=28) :: YFILEPGD ! file name
87  CHARACTER(LEN=6) :: YFILEPGDTYPE ! file type
88  CHARACTER(LEN=28) :: YFILEPGDIN ! file name
89  CHARACTER(LEN=6) :: YFILEPGDINTYPE ! file type
90 !
91 LOGICAL :: GUNIF ! flag for prescribed uniform field
92 REAL(KIND=JPRB) :: ZHOOK_HANDLE
93 !
94 !-------------------------------------------------------------------------------
95 !
96 IF (lhook) CALL dr_hook('READ_SEAFLUX_DATE',0,zhook_handle)
97 yfile = ' '
98 yfiletype = ' '
99 !
100 yfilepgdin = ' '
101 yfilepgdintype = ' '
102 !
103 !-------------------------------------------------------------------------------
104 !
105 !* look for a date in the namelist NAM_PREP_SEAFLUX or NAM_PREP_SURF_ATM
106 !-----------------------------------------------------------------------
107 !
108  CALL read_pre_seaf_dat_conf(hprogram,kluout,tptime)
109 !
110 IF (tptime%TDATE%YEAR==nundef.OR.tptime%TDATE%MONTH==nundef &
111  .OR.tptime%TDATE%DAY==nundef.OR.tptime%TIME==xundef) THEN
112  CALL read_pre_surfa_dat_conf(hprogram,kluout,tptime)
113 END IF
114 !
115 !* If no date in the namelist, look for a file
116 ! ---------------
117 !
118 IF (tptime%TDATE%YEAR==nundef.OR.tptime%TDATE%MONTH==nundef &
119  .OR.tptime%TDATE%DAY==nundef.OR.tptime%TIME==xundef) THEN
120  !
121  CALL read_prep_seaflux_conf(omercator, &
122  hprogram,'DATE ',yfile,yfiletype,yfilepgd,yfilepgdtype,&
123  hatmfile,hatmfiletype,yfilepgdin,yfilepgdintype,kluout,gunif)
124  !
125  IF (len_trim(yfiletype)/=0) &
126  CALL read_prep_file_date(&
127  hprogram,yfile,yfiletype,tptime,kluout)
128  !
129 END IF
130 !
131 !* If no file and no date in the namelist, test if atmospheric date
132 !------------------------------------------------------------------
133 !
134 IF (len_trim(yfile)==0 .AND. (tptime%TDATE%YEAR==nundef.OR.tptime%TDATE%MONTH==nundef &
135  .OR.tptime%TDATE%DAY==nundef.OR.tptime%TIME==xundef)) THEN
136 !
137  IF (kyear /= nundef .AND. kmonth /= nundef .AND. kday /= nundef .AND. ptime /= xundef) THEN
138  tptime%TDATE%YEAR = kyear
139  tptime%TDATE%MONTH= kmonth
140  tptime%TDATE%DAY = kday
141  tptime%TIME = ptime
142  ELSE
143 !
144 !* If no file, no date in the namelist and no atmospheric date : stop
145 !-----------------------------------------------------------------------
146 !
147  CALL abor1_sfx('READ_SEAFLUX_DATE: DATE NOT SET')
148  END IF
149 ENDIF
150 !
151 !* Test of date coherence?
152 !------------------------
153 !
154 IF (kyear /= nundef .AND. kmonth /= nundef .AND. kday /= nundef .AND. ptime /= xundef) THEN
155  IF (kyear /= tptime%TDATE%YEAR .OR. kmonth /= tptime%TDATE%MONTH .OR. kday /= tptime%TDATE%DAY .AND. ptime /= tptime%TIME) THEN
156  WRITE(unit=kluout, fmt=*) 'WARNING in READ_SEAFLUX_DATE'
157  WRITE(unit=kluout, fmt=*) 'ATMOSPHERIC AND SURFACE DATES ARE NOT THE SAME'
158  WRITE(unit=kluout, fmt=*)'ATMOSPHERIC DATE in READ_SEAFLUX_DATE'
159  WRITE(unit=kluout, fmt='(" YEAR=",I4)') kyear
160  WRITE(unit=kluout, fmt='(" MONTH=",I4)') kmonth
161  WRITE(unit=kluout, fmt='(" DAY=",I4)') kday
162  WRITE(unit=kluout, fmt='(" TIME=",E13.6)') ptime
163  WRITE(unit=kluout, fmt=*)'SURFACE DATE in READ_SEAFLUX_DATE'
164  WRITE(unit=kluout, fmt='(" YEAR=",I4)') tptime%TDATE%YEAR
165  WRITE(unit=kluout, fmt='(" MONTH=",I4)') tptime%TDATE%MONTH
166  WRITE(unit=kluout, fmt='(" DAY=",I4)') tptime%TDATE%DAY
167  WRITE(unit=kluout, fmt='(" TIME=",E13.6)') tptime%TIME
168  ELSE
169  WRITE(unit=kluout, fmt=*)'SAME ATMOSPHERIC AND SURFACE DATES'
170  WRITE(unit=kluout, fmt=*)'DATE in READ_SEAFLUX_DATE'
171  WRITE(unit=kluout, fmt='(" YEAR=",I4," MONTH=",I4," DAY=",I4)') &
172  kyear,kmonth,kday
173  WRITE(unit=kluout, fmt='(" TIME=",E13.6)') ptime
174  ENDIF
175 ENDIF
176 IF (lhook) CALL dr_hook('READ_SEAFLUX_DATE',1,zhook_handle)
177 !------------------------------------------------------------------------------
178 !
179 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:7
real, parameter xundef
subroutine read_pre_seaf_dat_conf(HPROGRAM, KLUOUT, TPTIME)
integer, parameter jprb
Definition: parkind1.F90:32
subroutine read_prep_seaflux_conf(OMERCATOR, HPROGRAM, HVAR, HFILE,
integer, parameter nundef
logical lhook
Definition: yomhook.F90:15
subroutine read_seaflux_date(OMERCATOR, HPROGRAM, HINIT, KLUOUT, HATMFILE, HATMF