Fortran 如何在Abaqus子例程中包含Intel MKL
我试图在ABAQUS UMAT中包含英特尔数学内核库的内置子例程。 我包括了“mkl.fi”,但它显示了如下所示的错误(它是ABAQUS生成的作业文件):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一起使用时,可能需要进行调整 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