SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
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.NE.36) THEN
40  CALL abor1_sfx('PUT_IN_TIME: WITH NTIME1=2, NTIME2 MUST BE =36 (WINTER AND SUMMER VALUES) '//&
41  'PROBLEM VAR '//hname//''//htype)
42  ENDIF
43  zdata=pdata(:,1:2,:)
44  DO jj=1,8
45  pdata(:,jj,:)=zdata(:,1,:) !until 20 march
46  ENDDO
47  DO jj=9,26
48  pdata(:,jj,:)=zdata(:,2,:) !from 21 march to 20 september
49  ENDDO
50  DO jj=27,36
51  pdata(:,jj,:)=zdata(:,1,:) !from 21 september to 31 december
52  ENDDO
53 ELSE
54  i1=ntime2/ntime1
55  i2=ntime2/i1
56  IF (i2.NE.ntime1)THEN
57  WRITE(ytime1,'(I2.2)')ntime1
58  WRITE(ytime2,'(I2.2)')ntime2
59  CALL abor1_sfx('PUT_INT_TIME: NTIME2 (='//ytime2(1:len_trim(ytime2)) // &
60  ') MUST BE A MULTIPLE OF NTIME1 (='//ytime1(1:len_trim(ytime1))// &
61  ') PROBLEM VAR '//hname//''//htype)
62  ENDIF
63  zdata=pdata(:,1:ntime1,:)
64  DO jtime=1,ntime1
65  DO jj=(jtime-1)*i1+1,jtime*i1
66  pdata(:,jj,:)=zdata(:,jtime,:)
67  ENDDO
68  ENDDO
69 ENDIF
70 
71 IF (lhook) CALL dr_hook('PUT_IN_TIME',1,zhook_handle)
72 
73 END SUBROUTINE put_in_time
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:6
subroutine put_in_time(HNAME, HTYPE, NTIME1, NTIME2, PDATA)
Definition: put_in_time.F90:5