!-------------------------------------- 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 --------------------------------------
***s/r inverse - compute inverses of F_len  matrices of the same order
*

       subroutine inverse(F_B_8,F_A_8,F_dim,F_len) 4
*
#include "impnone.cdk"
*
       integer F_dim, F_len
       real*8 F_A_8(F_dim,F_dim,F_len), F_B_8(F_dim,F_dim,F_len)
*
*author
*     Abdessamad Qaddouri
*
*revision
* v2_10 - Qaddouri A.       - initial version
*
*
*arguments
*  Name        I/O                 Description
*--------------------------------------------------------------
*  F_A_8           I                 matrices to be inverted
*  F_B_8           O                 inverses
*----------------------------------------------------------------
*
**
       real*8  det_8
       integer kk
*
*     __________________________________________________________________
*     
       if (F_dim .eq. 1) then
        do kk=1,F_len
        F_B_8(1,1,kk) =1/F_A_8(1,1,kk)
        enddo
        endif
       
       if (F_dim .eq. 2) then
       do kk=1,F_len
       det_8= F_A_8(1,1,kk)*F_A_8(2,2,kk)- F_A_8(1,2,kk)*F_A_8(2,1,kk)
         F_B_8(1,1,kk) =   F_A_8(2,2,kk)/det_8
         F_B_8(1,2,kk) = - F_A_8(1,2,kk)/det_8
         F_B_8(2,1,kk) = - F_A_8(2,1,kk)/det_8
         F_B_8(2,2,kk) =   F_A_8(1,1,kk)/det_8
       enddo
       endif
 
       if (F_dim .eq. 3) then
        do kk=1,F_len
        det_8= F_A_8(1,1,kk)*F_A_8(2,2,kk)*F_A_8(3,3,kk)- 
     +     F_A_8(1,1,kk)*F_A_8(2,3,kk)*F_A_8(3,2,kk)-F_A_8(2,1,kk)
     +     *F_A_8(1,2,kk)*F_A_8(3,3,kk) + F_A_8(2,1,kk)*F_A_8(1,3,kk)*F_A_8(3,2,kk)+F_A_8(3,1,kk)
     +     *F_A_8(1,2,kk)*F_A_8(2,3,kk)-F_A_8(3,1,kk)*F_A_8(1,3,kk)*F_A_8(2,2,kk)

         F_B_8(1,1,kk)= (F_A_8(2,2,kk)*F_A_8(3,3,kk)-F_A_8(2,3,kk)*F_A_8(3,2,kk))/det_8
         F_B_8(1,2,kk)=-( F_A_8(1,2,kk)*F_A_8(3,3,kk)-F_A_8(1,3,kk)*F_A_8(3,2,kk))/det_8
         F_B_8(1,3,kk)= (F_A_8(1,2,kk)*F_A_8(2,3,kk)-F_A_8(1,3,kk)*F_A_8(2,2,kk))/det_8
         F_B_8(2,1,kk)= -(F_A_8(2,1,kk)*F_A_8(3,3,kk)-F_A_8(2,3,kk)*F_A_8(3,1,kk))/det_8
         F_B_8(2,2,kk)=(F_A_8(1,1,kk)*F_A_8(3,3,kk)-F_A_8(1,3,kk)*F_A_8(3,1,kk))/det_8
         F_B_8(2,3,kk)=-(F_A_8(1,1,kk)*F_A_8(2,3,kk)-F_A_8(1,3,kk)*F_A_8(2,1,kk))/det_8
         F_B_8(3,1,kk)=(F_A_8(2,1,kk)*F_A_8(3,2,kk)-F_A_8(2,2,kk)*F_A_8(3,1,kk))/det_8
         F_B_8(3,2,kk)=-(F_A_8(1,1,kk)*F_A_8(3,2,kk)-F_A_8(1,2,kk)*F_A_8(3,1,kk))/det_8
         F_B_8(3,3,kk)=(F_A_8(1,1,kk)*F_A_8(2,2,kk)-F_A_8(1,2,kk)*F_A_8(2,1,kk))/det_8
        enddo
        endif

        if (F_dim .eq. 4) then
       do kk=1,F_len
       det_8= F_A_8(1,1,kk)*F_A_8(2,2,kk)*F_A_8(3,3,kk)*F_A_8(4,4,kk)
     *         - F_A_8(1,1,kk)*F_A_8(2,2,kk)*F_A_8(3,4,kk)*F_A_8(4,3,kk)
     *         -F_A_8(1,1,kk)*F_A_8(3,2,kk)*F_A_8(2,3,kk)*F_A_8(4,4,kk) +
     *          F_A_8(1,1,kk)*F_A_8(3,2,kk)*F_A_8(2,4,kk)*F_A_8(4,3,kk)
     *         +F_A_8(1,1,kk)*F_A_8(4,2,kk)*F_A_8(2,3,kk)*F_A_8(3,4,kk)-
     *         F_A_8(1,1,kk)*F_A_8(4,2,kk)*F_A_8(2,4,kk)*F_A_8(3,3,kk)
     *         -F_A_8(2,1,kk)*F_A_8(1,2,kk)*F_A_8(3,3,kk)*F_A_8(4,4,kk)+
     *         F_A_8(2,1,kk)*F_A_8(1,2,kk)*F_A_8(3,4,kk)*F_A_8(4,3,kk)+F_A_8(2,1,kk)
     +        *F_A_8(3,2,kk)*F_A_8(1,3,kk)*F_A_8(4,4,kk)-F_A_8(2,1,kk)*F_A_8(3,2,kk)
     +        *F_A_8(1,4,kk)*F_A_8(4,3,kk)-F_A_8(2,1,kk)*F_A_8(4,2,kk)
     +        *F_A_8(1,3,kk)*F_A_8(3,4,kk)+F_A_8(2,1,kk)*F_A_8(4,2,kk)*F_A_8(1,4,kk)*
     +         F_A_8(3,3,kk)+F_A_8(3,1,kk)*F_A_8(1,2,kk)*F_A_8(2,3,kk)
     +         *F_A_8(4,4,kk)-F_A_8(3,1,kk)*F_A_8(1,2,kk)*F_A_8(2,4,kk)*F_A_8(4,3,kk)
     *        -F_A_8(3,1,kk)*F_A_8(2,2,kk)*F_A_8(1,3,kk)*F_A_8(4,4,kk)
     *        +F_A_8(3,1,kk)*F_A_8(2,2,kk)*F_A_8(1,4,kk)*F_A_8(4,3,kk)+F_A_8(3,1,kk)*
     +         F_A_8(4,2,kk)*F_A_8(1,3,kk)*F_A_8(2,4,kk)-F_A_8(3,1,kk)
     +         *F_A_8(4,2,kk)*F_A_8(1,4,kk)*F_A_8(2,3,kk)-F_A_8(4,1,kk)*F_A_8(1,2,kk)
     +        *F_A_8(2,3,kk)*F_A_8(3,4,kk)+F_A_8(4,1,kk)*F_A_8(1,2,kk)
     +        *F_A_8(2,4,kk)*F_A_8(3,3,kk)+F_A_8(4,1,kk)*F_A_8(2,2,kk)*F_A_8(1,3,kk)
     +        *F_A_8(3,4,kk)-F_A_8(4,1,kk)*F_A_8(2,2,kk)*F_A_8(1,4,kk)
     +        *F_A_8(3,3,kk)-F_A_8(4,1,kk)*F_A_8(3,2,kk)*F_A_8(1,3,kk)*F_A_8(2,4,kk)
     *         +F_A_8(4,1,kk)*F_A_8(3,2,kk)*F_A_8(1,4,kk)*F_A_8(2,3,kk)

       F_B_8(1,1,kk)= (F_A_8(2,2,kk)*F_A_8(3,3,kk)*F_A_8(4,4,kk)-F_A_8(2,2,kk)*
     +   F_A_8(3,4,kk)*F_A_8(4,3,kk)-F_A_8(3,2,kk)
     +  *F_A_8(2,3,kk)*F_A_8(4,4,kk)+F_A_8(3,2,kk)*F_A_8(2,4,kk)*
     +   F_A_8(4,3,kk)+F_A_8(4,2,kk)*F_A_8(2,3,kk)*F_A_8(3,4,kk)-F_A_8(4,2,kk)
     +  *F_A_8(2,4,kk)*F_A_8(3,3,kk))/det_8

       F_B_8(1,2,kk)=-(F_A_8(1,2,kk)*F_A_8(3,3,kk)*F_A_8(4,4,kk)-F_A_8(1,2,kk)*
     +   F_A_8(3,4,kk)*F_A_8(4,3,kk)-F_A_8(3,2,kk)
     +  *F_A_8(1,3,kk)*F_A_8(4,4,kk)+F_A_8(3,2,kk)*F_A_8(1,4,kk)*F_A_8(4,3,kk)+
     +  F_A_8(4,2,kk)*F_A_8(1,3,kk)*F_A_8(3,4,kk)-F_A_8(4,2,kk)
     +  *F_A_8(1,4,kk)*F_A_8(3,3,kk))/det_8

       F_B_8(1,3,kk)=(F_A_8(1,2,kk)*F_A_8(2,3,kk)*F_A_8(4,4,kk)-F_A_8(1,2,kk)*
     +  F_A_8(2,4,kk)*F_A_8(4,3,kk)-F_A_8(2,2,kk)
     +  *F_A_8(1,3,kk)*F_A_8(4,4,kk)+F_A_8(2,2,kk)*F_A_8(1,4,kk)*F_A_8(4,3,kk)+
     +   F_A_8(4,2,kk)*F_A_8(1,3,kk)*F_A_8(2,4,kk)-F_A_8(4,2,kk)
     +  *F_A_8(1,4,kk)*F_A_8(2,3,kk))/det_8

       F_B_8(1,4,kk)=-(F_A_8(1,2,kk)*F_A_8(2,3,kk)*F_A_8(3,4,kk)-F_A_8(1,2,kk)*
     +   F_A_8(2,4,kk)*F_A_8(3,3,kk)-F_A_8(2,2,kk)
     +  *F_A_8(1,3,kk)*F_A_8(3,4,kk)+F_A_8(2,2,kk)*F_A_8(1,4,kk)*F_A_8(3,3,kk)+
     +   F_A_8(3,2,kk)*F_A_8(1,3,kk)*F_A_8(2,4,kk)-F_A_8(3,2,kk)
     +  *F_A_8(1,4,kk)*F_A_8(2,3,kk)) /det_8

       F_B_8(2,1,kk)= -(F_A_8(2,1,kk)*F_A_8(3,3,kk)*F_A_8(4,4,kk)-F_A_8(2,1,kk)*
     +   F_A_8(3,4,kk)*F_A_8(4,3,kk)-F_A_8(3,1,kk)
     +  *F_A_8(2,3,kk)*F_A_8(4,4,kk)+F_A_8(3,1,kk)*F_A_8(2,4,kk)*F_A_8(4,3,kk)+
     +   F_A_8(4,1,kk)*F_A_8(2,3,kk)*F_A_8(3,4,kk)-F_A_8(4,1,kk)
     +  *F_A_8(2,4,kk)*F_A_8(3,3,kk))/det_8

       F_B_8(2,2,kk)=(F_A_8(1,1,kk)*F_A_8(3,3,kk)*F_A_8(4,4,kk)-F_A_8(1,1,kk)*
     +   F_A_8(3,4,kk)*F_A_8(4,3,kk)-F_A_8(3,1,kk)
     +  *F_A_8(1,3,kk)*F_A_8(4,4,kk)+F_A_8(3,1,kk)*F_A_8(1,4,kk)*F_A_8(4,3,kk)+
     +   F_A_8(4,1,kk)*F_A_8(1,3,kk)*F_A_8(3,4,kk)-F_A_8(4,1,kk)
     +  *F_A_8(1,4,kk)*F_A_8(3,3,kk))/det_8

       F_B_8(2,3,kk)=-(F_A_8(1,1,kk)*F_A_8(2,3,kk)*F_A_8(4,4,kk)-F_A_8(1,1,kk)*
     +   F_A_8(2,4,kk)*F_A_8(4,3,kk)-F_A_8(2,1,kk)
     +  *F_A_8(1,3,kk)*F_A_8(4,4,kk)+F_A_8(2,1,kk)*F_A_8(1,4,kk)*F_A_8(4,3,kk)
     +  +F_A_8(4,1,kk)*F_A_8(1,3,kk)*F_A_8(2,4,kk)-F_A_8(4,1,kk)
     +  *F_A_8(1,4,kk)*F_A_8(2,3,kk))/det_8

       F_B_8(2,4,kk) = (F_A_8(1,1,kk)*F_A_8(2,3,kk)*F_A_8(3,4,kk)-F_A_8(1,1,kk)*
     +   F_A_8(2,4,kk)*F_A_8(3,3,kk)-F_A_8(2,1,kk)
     +  *F_A_8(1,3,kk)*F_A_8(3,4,kk)+F_A_8(2,1,kk)*F_A_8(1,4,kk)*F_A_8(3,3,kk)
     +  +F_A_8(3,1,kk)*F_A_8(1,3,kk)*F_A_8(2,4,kk)-F_A_8(3,1,kk)
     +  *F_A_8(1,4,kk)*F_A_8(2,3,kk))/det_8

       F_B_8(3,1,kk) = (F_A_8(2,1,kk)*F_A_8(3,2,kk)*F_A_8(4,4,kk)-F_A_8(2,1,kk)*
     +   F_A_8(3,4,kk)*F_A_8(4,2,kk)-F_A_8(3,1,kk)
     +  *F_A_8(2,2,kk)*F_A_8(4,4,kk)+F_A_8(3,1,kk)*F_A_8(2,4,kk)*F_A_8(4,2,kk)+
     +   F_A_8(4,1,kk)*F_A_8(2,2,kk)*F_A_8(3,4,kk)-F_A_8(4,1,kk)
     +  *F_A_8(2,4,kk)*F_A_8(3,2,kk))/det_8


       F_B_8(3,2,kk) = -(F_A_8(1,1,kk)*F_A_8(3,2,kk)*F_A_8(4,4,kk)-F_A_8(1,1,kk)*
     +   F_A_8(3,4,kk)*F_A_8(4,2,kk)-F_A_8(3,1,kk)
     +  *F_A_8(1,2,kk)*F_A_8(4,4,kk)+F_A_8(3,1,kk)*F_A_8(1,4,kk)*F_A_8(4,2,kk)+
     +   F_A_8(4,1,kk)*F_A_8(1,2,kk)*F_A_8(3,4,kk)-F_A_8(4,1,kk)
     +  *F_A_8(1,4,kk)*F_A_8(3,2,kk))/det_8

       F_B_8(3,3,kk) = (F_A_8(1,1,kk)*F_A_8(2,2,kk)*F_A_8(4,4,kk)-F_A_8(1,1,kk)*
     +   F_A_8(2,4,kk)*F_A_8(4,2,kk)-F_A_8(2,1,kk)
     +  *F_A_8(1,2,kk)*F_A_8(4,4,kk)+F_A_8(2,1,kk)*F_A_8(1,4,kk)*F_A_8(4,2,kk)+
     +   F_A_8(4,1,kk)*F_A_8(1,2,kk)*F_A_8(2,4,kk)-F_A_8(4,1,kk)
     +  *F_A_8(1,4,kk)*F_A_8(2,2,kk))/det_8

       F_B_8(3,4,kk) = -(F_A_8(1,1,kk)*F_A_8(2,2,kk)*F_A_8(3,4,kk)-F_A_8(1,1,kk)*
     +   F_A_8(2,4,kk)*F_A_8(3,2,kk)-F_A_8(2,1,kk)
     +  *F_A_8(1,2,kk)*F_A_8(3,4,kk)+F_A_8(2,1,kk)*F_A_8(1,4,kk)*F_A_8(3,2,kk)+
     +   F_A_8(3,1,kk)*F_A_8(1,2,kk)*F_A_8(2,4,kk)-F_A_8(3,1,kk)
     +  *F_A_8(1,4,kk)*F_A_8(2,2,kk))/det_8

       F_B_8(4,1,kk) = -(F_A_8(2,1,kk)*F_A_8(3,2,kk)*F_A_8(4,3,kk)-F_A_8(2,1,kk)*
     +   F_A_8(3,3,kk)*F_A_8(4,2,kk)-F_A_8(3,1,kk)
     +  *F_A_8(2,2,kk)*F_A_8(4,3,kk)+F_A_8(3,1,kk)*F_A_8(2,3,kk)*F_A_8(4,2,kk)+
     +   F_A_8(4,1,kk)*F_A_8(2,2,kk)*F_A_8(3,3,kk)-F_A_8(4,1,kk)
     +  *F_A_8(2,3,kk)*F_A_8(3,2,kk))/det_8

       F_B_8(4,2,kk) = (F_A_8(1,1,kk)*F_A_8(3,2,kk)*F_A_8(4,3,kk)-F_A_8(1,1,kk)*
     +  F_A_8(3,3,kk)*F_A_8(4,2,kk)-F_A_8(3,1,kk)
     +  *F_A_8(1,2,kk)*F_A_8(4,3,kk)+F_A_8(3,1,kk)*F_A_8(1,3,kk)*F_A_8(4,2,kk)
     +  +F_A_8(4,1,kk)*F_A_8(1,2,kk)*F_A_8(3,3,kk)-F_A_8(4,1,kk)
     +  *F_A_8(1,3,kk)*F_A_8(3,2,kk))/det_8


       F_B_8(4,3,kk) = -(F_A_8(1,1,kk)*F_A_8(2,2,kk)*F_A_8(4,3,kk)-F_A_8(1,1,kk)*
     +   F_A_8(2,3,kk)*F_A_8(4,2,kk)-F_A_8(2,1,kk)
     +  *F_A_8(1,2,kk)*F_A_8(4,3,kk)+F_A_8(2,1,kk)*F_A_8(1,3,kk)*F_A_8(4,2,kk)+
     +   F_A_8(4,1,kk)*F_A_8(1,2,kk)*F_A_8(2,3,kk)-F_A_8(4,1,kk)
     +  *F_A_8(1,3,kk)*F_A_8(2,2,kk))/det_8


       F_B_8(4,4,kk) = (F_A_8(1,1,kk)*F_A_8(2,2,kk)*F_A_8(3,3,kk)-F_A_8(1,1,kk)*
     +   F_A_8(2,3,kk)*F_A_8(3,2,kk)-F_A_8(2,1,kk)
     +  *F_A_8(1,2,kk)*F_A_8(3,3,kk)+F_A_8(2,1,kk)*F_A_8(1,3,kk)*F_A_8(3,2,kk)
     +  +F_A_8(3,1,kk)*F_A_8(1,2,kk)*F_A_8(2,3,kk)-F_A_8(3,1,kk)
     +  *F_A_8(1,3,kk)*F_A_8(2,2,kk))/det_8

        enddo
        endif
*
*     __________________________________________________________________
*     
        return
        end