SURFEX v8.1
General documentation of Surfex
put_in_time.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 put_in_time(HNAME,HTYPE,NTIME1,NTIME2,PDATA)
6 
7 USE yomhook ,ONLY : lhook, dr_hook
8 USE parkind1 ,ONLY : jprb
9 
10 USE modi_abor1_sfx
11 
12 IMPLICIT NONE
13 
14  CHARACTER(LEN=*), INTENT(IN) :: HNAME
15  CHARACTER(LEN=3), INTENT(IN) :: HTYPE
16 
17 INTEGER, INTENT(IN) :: NTIME1
18 INTEGER, INTENT(IN) :: NTIME2
19 REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PDATA
20 
21  CHARACTER(LEN=2) :: YTIME1, YTIME2
22 INTEGER :: I1, I2, JJ, JTIME
23 REAL, DIMENSION(SIZE(PDATA,1),NTIME1,SIZE(PDATA,3)) :: ZDATA
24 REAL(KIND=JPRB) :: ZHOOK_HANDLE
25 
26 
27 IF (lhook) CALL dr_hook('PUT_IN_TIME',0,zhook_handle)
28 
29 IF (ntime1.LE.0 .OR. ntime1.GT.ntime2) THEN
30  CALL abor1_sfx("PUT_IN_TIME: NTIME1 MUST BE <= NTIME2 AND > 0")
31 ELSEIF (ntime1==ntime2) THEN
32  IF (lhook) CALL dr_hook('PUT_IN_TIME',1,zhook_handle)
33  RETURN
34 ELSEIF (ntime1==1) THEN
35  DO jj=2,ntime2
36  pdata(:,jj,:)=pdata(:,1,:)
37  ENDDO
38 ELSEIF (ntime1==2) THEN !2 values: winter and summer
39  IF (ntime2.EQ.36) THEN
40  zdata=pdata(:,1:2,:)
41  DO jj=1,8
42  pdata(:,jj,:)=zdata(:,1,:) !until 20 march
43  ENDDO
44  DO jj=9,26
45  pdata(:,jj,:)=zdata(:,2,:) !from 21 march to 20 september
46  ENDDO
47  DO jj=27,36
48  pdata(:,jj,:)=zdata(:,1,:) !from 21 september to 31 december
49  ENDDO
50  ELSEIF (ntime2.EQ.12) THEN
51  zdata=pdata(:,1:2,:)
52  DO jj=1,3
53  pdata(:,jj,:)=zdata(:,1,:) !until 20 march
54  ENDDO
55  DO jj=4,9
56  pdata(:,jj,:)=zdata(:,2,:) !from 21 march to 20 september
57  ENDDO
58  DO jj=10,12
59  pdata(:,jj,:)=zdata(:,1,:) !from 21 september to 31 december
60  ENDDO
61  ELSE
62  CALL abor1_sfx('PUT_IN_TIME: WITH NTIME1=2, NTIME2 MUST BE =36 OR =12 (WINTER AND SUMMER VALUES) '//&
63  'PROBLEM VAR '//hname//''//htype)
64  ENDIF
65 ELSE
66  i1=ntime2/ntime1
67  i2=ntime2/i1
68  IF (i2.NE.ntime1)THEN
69  WRITE(ytime1,'(I2.2)')ntime1
70  WRITE(ytime2,'(I2.2)')ntime2
71  CALL abor1_sfx('PUT_INT_TIME: NTIME2 (='//ytime2(1:len_trim(ytime2)) // &
72  ') MUST BE A MULTIPLE OF NTIME1 (='//ytime1(1:len_trim(ytime1))// &
73  ') PROBLEM VAR '//hname//''//htype)
74  ENDIF
75  zdata=pdata(:,1:ntime1,:)
76  DO jtime=1,ntime1
77  DO jj=(jtime-1)*i1+1,jtime*i1
78  pdata(:,jj,:)=zdata(:,jtime,:)
79  ENDDO
80  ENDDO
81 ENDIF
82 
83 IF (lhook) CALL dr_hook('PUT_IN_TIME',1,zhook_handle)
84 
85 END SUBROUTINE put_in_time
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:7
subroutine put_in_time(HNAME, HTYPE, NTIME1, NTIME2, PDATA)
Definition: put_in_time.F90:6
integer, parameter jprb
Definition: parkind1.F90:32
logical lhook
Definition: yomhook.F90:15