!-------------------------------------- LICENCE BEGIN ------------------------------------ !Environment Canada - Atmospheric Science and Technology License/Disclaimer, ! version 3; Last Modified: May 7, 2008. !This is free but copyrighted software; you can use/redistribute/modify it under the terms !of the Environment Canada - Atmospheric Science and Technology License/Disclaimer !version 3 or (at your option) any later version that should be found at: !http://collaboration.cmc.ec.gc.ca/science/rpn.comm/license.html ! !This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; !without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. !See the above mentioned License/Disclaimer for more details. !You should have received a copy of the License/Disclaimer along with this software; !if not, you can write to: EC-RPN COMM Group, 2121 TransCanada, suite 500, Dorval (Quebec), !CANADA, H9P 1J3; or send e-mail to service.rpn@ec.gc.ca !-------------------------------------- LICENCE END -------------------------------------- ! *CoMpIlAtIoN_OpTiOnS ::AIX=-O4::*SUBROUTINE LEGDIR3 (KM,PFMS,PFMA,DDSP,DDALP,KDIM, KLATH 5 S ,KTRUNC,KTRUNCDIM) #if defined (DOC) * ***s/r LEGDIR3 - Direct Legendre transform going from Fourier to * . spectral space. All latitudes are processed for a * . given value KM of the zonal wavenumber * * *Author : P. Gauthier/P. Koclas *ARMA/AES-CMC Nov 1997 *Revision: * P. Koclas Jp Toviessi CMC Apr 2003 * -openmp and loop nesting order changed for ibm conversion * P. Koclas CMC AUG 2003 * -removed IREGISTER loop via suggestion by Will Weir of iBM * * Method: the coefficients PFMS and PFMA contain respectively * . the symmetric and antisymmetric part of the result * *Arguments * i : KM : zonal wavenumber being processed * * i : DDSP(0:KTRUNC,2*KDIM) : SPECTRAL COEFFICIENTS * i : DDALP(0:KTRUNC,KJLATH) : EITHER ALP, DALP OR DELALP * - (LEGENDRE FUNCTIONS) * i : KLATH : NUMBER OF LATITUDE CIRCLES * - TO BE TREATED * i : KTRUNC : truncation order (triangular) * i : KDIM : NUMBER OF FIELDS * - TO BE TREATED * o : PFMS(KJLATH,2*KDIM) : SYMMETRIC PART OF THE INVERSE * - LEGENDRE TRANSFORM * o : PFMA(KJLATH,2*KDIM) : ANTISYMMETRIC PART OF THE INVERSE * - LEGENDRE TRANSFORM * i : KTRUNCDIM : DIMENSION NEEDED TO PASS ARRAYS * - AS ARGUMENTS (CAN BE REMOVED IF * - AUTOMATIC ARRAYS ARE SUPPORTED) * ------------------------------------------------------------------ * #endif IMPLICIT NONE #include "comdim.cdk"
C C Arguments C C INTEGER KM, KDIM, KTRUNC, KTRUNCDIM, KLATH REAL*8 PFMS(NJLATH+1,2*KDIM),PFMA(NJLATH+1,2*KDIM) REAL*8 DDALP(0:KTRUNCDIM,KLATH) REAL*8 DDSP(0:KTRUNCDIM,2*KDIM) C C Local variables C INTEGER JK, JLAT, JN, INM, s ITRUNC, INMP1, JIND, INK C C C 1. Sum is made on JLAT to obtain both the even and odd modes C . except possibly for the last even mode that needs to be C . treated separately C 100 CONTINUE ITRUNC = KTRUNC IF(MOD(KTRUNC-KM+1,2).EQ.1) ITRUNC = KTRUNC-1 C IF(KM.NE.KTRUNC)THEN C C DDSP(0:KTRUNC,1:2*KDIM)=0.d0 DO 101 JLAT = 1,KLATH DO 102 JK = 1,2*KDIM DO 103 JN = KM, ITRUNC, 2 INM = JN - KM INMP1 = INM + 1 DDSP(INM,JK) = DDSP(INM,JK) S + DDALP(INM ,JLAT)*PFMS(JLAT,JK) DDSP(INMP1,JK) = DDSP(INMP1,JK) S + DDALP(INMP1,JLAT)*PFMA(JLAT,JK) 103 CONTINUE 102 CONTINUE 101 CONTINUE END IF C C 2. When the number of even modes exceed the number of modes by 1, C . the last even mode needs to be treated separately C 200 CONTINUE IF(MOD(KTRUNC-KM+1,2).EQ.1) THEN JN = KTRUNC INM = JN - KM DDSP(INM,1:2*KDIM)=0.d0 C DO 201 JLAT = 1,KLATH DO 202 JK = 1,2*KDIM DDSP(INM,JK) = DDSP(INM,JK) S + DDALP(INM,JLAT)*PFMS(JLAT,JK ) 202 CONTINUE 201 CONTINUE END IF C RETURN END