SUBROUTINESLAUUMF(UPLO,N,A,LDA,INFO)**--LAPACKauxiliaryroutine(version3.0)--*Univ.ofTennessee,Univ.ofCaliforniaBerkeley,NAGLtd.,*CourantInstitute,ArgonneNationalLab,andRiceUniversity*February29,1992**..ScalarArguments..CHARACTERUPLOINTEGERINFO,LDA,N*..*..ArrayArguments..REALA(LDA,*)*..**Purpose*=======**SLAUUMcomputestheproductU*U' or L'*L,wherethetriangular*factorUorLisstoredintheupperorlowertriangularpartof*thearrayA.**IfUPLO='U'or'u'thentheuppertriangleoftheresultisstored,*overwritingthefactorUinA.*IfUPLO='L'or'l'thenthelowertriangleoftheresultisstored,*overwritingthefactorLinA.**Thisistheblockedformofthealgorithm,callingLevel3BLAS.**Arguments*=========**UPLO(input)CHARACTER*1*SpecifieswhetherthetriangularfactorstoredinthearrayA*isupperorlowertriangular:*='U':Uppertriangular*='L':Lowertriangular**N(input)INTEGER*TheorderofthetriangularfactorUorL.N>=0.**A(input/output)REALarray,dimension(LDA,N)*Onentry,thetriangularfactorUorL.*Onexit,ifUPLO='U',theuppertriangleofAis*overwrittenwiththeuppertriangleoftheproductU*U';* if UPLO = 'L', the lower triangle of A is overwritten with* the lower triangle of the product L'*L.**LDA(input)INTEGER*TheleadingdimensionofthearrayA.LDA>=max(1,N).**INFO(output)INTEGER*=0:successfulexit*<0:ifINFO=-k,thek-thargumenthadanillegalvalue**=====================================================================**..Parameters..REALONEPARAMETER(ONE=1.0E+0)*..*..LocalScalars..LOGICALUPPERINTEGERI,IB,NB*..*..ExternalFunctions..LOGICALLSAMEINTEGERILAENVEXTERNALLSAME,ILAENV*..*..ExternalSubroutines..EXTERNALSGEMM,SLAUU2,SSYRK,STRMM,XERBLA*..*..IntrinsicFunctions..INTRINSICMAX,MIN*..*..ExecutableStatements..**Testtheinputparameters.*INFO=0UPPER=LSAME(UPLO,'U')IF(.NOT.UPPER.AND..NOT.LSAME(UPLO,'L'))THENINFO=-1ELSEIF(N.LT.0)THENINFO=-2ELSEIF(LDA.LT.MAX(1,N))THENINFO=-4ENDIFIF(INFO.NE.0)THENCALLXERBLA('SLAUUM',-INFO)RETURNENDIF**Quickreturnifpossible*IF(N.EQ.0)$RETURN**Determinetheblocksizeforthisenvironment.*NB=128*IF(NB.LE.1.OR.NB.GE.N)THEN**Useunblockedcode*CALLSLAUU2(UPLO,N,A,LDA,INFO)ELSE**Useblockedcode*IF(UPPER)THEN**ComputetheproductU*U'.*DO 10 I = 1, N, NBIB = MIN( NB, N-I+1 )CALL STRMM( 'Right', 'Upper', 'Transpose', 'Non-unit',$ I-1, IB, ONE, A( I, I ), LDA, A( 1, I ),$ LDA )CALL SLAUU2( 'Upper', IB, A( I, I ), LDA, INFO )IF( I+IB.LE.N ) THENCALL SGEMM( 'Notranspose', 'Transpose', I-1, IB,$ N-I-IB+1, ONE, A( 1, I+IB ), LDA,$ A( I, I+IB ), LDA, ONE, A( 1, I ), LDA )CALL SSYRK( 'Upper', 'Notranspose', IB, N-I-IB+1,$ ONE, A( I, I+IB ), LDA, ONE, A( I, I ),$ LDA )END IF10 CONTINUEELSE** Compute the product L'*L.*DO20I=1,N,NBIB=MIN(NB,N-I+1)CALLSTRMM('Left','Lower','Transpose','Non-unit',IB,$I-1,ONE,A(I,I),LDA,A(I,1),LDA)CALLSLAUU2('Lower',IB,A(I,I),LDA,INFO)IF(I+IB.LE.N)THENCALLSGEMM('Transpose','No transpose',IB,I-1,$N-I-IB+1,ONE,A(I+IB,I),LDA,$A(I+IB,1),LDA,ONE,A(I,1),LDA)CALLSSYRK('Lower','Transpose',IB,N-I-IB+1,ONE,$A(I+IB,I),LDA,ONE,A(I,I),LDA)ENDIF20CONTINUEENDIFENDIF*RETURN**EndofSLAUUM*END
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。