SUBROUTINECTRMMF(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,$B,LDB)*..ScalarArguments..CHARACTER*1SIDE,UPLO,TRANSA,DIAGINTEGERM,N,LDA,LDBCOMPLEXALPHA*..ArrayArguments..COMPLEXA(LDA,*),B(LDB,*)*..**Purpose*=======**CTRMMperformsoneofthematrix-matrixoperations**B:=alpha*op(A)*B,orB:=alpha*B*op(A)**wherealphaisascalar,Bisanmbynmatrix,Aisaunit,or*non-unit,upperorlowertriangularmatrixandop(A)isoneof**op(A)=Aorop(A)=A' or op( A ) = conjg( A').**Parameters*==========**SIDE-CHARACTER*1.*Onentry,SIDEspecifieswhetherop(A)multipliesBfrom*theleftorrightasfollows:**SIDE='L'or'l'B:=alpha*op(A)*B.**SIDE='R'or'r'B:=alpha*B*op(A).**Unchangedonexit.**UPLO-CHARACTER*1.*Onentry,UPLOspecifieswhetherthematrixAisanupperor*lowertriangularmatrixasfollows:**UPLO='U'or'u'Aisanuppertriangularmatrix.**UPLO='L'or'l'Aisalowertriangularmatrix.**Unchangedonexit.**TRANSA-CHARACTER*1.*Onentry,TRANSAspecifiestheformofop(A)tobeusedin*thematrixmultiplicationasfollows:**TRANSA='N'or'n'op(A)=A.**TRANSA='T'or't'op(A)=A'.** TRANSA = 'C' or 'c' op( A ) = conjg( A').**Unchangedonexit.**DIAG-CHARACTER*1.*Onentry,DIAGspecifieswhetherornotAisunittriangular*asfollows:**DIAG='U'or'u'Aisassumedtobeunittriangular.**DIAG='N'or'n'Aisnotassumedtobeunit*triangular.**Unchangedonexit.**M-INTEGER.*Onentry,MspecifiesthenumberofrowsofB.Mmustbeat*leastzero.*Unchangedonexit.**N-INTEGER.*Onentry,NspecifiesthenumberofcolumnsofB.Nmustbe*atleastzero.*Unchangedonexit.**ALPHA-COMPLEX.*Onentry,ALPHAspecifiesthescalaralpha.Whenalphais*zerothenAisnotreferencedandBneednotbesetbefore*entry.*Unchangedonexit.**A-COMPLEXarrayofDIMENSION(LDA,k),wherekism*whenSIDE='L'or'l'andisnwhenSIDE='R'or'r'.*BeforeentrywithUPLO='U'or'u',theleadingkbyk*uppertriangularpartofthearrayAmustcontaintheupper*triangularmatrixandthestrictlylowertriangularpartof*Aisnotreferenced.*BeforeentrywithUPLO='L'or'l',theleadingkbyk*lowertriangularpartofthearrayAmustcontainthelower*triangularmatrixandthestrictlyuppertriangularpartof*Aisnotreferenced.*NotethatwhenDIAG='U'or'u',thediagonalelementsof*Aarenotreferencedeither,butareassumedtobeunity.*Unchangedonexit.**LDA-INTEGER.*Onentry,LDAspecifiesthefirstdimensionofAasdeclared*inthecalling(sub)program.WhenSIDE='L'or'l'then*LDAmustbeatleastmax(1,m),whenSIDE='R'or'r'*thenLDAmustbeatleastmax(1,n).*Unchangedonexit.**B-COMPLEXarrayofDIMENSION(LDB,n).*Beforeentry,theleadingmbynpartofthearrayBmust*containthematrixB,andonexitisoverwrittenbythe*transformedmatrix.**LDB-INTEGER.*Onentry,LDBspecifiesthefirstdimensionofBasdeclared*inthecalling(sub)program.LDBmustbeatleast*max(1,m).*Unchangedonexit.***Level3Blasroutine.**--Writtenon8-February-1989.*JackDongarra,ArgonneNationalLaboratory.*IainDuff,AEREHarwell.*JeremyDuCroz,NumericalAlgorithmsGroupLtd.*SvenHammarling,NumericalAlgorithmsGroupLtd.***..ExternalFunctions..LOGICALLSAMEEXTERNALLSAME*..ExternalSubroutines..EXTERNALXERBLA*..IntrinsicFunctions..INTRINSICCONJG,MAX*..LocalScalars..LOGICALLSIDE,NOCONJ,NOUNIT,UPPERINTEGERI,INFO,J,K,NROWACOMPLEXTEMP*..Parameters..COMPLEXONEPARAMETER(ONE=(1.0D+0,0.0D+0))COMPLEXZEROPARAMETER(ZERO=(0.0D+0,0.0D+0))*..*..ExecutableStatements..**Testtheinputparameters.*LSIDE=LSAME(SIDE,'L')IF(LSIDE)THENNROWA=MELSENROWA=NENDIFNOCONJ=LSAME(TRANSA,'N').OR.LSAME(TRANSA,'T')NOUNIT=LSAME(DIAG,'N')UPPER=LSAME(UPLO,'U')*INFO=0IF((.NOT.LSIDE).AND.$(.NOT.LSAME(SIDE,'R')))THENINFO=1ELSEIF((.NOT.UPPER).AND.$(.NOT.LSAME(UPLO,'L')))THENINFO=2ELSEIF((.NOT.LSAME(TRANSA,'N')).AND.$(.NOT.LSAME(TRANSA,'T')).AND.$(.NOT.LSAME(TRANSA,'R')).AND.$(.NOT.LSAME(TRANSA,'C')))THENINFO=3ELSEIF((.NOT.LSAME(DIAG,'U')).AND.$(.NOT.LSAME(DIAG,'N')))THENINFO=4ELSEIF(M.LT.0)THENINFO=5ELSEIF(N.LT.0)THENINFO=6ELSEIF(LDA.LT.MAX(1,NROWA))THENINFO=9ELSEIF(LDB.LT.MAX(1,M))THENINFO=11ENDIFIF(INFO.NE.0)THENCALLXERBLA('CTRMM ',INFO)RETURNENDIF**Quickreturnifpossible.*IF(N.EQ.0)$RETURN**Andwhenalpha.eq.zero.*IF(ALPHA.EQ.ZERO)THENDO20,J=1,NDO10,I=1,MB(I,J)=ZERO10CONTINUE20CONTINUERETURNENDIF**Starttheoperations.*IF(LSIDE)THENIF(LSAME(TRANSA,'N').OR.LSAME(TRANSA,'R'))THEN**FormB:=alpha*A*B.*IF(UPPER)THENDO50,J=1,NDO40,K=1,MIF(B(K,J).NE.ZERO)THENTEMP=ALPHA*B(K,J)IF(NOCONJ)THENDO30,I=1,K-1B(I,J)=B(I,J)+TEMP*A(I,K)30CONTINUEIF(NOUNIT)$TEMP=TEMP*A(K,K)B(K,J)=TEMPELSEDO35,I=1,K-1B(I,J)=B(I,J)+TEMP*CONJG(A(I,K))35CONTINUEIF(NOUNIT)$TEMP=TEMP*CONJG(A(K,K))B(K,J)=TEMPENDIFENDIF40CONTINUE50CONTINUEELSEDO80,J=1,NDO70K=M,1,-1IF(B(K,J).NE.ZERO)THENTEMP=ALPHA*B(K,J)B(K,J)=TEMPIF(NOCONJ)THENIF(NOUNIT)$B(K,J)=B(K,J)*A(K,K)DO60,I=K+1,MB(I,J)=B(I,J)+TEMP*A(I,K)60CONTINUEELSEIF(NOUNIT)$B(K,J)=B(K,J)*CONJG(A(K,K))DO65,I=K+1,MB(I,J)=B(I,J)+TEMP*CONJG(A(I,K))65CONTINUEENDIFENDIF70CONTINUE80CONTINUEENDIFELSE**FormB:=alpha*A'*B or B := alpha*conjg( A')*B.*IF(UPPER)THENDO120,J=1,NDO110,I=M,1,-1TEMP=B(I,J)IF(NOCONJ)THENIF(NOUNIT)$TEMP=TEMP*A(I,I)DO90,K=1,I-1TEMP=TEMP+A(K,I)*B(K,J)90CONTINUEELSEIF(NOUNIT)$TEMP=TEMP*CONJG(A(I,I))DO100,K=1,I-1TEMP=TEMP+CONJG(A(K,I))*B(K,J)100CONTINUEENDIFB(I,J)=ALPHA*TEMP110CONTINUE120CONTINUEELSEDO160,J=1,NDO150,I=1,MTEMP=B(I,J)IF(NOCONJ)THENIF(NOUNIT)$TEMP=TEMP*A(I,I)DO130,K=I+1,MTEMP=TEMP+A(K,I)*B(K,J)130CONTINUEELSEIF(NOUNIT)$TEMP=TEMP*CONJG(A(I,I))DO140,K=I+1,MTEMP=TEMP+CONJG(A(K,I))*B(K,J)140CONTINUEENDIFB(I,J)=ALPHA*TEMP150CONTINUE160CONTINUEENDIFENDIFELSEIF(LSAME(TRANSA,'N').OR.LSAME(TRANSA,'R'))THEN**FormB:=alpha*B*A.*IF(UPPER)THENDO200,J=N,1,-1TEMP=ALPHAIF(NOCONJ)THENIF(NOUNIT)$TEMP=TEMP*A(J,J)ELSEIF(NOUNIT)$TEMP=TEMP*CONJG(A(J,J))ENDIFDO170,I=1,MB(I,J)=TEMP*B(I,J)170CONTINUEDO190,K=1,J-1IF(A(K,J).NE.ZERO)THENIF(NOCONJ)THENTEMP=ALPHA*A(K,J)ELSETEMP=ALPHA*CONJG(A(K,J))ENDIFDO180,I=1,MB(I,J)=B(I,J)+TEMP*B(I,K)180CONTINUEENDIF190CONTINUE200CONTINUEELSEDO240,J=1,NTEMP=ALPHAIF(NOCONJ)THENIF(NOUNIT)$TEMP=TEMP*A(J,J)ELSEIF(NOUNIT)$TEMP=TEMP*CONJG(A(J,J))ENDIFDO210,I=1,MB(I,J)=TEMP*B(I,J)210CONTINUEDO230,K=J+1,NIF(A(K,J).NE.ZERO)THENIF(NOCONJ)THENTEMP=ALPHA*A(K,J)ELSETEMP=ALPHA*CONJG(A(K,J))ENDIFDO220,I=1,MB(I,J)=B(I,J)+TEMP*B(I,K)220CONTINUEENDIF230CONTINUE240CONTINUEENDIFELSE**FormB:=alpha*B*A' or B := alpha*B*conjg( A').*IF(UPPER)THENDO280,K=1,NDO260,J=1,K-1IF(A(J,K).NE.ZERO)THENIF(NOCONJ)THENTEMP=ALPHA*A(J,K)ELSETEMP=ALPHA*CONJG(A(J,K))ENDIFDO250,I=1,MB(I,J)=B(I,J)+TEMP*B(I,K)250CONTINUEENDIF260CONTINUETEMP=ALPHAIF(NOUNIT)THENIF(NOCONJ)THENTEMP=TEMP*A(K,K)ELSETEMP=TEMP*CONJG(A(K,K))ENDIFENDIFIF(TEMP.NE.ONE)THENDO270,I=1,MB(I,K)=TEMP*B(I,K)270CONTINUEENDIF280CONTINUEELSEDO320,K=N,1,-1DO300,J=K+1,NIF(A(J,K).NE.ZERO)THENIF(NOCONJ)THENTEMP=ALPHA*A(J,K)ELSETEMP=ALPHA*CONJG(A(J,K))ENDIFDO290,I=1,MB(I,J)=B(I,J)+TEMP*B(I,K)290CONTINUEENDIF300CONTINUETEMP=ALPHAIF(NOUNIT)THENIF(NOCONJ)THENTEMP=TEMP*A(K,K)ELSETEMP=TEMP*CONJG(A(K,K))ENDIFENDIFIF(TEMP.NE.ONE)THENDO310,I=1,MB(I,K)=TEMP*B(I,K)310CONTINUEENDIF320CONTINUEENDIFENDIFENDIF*RETURN**EndofCTRMM.*END
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。