!-------------------------------------- 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 -------------------------------------- !SUBROUTINE MATAPATST(S,ALPHA,N,VMA,VMB,VMC,VMD,VME,VMF) * **************************************************************** * CALCULE LES ELEMENTS DE LA MATRICE TRIDIAGONALE ASSOCIEE A LA * SOLUTION PAR UN ALGORITHME DU 4EME ORDRE DE L'EQUATION * T*S**ALPHA=D(P)/DS OU T ET P SONT DEUX FONCTIONS ECHANTILLONNEES * AUX N NIVEAUX SIGMA. LES MATRICES GENEREES ICI SERONT UTILISEES * PAR LES SUBR. VTAP ET VPAT. L'ALGORITHME EST DU A J. COTE. * NOTE: ON CALCULE IMMEDIATEMENT DANS LE COMMON MAPAT * LES COEFFICIENTS GENERES PAR LA REDUCTION GAUSSIENNE * LORS DU CALCUL DE T. * A(I),B(I),C(I): DIAG. INF., PRINC., ET SUP. DE LA MAT. * ALPHA : EXPOSANT DE SIGMA. * N : NOMBRE DE NIVEAUX SIGMA DU MODELE. * ADAPTE AU MODELE SEF PAR MICHEL BELAND, AVRIL 1984. * RECODAGE PAR HAL RITCHIE, JANVIER 1993. * MODIFIER PAR S. LAROCHE POUR L'ANALYSE REGIONALE DECEMBRE 1996. ******************************************************************* * * integer N REAL*8 VMA(N), VMB(N), VMC(N) REAL*8 VMD(N), VME(N), VMF(N) REAL*8 S(N),Q(3), ALPHA C C DO 20 K=1,N X0=S(K) IF (K.EQ.1) THEN XM=S(1) XP=S(2) AA=S(3)-X0 BB=S(2)-X0 ELSEIF (K.EQ.N) THEN XM=S(N-1) XP=S(N) AA=S(N-1)-X0 BB=S(N-2)-X0 ELSE XM=S(K-1) XP=S(K+1) AA=XM-X0 BB=XP-X0 ENDIF DO 10 L=1,3 EX=ALPHA+FLOAT(L) IF(EX.NE.0.) Q(L)=(XP**EX-XM**EX)/EX IF(EX.EQ.0.) Q(L)=ALOG(XP/XM) 10 CONTINUE Q(3)=Q(3)-X0*(2.0*Q(2)-X0*Q(1)) Q(2)=Q(2)-X0*Q(1) CC=AA**2 DD=BB**2 DET=AA*DD-BB*CC VMA(K)=(DD*Q(2)-BB*Q(3))/(2.0*DET) VMC(K)=(AA*Q(3)-CC*Q(2))/(2.0*DET) VMB(K)=Q(1)/2.0-VMA(K)-VMC(K) 20 CONTINUE * * COEFFICIENTS DE L'OPERATEUR INVERSE * DO 30 K=1,N VMD(K)=VMA(K) VME(K)=VMB(K) VMF(K)=VMC(K) 30 CONTINUE * VMD(1)=VMD(1)/VMF(2) VME(1)=VME(1)-VMD(1)*VMD(2) VMF(1)=VMF(1)-VMD(1)*VME(2) VMF(N)=VMF(N)/VMD(N-1) VMD(N)=VMD(N)-VMF(N)*VME(N-1) VME(N)=VME(N)-VMF(N)*VMF(N-1) * VME(1)=1.0/VME(1) DO 31 K=2,N KM=K-1 VMF(KM)=VMF(KM)*VME(KM) 31 VME(K)=1.0/(VME(K)-VMD(K)*VMF(KM)) * * RETURN END