SURFEX v8.1
General documentation of Surfex
trip_forcing.F90
Go to the documentation of this file.
1 ! ######
2 SUBROUTINE trip_forcing (TPG, &
3  KLUOUT,KLON,KLAT,KNB_TSTEP_RUN, &
4  PDRAIN,PRUNOFF,PSRC_FLOOD )
5 !######################################################################
6 !
7 !!**** *TRIP_FORCING* - prepare the forcing for running trip
8 !!
9 !! PURPOSE
10 !! -------
11 !!
12 !! AUTHOR
13 !! ------
14 !! B. decharme *Meteo France*
15 !!
16 !! MODIFICATIONS
17 !! -------------
18 !! Original 06/2008
19 !-------------------------------------------------------------------------------
20 !
21 !* 0. DECLARATIONS
22 ! ------------
23 !
24 !
25 USE modd_trip_grid, ONLY : trip_grid_t
26 !
29 !
30 !
31 USE modd_trip_par,ONLY : xundef
32 !
33 USE mode_rw_trip
34 !
35 USE yomhook ,ONLY : lhook, dr_hook
36 USE parkind1 ,ONLY : jprb
37 !
38 IMPLICIT NONE
39 !
40 !* 0.1 Declarations of arguments
41 ! -------------------------
42 !
43 !
44 TYPE(trip_grid_t), INTENT(INOUT) :: TPG
45 !
46 INTEGER, INTENT(IN) :: KLUOUT
47 INTEGER, INTENT(IN) :: KLON
48 INTEGER, INTENT(IN) :: KLAT
49 INTEGER, INTENT(IN) :: KNB_TSTEP_RUN
50 !
51 REAL, DIMENSION(KLON,KLAT,KNB_TSTEP_RUN), INTENT(OUT) :: PDRAIN
52 REAL, DIMENSION(KLON,KLAT,KNB_TSTEP_RUN), INTENT(OUT) :: PRUNOFF
53 REAL, DIMENSION(KLON,KLAT,KNB_TSTEP_RUN), INTENT(OUT) :: PSRC_FLOOD
54 !
55 !
56 !* 0.2 Declarations of local variables
57 ! -------------------------------
58 !
59 REAL, DIMENSION(KLON,KLAT,KNB_TSTEP_RUN) :: ZREAD_LATLON_DRAIN
60 REAL, DIMENSION(KLON,KLAT,KNB_TSTEP_RUN) :: ZREAD_LATLON_RUNOFF
61 REAL, DIMENSION(KLON,KLAT,KNB_TSTEP_RUN) :: ZREAD_LATLON_SRC_FLOOD
62 !
63 REAL, DIMENSION(KLON*KLAT,KNB_TSTEP_RUN) :: ZREAD_VECTOR_DRAIN
64 REAL, DIMENSION(KLON*KLAT,KNB_TSTEP_RUN) :: ZREAD_VECTOR_RUNOFF
65 REAL, DIMENSION(KLON*KLAT,KNB_TSTEP_RUN) :: ZREAD_VECTOR_SRC_FLOOD
66 !
67  CHARACTER(LEN=6) :: YVAR
68 INTEGER :: JLON,JLAT,JSTEP,ICOUNT
69 !
70 REAL(KIND=JPRB) :: ZHOOK_HANDLE
71 !
72 !-------------------------------------------------------------------------------
73 IF (lhook) CALL dr_hook('TRIP_FORCING',0,zhook_handle)
74 !
75 !* 1. Initialize :
76 ! ------------
77 !
78 pdrain(:,:,:) = 0.0
79 prunoff(:,:,:) = 0.0
80 psrc_flood(:,:,:) = 0.0
81 !
82 !-------------------------------------------------------------------------------
83 !
84 !* 2. Get fields :
85 ! ------------
86 !
87 IF(creadfrc=='LATLON')THEN
88 !
89 ! * Lat lon case
90 !
91  CALL read_trip(kluout,cfile_frc,cdrain ,zread_latlon_drain(:,:,:))
92  CALL read_trip(kluout,cfile_frc,crunoff,zread_latlon_runoff(:,:,:))
93 !
94  WHERE(zread_latlon_drain(:,:,:)==xundef)zread_latlon_drain(:,:,:)=0.0
95  WHERE(zread_latlon_runoff(:,:,:)==xundef)zread_latlon_runoff(:,:,:)=0.0
96 !
97  IF(len_trim(csrc_flood)/=0)THEN
98  CALL read_trip(kluout,cfile_frc,csrc_flood,zread_latlon_src_flood(:,:,:))
99  WHERE(zread_latlon_src_flood(:,:,:)==xundef)zread_latlon_src_flood(:,:,:)=0.0
100  ELSE
101  zread_latlon_src_flood(:,:,:) = 0.0
102  ENDIF
103 !
104  IF(lcumfrc)THEN
105  DO jstep = knb_tstep_run,2,-1
106  zread_latlon_drain(:,:,jstep) = zread_latlon_drain(:,:,jstep) - zread_latlon_drain(:,:,jstep-1)
107  zread_latlon_runoff(:,:,jstep) = zread_latlon_runoff(:,:,jstep) - zread_latlon_runoff(:,:,jstep-1)
108  zread_latlon_src_flood(:,:,jstep) = zread_latlon_src_flood(:,:,jstep) - zread_latlon_src_flood(:,:,jstep-1)
109  ENDDO
110  ENDIF
111 !
112  pdrain(:,:,:) = zread_latlon_drain(:,:,:)
113  prunoff(:,:,:) = zread_latlon_runoff(:,:,:)
114  psrc_flood(:,:,:) = zread_latlon_src_flood(:,:,:)
115 !
116 ELSE
117 !
118 ! * Vector case
119 !
120  CALL read_trip(kluout,cfile_frc,cdrain ,zread_vector_drain(:,:))
121  CALL read_trip(kluout,cfile_frc,crunoff,zread_vector_runoff(:,:))
122 !
123  WHERE(zread_vector_drain(:,:)==xundef)zread_vector_drain(:,:)=0.0
124  WHERE(zread_vector_runoff(:,:)==xundef)zread_vector_runoff(:,:)=0.0
125 !
126  IF(len_trim(csrc_flood)/=0)THEN
127  CALL read_trip(kluout,cfile_frc,csrc_flood,zread_vector_src_flood(:,:))
128  WHERE(zread_vector_src_flood(:,:)==xundef)zread_vector_src_flood(:,:)=0.0
129  ELSE
130  zread_vector_src_flood(:,:) = 0.0
131  ENDIF
132 !
133  IF(lcumfrc)THEN
134  DO jstep = knb_tstep_run,2,-1
135  zread_vector_drain(:,jstep) = zread_vector_drain(:,jstep) - zread_vector_drain(:,jstep-1)
136  zread_vector_runoff(:,jstep) = zread_vector_runoff(:,jstep) - zread_vector_runoff(:,jstep-1)
137  zread_vector_src_flood(:,jstep) = zread_vector_src_flood(:,jstep) - zread_vector_src_flood(:,jstep-1)
138  ENDDO
139  ENDIF
140 !
141  icount=0
142  DO jlat=1,klat
143  DO jlon=1,klon
144  icount=icount+1
145  pdrain(jlon,jlat,:)= zread_vector_drain(icount,:)
146  prunoff(jlon,jlat,:)= zread_vector_runoff(icount,:)
147  psrc_flood(jlon,jlat,:)= zread_vector_src_flood(icount,:)
148  ENDDO
149  ENDDO
150 !
151 ENDIF
152 !
153 DO jstep=1,knb_tstep_run
154  pdrain(:,:,jstep) = pdrain(:,:,jstep)*tpg%XAREA(:,:)
155  prunoff(:,:,jstep) = prunoff(:,:,jstep)*tpg%XAREA(:,:)
156  psrc_flood(:,:,jstep) = psrc_flood(:,:,jstep)*tpg%XAREA(:,:)
157 ENDDO
158 !
159 IF (lhook) CALL dr_hook('TRIP_FORCING',1,zhook_handle)
160 !-------------------------------------------------------------------------------
161 !
162 END SUBROUTINE trip_forcing
character(len=15) cfile_frc
subroutine trip_forcing(TPG, KLUOUT, KLON, KLAT, KNB_TSTEP_RUN, PDRAIN, PRUNOFF, PSRC_FLOOD)
Definition: trip_forcing.F90:5
character(len=8) cdrain
character(len=8) crunoff
integer, parameter jprb
Definition: parkind1.F90:32
logical lhook
Definition: yomhook.F90:15
character(len=8) csrc_flood
real, save xundef
character(len=6) creadfrc