SURFEX v8.1
General documentation of Surfex
gwf_budget.F90
Go to the documentation of this file.
1 !####################################################################
2 SUBROUTINE gwf_budget(KLON,KLAT,OMASK,PHGROUND,PHDRAIN_RIV, &
3  PGWDEEP,PCR,PCC,PCRIV,PQGCELL,PQDRAIN )
4 !####################################################################
5 !
6 !* 0. DECLARATIONS
7 ! ------------
8 !
10 !
11 USE yomhook ,ONLY : lhook, dr_hook
12 USE parkind1 ,ONLY : jprb
13 !
14 IMPLICIT NONE
15 !
16 !* 0.1 declarations of arguments
17 !
18 INTEGER, INTENT(IN) :: KLON
19 INTEGER, INTENT(IN) :: KLAT
20 !
21 LOGICAL, DIMENSION(:,:), INTENT(IN) :: OMASK
22 !
23 REAL, DIMENSION(:,:), INTENT(IN) :: PHGROUND
24 REAL, DIMENSION(:,:), INTENT(IN) :: PHDRAIN_RIV
25 REAL, DIMENSION(:,:), INTENT(IN) :: PGWDEEP
26 REAL, DIMENSION(:,:), INTENT(IN) :: PCR
27 REAL, DIMENSION(:,:), INTENT(IN) :: PCC
28 REAL, DIMENSION(:,:), INTENT(IN) :: PCRIV
29 !
30 REAL, DIMENSION(:,:), INTENT(INOUT) :: PQGCELL
31 REAL, DIMENSION(:,:), INTENT(INOUT) :: PQDRAIN
32 !
33 !* 0.2 declarations of local variables
34 !
35 INTEGER :: JLON,JLAT,IX,IY
36 !
37 REAL, DIMENSION(KLON,KLAT) :: ZTOP
38 REAL, DIMENSION(KLON,KLAT) :: ZBOTTOM
39 REAL, DIMENSION(KLON,KLAT) :: ZLEFT
40 REAL, DIMENSION(KLON,KLAT) :: ZRIGHT
41 !
42 REAL(KIND=JPRB) :: ZHOOK_HANDLE
43 !-------------------------------------------------------------------------------
44 !
45 IF (lhook) CALL dr_hook('GWF_BUDGET',0,zhook_handle)
46 !
47 ! * 1. CALCULATE FLOW BETWEEN ADJACENT CELL
48 ! -------------------------------------
49 !
50 ztop(:,:) = 0.0
51 zbottom(:,:) = 0.0
52 zleft(:,:) = 0.0
53 zright(:,:) = 0.0
54 !
55 DO jlat = 1,klat
56  DO jlon = 1,klon
57 !
58 ! Skip no-flow and constant-head cells
59  IF (omask(jlon,jlat)) THEN
60 
61 ! Calculate flow through the right face
62  ix=min(jlon+1,klon)
63  zright(jlon,jlat) = pcr(jlon,jlat) *(phground(ix,jlat)-phground(jlon,jlat))
64 !
65 ! Calculate flow through the left face
66  ix=max(jlon-1,1)
67  zleft(jlon,jlat) = pcr(ix,jlat)*(phground(ix,jlat)-phground(jlon,jlat))
68 !
69 ! Calculate flow through the bottom face
70  iy=max(jlat-1,1)
71  zbottom(jlon,jlat) = pcc(jlon,iy)*(phground(jlon,iy)-phground(jlon,jlat))
72 !
73 ! Calculate flow through the top face
74  iy=min(jlat+1,klat)
75  ztop(jlon,jlat) = pcc(jlon,jlat) *(phground(jlon,iy)-phground(jlon,jlat))
76 !
77  pqgcell(jlon,jlat) = (ztop(jlon,jlat)+zbottom(jlon,jlat)+zleft(jlon,jlat)+zright(jlon,jlat))*xrholw
78 !
79  ENDIF
80 !
81  ENDDO
82 ENDDO
83 !
84 ! * 2. CALCULATE FLOW TO AQUIFER [kg/s]
85 ! --------------------------------
86 !
87 pqdrain(:,:) = 0.0
88 WHERE(omask(:,:))
89  pqdrain(:,:) = (pcriv(:,:)*(phground(:,:)-phdrain_riv(:,:))-pgwdeep(:,:))*xrholw
90 ENDWHERE
91 !
92 IF (lhook) CALL dr_hook('GWF_BUDGET',1,zhook_handle)
93 !
94 END SUBROUTINE gwf_budget
95 
96 
real, save xrholw
integer, parameter jprb
Definition: parkind1.F90:32
logical lhook
Definition: yomhook.F90:15
subroutine gwf_budget(KLON, KLAT, OMASK, PHGROUND, PHDRAIN_RIV, PGWDEEP, PCR, PCC, PCRIV, PQGCELL, PQDRAIN)
Definition: gwf_budget.F90:4