SURFEX v8.1
General documentation of Surfex
gwf_int.F90
Go to the documentation of this file.
1 ! #################################################################
2  SUBROUTINE gwf_int(KLON,KLAT,PGRID_RES,PLAT,OMASK,PNUM_AQUI,PTRANS,PCR,PCC)
3 ! #################################################################
4 !
5 !* 0. DECLARATIONS
6 ! ------------
7 !
8 USE modd_trip_par, ONLY : xpi
9 !
10 USE yomhook ,ONLY : lhook, dr_hook
11 USE parkind1 ,ONLY : jprb
12 !
13 IMPLICIT NONE
14 !
15 !* 0.1 declarations of arguments
16 !
17 INTEGER, INTENT(IN) :: KLON
18 INTEGER, INTENT(IN) :: KLAT
19 REAL, INTENT(IN) :: PGRID_RES
20 REAL, DIMENSION(: ), INTENT(IN) :: PLAT
21 REAL, DIMENSION(:,:), INTENT(IN) :: PNUM_AQUI
22 REAL, DIMENSION(:,:), INTENT(IN) :: PTRANS
23 !
24 LOGICAL, DIMENSION(:,:), INTENT(IN) :: OMASK
25 !
26 REAL, DIMENSION(:,:), INTENT(INOUT) :: PCR
27 REAL, DIMENSION(:,:), INTENT(INOUT) :: PCC
28 !
29 !* 0.2 declarations of local variables
30 !
31 REAL, DIMENSION(KLON,KLAT) :: ZT
32 REAL :: ZDLAT
33 INTEGER :: JLON, JLAT
34 !
35 REAL(KIND=JPRB) :: ZHOOK_HANDLE
36 !-------------------------------------------------------------------------------
37 !
38 IF (lhook) CALL dr_hook('GWF_INT',0,zhook_handle)
39 !
40 ! * 1. CALCULATE TRANSMISSIVITY
41 ! ------------------------
42 !
43 zdlat = pgrid_res/2.0
44 !
45 zt(:,:)=0.0
46 WHERE(omask(:,:))
47  zt(:,:)=ptrans(:,:)
48 ENDWHERE
49 !
50 ! * 2. CALCULATE HORIZONTAL CONDUCTANCES TO THE RIGHT (CR)
51 ! AND TO THE TOP(CC)
52 ! ------------------
53 !
54 DO jlat = 1,klat
55  DO jlon = 1,klon
56 !
57 ! CALCULATE CONDUCTANCE TO THE RIGHT (CR)
58 !
59  IF(omask(jlon,jlat).AND.jlon<klon)THEN
60 !
61  IF(pnum_aqui(jlon,jlat)==pnum_aqui(jlon+1,jlat))THEN
62 ! variable head cells adjacent
63  pcr(jlon,jlat) = sqrt(zt(jlon+1,jlat)*zt(jlon,jlat))/(cos(plat(jlat)*xpi/180.))
64  ELSEIF(pnum_aqui(jlon,jlat)==0.0)THEN
65 ! adjacent constant head cells (flux to ocean)
66  pcr(jlon,jlat) = zt(jlon+1,jlat)/(cos(plat(jlat)*xpi/180.))
67  ELSEIF(pnum_aqui(jlon+1,jlat)==0.0)THEN
68 ! adjacent constant head cells (flux to ocean)
69  pcr(jlon,jlat) = zt(jlon,jlat)/(cos(plat(jlat)*xpi/180.))
70  ENDIF
71 !
72  ENDIF
73 !
74 ! CALCULATE CONDUCTANCE TO THE TOP (CC)
75 !
76  IF(omask(jlon,jlat).AND.jlat<klat)THEN
77 !
78  IF(pnum_aqui(jlon,jlat)==pnum_aqui(jlon,jlat+1))THEN
79 ! variable head cells adjacent
80  pcc(jlon,jlat) = sqrt(zt(jlon,jlat)*zt(jlon,jlat+1))*cos((plat(jlat)+zdlat)*xpi/180.)
81  ELSEIF(pnum_aqui(jlon,jlat)==0.0)THEN
82 ! adjacent constant head cells (flux to ocean)
83  pcc(jlon,jlat) = zt(jlon,jlat+1)*cos((plat(jlat)+zdlat)*xpi/180.)
84  ELSEIF(pnum_aqui(jlon,jlat+1)==0.0)THEN
85 ! adjacent constant head cells (flux to ocean)
86  pcc(jlon,jlat) = zt(jlon,jlat)*cos((plat(jlat)+zdlat)*xpi/180.)
87  ENDIF
88 !
89  ENDIF
90  ENDDO
91 ENDDO
92 !
93 IF (lhook) CALL dr_hook('GWF_INT',1,zhook_handle)
94 !
95 END SUBROUTINE gwf_int
96 !
subroutine gwf_int(KLON, KLAT, PGRID_RES, PLAT, OMASK, PNUM_AQUI, PTRANS
Definition: gwf_int.F90:3
integer, parameter jprb
Definition: parkind1.F90:32
logical lhook
Definition: yomhook.F90:15
real, save xpi