Fortran 如何在Abaqus子例程中包含Intel MKL

Fortran 如何在Abaqus子例程中包含Intel MKL,fortran,subroutine,intel-mkl,abaqus,Fortran,Subroutine,Intel Mkl,Abaqus,我试图在ABAQUS UMAT中包含英特尔数学内核库的内置子例程。 我包括了“mkl.fi”,但它显示了如下所示的错误(它是ABAQUS生成的作业文件): 这些参数有时会随着版本的变化而变化,因此用户子例程 与先前版本的Abaqus一起使用时,可能需要进行调整 Abaqus/分析已退出,但有错误 源代码在ABAQUS外部编译时,工作正常,没有错误。 如果我不能在ABAQUS UMAT子例程中包含此lapack库,我可能必须在代码本身中附加lapack源代码。这可能会带来其他问题 那么有没有办

我试图在ABAQUS UMAT中包含英特尔数学内核库的内置子例程。 我包括了“mkl.fi”,但它显示了如下所示的错误(它是ABAQUS生成的作业文件):


这些参数有时会随着版本的变化而变化,因此用户子例程 与先前版本的Abaqus一起使用时,可能需要进行调整

Abaqus/分析已退出,但有错误


源代码在ABAQUS外部编译时,工作正常,没有错误。 如果我不能在ABAQUS UMAT子例程中包含此lapack库,我可能必须在代码本身中附加lapack源代码。这可能会带来其他问题

那么有没有办法在ABAQUS中成功编译这些lapack子例程呢。 请注意,ABAQUS用户子例程(UMAT)是以“.for”格式编写的。 我已经包括了UMAT(ABAQUS子程序)以供参考。它有“mul_big_mat”(表示乘以大矩阵)子例程,它使用lapack“dgemm”子例程



看起来您正在将自由格式(.f90)文件编译为固定格式(旧FORTRAN 77样式)文件。不能在固定格式.f或.for文件的行的和处使用(&A)

您的源文件是
。for
文件(
AFEM.for
),因此您的代码应采用固定格式。您可以尝试ABAQUS是否支持
-free
编译器标志以强制自由格式。如果没有,你必须在任何地方使用固定形式

注意不要将固定格式和自由格式的部分混合在一个文件中。文件
MKL_lapack.FI
似乎与原始源代码不兼容。不幸的是,您没有展示如何包含此内容


但是,您根本不需要包含include文件!您应该只链接到正确的库。使用“英特尔MKL链接线路顾问”导出正确的链接器标志。

我在谷歌找到的“MKL_lapack.FI”副本似乎是为了固定或免费兼容。检查您的副本,并确保行尾的符号位于第73列(或更多列),并且下一行的符号正好位于第6列。
Abaqus JOB Job-1
Abaqus 6.13-1

Begin Compiling Abaqus/Standard User Subroutines

3/8/2017 6:14:23 PM

Intel(R) Visual Fortran Intel(R) 64 Compiler for applications running on 
Intel(R) 64, Version 17.0.1.143 Build 20161005

Copyright (C) 1985-2016 Intel Corporation.  All rights reserved.


C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2017.1.143\windows\mkl\include\MKL_lapack.FI(29): error #5082: Syntax error, found '&' when expecting one of: * <IDENTIFIER>
      SUBROUTINE CGEJSV( JOBA, JOBU, JOBV, JOBR, JOBT, JOBP,            &
------------------------------------------------------------------------^
C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2017.1.143\windows\mkl\include\MKL_lapack.FI(30): error #5082: Syntax error, found '&' when expecting one of: * <IDENTIFIER>
     &                  M, N, A, LDA, SVA, U, LDU, V, LDV,              &
------------------------------------------------------------------------^
C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2017.1.143\windows\mkl\include\MKL_lapack.FI(34): error #5082: Syntax error, found '&' when expecting one of: <IDENTIFIER> %FILL
      COMPLEX           A( LDA, * ),  U( LDU, * ), V( LDV, * ),         &
------------------------------------------------------------------------^
C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2017.1.143\windows\mkl\include\MKL_lapack.FI(43): error #5082: Syntax error, found '&' when expecting one of: * <IDENTIFIER>
      SUBROUTINE ZGEJSV( JOBA, JOBU, JOBV, JOBR, JOBT, JOBP,            &
------------------------------------------------------------------------^
C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2017.1.143\windows\mkl\include\MKL_lapack.FI(44): error #5082: Syntax error, found '&' when expecting one of: * <IDENTIFIER>
     &                   M, N, A, LDA, SVA, U, LDU, V, LDV,             &
------------------------------------------------------------------------^
C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2017.1.143\windows\mkl\include\MKL_lapack.FI(48): error #5082: Syntax error, found '&' when expecting one of: <IDENTIFIER> %FILL
      DOUBLE COMPLEX     A( LDA, * ),  U( LDU, * ), V( LDV, * ),        &
------------------------------------------------------------------------^
C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2017.1.143\windows\mkl\include\MKL_lapack.FI(57): error #5082: Syntax error, found '&' when expecting one of: * <IDENTIFIER>
      SUBROUTINE DGESVDX( JOBU, JOBVT, RANGE, M, N, A, LDA, VL, VU,     &
------------------------------------------------------------------------^
C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2017.1.143\windows\mkl\include\MKL_lapack.FI(58): error #5082: Syntax error, found '&' when expecting one of: * <IDENTIFIER>
     &                   IL, IU, NS, S, U, LDU, VT, LDVT, WORK,         &
------------------------------------------------------------------------^
C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2017.1.143\windows\mkl\include\MKL_lapack.FI(64): error #5082: Syntax error, found '&' when expecting one of: <IDENTIFIER> %FILL
      DOUBLE PRECISION   A( LDA, * ), S( * ), U( LDU, * ),              &
------------------------------------------------------------------------^
C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2017.1.143\windows\mkl\include\MKL_lapack.FI(70): error #5082: Syntax error, found '&' when expecting one of: * <IDENTIFIER>
      SUBROUTINE SGESVDX( JOBU, JOBVT, RANGE, M, N, A, LDA, VL, VU,     &
------------------------------------------------------------------------^
C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2017.1.143\windows\mkl\include\MKL_lapack.FI(71): error #5082: Syntax error, found '&' when expecting one of: * <IDENTIFIER>
     &                   IL, IU, NS, S, U, LDU, VT, LDVT, WORK,         &
------------------------------------------------------------------------^
C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2017.1.143\windows\mkl\include\MKL_lapack.FI(77): error #5082: Syntax error, found '&' when expecting one of: <IDENTIFIER> %FILL
      REAL               A( LDA, * ), S( * ), U( LDU, * ),              &
------------------------------------------------------------------------^
C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2017.1.143\windows\mkl\include\MKL_lapack.FI(83): error #5082: Syntax error, found '&' when expecting one of: * <IDENTIFIER>
      SUBROUTINE CGESVDX( JOBU, JOBVT, RANGE, M, N, A, LDA, VL, VU,     &
------------------------------------------------------------------------^
C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2017.1.143\windows\mkl\include\MKL_lapack.FI(84): error #5082: Syntax error, found '&' when expecting one of: * <IDENTIFIER>
     &                   IL, IU, NS, S, U, LDU, VT, LDVT, WORK,         &
------------------------------------------------------------------------^
C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2017.1.143\windows\mkl\include\MKL_lapack.FI(91): error #5082: Syntax error, found '&' when expecting one of: <IDENTIFIER> %FILL
      COMPLEX            A( LDA, * ), U( LDU, * ), VT( LDVT, * ),       &
------------------------------------------------------------------------^
C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2017.1.143\windows\mkl\include\MKL_lapack.FI(97): error #5082: Syntax error, found '&' when expecting one of: * <IDENTIFIER>
      SUBROUTINE ZGESVDX( JOBU, JOBVT, RANGE, M, N, A, LDA, VL, VU,     &
------------------------------------------------------------------------^
C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2017.1.143\windows\mkl\include\MKL_lapack.FI(98): error #5082: Syntax error, found '&' when expecting one of: * <IDENTIFIER>
     &                   IL, IU, NS, S, U, LDU, VT, LDVT, WORK,         &
------------------------------------------------------------------------^
C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2017.1.143\windows\mkl\include\MKL_lapack.FI(105): error #5082: Syntax error, found '&' when expecting one of: <IDENTIFIER> %FILL
      COMPLEX*16         A( LDA, * ), U( LDU, * ), VT( LDVT, * ),       &
------------------------------------------------------------------------^
C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2017.1.143\windows\mkl\include\MKL_lapack.FI(111): error #5082: Syntax error, found '&' when expecting one of: * <IDENTIFIER>
      SUBROUTINE CGESVJ( JOBA, JOBU, JOBV, M, N, A, LDA, SVA, MV, V,    &
------------------------------------------------------------------------^
C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2017.1.143\windows\mkl\include\MKL_lapack.FI(121): error #5082: Syntax error, found '&' when expecting one of: * <IDENTIFIER>
      SUBROUTINE ZGESVJ( JOBA, JOBU, JOBV, M, N, A, LDA, SVA, MV, V,    &
------------------------------------------------------------------------^
C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2017.1.143\windows\mkl\include\MKL_lapack.FI(131): error #5082: Syntax error, found '&' when expecting one of: * <IDENTIFIER>
      SUBROUTINE DGGSVD3( JOBU, JOBV, JOBQ, M, N, P, K, L, A, LDA, B,   &
------------------------------------------------------------------------^
C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2017.1.143\windows\mkl\include\MKL_lapack.FI(132): error #5082: Syntax error, found '&' when expecting one of: * <IDENTIFIER>
     &                   LDB, ALPHA, BETA, U, LDU, V, LDV, Q, LDQ, WORK,&
------------------------------------------------------------------------^
C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2017.1.143\windows\mkl\include\MKL_lapack.FI(135): error #5082: Syntax error, found '&' when expecting one of: <IDENTIFIER> %FILL
      INTEGER            INFO, K, L, LDA, LDB, LDQ, LDU, LDV, M, N, P,  &
------------------------------------------------------------------------^
C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2017.1.143\windows\mkl\include\MKL_lapack.FI(138): error #5082: Syntax error, found '&' when expecting one of: <IDENTIFIER> %FILL
      DOUBLE PRECISION   A( LDA, * ), ALPHA( * ), B( LDB, * ),          &
------------------------------------------------------------------------^
C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2017.1.143\windows\mkl\include\MKL_lapack.FI(139): error #5082: Syntax error, found '&' when expecting one of: <IDENTIFIER> %FILL
     &                   BETA( * ), Q( LDQ, * ), U( LDU, * ),           &
------------------------------------------------------------------------^
C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2017.1.143\windows\mkl\include\MKL_lapack.FI(145): error #5082: Syntax error, found '&' when expecting one of: * <IDENTIFIER>
      SUBROUTINE SGGSVD3( JOBU, JOBV, JOBQ, M, N, P, K, L, A, LDA, B,   &
------------------------------------------------------------------------^
C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2017.1.143\windows\mkl\include\MKL_lapack.FI(146): error #5082: Syntax error, found '&' when expecting one of: * <IDENTIFIER>
     &                   LDB, ALPHA, BETA, U, LDU, V, LDV, Q, LDQ, WORK,&
------------------------------------------------------------------------^
C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2017.1.143\windows\mkl\include\MKL_lapack.FI(149): error #5082: Syntax error, found '&' when expecting one of: <IDENTIFIER> %FILL
      INTEGER            INFO, K, L, LDA, LDB, LDQ, LDU, LDV, M, N, P,  &
------------------------------------------------------------------------^
C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2017.1.143\windows\mkl\include\MKL_lapack.FI(152): error #5082: Syntax error, found '&' when expecting one of: <IDENTIFIER> %FILL
      REAL               A( LDA, * ), ALPHA( * ), B( LDB, * ),          &
------------------------------------------------------------------------^
C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2017.1.143\windows\mkl\include\MKL_lapack.FI(153): error #5082: Syntax error, found '&' when expecting one of: <IDENTIFIER> %FILL
     &                   BETA( * ), Q( LDQ, * ), U( LDU, * ),           &
------------------------------------------------------------------------^
AFEM.for(170): catastrophic error: Too many errors, exiting
compilation aborted for AFEM.for (code 1)
Abaqus Error: Problem during compilation - D:\Google Drive\Friday_May_27_2016\Mtech Thesis Job\All new work\TA\AFEM.for
Abaqus/Analysis exited with errors
----------
Abaqus JOB Job-1

Abaqus 6.13-1

Abaqus License Manager checked out the following licenses:


Begin Compiling Abaqus/Standard User Subroutines
3/8/2017 6:18:48 PM

Intel(R) Visual Fortran Intel(R) 64 Compiler for applications running on Intel(R) 64, Version 17.0.1.143 Build 20161005

Copyright (C) 1985-2016 Intel Corporation.  All rights reserved.


End Compiling Abaqus/Standard User Subroutines

Begin Linking Abaqus/Standard User Subroutines


Creating library standardU.lib and object standardU.exp

AFEM.obj : error LNK2019: unresolved external symbol dgemm referenced in function umat.R

standardU.dll : fatal error LNK1120: 1 unresolved externals

Abaqus Error: Problem during linking - Abaqus/Standard User Subroutines.

This error may be due to a mismatch in the Abaqus user subroutine arguments.
    C================================================================

          SUBROUTINE UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,
         1RPL,DDSDDT,DRPLDE,DRPLDT,STRAN,DSTRAN,
         2TIME,DTIME,TEMP,DTEMP,PREDEF,DPRED,MATERL,NDI,NSHR,NTENS,
         3NSTATV,PROPS,NPROPS,COORDS,DROT,PNEWDT,CELENT,
         4DFGRD0,DFGRD1,NOEL,NPT,KSLAY,KSPT,KSTEP,KINC)
    C
          INCLUDE 'ABA_PARAM.INC'
    C
          CHARACTER*80 MATERL
          DIMENSION STRESS(NTENS),STATEV(NSTATV),
         1DDSDDE(NTENS,NTENS),DDSDDT(NTENS),DRPLDE(NTENS),
         2STRAN(NTENS),DSTRAN(NTENS),TIME(2),PREDEF(1),DPRED(1),
         3PROPS(NPROPS),COORDS(3),DROT(3,3),
         4DFGRD0(3,3),DFGRD1(3,3)
    C
          DIMENSION EELAS(6),EPLAS(6),FLOW(6)
          PARAMETER (ONE=1.0D0,TWO=2.0D0,THREE=3.0D0,SIX=6.0D0)
          DATA NEWTON,TOLER/10,1.D-6/
    C
    C ============================================================================
    C     UMAT FOR 1D BAR
    C 

    ============================================================================
        C     Note :- This UMAT can only be used by 1D elements
        C
        C     Number of material properties, nprops = 1
        C     props(1)         Young's modulus in x direction
        C ---------------------------------------------------------------------
        C
              ! --- local variables
              DOUBLE PRECISION E
              DOUBLE PRECISION C(ntens, ntens)
              integer z
        !***********************************************************************

        ! *** Get Elastic properties
              E = props(1)
              write(*,*)''
              write(*,*) z
              write(*,*)''
        ! *** Elastic stiffness Cijkl *** !
              C(1,1) = E
              !call hello_world3
              CALL mul_big_mat

        ! *** calculate the stress *** !
              stress(1) = C(1,1)*(stran(1) + dstran(1))

        !     Updating Jacobian matrix
              ddsdde(1,1) = C(1,1)
              return
              END

              subroutine hello_world3
              implicit none
              character*32 text
        c
              write(*,*)'Hello World'
        c
              END

              subroutine mul_big_mat    
        c
        c
              integer m, n, k, i, j
              parameter (m=100,  k= 200, n=100)
              double precision a(m,k), b(k,n), c(m,n), alpha, beta
              alpha=1.0
              beta=0.0
        c      matrix a declaration       
              do i=1,m
                  do j=1,k
                      a(i,j)=i+j
                  enddo
              enddo
              write(*,*) a(100,200)
        c      matrix b declaration       
              do i=1,k
                  do j=1,n
                      b(i,j)=i-j
                  enddo
              enddo
              write(*,*) b(200,100)
        c      matrix c declaration       
              do i=1,m
                  do j=1,n
                      c(i,j)=0.0
                  enddo
              enddo
              call dgemm('n','n',m,n,k,alpha,a,m,b,k,beta,c,m)
! THIS IS THE SUBROUTINE I WANT TO USE FROM INTEL MKL LIBRARY
! I COULD USE MATMUL (AND THAT WORKS FINE), BUT ITS JUST AN EXAMPLE
! I HAVE TO USE 'DGETRI' AND MANY MORE
              write(*,*) c(1,1)
              do i=1,m
                  do j=1,n
                      write(*,*) ' '
                      write(*,*) c(i,j)
                  enddo
              enddo
              END