subroutine matinv(a,m,n,d,p,r) ! ! program log ! 2011 02 20 : henry juang, need for mass_dp and ndsl advection ! use gfs_dyn_machine implicit none integer i,j,k,l,m,n real(kind=kind_evod) a(m,n,n),d(m),p(m),r(m) real(kind=kind_evod) cons0,cons1 !constant cons0 = 0.d0 !constant cons1 = 1.d0 !constant do 200 l=1,m d(l)=cons1 !constant 200 continue do 100 k=1,n do 250 l=1,m p(l)=a(l,k,k) 250 continue do 300 l=1,m r(l)=-cons1/p(l) !constant 300 continue do 350 l=1,m a(l,k,k)=cons0 !constant 350 continue do 20 i=1,n do 400 l=1,m a(l,i,k)=a(l,i,k)*r(l) 400 continue 20 continue do 60 i=1,n if(i.eq.k) go to 60 do 40 j=1,n do 450 l=1,m a(l,i,j)=a(l,i,k)*a(l,k,j)+a(l,i,j) 450 continue 40 continue 60 continue do 600 l=1,m r(l)=-r(l) 600 continue do 80 j=1,n do 650 l=1,m a(l,k,j)=a(l,k,j)*r(l) 650 continue 80 continue do 700 l=1,m d(l)=d(l)*p(l) 700 continue do 750 l=1,m a(l,k,k)=r(l) 750 continue 100 continue return end