|
SURFEX v7.3
General documentation of Surfex
|
00001 C Jan-2011 P. Marguinaud Interface to thread-safe FA 00002 SUBROUTINE ELLIPS(KSMAX,KMSMAX,KNTMP,KMTMP) 00003 USE PARKIND1, ONLY : JPRB 00004 USE YOMHOOK , ONLY : LHOOK, DR_HOOK 00005 C 00006 C ***ELLIPS*** - General routine for computing elliptic truncation 00007 C 00008 C Purpose. 00009 C -------- 00010 C Computation of zonal and meridional limit wavenumbers within the ellipse 00011 C Interface: 00012 C ---------- 00013 C *CALL* *ELLIPS * 00014 C 00015 C Explicit arguments : 00016 C -------------------- 00017 C 00018 C Implicit arguments : 00019 C -------------------- 00020 C 00021 C 00022 C Method. 00023 C ------- 00024 C See documentation 00025 C 00026 C Externals. NONE. 00027 C ---------- 00028 C 00029 C Reference. 00030 C ---------- 00031 C ARPEGE/ALADIN documentation 00032 C 00033 C Author. 00034 C ------- 00035 C G. Radnoti LACE 97/04/04 00036 C 00037 C Modifications. 00038 C------------------------------------------------------------- 00039 C J.Vivoda, 99/05/19 treating NSMAX=0 and NMSMAX=0 00040 C 00041 #include "precision.h" 00042 C 00043 INTEGER KSMAX, KMSMAX 00044 INTEGER KNTMP(0:KMSMAX),KMTMP(0:KSMAX) 00045 C 00046 INTEGER JM, JN 00047 C 00048 REAL (KIND=JPDBLR) ZEPS, ZKN, ZKM, ZAUXIL 00049 C 00050 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00051 IF (LHOOK) CALL DR_HOOK('ELLIPS',0,ZHOOK_HANDLE) 00052 ZEPS=1.E-10 00053 ZAUXIL=0. 00054 C 00055 C 1. Computing meridional limit wavenumbers along zonal wavenumbers 00056 C 00057 100 CONTINUE 00058 DO 110 JM=1,KMSMAX-1 00059 ZKN = REAL(KSMAX,JPDBLR)/REAL(KMSMAX,JPDBLR)* 00060 1 SQRT(MAX(ZAUXIL,REAL(KMSMAX**2-JM**2,JPDBLR))) 00061 KNTMP(JM)=INT(ZKN+ZEPS) 00062 110 CONTINUE 00063 00064 IF( KMSMAX.EQ.0 )THEN 00065 KNTMP(0)=KSMAX 00066 ELSE 00067 KNTMP(0)=KSMAX 00068 KNTMP(KMSMAX)=0 00069 ENDIF 00070 C 00071 C 2. Computing zonal limit wavenumbers along meridional wavenumbers 00072 C 00073 200 CONTINUE 00074 DO 210 JN=1,KSMAX-1 00075 ZKM = REAL(KMSMAX,JPDBLR)/REAL(KSMAX,JPDBLR)* 00076 1 SQRT(MAX(ZAUXIL,REAL(KSMAX**2-JN**2,JPDBLR))) 00077 KMTMP(JN)=INT(ZKM+ZEPS) 00078 210 CONTINUE 00079 00080 IF( KSMAX.EQ.0 )THEN 00081 KMTMP(0)=KMSMAX 00082 ELSE 00083 KMTMP(0)=KMSMAX 00084 KMTMP(KSMAX)=0 00085 ENDIF 00086 C 00087 IF (LHOOK) CALL DR_HOOK('ELLIPS',1,ZHOOK_HANDLE) 00088 END 00089
1.8.0