SURFEX v8.1
General documentation of Surfex
eggangles.F90
Go to the documentation of this file.
1 MODULE eggangles
2 
3 ! Version 2009.0317 by JD GRIL
4 
5 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! DOC !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6 ! All these functions make a package tool for angle.
7 ! In functions where appears DOM and UNIT indicate the domain of validity :
8 ! DOM UNIT Longitudes Latitudes
9 ! "-+" "D" [-180.0,180.0[ [-90.0,90.0]
10 ! "0+" "D" [0.0,360.0[ [-90.0,90.0]
11 ! "-+" "R" [-pi,pi[ [-pi/2.0,pi/2.0]
12 ! "0+" "R" [0,pi[ [-pi/2.0,pi/2.0]
13 ! (defaults values are DOM = "-+" and UNIT = "D").
14 
15 ! All functions work for scalar or one dimensional array in input.
16 
17 ! -1- ANGLE_DOMAIN function
18 
19 !->function ANGLE_DOMAIN(ALPHA,PI,DOM,UNIT)
20 
21 ! Converts longitudes in UNIT values under choisen DOMain.
22 ! The input (ALPHA) is a longitude (REAL) or a LOLA type structure ( or
23 ! array of them). The output has the same type than the input.
24 
25 ! -2- VAL_ functions
26 
27 !->integer function VAL_LAT(LAT,NUM_ERR,PI,UNIT)
28 
29 ! Test validity of LAT [-90.0,90.0]
30 ! Return -1 or NUM_ERR if it's present in error case, 1 if it's ok.
31 
32 !->integer function VAL_LON(LON,NUM_ERR,PI,DOM,UNIT)
33 
34 ! Test validity of LON [-180.0,180.0[ or [0.0,360.0[
35 ! Return -1 or NUM_ERR if it's present in error case, 1 if it's ok.
36 
37 !->integer function VAL_COORD(PT_COORD,NUM_ERR,PI,DOM,UNIT)
38 
39 ! Test validity of LAT [-90.0,90.0] and LON [-180.0,180.0[ or [0.0,360.0[
40 ! (depends the value of DOM) of a PT_COORD structure of type LOLA (in UNIT).
41 ! Return -1 or NUM_ERR if it's present in error case, 1 if it's ok.
42 
43 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
44 ! Author : Jean-Daniel GRIL , CNRM/GMAP/COOPE , Februry 08 2000
45 
46 ! Modified:
47 ! In April 2001 by M. Janousek (A few modifs to port the deck to the model code)
48 ! In November 2004 by JD Gril : more routines to manage angles
49 ! : debug VAL_COORD_x
50 ! 2005 by JD Gril : more functions for Mercator RT
51 ! In June 2006 by JD Gril : line too long (L607 > 132 col.)
52 ! July 2008 by JD Gril : add 2 new functions to compute distance or size
53 ! : on longitude : DIST_2REF and SIZE_W2E
54 ! March 2009 by JD Gril : add Vector routines
55 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
56 
57 ! ******************* Definition of parameters **********************************
58 
59 ! Include Kinds
60 ! -------------
61 
62 !* kindef: define default KIND macros
63 ! --------------------------------------
64 USE parkind1 ,ONLY : jpim, jprd
65 USE yomhook ,ONLY : lhook, dr_hook
66 ! --------------------------------------
67 
68 IMPLICIT NONE
69 
70 ! ******************* Definition of type ****************************************
71 
72 TYPE lola
73  sequence
74  REAL(KIND=JPRD) :: lon, lat
75 END TYPE lola
76 
77 ! ******************* Definition of Interface ***********************************
78 
79 INTERFACE angle_domain
81 END INTERFACE
82 INTERFACE val_lat
83  MODULE PROCEDURE val_lat_s, val_lat_v
84 END INTERFACE
85 INTERFACE val_lon
86  MODULE PROCEDURE val_lon_s, val_lon_v
87 END INTERFACE
88 INTERFACE val_coord
89  MODULE PROCEDURE val_coord_s, val_coord_v
90 END INTERFACE
91 INTERFACE lolad
92  MODULE PROCEDURE lolad_s, lolad_v
93 END INTERFACE
94 INTERFACE lolar
95  MODULE PROCEDURE lolar_s, lolar_v
96 END INTERFACE
97 INTERFACE minimax
98  MODULE PROCEDURE minimax_s, minimax_v
99 END INTERFACE
100 INTERFACE cosin_to_angle
101  MODULE PROCEDURE cosin_to_angle_s, cosin_to_angle_v
102 END INTERFACE
103 INTERFACE p_asin
104  MODULE PROCEDURE p_asin_s, p_asin_v
105 END INTERFACE
106 INTERFACE p_acos
107  MODULE PROCEDURE p_acos_s, p_acos_v
108 END INTERFACE
109 INTERFACE dist_2ref
110  MODULE PROCEDURE dist_2ref_s, dist_2ref_v, dist_2ref_l
111 END INTERFACE
112 INTERFACE size_w2e
113  MODULE PROCEDURE size_w2e_s, size_w2e_l
114 END INTERFACE
115 CONTAINS
116 
117 ! =================== FUNCTIONS =================================================
118 
119 ! ******************* Independants functions ************************************
120 
121 ! -------------------------------------------------------------------------------
122 REAL(KIND=JPRD) FUNCTION angle_domain_rs(ALPHA,PI,DOM,UNIT) RESULT (BETA)
123 REAL(KIND=JPRD), INTENT(IN) :: ALPHA
124 CHARACTER (LEN=2), INTENT(IN), OPTIONAL :: DOM
125 CHARACTER (LEN=1), INTENT(IN), OPTIONAL :: UNIT
126 REAL(KIND=JPRD), INTENT(IN), OPTIONAL :: PI
127 
128 
129 REAL(KIND=JPRD) :: CVT, TPI, M
130 CHARACTER (LEN=2) :: TDOM
131 CHARACTER (LEN=1) :: TUNIT
132 REAL(KIND=JPRD) :: ZHOOK_HANDLE
133 
134 IF (lhook) CALL dr_hook('EGGANGLES:ANGLE_DOMAIN_RS',0,zhook_handle)
135 IF (PRESENT(pi)) THEN
136  tpi = pi
137 ELSE
138  tpi = asin(1.0_jprd)*2.0_jprd
139 ENDIF
140 IF (PRESENT(dom)) THEN
141  IF ((dom=='0+').OR.(dom=='-+')) THEN
142  tdom = dom
143  ELSE
144  tdom = "-+"
145  ENDIF
146 ELSE
147  tdom = "-+"
148 ENDIF
149 IF (PRESENT(unit)) THEN
150  IF ((unit=='R').OR.(unit=='D')) THEN
151  tunit = unit
152  ELSE
153  tunit = "D"
154  ENDIF
155 ELSE
156  tunit = "D"
157 ENDIF
158 
159 IF (tunit=='R') THEN
160  cvt = tpi
161 ELSE
162  cvt = 180.0_jprd
163 ENDIF
164 
165 IF (tdom=='-+') THEN
166  m = mod(alpha,cvt)
167  beta = (m-cvt*mod(REAL(INT(ALPHA/CVT),KIND=JPRD),2.0_JPRD))*sign(1.0_jprd,alpha)*sign(1.0_jprd,m)
168 ELSE
169  m = mod(alpha,2.0_jprd*cvt)
170  beta = m-2.0_jprd*cvt*(sign(0.5_jprd,alpha)-0.5_jprd)
171 ENDIF
172 IF (lhook) CALL dr_hook('EGGANGLES:ANGLE_DOMAIN_RS',1,zhook_handle)
173 END FUNCTION angle_domain_rs
174 ! -------------------------------------------------------------------------------
175 type(lola) FUNCTION angle_domain_lolas(ALPHA,PI,DOM,UNIT) RESULT (BETA)
176 type(lola), INTENT(IN) :: alpha
177 CHARACTER (LEN=2), INTENT(IN), OPTIONAL :: DOM
178 CHARACTER (LEN=1), INTENT(IN), OPTIONAL :: UNIT
179 REAL(KIND=JPRD), INTENT(IN), OPTIONAL :: PI
180 
181 REAL(KIND=JPRD) :: TPI
182 CHARACTER (LEN=2) :: TDOM
183 CHARACTER (LEN=1) :: TUNIT
184 REAL(KIND=JPRD) :: ZHOOK_HANDLE
185 
186 IF (lhook) CALL dr_hook('EGGANGLES:ANGLE_DOMAIN_LOLAS',0,zhook_handle)
187 IF (PRESENT(pi)) THEN
188  tpi = pi
189 ELSE
190  tpi = asin(1.0_jprd)*2.0_jprd
191 ENDIF
192 IF (PRESENT(dom)) THEN
193  IF ((dom=='0+').OR.(dom=='-+')) THEN
194  tdom = dom
195  ELSE
196  tdom = "-+"
197  ENDIF
198 ELSE
199  tdom = "-+"
200 ENDIF
201 IF (PRESENT(unit)) THEN
202  IF ((unit=='R').OR.(unit=='D')) THEN
203  tunit = unit
204  ELSE
205  tunit = "D"
206  ENDIF
207 ELSE
208  tunit = "D"
209 ENDIF
210 
211 beta%LON = angle_domain(alpha%LON,tpi,tdom,tunit)
212 beta%LAT = alpha%LAT
213 IF (lhook) CALL dr_hook('EGGANGLES:ANGLE_DOMAIN_LOLAS',1,zhook_handle)
214 END FUNCTION angle_domain_lolas
215 ! -------------------------------------------------------------------------------
216 FUNCTION angle_domain_rv(ALPHA,PI,DOM,UNIT) RESULT (BETA)
217 REAL(KIND=JPRD), DIMENSION(:), INTENT(IN) :: ALPHA
218 CHARACTER (LEN=2), INTENT(IN), OPTIONAL :: DOM
219 CHARACTER (LEN=1), INTENT(IN), OPTIONAL :: UNIT
220 REAL(KIND=JPRD), INTENT(IN), OPTIONAL :: PI
221 REAL(KIND=JPRD), DIMENSION(SIZE(ALPHA)) :: BETA
222 
223 REAL(KIND=JPRD) :: CVT, TPI
224 REAL(KIND=JPRD), DIMENSION(SIZE(ALPHA)) :: Z_M
225 CHARACTER (LEN=2) :: TDOM
226 CHARACTER (LEN=1) :: TUNIT
227 REAL(KIND=JPRD) :: ZHOOK_HANDLE
228 
229 IF (lhook) CALL dr_hook('EGGANGLES:ANGLE_DOMAIN_RV',0,zhook_handle)
230 IF (PRESENT(pi)) THEN
231  tpi = pi
232 ELSE
233  tpi = asin(1.0_jprd)*2.0_jprd
234 ENDIF
235 IF (PRESENT(dom)) THEN
236  IF ((dom=='0+').OR.(dom=='-+')) THEN
237  tdom = dom
238  ELSE
239  tdom = "-+"
240  ENDIF
241 ELSE
242  tdom = "-+"
243 ENDIF
244 IF (PRESENT(unit)) THEN
245  IF ((unit=='R').OR.(unit=='D')) THEN
246  tunit = unit
247  ELSE
248  tunit = "D"
249  ENDIF
250 ELSE
251  tunit = "D"
252 ENDIF
253 
254 IF (tunit=='R') THEN
255  cvt = tpi
256 ELSE
257  cvt = 180.0_jprd
258 ENDIF
259 
260 IF (tdom=='-+') THEN
261  z_m(:) = mod(alpha(:),cvt)
262  beta = (z_m(:)-cvt*mod(REAL(INT(ALPHA(:)/CVT),KIND=JPRD),2.0_JPRD))*sign(1.0_jprd,alpha(:))*sign(1.0_jprd,z_m(:))
263 ELSE
264  z_m(:) = mod(alpha(:),2.0_jprd*cvt)
265  beta = z_m(:)-2.0_jprd*cvt*(sign(0.5_jprd,alpha(:))-0.5_jprd)
266 ENDIF
267 IF (lhook) CALL dr_hook('EGGANGLES:ANGLE_DOMAIN_RV',1,zhook_handle)
268 END FUNCTION angle_domain_rv
269 ! -------------------------------------------------------------------------------
270 FUNCTION angle_domain_lolav(YL_ALPHA,PI,DOM,UNIT) RESULT (YD_BETA)
271 type(lola), DIMENSION(:), INTENT(IN) :: yl_alpha
272 CHARACTER (LEN=2), INTENT(IN), OPTIONAL :: DOM
273 CHARACTER (LEN=1), INTENT(IN), OPTIONAL :: UNIT
274 REAL(KIND=JPRD), INTENT(IN), OPTIONAL :: PI
275 type(lola), DIMENSION(SIZE(YL_ALPHA)) :: yd_beta
276 
277 REAL(KIND=JPRD) :: TPI
278 CHARACTER (LEN=2) :: TDOM
279 CHARACTER (LEN=1) :: TUNIT
280 REAL(KIND=JPRD) :: ZHOOK_HANDLE
281 
282 IF (lhook) CALL dr_hook('EGGANGLES:ANGLE_DOMAIN_LOLAV',0,zhook_handle)
283 IF (PRESENT(pi)) THEN
284  tpi = pi
285 ELSE
286  tpi = asin(1.0_jprd)*2.0_jprd
287 ENDIF
288 IF (PRESENT(dom)) THEN
289  IF ((dom=='0+').OR.(dom=='-+')) THEN
290  tdom = dom
291  ELSE
292  tdom = "-+"
293  ENDIF
294 ELSE
295  tdom = "-+"
296 ENDIF
297 IF (PRESENT(unit)) THEN
298  IF ((unit=='R').OR.(unit=='D')) THEN
299  tunit = unit
300  ELSE
301  tunit = "D"
302  ENDIF
303 ELSE
304  tunit = "D"
305 ENDIF
306 
307 yd_beta(:)%LON = angle_domain(yl_alpha(:)%LON,tpi,tdom,tunit)
308 yd_beta(:)%LAT = yl_alpha(:)%LAT
309 IF (lhook) CALL dr_hook('EGGANGLES:ANGLE_DOMAIN_LOLAV',1,zhook_handle)
310 END FUNCTION angle_domain_lolav
311 ! -------------------------------------------------------------------------------
312 INTEGER(KIND=JPIM) FUNCTION val_lat_s(LAT,NUM_ERR,PI,UNIT) RESULT(ETAT)
313 REAL(KIND=JPRD), INTENT(IN) :: LAT
314 CHARACTER (LEN=1), INTENT(IN), OPTIONAL :: UNIT
315 REAL(KIND=JPRD), INTENT(IN), OPTIONAL :: PI
316 INTEGER(KIND=JPIM), INTENT(IN), OPTIONAL :: NUM_ERR
317 
318 INTEGER(KIND=JPIM) :: TNE
319 REAL(KIND=JPRD) :: TPI, LATMXABS
320 CHARACTER (LEN=1) :: TUNIT
321 REAL(KIND=JPRD) :: ZHOOK_HANDLE
322 
323 IF (lhook) CALL dr_hook('EGGANGLES:VAL_LAT_S',0,zhook_handle)
324 IF (PRESENT(num_err))THEN
325  tne = num_err
326 ELSE
327  tne = -1_jpim
328 ENDIF
329 IF (PRESENT(pi)) THEN
330  tpi = pi
331 ELSE
332  tpi = asin(1.0_jprd)*2.0_jprd
333 ENDIF
334 IF (PRESENT(unit)) THEN
335  IF ((unit=='R').OR.(unit=='D')) THEN
336  tunit = unit
337  ELSE
338  tunit = "D"
339  ENDIF
340 ELSE
341  tunit = "D"
342 ENDIF
343 
344 IF (tunit=='R') THEN
345  latmxabs = tpi/2.0_jprd
346 ELSE
347  latmxabs = 90.0_jprd
348 ENDIF
349 
350 IF (abs(lat) > latmxabs) THEN
351  etat = tne
352 ELSE
353  etat = 1_jpim
354 ENDIF
355 IF (lhook) CALL dr_hook('EGGANGLES:VAL_LAT_S',1,zhook_handle)
356 END FUNCTION val_lat_s
357 ! -------------------------------------------------------------------------------
358 INTEGER(KIND=JPIM) FUNCTION val_lat_v(P_LAT,NUM_ERR,PI,UNIT) RESULT(ETAT)
359 REAL(KIND=JPRD), DIMENSION(:), INTENT(IN) :: P_LAT
360 CHARACTER (LEN=1), INTENT(IN), OPTIONAL :: UNIT
361 REAL(KIND=JPRD), INTENT(IN), OPTIONAL :: PI
362 INTEGER(KIND=JPIM), INTENT(IN), OPTIONAL :: NUM_ERR
363 
364 INTEGER(KIND=JPIM) :: TNE
365 REAL(KIND=JPRD) :: TPI, Z_LATMXABS
366 CHARACTER (LEN=1) :: TUNIT
367 REAL(KIND=JPRD) :: ZHOOK_HANDLE
368 
369 IF (lhook) CALL dr_hook('EGGANGLES:VAL_LAT_V',0,zhook_handle)
370 IF (PRESENT(num_err))THEN
371  tne = num_err
372 ELSE
373  tne = -1_jpim
374 ENDIF
375 IF (PRESENT(pi)) THEN
376  tpi = pi
377 ELSE
378  tpi = asin(1.0_jprd)*2.0_jprd
379 ENDIF
380 IF (PRESENT(unit)) THEN
381  IF ((unit=='R').OR.(unit=='D')) THEN
382  tunit = unit
383  ELSE
384  tunit = "D"
385  ENDIF
386 ELSE
387  tunit = "D"
388 ENDIF
389 
390 IF (tunit=='R') THEN
391  z_latmxabs = tpi/2.0_jprd
392 ELSE
393  z_latmxabs = 90.0_jprd
394 ENDIF
395 
396 IF (any(abs(p_lat(:)) > z_latmxabs)) THEN
397  etat = tne
398 ELSE
399  etat = 1_jpim
400 ENDIF
401 IF (lhook) CALL dr_hook('EGGANGLES:VAL_LAT_V',1,zhook_handle)
402 END FUNCTION val_lat_v
403 ! -------------------------------------------------------------------------------
404 INTEGER(KIND=JPIM) FUNCTION val_lon_s(LON,NUM_ERR,PI,DOM,UNIT) RESULT(ETAT)
405 REAL(KIND=JPRD), INTENT(IN) :: LON
406 CHARACTER (LEN=2), INTENT(IN), OPTIONAL :: DOM
407 CHARACTER (LEN=1), INTENT(IN), OPTIONAL :: UNIT
408 REAL(KIND=JPRD), INTENT(IN), OPTIONAL :: PI
409 INTEGER(KIND=JPIM), INTENT(IN), OPTIONAL :: NUM_ERR
410 
411 INTEGER(KIND=JPIM) :: TNE
412 REAL(KIND=JPRD) :: TPI, CVT, S, LONMIN, LONMAX
413 CHARACTER (LEN=2) :: TDOM
414 CHARACTER (LEN=1) :: TUNIT
415 REAL(KIND=JPRD) :: ZHOOK_HANDLE
416 
417 IF (lhook) CALL dr_hook('EGGANGLES:VAL_LON_S',0,zhook_handle)
418 IF (PRESENT(num_err))THEN
419  tne = num_err
420 ELSE
421  tne = -1_jpim
422 ENDIF
423 IF (PRESENT(pi)) THEN
424  tpi = pi
425 ELSE
426  tpi = asin(1.0_jprd)*2.0_jprd
427 ENDIF
428 IF (PRESENT(dom)) THEN
429  IF ((dom=='0+').OR.(dom=='-+')) THEN
430  tdom = dom
431  ELSE
432  tdom = "-+"
433  ENDIF
434 ELSE
435  tdom = "-+"
436 ENDIF
437 IF (PRESENT(unit)) THEN
438  IF ((unit=='R').OR.(unit=='D')) THEN
439  tunit = unit
440  ELSE
441  tunit = "D"
442  ENDIF
443 ELSE
444  tunit = "D"
445 ENDIF
446 
447 IF (tunit=='R') THEN
448  cvt = tpi
449 ELSE
450  cvt = 180.0_jprd
451 ENDIF
452 IF (tdom=='-+') THEN
453  s = -1.0_jprd
454 ELSE
455  s = 0.0_jprd
456 ENDIF
457 lonmin = s*cvt
458 lonmax =(2.0_jprd +s)*cvt
459 
460 IF ((lon < lonmin).OR.(lon >= lonmax)) THEN
461  etat = tne
462 ELSE
463  etat = 1_jpim
464 ENDIF
465 IF (lhook) CALL dr_hook('EGGANGLES:VAL_LON_S',1,zhook_handle)
466 END FUNCTION val_lon_s
467 ! -------------------------------------------------------------------------------
468 INTEGER(KIND=JPIM) FUNCTION val_lon_v(LON,NUM_ERR,PI,DOM,UNIT) RESULT(ETAT)
469 REAL(KIND=JPRD), DIMENSION(:), INTENT(IN) :: LON
470 CHARACTER (LEN=2), INTENT(IN), OPTIONAL :: DOM
471 CHARACTER (LEN=1), INTENT(IN), OPTIONAL :: UNIT
472 REAL(KIND=JPRD), INTENT(IN), OPTIONAL :: PI
473 INTEGER(KIND=JPIM), INTENT(IN), OPTIONAL :: NUM_ERR
474 
475 INTEGER(KIND=JPIM) :: TNE
476 REAL(KIND=JPRD) :: TPI, Z_CVT, Z_S, Z_LONMIN, Z_LONMAX
477 CHARACTER (LEN=2) :: TDOM
478 CHARACTER (LEN=1) :: TUNIT
479 REAL(KIND=JPRD) :: ZHOOK_HANDLE
480 
481 IF (lhook) CALL dr_hook('EGGANGLES:VAL_LON_V',0,zhook_handle)
482 IF (PRESENT(num_err))THEN
483  tne = num_err
484 ELSE
485  tne = -1_jpim
486 ENDIF
487 IF (PRESENT(pi)) THEN
488  tpi = pi
489 ELSE
490  tpi = asin(1.0_jprd)*2.0_jprd
491 ENDIF
492 IF (PRESENT(dom)) THEN
493  IF ((dom=='0+').OR.(dom=='-+')) THEN
494  tdom = dom
495  ELSE
496  tdom = "-+"
497  ENDIF
498 ELSE
499  tdom = "-+"
500 ENDIF
501 IF (PRESENT(unit)) THEN
502  IF ((unit=='R').OR.(unit=='D')) THEN
503  tunit = unit
504  ELSE
505  tunit = "D"
506  ENDIF
507 ELSE
508  tunit = "D"
509 ENDIF
510 
511 IF (tunit=='R') THEN
512  z_cvt = tpi
513 ELSE
514  z_cvt = 180.0_jprd
515 ENDIF
516 IF (tdom=='-+') THEN
517  z_s = -1.0_jprd
518 ELSE
519  z_s = 0.0_jprd
520 ENDIF
521 z_lonmin = z_s*z_cvt
522 z_lonmax =(2.0_jprd +z_s)*z_cvt
523 
524 IF ((any(lon(:) < z_lonmin)).OR.(any(lon(:) >= z_lonmax))) THEN
525  etat = tne
526 ELSE
527  etat = 1_jpim
528 ENDIF
529 IF (lhook) CALL dr_hook('EGGANGLES:VAL_LON_V',1,zhook_handle)
530 END FUNCTION val_lon_v
531 ! -------------------------------------------------------------------------------
532 INTEGER(KIND=JPIM) FUNCTION val_coord_s(PT_COORD,NUM_ERR,PI,DOM,UNIT) RESULT(ETAT)
533 type(lola), INTENT(IN) :: pt_coord
534 CHARACTER (LEN=2), INTENT(IN), OPTIONAL :: DOM
535 CHARACTER (LEN=1), INTENT(IN), OPTIONAL :: UNIT
536 REAL(KIND=JPRD), INTENT(IN), OPTIONAL :: PI
537 INTEGER(KIND=JPIM), INTENT(IN), OPTIONAL :: NUM_ERR
538 
539 INTEGER(KIND=JPIM) :: TNE
540 REAL(KIND=JPRD) :: TPI
541 CHARACTER (LEN=2) :: TDOM
542 CHARACTER (LEN=1) :: TUNIT
543 REAL(KIND=JPRD) :: ZHOOK_HANDLE
544 
545 IF (lhook) CALL dr_hook('EGGANGLES:VAL_COORD_S',0,zhook_handle)
546 IF (PRESENT(num_err))THEN
547  tne = num_err
548 ELSE
549  tne = -1_jpim
550 ENDIF
551 IF (PRESENT(pi)) THEN
552  tpi = pi
553 ELSE
554  tpi = asin(1.0_jprd)*2.0_jprd
555 ENDIF
556 IF (PRESENT(dom)) THEN
557  IF ((dom=='0+').OR.(dom=='-+')) THEN
558  tdom = dom
559  ELSE
560  tdom = "-+"
561  ENDIF
562 ELSE
563  tdom = "-+"
564 ENDIF
565 IF (PRESENT(unit)) THEN
566  IF ((unit=='R').OR.(unit=='D')) THEN
567  tunit = unit
568  ELSE
569  tunit = "D"
570  ENDIF
571 ELSE
572  tunit = "D"
573 ENDIF
574 
575 IF ((val_lon(pt_coord%LON,tne,tpi,tdom,tunit) == 1_jpim).AND.(val_lat(pt_coord%LAT,tne,tpi,tunit) == 1_jpim)) THEN
576  etat = 1_jpim
577 ELSE
578  etat = tne
579 ENDIF
580 IF (lhook) CALL dr_hook('EGGANGLES:VAL_COORD_S',1,zhook_handle)
581 END FUNCTION val_coord_s
582 ! -------------------------------------------------------------------------------
583 INTEGER(KIND=JPIM) FUNCTION val_coord_v(YD_PT_COORD,K_NUM_ERR,PI,CD_DOM,CD_UNIT) RESULT(ETAT)
584 type(lola), DIMENSION(:), INTENT(IN) :: yd_pt_coord
585 CHARACTER (LEN=2), INTENT(IN), OPTIONAL :: CD_DOM
586 CHARACTER (LEN=1), INTENT(IN), OPTIONAL :: CD_UNIT
587 REAL(KIND=JPRD), INTENT(IN), OPTIONAL :: PI
588 INTEGER(KIND=JPIM), INTENT(IN), OPTIONAL :: K_NUM_ERR
589 
590 INTEGER(KIND=JPIM) :: I_TNE
591 CHARACTER (LEN=2) :: CL_TDOM
592 REAL(KIND=JPRD) :: Z_TPI
593 CHARACTER (LEN=1) :: CL_TUNIT
594 REAL(KIND=JPRD) :: ZHOOK_HANDLE
595 
596 IF (lhook) CALL dr_hook('EGGANGLES:VAL_COORD_V',0,zhook_handle)
597 IF (PRESENT(k_num_err))THEN
598  i_tne = k_num_err
599 ELSE
600  i_tne = -1_jpim
601 ENDIF
602 IF (PRESENT(pi)) THEN
603  z_tpi = pi
604 ELSE
605  z_tpi = asin(1.0_jprd)*2.0_jprd
606 ENDIF
607 IF (PRESENT(cd_dom)) THEN
608  IF ((cd_dom=='0+').OR.(cd_dom=='-+')) THEN
609  cl_tdom = cd_dom
610  ELSE
611  cl_tdom = "-+"
612  ENDIF
613 ELSE
614  cl_tdom = "-+"
615 ENDIF
616 IF (PRESENT(cd_unit)) THEN
617  IF ((cd_unit=='R').OR.(cd_unit=='D')) THEN
618  cl_tunit = cd_unit
619  ELSE
620  cl_tunit = "D"
621  ENDIF
622 ELSE
623  cl_tunit = "D"
624 ENDIF
625 
626 IF ((val_lon(yd_pt_coord(:)%LON,i_tne,z_tpi,cl_tdom,cl_tunit) == 1_jpim).AND. &
627  & (val_lat(yd_pt_coord(:)%LAT,i_tne,z_tpi,cl_tunit) == 1_jpim)) THEN
628  etat = 1_jpim
629 ELSE
630  etat = i_tne
631 ENDIF
632 IF (lhook) CALL dr_hook('EGGANGLES:VAL_COORD_V',1,zhook_handle)
633 END FUNCTION val_coord_v
634 ! -------------------------------------------------------------------------------
635 TYPE(lola) FUNCTION LOLAR_S (coord_deg) RESULT (coord_rad)
636 ! DEG => RAD for lola type
637 TYPE(lola), INTENT(IN) :: COORD_DEG
638 
639 REAL(KIND=JPRD) :: TPI,DTR
640 REAL(KIND=JPRD) :: ZHOOK_HANDLE
641 
642 IF (lhook) CALL dr_hook('EGGANGLES:LOLAR_S',0,zhook_handle)
643 tpi = asin(1.0_jprd)*2.0_jprd
644 dtr = tpi/180.0_jprd
645 coord_rad%LON = coord_deg%LON*dtr
646 coord_rad%LAT = coord_deg%LAT*dtr
647 IF (lhook) CALL dr_hook('EGGANGLES:LOLAR_S',1,zhook_handle)
648 END FUNCTION lolar_s
649 
650 FUNCTION lolar_v (COORD_DEG) RESULT (COORD_RAD)
651 ! DEG => RAD for lola type
652 TYPE(lola), DIMENSION(:), INTENT(IN) :: COORD_DEG
653 TYPE(lola), DIMENSION(SIZE(COORD_DEG)) :: COORD_RAD
654 
655 REAL(KIND=JPRD) :: TPI,DTR
656 REAL(KIND=JPRD) :: ZHOOK_HANDLE
657 
658 IF (lhook) CALL dr_hook('EGGANGLES:LOLAR_V',0,zhook_handle)
659 tpi = asin(1.0_jprd)*2.0_jprd
660 dtr = tpi/180.0_jprd
661 coord_rad(:)%LON = coord_deg(:)%LON*dtr
662 coord_rad(:)%LAT = coord_deg(:)%LAT*dtr
663 IF (lhook) CALL dr_hook('EGGANGLES:LOLAR_V',1,zhook_handle)
664 END FUNCTION lolar_v
665 ! -------------------------------------------------------------------------------
666 TYPE(lola) FUNCTION LOLAD_S (coord_rad) RESULT (coord_deg)
667 ! RAD => DEG for lola type
668 TYPE(lola), INTENT(IN) :: COORD_RAD
669 
670 REAL(KIND=JPRD) :: TPI,RTD
671 REAL(KIND=JPRD) :: ZHOOK_HANDLE
672 
673 IF (lhook) CALL dr_hook('EGGANGLES:LOLAD_S',0,zhook_handle)
674 tpi = asin(1.0_jprd)*2.0_jprd
675 rtd = 180.0_jprd/tpi
676 coord_deg%LON = coord_rad%LON*rtd
677 coord_deg%LAT = coord_rad%LAT*rtd
678 IF (lhook) CALL dr_hook('EGGANGLES:LOLAD_S',1,zhook_handle)
679 END FUNCTION lolad_s
680 
681 FUNCTION lolad_v (COORD_RAD) RESULT (COORD_DEG)
682 ! RAD => DEG for lola type
683 TYPE(lola), DIMENSION(:), INTENT(IN) :: COORD_RAD
684 TYPE(lola), DIMENSION(SIZE(COORD_RAD)) :: COORD_DEG
685 
686 REAL(KIND=JPRD) :: TPI,RTD
687 REAL(KIND=JPRD) :: ZHOOK_HANDLE
688 
689 IF (lhook) CALL dr_hook('EGGANGLES:LOLAD_V',0,zhook_handle)
690 tpi = asin(1.0_jprd)*2.0_jprd
691 rtd = 180.0_jprd/tpi
692 coord_deg(:)%LON = coord_rad(:)%LON*rtd
693 coord_deg(:)%LAT = coord_rad(:)%LAT*rtd
694 IF (lhook) CALL dr_hook('EGGANGLES:LOLAD_V',1,zhook_handle)
695 END FUNCTION lolad_v
696 ! -------------------------------------------------------------------------------
697 ! Function to compute Cosine,Sine to Angle
698 ! -------------------------------------------------------------------------------
699 REAL(KIND=JPRD) FUNCTION cosin_to_angle_s(COSINUS,SINUS) RESULT (ANGLE)
700 ! (Cosinus,Sinus) => Angle
701 REAL(KIND=JPRD), INTENT(IN) :: COSINUS,SINUS
702 
703 REAL(KIND=JPRD) :: ZHOOK_HANDLE
704 
705 IF (lhook) CALL dr_hook('EGGANGLES:COSIN_TO_ANGLE_S',0,zhook_handle)
706 angle = p_acos(cosinus)*sign(1.0_jprd,sinus)
707 IF (lhook) CALL dr_hook('EGGANGLES:COSIN_TO_ANGLE_S',1,zhook_handle)
708 END FUNCTION cosin_to_angle_s
709 
710 FUNCTION cosin_to_angle_v(COSINUS,SINUS) RESULT (ANGLE)
711 ! (Cosinus,Sinus) => Angle
712 REAL(KIND=JPRD), DIMENSION(:), INTENT(IN) :: COSINUS,SINUS
713 REAL(KIND=JPRD), DIMENSION(SIZE(COSINUS)) :: ANGLE
714 
715 REAL(KIND=JPRD) :: ZHOOK_HANDLE
716 
717 IF (lhook) CALL dr_hook('EGGANGLES:COSIN_TO_ANGLE_V',0,zhook_handle)
718 angle(:) = p_acos(cosinus(:))*sign(1.0_jprd,sinus(:))
719 IF (lhook) CALL dr_hook('EGGANGLES:COSIN_TO_ANGLE_V',1,zhook_handle)
720 END FUNCTION cosin_to_angle_v
721 ! -------------------------------------------------------------------------------
722 ! -------------------------------------------------------------------------------
723 ! Function to compute Acos without error
724 ! -------------------------------------------------------------------------------
725 REAL(KIND=JPRD) FUNCTION p_acos_s(COSINUS) RESULT (ANGLE)
726 ! Protected ACOS
727 REAL(KIND=JPRD), INTENT(IN) :: COSINUS
728 
729 REAL(KIND=JPRD) :: ZHOOK_HANDLE
730 
731 IF (lhook) CALL dr_hook('EGGANGLES:P_ACOS_S',0,zhook_handle)
732 angle = acos(minimax(cosinus))
733 IF (lhook) CALL dr_hook('EGGANGLES:P_ACOS_S',1,zhook_handle)
734 END FUNCTION p_acos_s
735 
736 FUNCTION p_acos_v(COSINUS) RESULT (ANGLE)
737 ! Protected ACOS
738 REAL(KIND=JPRD), DIMENSION(:), INTENT(IN) :: COSINUS
739 REAL(KIND=JPRD), DIMENSION(SIZE(COSINUS)) :: ANGLE
740 
741 REAL(KIND=JPRD) :: ZHOOK_HANDLE
742 
743 IF (lhook) CALL dr_hook('EGGANGLES:P_ACOS_V',0,zhook_handle)
744 angle(:) = acos(minimax(cosinus(:)))
745 IF (lhook) CALL dr_hook('EGGANGLES:P_ACOS_V',1,zhook_handle)
746 END FUNCTION p_acos_v
747 ! -------------------------------------------------------------------------------
748 ! -------------------------------------------------------------------------------
749 ! Function to compute Asin without error
750 ! -------------------------------------------------------------------------------
751 REAL(KIND=JPRD) FUNCTION p_asin_s(SINUS) RESULT (ANGLE)
752 ! Protected ASIN
753 REAL(KIND=JPRD), INTENT(IN) :: SINUS
754 
755 REAL(KIND=JPRD) :: ZHOOK_HANDLE
756 
757 IF (lhook) CALL dr_hook('EGGANGLES:P_ASIN_S',0,zhook_handle)
758 angle = asin(minimax(sinus))
759 IF (lhook) CALL dr_hook('EGGANGLES:P_ASIN_S',1,zhook_handle)
760 END FUNCTION p_asin_s
761 
762 FUNCTION p_asin_v(SINUS) RESULT (ANGLE)
763 ! Protected ASIN
764 REAL(KIND=JPRD), DIMENSION(:), INTENT(IN) :: SINUS
765 REAL(KIND=JPRD), DIMENSION(SIZE(SINUS)) :: ANGLE
766 
767 REAL(KIND=JPRD) :: ZHOOK_HANDLE
768 
769 IF (lhook) CALL dr_hook('EGGANGLES:P_ASIN_V',0,zhook_handle)
770 angle(:) = asin(minimax(sinus(:)))
771 IF (lhook) CALL dr_hook('EGGANGLES:P_ASIN_V',1,zhook_handle)
772 END FUNCTION p_asin_v
773 ! -------------------------------------------------------------------------------
774 ! -------------------------------------------------------------------------------
775 ! Function MinMax
776 ! -------------------------------------------------------------------------------
777 REAL(KIND=JPRD) FUNCTION minimax_s(VAL,LIM) RESULT (VALO)
778 ! Return Value in [-LIM,LIM]
779 REAL(KIND=JPRD), INTENT(IN) :: VAL
780 REAL(KIND=JPRD), INTENT(IN), OPTIONAL :: LIM
781 
782 REAL(KIND=JPRD) :: TLIM
783 REAL(KIND=JPRD) :: ZHOOK_HANDLE
784 
785 IF (lhook) CALL dr_hook('EGGANGLES:MINIMAX_S',0,zhook_handle)
786 IF (PRESENT(lim)) THEN
787  tlim = lim
788 ELSE
789  tlim = 1.0_jprd
790 ENDIF
791 valo = min(tlim,max(-1.0_jprd*tlim,val))
792 IF (lhook) CALL dr_hook('EGGANGLES:MINIMAX_S',1,zhook_handle)
793 END FUNCTION minimax_s
794 
795 FUNCTION minimax_v(VAL,LIM) RESULT (VALO)
796 ! Return Value in [-LIM,LIM]
797 REAL(KIND=JPRD), DIMENSION(:), INTENT(IN) :: VAL
798 REAL(KIND=JPRD), INTENT(IN), OPTIONAL :: LIM
799 REAL(KIND=JPRD), DIMENSION(SIZE(VAL)) :: VALO
800 
801 REAL(KIND=JPRD) :: TLIM
802 REAL(KIND=JPRD) :: ZHOOK_HANDLE
803 
804 IF (lhook) CALL dr_hook('EGGANGLES:MINIMAX_V',0,zhook_handle)
805 IF (PRESENT(lim)) THEN
806  tlim = lim
807 ELSE
808  tlim = 1.0_jprd
809 ENDIF
810 valo(:) = min(tlim,max(-1.0_jprd*tlim,val(:)))
811 IF (lhook) CALL dr_hook('EGGANGLES:MINIMAX_V',1,zhook_handle)
812 END FUNCTION minimax_v
813 ! -------------------------------------------------------------------------------
814 ! -------------------------------------------------------------------------------
815 ! Functions Longitude size/distance
816 ! -------------------------------------------------------------------------------
817 REAL(KIND=JPRD) FUNCTION dist_2ref_l(COORD_LON,REF_LON,PI) RESULT(DIST)
818 ! COORD_LON, REF_LON in -+Radians
819 ! DIST in -+Radians
820 
821 ! Calcule la distance orientee DIST (abscisse dans l'intervale [-pi,pi[ et d'origine le meridien de
822 ! reference REF_LON) de COORD_LON a REF_LON (coordonnees en radians dans l'intervale
823 ! [-pi,pi[ et avec comme origine le meridien de GreenWiTch). Les valeurs negatives sont vers l'Ouest
824 ! des origines.
825 
826 ! Computes oriented distance DIST (as an absciss in [-pi,pi[ with origin at REF_LON meridian)
827 ! from COORD_LON to REF_LON (coordinates in rad [-pi,pi[ with origin at GreenWiTch meridian)
828 ! Negatives values are on West of origins.
829 
830 REAL(KIND=JPRD), INTENT(IN) :: COORD_LON, REF_LON
831 REAL(KIND=JPRD), INTENT(IN), OPTIONAL :: PI
832 
833 REAL(KIND=JPRD) :: Z
834 REAL(KIND=JPRD) :: TPI
835 REAL(KIND=JPRD) :: ZHOOK_HANDLE
836 
837 IF (lhook) CALL dr_hook('EGGANGLES:DIST2REF_L',0,zhook_handle)
838 
839 IF (PRESENT(pi)) THEN
840  tpi = pi
841 ELSE
842  tpi = asin(1.0_jprd)*2.0_jprd
843 ENDIF
844 z = (coord_lon-ref_lon)
845 z = z-sign(tpi,z)*(1.0_jprd+sign(1.0_jprd,abs(z)-tpi))
846 dist = -z*sign(1.0_jprd,z-tpi) ! because [-pi,pi[ : if pi then -pi
847 
848 IF (lhook) CALL dr_hook('EGGANGLES:DIST2REF_L',1,zhook_handle)
849 END FUNCTION dist_2ref_l
850 ! -------------------------------------------------------------------------------
851 REAL(KIND=JPRD) FUNCTION dist_2ref_s(PT_COORD,REF_COORD,PI) RESULT(DIST)
852 ! PT_COORD, REF_COORD in -+Radians
853 ! DIST in -+Radians
854 
855 ! Calcule la distance orientee DIST (abscisse dans l'intervale [-pi,pi[ et d'origine le meridien de
856 ! reference REF_COORD%LON) de PT_COORD%LON a REF_COORD%LON (coordonnees en radians dans l'intervale
857 ! [-pi,pi[ et avec comme origine le meridien de GreenWiTch). Les valeurs negatives sont vers l'Ouest
858 ! des origines.
859 
860 ! Computes oriented distance DIST (as an absciss in [-pi,pi[ with origin at REF_COORD%LON meridian)
861 ! from PT_COORD%LON to REF_COORD%LON (coordinates in rad [-pi,pi[ with origin at GreenWiTch meridian)
862 ! Negatives values are on West of origins.
863 
864 type(lola), INTENT(IN) :: pt_coord, ref_coord
865 REAL(KIND=JPRD), INTENT(IN), OPTIONAL :: PI
866 
867 REAL(KIND=JPRD) :: TPI
868 REAL(KIND=JPRD) :: ZHOOK_HANDLE
869 
870 IF (lhook) CALL dr_hook('EGGANGLES:DIST2REF_S',0,zhook_handle)
871 
872 IF (PRESENT(pi)) THEN
873  tpi = pi
874 ELSE
875  tpi = asin(1.0_jprd)*2.0_jprd
876 ENDIF
877 dist = dist_2ref(pt_coord%LON,ref_coord%LON,tpi)
878 
879 IF (lhook) CALL dr_hook('EGGANGLES:DIST2REF_S',1,zhook_handle)
880 END FUNCTION dist_2ref_s
881 ! -------------------------------------------------------------------------------
882 FUNCTION dist_2ref_v(PT_COORD,REF_COORD,PI) RESULT(DIST)
883 ! PT_COORD, REF_COORD in -+Radians
884 ! DIST in -+Radians
885 
886 ! Calcule la distance orientee DIST (abscisse dans l'intervale [-pi,pi[ et d'origine le meridien de
887 ! reference REF_COORD%LON) de PT_COORD%LON a REF_COORD%LON (coordonnees en radians dans l'intervale
888 ! [-pi,pi[ et avec comme origine le meridien de GreenWiTch). Les valeurs negatives sont vers l'Ouest
889 ! des origines.
890 
891 ! Computes oriented distance DIST (as an absciss in [-pi,pi[ with origin at REF_COORD%LON meridian)
892 ! from PT_COORD%LON to REF_COORD%LON (coordinates in rad [-pi,pi[ with origin at GreenWiTch meridian)
893 ! Negatives values are on West of origins.
894 
895 type(lola), DIMENSION(:), INTENT(IN) :: pt_coord
896 type(lola), INTENT(IN) :: ref_coord
897 REAL(KIND=JPRD), INTENT(IN), OPTIONAL :: PI
898 REAL(KIND=JPRD), DIMENSION(SIZE(PT_COORD)) :: DIST
899 
900 REAL(KIND=JPRD), DIMENSION(SIZE(PT_COORD)) :: Z
901 REAL(KIND=JPRD) :: TPI
902 REAL(KIND=JPRD) :: ZHOOK_HANDLE
903 
904 IF (lhook) CALL dr_hook('EGGANGLES:DIST2REF_V',0,zhook_handle)
905 
906 IF (PRESENT(pi)) THEN
907  tpi = pi
908 ELSE
909  tpi = asin(1.0_jprd)*2.0_jprd
910 ENDIF
911 z(:) = pt_coord(:)%LON-ref_coord%LON
912 z(:) = z(:)-sign(tpi,z(:))*(1.0_jprd+sign(1.0_jprd,abs(z(:))-tpi))
913 dist(:) = -z(:)*sign(1.0_jprd,z(:)-tpi) ! because [-pi,pi[ : if pi then -pi
914 
915 IF (lhook) CALL dr_hook('EGGANGLES:DIST2REF_V',1,zhook_handle)
916 END FUNCTION dist_2ref_v
917 ! -------------------------------------------------------------------------------
918 REAL(KIND=JPRD) FUNCTION size_w2e_l(WEST_LON,EAST_LON,PI) RESULT(TAILLE)
919 ! WEST_LON, EAST_LON in -+Radians
920 ! SIZE in 0+Radians
921 
922 ! Calcule la distance ou taille (norme entre ]0,2pi]) entre WEST_LON et EAST_LON
923 ! dans le sens des aiguilles d'une montre en regardant du Pole Sud vers le Pole Nord ( ceci
924 ! pour ne pas calculer le complementaire a 2pi ).
925 
926 ! Computes distance or length (norm in ]0,2pi]) between WEST_LON and EAST_LON in
927 ! clockwise seeing from South Pole to North Pole.
928 
929 REAL(KIND=JPRD), INTENT(IN) :: WEST_LON, EAST_LON
930 REAL(KIND=JPRD), INTENT(IN), OPTIONAL :: PI
931 
932 REAL(KIND=JPRD) :: Z
933 REAL(KIND=JPRD) :: TPI
934 REAL(KIND=JPRD) :: ZHOOK_HANDLE
935 
936 IF (lhook) CALL dr_hook('EGGANGLES:SIZE_W2E_L',0,zhook_handle)
937 
938 IF (PRESENT(pi)) THEN
939  tpi = pi
940 ELSE
941  tpi = asin(1.0_jprd)*2.0_jprd
942 ENDIF
943 z = dist_2ref(west_lon,east_lon,tpi)
944 taille = tpi*(1.0_jprd+sign(1.0_jprd,z))-z
945 
946 IF (lhook) CALL dr_hook('EGGANGLES:SIZE_W2E_L',1,zhook_handle)
947 END FUNCTION size_w2e_l
948 ! -------------------------------------------------------------------------------
949 REAL(KIND=JPRD) FUNCTION size_w2e_s(WEST_COORD,EAST_COORD,PI) RESULT(TAILLE)
950 ! WEST_COORD, EAST_COORD in -+Radians
951 ! SIZE in 0+Radians
952 
953 ! Calcule la distance ou taille (norme entre ]0,2pi]) entre WEST_COORD%LON et EAST_COORD%LON
954 ! dans le sens des aiguilles d'une montre en regardant du Pole Sud vers le Pole Nord ( ceci
955 ! pour ne pas calculer le complementaire a 2pi ).
956 
957 ! Computes distance or length (norm in ]0,2pi]) between WEST_COORD%LON and EAST_COORD%LON in
958 ! clockwise seeing from South Pole to North Pole.
959 
960 type(lola), INTENT(IN) :: west_coord, east_coord
961 REAL(KIND=JPRD), INTENT(IN), OPTIONAL :: PI
962 
963 REAL(KIND=JPRD) :: TPI
964 REAL(KIND=JPRD) :: ZHOOK_HANDLE
965 
966 IF (lhook) CALL dr_hook('EGGANGLES:SIZE_W2E_S',0,zhook_handle)
967 
968 IF (PRESENT(pi)) THEN
969  tpi = pi
970 ELSE
971  tpi = asin(1.0_jprd)*2.0_jprd
972 ENDIF
973 taille = size_w2e(west_coord%LON,east_coord%LON,tpi)
974 
975 IF (lhook) CALL dr_hook('EGGANGLES:SIZE_W2E_S',1,zhook_handle)
976 END FUNCTION size_w2e_s
977 ! -------------------------------------------------------------------------------
978 END MODULE eggangles
real(kind=jprd) function p_asin_s(SINUS)
Definition: eggangles.F90:752
integer, parameter jpim
Definition: parkind1.F90:13
integer, parameter jprd
Definition: parkind1.F90:39
integer(kind=jpim) function val_coord_s(PT_COORD, NUM_ERR, PI, DOM, UNIT)
Definition: eggangles.F90:533
type(lola) function lolad_s(COORD_RAD)
Definition: eggangles.F90:667
type(lola) function, dimension(size(coord_rad)) lolad_v(COORD_RAD)
Definition: eggangles.F90:682
type(lola) function angle_domain_lolas(ALPHA, PI, DOM, UNIT)
Definition: eggangles.F90:176
real(kind=jprd) function angle_domain_rs(ALPHA, PI, DOM, UNIT)
Definition: eggangles.F90:123
real(kind=jprd) function size_w2e_s(WEST_COORD, EAST_COORD, PI)
Definition: eggangles.F90:950
type(lola) function, dimension(size(yl_alpha)) angle_domain_lolav(YL_ALPHA, PI, DOM, UNIT)
Definition: eggangles.F90:271
real(kind=jprd) function, dimension(size(cosinus)) p_acos_v(COSINUS)
Definition: eggangles.F90:737
type(lola) function lolar_s(COORD_DEG)
Definition: eggangles.F90:636
real(kind=jprd) function minimax_s(VAL, LIM)
Definition: eggangles.F90:778
real(kind=jprd) function dist_2ref_l(COORD_LON, REF_LON, PI)
Definition: eggangles.F90:818
real(kind=jprd) function cosin_to_angle_s(COSINUS, SINUS)
Definition: eggangles.F90:700
real(kind=jprd) function dist_2ref_s(PT_COORD, REF_COORD, PI)
Definition: eggangles.F90:852
type(lola) function, dimension(size(coord_deg)) lolar_v(COORD_DEG)
Definition: eggangles.F90:651
integer(kind=jpim) function val_lat_s(LAT, NUM_ERR, PI, UNIT)
Definition: eggangles.F90:313
real(kind=jprd) function, dimension(size(sinus)) p_asin_v(SINUS)
Definition: eggangles.F90:763
integer(kind=jpim) function val_coord_v(YD_PT_COORD, K_NUM_ERR, PI, CD_DOM, CD_UNIT)
Definition: eggangles.F90:584
real(kind=jprd) function p_acos_s(COSINUS)
Definition: eggangles.F90:726
integer(kind=jpim) function val_lon_v(LON, NUM_ERR, PI, DOM, UNIT)
Definition: eggangles.F90:469
logical lhook
Definition: yomhook.F90:15
real(kind=jprd) function, dimension(size(cosinus)) cosin_to_angle_v(COSINUS, SINUS)
Definition: eggangles.F90:711
integer(kind=jpim) function val_lat_v(P_LAT, NUM_ERR, PI, UNIT)
Definition: eggangles.F90:359
integer(kind=jpim) function val_lon_s(LON, NUM_ERR, PI, DOM, UNIT)
Definition: eggangles.F90:405
real(kind=jprd) function, dimension(size(alpha)) angle_domain_rv(ALPHA, PI, DOM, UNIT)
Definition: eggangles.F90:217
real(kind=jprd) function, dimension(size(pt_coord)) dist_2ref_v(PT_COORD, REF_COORD, PI)
Definition: eggangles.F90:883
real(kind=jprd) function size_w2e_l(WEST_LON, EAST_LON, PI)
Definition: eggangles.F90:919
real(kind=jprd) function, dimension(size(val)) minimax_v(VAL, LIM)
Definition: eggangles.F90:796