SURFEX v8.1
General documentation of Surfex
local_trafos.F90
Go to the documentation of this file.
2 !**** LOCAL_TRAFOS transform localized quantities to other quantities
3 
4 ! Purpose.
5 ! --------
6 ! Transform wind speed, direction to components and vice versa
7 ! Other functions also: value extracted from an array with an index
8 ! defined from a second array
9 
10 !** Interface.
11 ! ----------
12 ! USE LOCAL_TRAFOS
13 
14 ! Author.
15 ! -------
16 ! H. Hersbach ECMWF
17 
18 ! Modifications.
19 ! --------------
20 ! Original: 2007-04-11
21 
22 ! 2009-09-04 C. Payan IVALFROMIDX added
23 ! allows to match an integer in an array from the index of an
24 ! other integer's array
25 
26 ! ------------------------------------------------------------------
27 
28 
29 USE parkind1 ,ONLY : jpim, jprm, jprd
30 USE yomhook ,ONLY : lhook, dr_hook
31 
32 IMPLICIT NONE
33 
34 PRIVATE
35 
36 INTERFACE ucom
37  MODULE PROCEDURE ucom4, ucom8
38 END INTERFACE
39 
40 INTERFACE vcom
41  MODULE PROCEDURE vcom4, vcom8
42 END INTERFACE
43 
44 INTERFACE uv2ff
45  MODULE PROCEDURE uv2ff4, uv2ff8
46 END INTERFACE
47 
48 INTERFACE uv2dd
49  MODULE PROCEDURE uv2dd4, uv2dd8
50 END INTERFACE
51 
52 PUBLIC ucom, vcom, uv2ff, uv2dd, ivalfromidx
53 
54 REAL(KIND=JPRM), PARAMETER :: parc4=360._jprm
55 REAL(KIND=JPRM), PARAMETER :: degcon4=3.14159265358979_jprm/180._jprm
56 
57 REAL(KIND=JPRD), PARAMETER :: parc8=360._jprd
58 REAL(KIND=JPRD), PARAMETER :: degcon8=3.14159265358979_jprd/180._jprd
59 
60 
61 CONTAINS
62 
63 !***********************************************************************
64 FUNCTION ucom4(PDD,PFF) RESULT(UCOM)
65 REAL(KIND=JPRM) :: UCOM
66 REAL(KIND=JPRM) ,INTENT(IN) :: PDD,PFF
67 REAL(KIND=JPRD) :: ZHOOK_HANDLE
68 
69 IF (lhook) CALL dr_hook('LOCAL_TRAFOS:UCOM',0,zhook_handle)
70 ucom = -pff * sin(pdd*degcon4)
71 IF (lhook) CALL dr_hook('LOCAL_TRAFOS:UCOM',1,zhook_handle)
72 END FUNCTION ucom4
73 
74 FUNCTION ucom8(PDD,PFF) RESULT(UCOM)
75 REAL(KIND=JPRD) :: UCOM
76 REAL(KIND=JPRD) ,INTENT(IN) :: PDD,PFF
77 REAL(KIND=JPRD) :: ZHOOK_HANDLE
78 
79 IF (lhook) CALL dr_hook('LOCAL_TRAFOS:UCOM',0,zhook_handle)
80 ucom = -pff * sin(pdd*degcon8)
81 IF (lhook) CALL dr_hook('LOCAL_TRAFOS:UCOM',1,zhook_handle)
82 END FUNCTION ucom8
83 
84 
85 !***********************************************************************
86 FUNCTION vcom4(PDD,PFF) RESULT(VCOM)
87 REAL(KIND=JPRM) :: VCOM
88 REAL(KIND=JPRM) ,INTENT(IN) :: PDD,PFF
89 REAL(KIND=JPRD) :: ZHOOK_HANDLE
90 
91 IF (lhook) CALL dr_hook('LOCAL_TRAFOS:VCOM',0,zhook_handle)
92 vcom = -pff * cos(pdd*degcon4)
93 IF (lhook) CALL dr_hook('LOCAL_TRAFOS:VCOM',1,zhook_handle)
94 END FUNCTION vcom4
95 
96 FUNCTION vcom8(PDD,PFF) RESULT(VCOM)
97 REAL(KIND=JPRD) :: VCOM
98 REAL(KIND=JPRD) ,INTENT(IN) :: PDD,PFF
99 REAL(KIND=JPRD) :: ZHOOK_HANDLE
100 
101 IF (lhook) CALL dr_hook('LOCAL_TRAFOS:VCOM',0,zhook_handle)
102 vcom = -pff * cos(pdd*degcon8)
103 IF (lhook) CALL dr_hook('LOCAL_TRAFOS:VCOM',1,zhook_handle)
104 END FUNCTION vcom8
105 
106 
107 !***********************************************************************
108 FUNCTION uv2ff4(PUU,PVV) RESULT(UV2FF)
109 REAL(KIND=JPRM) :: UV2FF
110 REAL(KIND=JPRM) ,INTENT(IN) :: PUU,PVV
111 REAL(KIND=JPRD) :: ZHOOK_HANDLE
112 
113 IF (lhook) CALL dr_hook('LOCAL_TRAFOS:UV2FF',0,zhook_handle)
114 uv2ff =sqrt(puu*puu+pvv*pvv)
115 IF (lhook) CALL dr_hook('LOCAL_TRAFOS:UV2FF',1,zhook_handle)
116 END FUNCTION uv2ff4
117 
118 FUNCTION uv2ff8(PUU,PVV) RESULT(UV2FF)
119 REAL(KIND=JPRD) :: UV2FF
120 REAL(KIND=JPRD) ,INTENT(IN) :: PUU,PVV
121 REAL(KIND=JPRD) :: ZHOOK_HANDLE
122 
123 IF (lhook) CALL dr_hook('LOCAL_TRAFOS:UV2FF',0,zhook_handle)
124 uv2ff =sqrt(puu*puu+pvv*pvv)
125 IF (lhook) CALL dr_hook('LOCAL_TRAFOS:UV2FF',1,zhook_handle)
126 END FUNCTION uv2ff8
127 
128 
129 !***********************************************************************
130 FUNCTION uv2dd4(PUU,PVV) RESULT(UV2DD)
131 REAL(KIND=JPRM) :: UV2DD
132 REAL(KIND=JPRM) ,INTENT(IN) :: PUU,PVV
133 REAL(KIND=JPRD) :: ZHOOK_HANDLE
134 
135 IF (lhook) CALL dr_hook('LOCAL_TRAFOS:UV2DD',0,zhook_handle)
136 
137 IF (puu == 0._jprm .AND. pvv == 0._jprm) THEN
138  uv2dd = 0.5_jprm*parc4
139 ELSE
140  uv2dd =mod(parc4+atan2(-puu,-pvv)/degcon4,parc4)
141 ENDIF
142 
143 IF (lhook) CALL dr_hook('LOCAL_TRAFOS:UV2DD',1,zhook_handle)
144 END FUNCTION uv2dd4
145 
146 FUNCTION uv2dd8(PUU,PVV) RESULT(UV2DD)
147 REAL(KIND=JPRD) :: UV2DD
148 REAL(KIND=JPRD) ,INTENT(IN) :: PUU,PVV
149 REAL(KIND=JPRD) :: ZHOOK_HANDLE
150 
151 IF (lhook) CALL dr_hook('LOCAL_TRAFOS:UV2DD',0,zhook_handle)
152 
153 IF (puu == 0._jprd .AND. pvv == 0._jprd) THEN
154  uv2dd = 0.5_jprd*parc8
155 ELSE
156  uv2dd =mod(parc8+atan2(-puu,-pvv)/degcon8,parc8)
157 ENDIF
158 
159 IF (lhook) CALL dr_hook('LOCAL_TRAFOS:UV2DD',1,zhook_handle)
160 END FUNCTION uv2dd8
161 
162 !***********************************************************************
163 FUNCTION ivalfromidx(KTABVAL,KTABIDX,KCOND,KDEFAULT)
164 INTEGER(KIND=JPIM) :: IVALFROMIDX
165 INTEGER(KIND=JPIM) ,DIMENSION(:) ,INTENT(IN) :: KTABVAL ,KTABIDX
166 INTEGER(KIND=JPIM) ,INTENT(IN) :: KCOND ,KDEFAULT
167 INTEGER(KIND=JPIM) :: JJ ,IMXIDX
168 REAL(KIND=JPRD) :: ZHOOK_HANDLE
169 
170 IF (lhook) CALL dr_hook('LOCAL_TRAFOS:IVALFROMIDX',0,zhook_handle)
171 
172 ivalfromidx=kdefault
173 imxidx=min(SIZE(ktabidx),SIZE(ktabval))
174 
175 DO jj=1,imxidx
176  IF (ktabidx(jj)==kcond) THEN
177  ivalfromidx=ktabval(jj)
178  EXIT
179  ENDIF
180 ENDDO
181 
182 IF (lhook) CALL dr_hook('LOCAL_TRAFOS:IVALFROMIDX',1,zhook_handle)
183 END FUNCTION ivalfromidx
184 
185 !***********************************************************************
186 END MODULE local_trafos
real(kind=jprd) function uv2ff8(PUU, PVV)
integer, parameter jpim
Definition: parkind1.F90:13
integer, parameter jprd
Definition: parkind1.F90:39
real(kind=jprd), parameter degcon8
real(kind=jprm), parameter parc4
real(kind=jprm) function vcom4(PDD, PFF)
real(kind=jprd), parameter parc8
real(kind=jprm) function uv2ff4(PUU, PVV)
real(kind=jprm) function ucom4(PDD, PFF)
real(kind=jprd) function vcom8(PDD, PFF)
integer, parameter jprm
Definition: parkind1.F90:30
integer(kind=jpim) function, public ivalfromidx(KTABVAL, KTABIDX, KCOND, KDEFAULT)
logical lhook
Definition: yomhook.F90:15
real(kind=jprd) function uv2dd8(PUU, PVV)
real(kind=jprm) function uv2dd4(PUU, PVV)
real(kind=jprm), parameter degcon4
real(kind=jprd) function ucom8(PDD, PFF)