关于下面这个帖子中提到的问题,有大佬知道为什么吗? 20

浏览:1796 回答:1

Xingsheng Sun (Mechanical)(OP)18 Aug 21 21:51

Dear folks,


I am trying to use C++ VUMAT in the abaqus on the university supercomputer, but it does not work. I have successfully tested the C++ VUMAT and abaqus on my local computer. I have also tested the Fortran VUMAT and abaqus on the supercomputer, and it works well. Could any of you shed light on how to solve this problem? Thank you so much.


The error is below:


Analysis initiated from SIMULIA established products

Abaqus JOB job1

Abaqus 3DEXPERIENCE R2018x

Abaqus License Manager checked out the following licenses:

Abaqus/Explicit checked out 5 tokens from Flexnet server .

<112 out of 117 licenses remain available>.

Begin Compiling Single Precision Abaqus/Explicit User Subroutines

Wed 18 Aug 2021 10:49:48 AM PDT

End Compiling Single Precision Abaqus/Explicit User Subroutines

Begin Linking Single Precision Abaqus/Explicit User Subroutines

Intel(R) Fortran Intel(R) 64 Compiler for applications running on Intel(R) 64, Version 18.0.1.163 Build 20171018

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


GNU ld version 2.27-44.base.el7

End Linking Single Precision Abaqus/Explicit User Subroutines

Wed 18 Aug 2021 10:49:52 AM PDT

Begin Analysis Input File Processor

Wed 18 Aug 2021 10:49:52 AM PDT

Run pre

Wed 18 Aug 2021 10:49:54 AM PDT

End Analysis Input File Processor

Begin Abaqus/Explicit Packager

Wed 18 Aug 2021 10:49:54 AM PDT

Run package

Abaqus/Explicit 3DEXPERIENCE R2018x DATE 18-Aug-2021 TIME 10:49:55

-------------------------------------------------------------------------------

PREPROCESSOR WARNING MESSAGES

-------------------------------------------------------------------------------



***WARNING: There are 2 warning messages in the data (.dat) file. Please

check the data file for possible errors in the input file.



-------------------------------------------------------------------------------

USER SUBROUTINE VUMAT

-------------------------------------------------------------------------------



***WARNING: A material defined in user subroutine VUMAT must be defined as

purely elastic (using the initial elastic modulus) at the

beginning of the analysis (stepTime=0). This is an informative

message. It does not necessarily indicate that user subroutine

VUMAT is incorrectly defined.




***ERROR: NO VUMAT SUBROUTINE WAS SUPPLIED FOR THE USER MATERIAL NAMED:

MATERIAL-1


Wed 18 Aug 2021 10:49:56 AM PDT

Abaqus Error: Abaqus/Explicit Packager exited with an error - Please see the

status file for possible error messages if the file exists.

Begin Convert MFS to SFS

Wed 18 Aug 2021 10:49:56 AM PDT

Run SMASimUtility

Wed 18 Aug 2021 10:49:56 AM PDT

End Convert MFS to SFS

Abaqus/Analysis exited with errors


Best,

Xingsheng

FEA way (Mechanical)18 Aug 21 22:18

Have you tried running any other (even very simple) C++ subroutine on that supercomputer ? Does your code have the #include <omi_for_c.h> line ? It's necessary for C++ subroutines. The requirements are explained in the documentation chapter "About user subroutines and utilities".

Xingsheng Sun (Mechanical)(OP)18 Aug 21 23:13

Hi,


Thank you so much for your reply. I have tried running other C++ codes successfully on the cluster, and also added the line #include <omi_for_c.h>. But it still does not work. Please see below the vumat.cpp file and let me know if you notice any mistakes. Thanks again.


#include <stdio.h>

#include <omi_for_c.h>


extern "C" void vumat(long* nblock, long* ndir, long* nshr, long* nstatev, long* nfieldv, long* nprops, long* lanneal,

double *stepTime, double *totalTime, double *dt, char* cmname, double *coordMp, double *charLength,

double *props, double *density, double *strainInc, double *relSpinInc,

double *tempOld, double *stretchOld, double *defgradOld, double *fieldOld,

double *stressOld, double *stateOld, double *enerInternOld, double *enerInelasOld,

double *tempNew, double *stretchNew, double *defgradNew, double *fieldNew,

double *stressNew, double *stateNew, double *enerInternNew, double *enerInelasNew)

{


double lambda = props[0];

double shear = props[1];

long n_elem = *nblock;


for(int km = 0; km < n_elem; km++){

double epsi11 = stretchNew[0*n_elem+km]-1.0;

double epsi22 = stretchNew[1*n_elem+km]-1.0;

double epsi33 = stretchNew[2*n_elem+km]-1.0;

double epsi12 = stretchNew[3*n_elem+km];

double epsi23 = stretchNew[4*n_elem+km];

double epsi13 = stretchNew[5*n_elem+km];


double trace = (epsi11+epsi22+epsi33);

stressNew[0*n_elem+km] = 2.0*shear*epsi11+lambda*trace;

stressNew[1*n_elem+km] = 2.0*shear*epsi22+lambda*trace;

stressNew[2*n_elem+km] = 2.0*shear*epsi33+lambda*trace;

stressNew[3*n_elem+km] = 2.0*shear*epsi12;

stressNew[4*n_elem+km] = 2.0*shear*epsi23;

stressNew[5*n_elem+km] = 2.0*shear*epsi13;

}

}

FEA way (Mechanical)19 Aug 21 18:31

Is this the entire subrutine or just a portion of it ? Part of the interface seems to be missing and keep in mind that for C++ subroutines there are additional naming conventions described in the documentation chapter mentioned above.

Xingsheng Sun (Mechanical)(OP)19 Aug 21 20:36

Hey,


This is the entire C++ subroutine. Since I am a beginner in this field, would you be able to share any examples of C++ vumat subroutine with me? Many thanks in advance.


Best,

Xingsheng

FEA way (Mechanical)20 Aug 21 12:14

Check the xpl_user.c file attached to the Knowledge Base article "Writing Abaqus user subroutines in C++". It might be partially outdated but should still be helpful.

Xingsheng Sun (Mechanical)(OP)23 Aug 21 22:05

Hi, many thanks for your help!


Now the C++ vumat works well for single precision calculations, but not double precision. Could any of the folks shed light on this issue? I am contacting the abaqus support now, but think it might be much faster to get an answer here. Thank you.


The command is:


abaqus input=test.inp user=vumat.cpp job=job1 analysis interactive double


The error is:


Abaqus Error: The executable package

aborted with system error "Illegal memory reference" (signal 11).

Please check the .dat, .msg, and .sta files for error messages if the files

exist. If there are no error messages and you cannot resolve the problem,

please run the command "abaqus job=support information=support" to report and

save your system information. Use the same command to run Abaqus that you

used when the problem occurred. Please contact your local Abaqus support

office and send them the input file, the file support.log which you just

created, the executable name, and the error code.


The vumat file is:


#include <stdio.h>

#include <iostream>

#include <omi_for_c.h>

//#include <aba_for_c.h>


using namespace std;


extern "C" void vumat_(long *nblock, long *ndir, long *nshr, long *nstatev, long *nfieldv, long *nprops, long *lanneal,

double *stepTime, double *totalTime, double *dt, char* cmname, double *coordMp, double *charLength,

double *props, double *density, double *strainInc, double *relSpinInc,

double *tempOld, double *stretchOld, double *defgradOld, double *fieldOld,

double *stressOld, double *stateOld, double *enerInternOld, double *enerInelasOld,

double *tempNew, double *stretchNew, double *defgradNew, double *fieldNew,

double *stressNew, double *stateNew, double *enerInternNew, double *enerInelasNew)


{

double lambda = props[0];

double shear = props[1];

long n_elem = *nblock;



for(long km = 0; km < n_elem; km++){

double epsi11 = stretchNew[0*n_elem+km]-1.0;

double epsi22 = stretchNew[1*n_elem+km]-1.0;

double epsi33 = stretchNew[2*n_elem+km]-1.0;

double epsi12 = stretchNew[3*n_elem+km];

double epsi23 = stretchNew[4*n_elem+km];

double epsi13 = stretchNew[5*n_elem+km];


double trace = (epsi11+epsi22+epsi33);

stressNew[0*n_elem+km] = 2.0*shear*epsi11+lambda*trace;

stressNew[1*n_elem+km] = 2.0*shear*epsi22+lambda*trace;

stressNew[2*n_elem+km] = 2.0*shear*epsi33+lambda*trace;

stressNew[3*n_elem+km] = 2.0*shear*epsi12;

stressNew[4*n_elem+km] = 2.0*shear*epsi23;

stressNew[5*n_elem+km] = 2.0*shear*epsi13;

}

return;

}


Best,

Xingsheng

FEA way (Mechanical)25 Aug 21 07:53

Did you get any additional errors in the output files ? Make sure that you have enough disc space.

Xingsheng Sun (Mechanical)(OP)25 Aug 21 18:02

Dear there,


Yes. There are problems regarding the memory space. I notice when I use the double precision, the values of VUMAT inputs are abnormal. For instance, the value of nblock is 4294967440 and the values of props are 3.16739e+26 and 0 when using double precision. But when using single precision, these values are correct nblock: 144, props: 5769 3846.


Would you be able to share some advice on why VUMAT has wrong inputs from abaqus when using double precision? Thank you so much.


Best,

Xingsheng

C++ VUMAT error on the supercomputer - DASSAULT: ABAQUS FEA Solver - Eng-Tips

邀请回答 我来回答

全部回答

(1)
默认 最新
小程序用户_ndE4kDEn
No vumat subroutine was supplied for the user material named: material-1。同一个问题,请问您知道解决办法了吗
2023年6月29日
评论 点赞

没解决?试试专家一对一服务

换一批