! $Id$
!    -*- f90 -*-
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Note: the syntax of this file is case sensitive.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! This file was auto-generated with f2py (version:2_5972).
! See http://cens.ioc.ee/projects/f2py2e/
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! The auto-generated file is quite heavily corrected
! For modifying, notice the following hints:
!   - if the dimension of an array depend on a array that is itself an input, use the C-Syntax: (1) becomes [0] etc.
!   - be sure that the precision defined is integer, real*8, and complex*16
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
python module core ! in 
   interface  ! in :core

     module prec
        subroutine prec_init
        end subroutine prec_init
     end module prec

     module damask_interface ! in :damask_interface:DAMASK_spectral_interface.f90
        subroutine DAMASK_interface_init(loadcaseParameterIn,geometryParameterIn) ! in :damask_interface:DAMASK_spectral_interface.f90
            character(len=1024), intent(in)   :: loadcaseParameterIn                                      
            character(len=1024), intent(in)   :: geometryParameterIn
        end subroutine DAMASK_interface_init            
     end module damask_interface

     module io
        subroutine IO_init
        end subroutine IO_init
     end module io
     
     module numerics
        subroutine numerics_init
        end subroutine numerics_init
     end module numerics

     module debug
        subroutine debug_init
        end subroutine debug_init
     end module debug

     module math ! in :math:math.f90
        subroutine math_init
        end subroutine math_init

        function math_curlFFT(geomdim,field) ! in :math:math.f90
            ! input variables
            real*8,  dimension(3),                                     intent(in)                                          :: geomdim
            real*8,  dimension(:,:,:,:,:),                             intent(in),                                         :: field
            ! function definition
            real*8,  dimension(size(field,1),size(field,2),size(field,3),size(field,4),size(field,5)),      depend(field)  :: math_curlFFT
        end function math_curlFFT 

        function math_divergenceFFT(geomdim,field) ! in :math:math.f90
            ! input variables
            real*8,  dimension(3),                                     intent(in)                                          :: geomdim
            real*8,  dimension(:,:,:,:,:),                             intent(in),                                         :: field
            ! function definition
            real*8,  dimension(size(field,1),size(field,2),size(field,3),size(field,4)),                    depend(field)  :: math_divergenceFFT
        end function math_divergenceFFT

        function math_divergenceFDM(geomdim,order,field) ! in :math:math.f90
            ! input variables
            real*8  dimension(3),                                     intent(in)                                          :: geomdim
            integer,                                                  intent(in)                                          :: order
            real*8,  dimension(:,:,:,:,:),                            intent(in),                                         :: field
            ! function definition
            real*8,  dimension(size(field,1),size(field,2),size(field,3),size(field,4)),                   depend(field)  :: math_divergenceFDM
        end function math_divergenceFDM
        
        function math_nearestNeighbor(querySet,domainSet) ! in :math:math.f90
             ! input variables
             real*8,  dimension(:,:),                           intent(in)  :: querySet
             real*8,  dimension(:,:),                           intent(in)  :: domainSet
            ! function definition
             integer, dimension(size(querySet,2)),         depend(querySet) :: math_nearestNeighbor
        end function math_nearestNeighbor
        
        function math_periodicNearestNeighbor(geomdim,Favg,querySet,domainSet) ! in :math:math.f90
             ! input variables
             real*8,  dimension(3),                             intent(in)  :: geomdim
             real*8,  dimension(3,3),                           intent(in)  :: Favg
             real*8,  dimension(:,:),                           intent(in)  :: querySet
             real*8,  dimension(:,:),                           intent(in)  :: domainSet
             integer, dimension(size(querySet,2)),         depend(querySet) :: math_periodicNearestNeighbor
             ! depending on input
             real*8,   dimension(size(domainSet,1),(3_pInt**size(domainSet,1))*size(domainSet,2)), depend(domainSet)   :: domainSetLarge
        end function math_periodicNearestNeighbor
        
        function math_periodicNearestNeighborDistances(geomdim,Favg,querySet,domainSet,Ndist) ! in :math:math.f90
             ! input variables
             real*8,  dimension(3),                             intent(in)  :: geomdim
             real*8,  dimension(3,3),                           intent(in)  :: Favg
             integer,                                           intent(in)  :: Ndist
             real*8,  dimension(:,:),                           intent(in)  :: querySet
             real*8,  dimension(:,:),                           intent(in)  :: domainSet
             real*8,  dimension(Ndist,size(querySet,2)), depend(Ndist,querySet) :: math_periodicNearestNeighborDistances
             ! depending on input
             real*8,   dimension(size(domainSet,1),(3_pInt**size(domainSet,1))*size(domainSet,2)), depend(domainSet)   :: domainSetLarge
        end function math_periodicNearestNeighborDistances
        
        function math_tensorAvg(field) ! in :math:math.f90
            ! input variables
            real*8  dimension(:,:,:,:,:),                    intent(in),                                     :: field
            ! function definition
            real*8 dimension(3,3),                                                                           :: math_tensorAvg
        end function math_tensorAvg

        function math_logstrainSpat(F) ! in :math:math.f90
            ! input variables
            real*8, dimension(:,:,:,:,:),       intent(in)                                                   :: F
            ! output variables
            real*8,  dimension(3,3,size(F,3),size(F,4),size(F,5)),             depend(F)                     :: math_logstrainSpat            
        end function math_logstrainSpat

        function math_logstrainMat(F) ! in :math:math.f90
            ! input variables
            real*8, dimension(:,:,:,:,:),       intent(in)                                                   :: F
            ! function
            real*8,  dimension(3,3,size(F,3),size(F,4),size(F,5)),             depend(F)                     :: math_logstrainMat            
        end function math_logstrainMat

        function math_cauchy(F,P) ! in :math:math.f90
            ! input variables
            real*8, dimension(:,:,:,:,:),       intent(in)                                                   :: F
            real*8, dimension(:,:,:,:,:),       intent(in)                                                   :: P
            ! function
            real*8,  dimension(3,3,size(F,3),size(F,4),size(F,5)),             depend(F)                     :: math_cauchy  
        end function math_cauchy
        
     end module math

     module fesolving
        subroutine FE_init
        end subroutine FE_init 
     end module fesolving

     module mesh ! in :mesh:mesh.f90
        subroutine mesh_init(ip,element)
             integer, parameter                   ::      ip = 1
             integer, parameter                   :: element = 1
        end subroutine mesh_init

        function mesh_regrid(adaptive,resNewInput,minRes) ! in :mesh:mesh.f90
             logical, intent(in)                                  :: adaptive
             integer, dimension(3)                                :: mesh_regrid
             integer, dimension(3), intent(in), optional          :: resNewInput = -1
             integer, dimension(3), intent(in), optional          :: minRes = -1
        end function mesh_regrid   
        
        function mesh_nodesAroundCentres(gDim,Favg,centres) ! in :mesh:mesh.f90
            real*8,  dimension(:,:,:,:),                       intent(in)                  :: centres
            real*8,  dimension(3),                             intent(in)                  :: gDim
            real*8,  dimension(3,3),                           intent(in)                  :: Favg
            real*8,  dimension(3,size(centres,2)+1,size(centres,3)+1,size(centres,4)+1), depend(centres)  :: mesh_nodesAroundCentres
            real*8,  dimension(3,size(centres,2)+1,size(centres,3)+1,size(centres,4)+1), depend(centres)  :: wrappedCentres
        end function mesh_nodesAroundCentres

        function mesh_deformedCoordsLinear(gDim,F,FavgIn) ! in :mesh:mesh.f90
            real*8,  dimension(:,:,:,:,:),                     intent(in)                  :: F
            real*8,  dimension(3),                             intent(in)                  :: gDim
            real*8,  dimension(3,3),                           intent(in), optional        :: FavgIn = -1.0
            real*8,  dimension(3,size(F,3),size(F,4),size(F,5)),                 depend(F) :: mesh_deformedCoordsLinear  
            real*8,  dimension(3,0:size(F,3)-1,0:size(F,4)-1,0:size(F,5)-1,0:7), depend(F) :: coordsAvgOrder
        end function mesh_deformedCoordsLinear

        function mesh_deformedCoordsFFT(gDim,F,FavgIn,scalingIn) ! in :mesh:mesh.f90
            real*8,  dimension(:,:,:,:,:),                     intent(in)                  :: F
            real*8,  dimension(3),                             intent(in)                  :: gDim
            real*8,  dimension(3,3),                           intent(in), optional        :: FavgIn = -1.0
            real*8,  dimension(3),                             intent(in), optional        :: scalingIn = -1.0
            real*8,  dimension(3,size(F,3),size(F,4),size(F,5)),           depend(F)       :: mesh_deformedCoordsFFT  
        end function mesh_deformedCoordsFFT
        
        function mesh_volumeMismatch(gDim,F,nodes) ! in :mesh:mesh.f90
            real*8,  dimension(:,:,:,:,:),                     intent(in)                  :: F
            real*8,  dimension(:,:,:,:),                       intent(in)                  :: nodes
            real*8,  dimension(3),                             intent(in)                  :: gDim
            real*8,  dimension(size(F,3),size(F,4),size(F,5)), depend(F)                   :: mesh_volumeMismatch
        end function mesh_volumeMismatch

        function mesh_shapeMismatch(gDim,F,nodes,centres) ! in :mesh:mesh.f90
            real*8,  dimension(:,:,:,:,:),                     intent(in)                  :: F
            real*8,  dimension(:,:,:,:),                       intent(in)                  :: nodes
            real*8,  dimension(:,:,:,:),                       intent(in)                  :: centres
            real*8,  dimension(3),                             intent(in)                  :: gDim
            real*8,  dimension(size(F,3),size(F,4),size(F,5)), depend(F)                   :: mesh_shapeMismatch
        end function mesh_shapeMismatch
        
        function mesh_init_postprocessing(filepath) ! in :mesh:mesh.f90
            character(len=*), intent(in) :: filepath
        end function mesh_init_postprocessing
        
        function mesh_build_cellnodes(nodes,Ncellnodes) ! in :mesh:mesh.f90
            integer,                         intent(in)         :: Ncellnodes
            real*8, dimension(3,:),          intent(in)         :: nodes
            real*8, dimension(3,Ncellnodes), depend(Ncellnodes) :: mesh_build_cellnodes
        end function mesh_build_cellnodes
        
        function mesh_get_Ncellnodes() ! in :mesh:mesh.f90
            integer :: mesh_get_Ncellnodes
        end function mesh_get_Ncellnodes
        
        function mesh_get_unitlength() ! in :mesh:mesh.f90
            real*8 :: mesh_get_unitlength
        end function mesh_get_unitlength
        
        function mesh_get_nodeAtIP(elemtypeFE,ip) ! in :mesh:mesh.f90
            character(len=*), intent(in) :: elemtypeFE
            integer,          intent(in) :: ip
            integer                      :: mesh_get_nodeAtIP
        end function mesh_get_nodeAtIP
        
     end module mesh
   end interface 
end python module core