SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/LIB/XRD38/FA/ellips.F
Go to the documentation of this file.
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