Как исправить «ошибку неопределенного символа»?

Я совершенно новичок в программировании как на абаке, так и на фортране. Я работаю над проектом, в котором я связываю фазовое поле с распространением трещины, где пустотная фаза учитывается в кинематике распространения трещины. Не буду вдаваться в подробности!

Я прикрепил 3 кода/сообщения с моим вопросом здесь:

a) umat_sdvini3.f (мой файл пользовательской подпрограммы, в котором есть и sdvini, и umat) b) Job-User-mod-9.inp (входной файл .inp, который я создал с помощью Abaqus CAE) c) Job- User-15.msg (файл, содержащий сообщение об ошибке!)

Когда я говорю Abaqus запустить задание с пользовательской подпрограммой, задание по какой-то причине прерывается! В предыдущих запусках задания (с 11 по 14), когда в файле подпрограммы оператор if/else для переменной состояния был закомментирован, все работало нормально!

Со вторым оператором if/else, раскомментированным в прикрепленном файле фортрана, возникает ошибка, и задание прерывается!

Код fortran 77 для моей пользовательской подпрограммы: (это второй командный блок оператора if/else, который не работает должным образом! Я думал, что смогу получить доступ к значениям переменных состояния, зависящих от решения, через координаты (1), которые являются координатами x!

  subroutine sdvini(statev,coords,nstatv,ncrds,noel,npt,layer,kspt)

  include 'aba_param.inc'

  dimension statev(nstatv), coords(ncrds)

  statev(1)=5.d0


  return
  end

  subroutine umat(stress,statev,ddsdde,sse,spd,scd,
 1 rpl,ddsddt,drplde,drpldt,
 2 stran,dstran,time,dtime,temp,dtemp,predef,dpred,cmname,
 3 ndi,nshr,ntens,nstatv,props,nprops,coords,drot,pnewdt,
 4 celent,dfgrd0,dfgrd1,noel,npt,layer,kspt,kstep,kinc)

  include 'aba_param.inc'

  character*80 cmname
  dimension stress(ntens),statev(nstatv)
  dimension ddsdde(ntens,ntens),ddsddt(ntens),drplde(ntens)
  dimension stran(ntens),dstran(ntens),time(2),predef(1),dpred(1)
  dimension props(nprops),coords(3),drot(3,3),dfgrd0(3,3),dfgrd1(3,3)

  C real E, xnu, bulk, shear

  integer i, j

  ddsdde = 0.d0

  E = props(1)
  xnu = props(2)

  statev(1)=5.d0

  shear = E/2.d0/(1.d0+xnu)
  bulk = E/3.d0/(1.d0-2.d0*xnu)

  real f_i=1.0e-10
  real w_bar=0.25d0
  real walpha=2.d0



  a_1 = (-2)*(1.d0-f_i)/0.25d0
  a_2 = (1.d0-f_i)/(0.25**2)

  C omega = statev(1)

  if(ndi.eq.2 .and. nshr.eq.1) then
    ddsdde(1,1) = bulk + (10.d0/9.d0)*shear
    ddsdde(1,2) = bulk - (8.d0/9.d0)*shear
    ddsdde(2,1) = bulk - (8.d0/9.d0)*shear
    ddsdde(2,2) = bulk + (10.d0/9.d0)*shear
    ddsdde(3,3) = 2.d0*shear
    ddsdde = ddsdde*statev(1)
  end if

  do i=1,ntens
    do j=1,ntens
        stress(i) = stress(i) + ddsdde(i,j)*dstran(j)
    end do
  end do

  if(coords(1).le.0 .and. coords(2).eq.0) then
    statev(1) = (w_bar*(1-tanh(w_alpha*coords(1))))
    statev(1)=1.d0+a_1*(statev(1))+a_2*(statev(1)**2)
  elseif(coords(1).gt.0 .and. coords(2).eq.0) then
    statev(1) = (w_bar*(1+tanh(w_alpha*coords(1))))
    statev(1)=1.d0+a_1*(statev(1))+a_2*(statev(1)**2)
  else
      statev(1)=0.d0
  end if

  statev(1)=state(1) + kinc

  write(6,*) ddsdde

  return
  end

Это файл .inp Abaqus (стандартный):

  *Heading
  ** Job name: Job-User-9 Model name: Model-1
  ** Generated by: Abaqus/CAE 6.14-2
  *Preprint, echo=NO, model=NO, history=NO, contact=NO
  **
  ** PARTS
  **
  *Part, name=Plate
  *Node
  1,           0.,         100.
  2,           0.,         99.5
  3,           0.,          99.
  4,           0.,         98.5
  5,           0.,          98.
  6,           0.,         97.5
  7,           0.,          97.
  8,           0.,         96.5
  9,           0.,          96.
 10,           0.,         95.5
 11,           0.,          95.
 12,           0.,         94.5
 13,           0.,          94.
 14,           0.,         93.5
 15,           0.,          93.
 16,           0.,         92.5
 17,           0.,          92.
 18,           0.,         91.5
 19,           0.,          91.
 20,           0.,         90.5
 21,           0.,          90.
 22,           0.,         89.5
 23,           0.,          89.
 24,           0.,         88.5
 25,           0.,          88.
 26,           0.,         87.5
 27,           0.,          87.
 28,           0.,         86.5
 29,           0.,          86.
 30,           0.,         85.5
 31,           0.,          85.
 32,           0.,         84.5
 33,           0.,          84.
 34,           0.,         83.5
 35,           0.,          83.
 36,           0.,         82.5
 37,           0.,          82.
 38,           0.,         81.5
 39,           0.,          81.
 40,           0.,         80.5
 41,           0.,          80.
 42,           0.,         79.5
 43,           0.,          79.
 44,           0.,         78.5
 45,           0.,          78.
 46,           0.,         77.5
 47,           0.,          77.
 48,           0.,         76.5
 49,           0.,          76.
 50,           0.,         75.5
 ...
 ...
 ...
 *Element, type=CPS4R
 1,     1,     2,   203,   202
 2,     2,     3,   204,   203
 3,     3,     4,   205,   204
 4,     4,     5,   206,   205
 5,     5,     6,   207,   206
 6,     6,     7,   208,   207
 7,     7,     8,   209,   208
 8,     8,     9,   210,   209
 9,     9,    10,   211,   210
10,    10,    11,   212,   211
11,    11,    12,   213,   212
12,    12,    13,   214,   213
13,    13,    14,   215,   214
14,    14,    15,   216,   215
15,    15,    16,   217,   216
16,    16,    17,   218,   217
17,    17,    18,   219,   218
18,    18,    19,   220,   219
19,    19,    20,   221,   220
20,    20,    21,   222,   221
21,    21,    22,   223,   222
22,    22,    23,   224,   223
23,    23,    24,   225,   224
24,    24,    25,   226,   225
25,    25,    26,   227,   226
26,    26,    27,   228,   227
27,    27,    28,   229,   228
28,    28,    29,   230,   229
29,    29,    30,   231,   230
30,    30,    31,   232,   231
31,    31,    32,   233,   232
32,    32,    33,   234,   233
33,    33,    34,   235,   234
34,    34,    35,   236,   235
35,    35,    36,   237,   236
36,    36,    37,   238,   237
37,    37,    38,   239,   238
38,    38,    39,   240,   239
39,    39,    40,   241,   240
40,    40,    41,   242,   241
41,    41,    42,   243,   242
42,    42,    43,   244,   243
43,    43,    44,   245,   244
44,    44,    45,   246,   245
45,    45,    46,   247,   246
46,    46,    47,   248,   247
47,    47,    48,   249,   248
48,    48,    49,   250,   249
49,    49,    50,   251,   250
50,    50,    51,   252,   251
...
...
...
*Nset, nset=Set-1, generate
 1,  40401,      1
*Elset, elset=Set-1, generate
 1,  40000,      1
** Section: Section-1
*Solid Section, elset=Set-1, controls=EC-1, material=Material-1
 1.,
*Hourglass Stiffness
 100., , 0., 0.
*End Part
**  
**
** ASSEMBLY
**
*Assembly, name=Assembly
**  
*Instance, name=Plate-1, part=Plate
*End Instance
**  
*Nset, nset=Left_edge, instance=Plate-1, generate
 1,  201,    1
*Elset, elset=Left_edge, instance=Plate-1, generate
 1,  200,    1
*Nset, nset=bottom-edge, instance=Plate-1, generate
 2211,  40401,    201
*Elset, elset=bottom-edge, instance=Plate-1, generate
 2200,  40000,    200
*Elset, elset=_Surf-1_S3, internal, instance=Plate-1, generate
 39801,  40000,      1
*Elset, elset=_Surf-1_S4, internal, instance=Plate-1, generate
 1,  39801,    200
*Surface, type=ELEMENT, name=Surf-1
 _Surf-1_S3, S3
 _Surf-1_S4, S4
*End Assembly
** 
** ELEMENT CONTROLS
** 
*Section Controls, name=EC-1, hourglass=STIFFNESS
 1., 1., 1.
** 
** MATERIALS
** 
*Material, name=Material-1
*Depvar
  1,
*User Material, constants=2
 1e+06, 0.3
** 
*INITIAL CONDITIONS, TYPE=SOLUTION,USER
** BOUNDARY CONDITIONS
** 
** Name: BC-1 Type: Displacement/Rotation
*Boundary
 Left_edge, 1, 1
** Name: BC-2 Type: Displacement/Rotation
*Boundary
 bottom-edge, 2, 2
** ----------------------------------------------------------------
** 
** STEP: Step-1
** 
*Step, name=Step-1, nlgeom=NO
*Static
1., 1., 1e-05, 1.
** 
** LOADS
** 
** Name: Load-1   Type: Pressure
*Dsload
Surf-1, P, -100.
** 
** OUTPUT REQUESTS
** 
*Restart, write, frequency=0
** 
** FIELD OUTPUT: F-Output-1
** 
*Output, field
*Node Output
CF, COORD, RF, U
*Element Output, directions=YES
E, S, SDV
** 
** FIELD OUTPUT: F-Output-2-bottomEdge
** 
*Node Output, nset=bottom-edge
COORD, U
*Element Output, elset=bottom-edge, directions=YES
S, SDV
** 
** HISTORY OUTPUT: H-Output-1
** 
*Output, history, variable=PRESELECT
*End Step

Файл .msg ниже: (я вообще плохо понимаю ошибку!!!)

Abaqus JOB Job-User-15
Abaqus 6.14-2
Abaqus License Manager checked out the following licenses:
Abaqus/Standard checked out 5 tokens from Flexnet server lm.rcc.psu.edu.
<255 out of 300 licenses remain available>.
Begin Compiling Abaqus/Standard User Subroutines
Thu 13 Jul 2017 02:38:34 PM EDT
Intel(R) Fortran Intel(R) 64 Compiler XE for applications running on 
Intel(R) 64, Version 15.0.0.090 Build 20140723
Copyright (C) 1985-2014 Intel Corporation.  All rights reserved.

 Intel(R) Fortran 15.0-1684
End Compiling Abaqus/Standard User Subroutines
Begin Linking Abaqus/Standard User Subroutines
Intel(R) Fortran Intel(R) 64 Compiler XE for applications running on 
Intel(R) 64, Version 15.0.0.090 Build 20140723
Copyright (C) 1985-2014 Intel Corporation.  All rights reserved.
ifort: command line remark #10148: option '-i-dynamic' not supported

GNU ld version 2.20.51.0.2-5.36.el6 20100205
End Linking Abaqus/Standard User Subroutines
Thu 13 Jul 2017 02:38:35 PM EDT
Begin Analysis Input File Processor
Thu 13 Jul 2017 02:38:35 PM EDT
Run pre
Thu 13 Jul 2017 02:38:39 PM EDT
End Analysis Input File Processor
Begin Abaqus/Standard Analysis
Thu 13 Jul 2017 02:38:39 PM EDT
Run standard
/gpfs/apps/x86_64-rhel6/abaqus/6.14-2/6.14-2/code/bin/standard: symbol 
lookup error: /tmp/mfg5310_Job-User-15_1727/libstandardU.so: undefined 
symbol: state_
Thu 13 Jul 2017 02:38:43 PM EDT
Abaqus Error: Abaqus/Standard Analysis exited with an error - Please see the 
message file for possible error messages if the file exists.
Abaqus/Analysis exited with errors

Может кто-нибудь из вас помочь мне с тем, что это может быть? Пожалуйста!

Спасибо, Мусуми.


person MousumiG    schedule 13.07.2017    source источник


Ответы (1)


Как указано в сообщении об ошибке, у вас есть опечатка в неопределенной переменной state.

statev(1)=state(1) + kinc
!! Should be:
statev(1)=statev(1) + kinc

Возможно, компилятор не уловил эту ошибку во время компиляции перед выполнением, поскольку вы используете неявную типизацию (то есть не определяете типы переменных явно перед их использованием). Возможно, вы сами в этом убедитесь.

person Matt P    schedule 13.07.2017
comment
Это исправило это! Я должен сказать, что Intel не очень хорошо предоставляет точные сообщения об ошибках! - person MousumiG; 14.07.2017
comment
хороший вызов, но обратите внимание, что компилятор уловил этот... неопределенный символ: state_ (я действительно не уверен, насколько яснее может быть это сообщение об ошибке?) - person agentp; 14.07.2017
comment
@agentp Правильно, сообщение об ошибке ясно указывает на проблему. Но это не было обнаружено во время компиляции перед выполнением, я предполагаю, что это, вероятно, из-за неявной типизации. Я пояснил, что это редактирование, спасибо. - person Matt P; 14.07.2017
comment
@MousumiG Рад это слышать! Не могли бы вы принять ответ? - person Matt P; 14.07.2017
comment
При неявной типизации нет проблем с отловом во время компиляции. Это проблема времени компоновки, когда state является внешней функцией. - person francescalus; 14.07.2017