Continue to Site

Eng-Tips is the largest engineering community on the Internet

Intelligent Work Forums for Engineering Professionals

  • Congratulations IDS on being selected by the Eng-Tips community for having the most helpful posts in the forums last week. Way to Go!

C++ VUMAT error on the supercomputer

Status
Not open for further replies.

Xingsheng Sun

Mechanical
Aug 18, 2021
5
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
 
Replies continue below

Recommended for you

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".
 
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;
}
}
 
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.
 
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
 
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.
 
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
 
Did you get any additional errors in the output files ? Make sure that you have enough disc space.
 
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
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor