SURFEX v8.1
General documentation of Surfex
ellips.h
Go to the documentation of this file.
1 ! Jan-2011 P. Marguinaud Interface to thread-safe FA
2 SUBROUTINE _ELLIPS_ (KSMAX,KMSMAX,KNTMP,KMTMP)
3 USE PARKIND1, ONLY : JPRB
4 USE YOMHOOK , ONLY : LHOOK, DR_HOOK
6 IMPLICIT NONE
7 !
8 ! ***ELLIPS*** - General routine for computing elliptic truncation
9 !
10 ! Purpose.
11 ! --------
12 ! Computation of zonal and meridional limit wavenumbers within the ellipse
13 ! Interface:
14 ! ----------
15 ! *CALL* *ELLIPS *
16 !
17 ! Explicit arguments :
18 ! --------------------
19 !
20 ! Implicit arguments :
21 ! --------------------
22 !
23 !
24 ! Method.
25 ! -------
26 ! See documentation
27 !
28 ! Externals. NONE.
29 ! ----------
30 !
31 ! Reference.
32 ! ----------
33 ! ARPEGE/ALADIN documentation
34 !
35 ! Author.
36 ! -------
37 ! G. Radnoti LACE 97/04/04
38 !
39 ! Modifications.
40 !-------------------------------------------------------------
41 ! J.Vivoda, 99/05/19 treating NSMAX=0 and NMSMAX=0
42 !
43 !
44 INTEGER (KIND=JLIK) KSMAX, KMSMAX
45 INTEGER (KIND=JLIK) KNTMP(0:KMSMAX),KMTMP(0:KSMAX)
46 !
47 INTEGER (KIND=JLIK) JM, JN
48 !
49 REAL (KIND=JPDBLR) ZEPS, ZKN, ZKM, ZAUXIL
50 !
51 REAL(KIND=JPRB) :: ZHOOK_HANDLE
52 IF (LHOOK) CALL DR_HOOK('ELLIPS',0,ZHOOK_HANDLE)
53 ZEPS=1.E-10
54 ZAUXIL=0.
55 !
56 ! 1. Computing meridional limit wavenumbers along zonal wavenumbers
57 !
58 DO JM=1,KMSMAX-1
59 ZKN = REAL(KSMAX,JPDBLR)/REAL(KMSMAX,JPDBLR)* &
60 & SQRT(MAX(ZAUXIL,REAL(KMSMAX**2-JM**2,JPDBLR)))
61  KNTMP(JM)=INT(ZKN+ZEPS, JLIK)
62 ENDDO
63 
64 IF( KMSMAX.EQ.0 )THEN
65  KNTMP(0)=KSMAX
66 ELSE
67  KNTMP(0)=KSMAX
68  KNTMP(KMSMAX)=0
69 ENDIF
70 !
71 ! 2. Computing zonal limit wavenumbers along meridional wavenumbers
72 !
73 DO JN=1,KSMAX-1
74  ZKM = REAL(KMSMAX,JPDBLR)/REAL(KSMAX,JPDBLR)* &
75  & SQRT(MAX(ZAUXIL,REAL(KSMAX**2-JN**2,JPDBLR)))
76  KMTMP(JN)=INT(ZKM+ZEPS, JLIK)
77 ENDDO
78 
79 IF( KSMAX.EQ.0 )THEN
80  KMTMP(0)=KMSMAX
81 ELSE
82  KMTMP(0)=KMSMAX
83  KMTMP(KSMAX)=0
84 ENDIF
85 !
86 IF (LHOOK) CALL DR_HOOK('ELLIPS',1,ZHOOK_HANDLE)
87 END
! Jan P Marguinaud Interface to thread safe FA SUBROUTINE ONLY
Definition: ellips.h:4
INTERFACE SUBROUTINE JPRB IMPLICIT NONE INTEGER(KIND=JPIM)
INTERFACE SUBROUTINE FACILO_MT && FA
Definition: facilo_mt.h:4
INTERFACE SUBROUTINE SUCST_IFSAUX USE PARKIND1
Definition: sucst_ifsaux.h:4
! Jan P Marguinaud Interface to thread safe FA SUBROUTINE _ELLIPS_(KSMAX, KMSMAX, KNTMP, KMTMP) USE PARKIND1
!define ISRCHFLTPV_N !define ISRCHFLTPV_N ISRCHFLTPV_NBITER IF(ISRCHFLTPV_ARRAY(1+ISRCHFLTPV_INC *(ISRCHFLTPV_I-1)).LT.ISRCHFLTPV_TARGET) THEN IF(ISRCHFLTPV_ARRAY(1+ISRCHFLTPV_INC *(ISRCHFLTPV_I)).LT.ISRCHFLTPV_TARGET) THEN IF(ISRCHFLTPV_ARRAY(1+ISRCHFLTPV_INC *(ISRCHFLTPV_I+1)).LT.ISRCHFLTPV_TARGET) THEN IF(ISRCHFLTPV_ARRAY(1+ISRCHFLTPV_INC *(ISRCHFLTPV_I+2)).LT.ISRCHFLTPV_TARGET) THEN IF(ISRCHFLTPV_ARRAY(1+ISRCHFLTPV_INC *(ISRCHFLTPV_I+3)).LT.ISRCHFLTPV_TARGET) THEN IF(ISRCHFLTPV_ARRAY(1+ISRCHFLTPV_INC *(ISRCHFLTPV_I+4)).LT.ISRCHFLTPV_TARGET) THEN IF(ISRCHFLTPV_ARRAY(1+ISRCHFLTPV_INC *(ISRCHFLTPV_I+5)).LT.ISRCHFLTPV_TARGET) THEN IF(ISRCHFLTPV_ARRAY(1+ISRCHFLTPV_INC *(ISRCHFLTPV_I+6)).LT.ISRCHFLTPV_TARGET) THEN IF(ISRCHFLTPV_ARRAY(1+ISRCHFLTPV_INC *(ISRCHFLTPV_I+7)).LT.ISRCHFLTPV_TARGET) THEN ISRCHFLTPV_RESULT
INTERFACE SUBROUTINE FACILO_MT PUNDF USE OPTIONAL ::LDUNDF ! OUT REAL(KIND=JPDBLR)
! Jan P Marguinaud Interface to thread safe FA SUBROUTINE DR_HOOK USE LFI_PRECISION IMPLICIT NONE ***ELLIPS ***General routine for computing elliptic truncation ! Purpose ! Computation of zonal and meridional limit wavenumbers within the ellipse treating NSMAX
Definition: ellips.h:41