Thank you for the reply. Short answer is you are correct abaqus does not require the file to be compiled in F77. I was incorrect in my interpretation of their documentation. Abaqus is largely still written in fortran 77 syntax and requires a compiler that can handle compiling legacy version since the USUB templates are generally in fixed format and pass purely by reference. This however does not limit the building to only F77 codes. I had to supply the compiler so I could use as new of a compiler as I wanted. Since it does support new compilers I was able to use the preCICE module I just have to compile it separately and link it properly. I have attached what that looks like below for anyone interested in the future including the abaqus usub header.
ifort -V -c -fpp -fPIC -extend_source -DABQ_LNX86_64 -DABQ_FORTRAN -auto -pc64 -align array64byte -prec-div -prec-sqrt -fp-model precise -fimf-arch-consistency=true -mP2OPT_hpo_vec_divbyzero=F -no-fma -fp-speculation=safe -fprotect-parens -fstack-protector-strong -reentrancy threaded -msse3 -axcore-avx2,avx -WB precice.f90 -o ../precice.o
abaqus make library=usub_subroutine_file directory=USUB_LIBS
abaqus job=FSI_TEST double=both usub_lib_dir=$(pwd)/USUB_LIBS scratch=$(pwd)
#abaqus_v6.env
#-*- mode: python -*-
####################################################################################
# #
# Compile and Link commands for ABAQUS on the Linux 64-bit Platform #
# #
####################################################################################
import os, re, glob, driverUtils
abaHomeInc = os.path.abspath(os.path.join(os.environ.get('ABA_HOME', ''), os.pardir))
fortCmd = "ifort" # <-- Fortran compiler
compile_fortran = [fortCmd,
'-V',
'-c', '-fpp','-fPIC','-extend_source',
'-DABQ_LNX86_64', '-DABQ_FORTRAN',
'-auto', # <-- important for thread-safety of parallel user subroutines
'-pc64', # set FPU precision to 53 bit significand
'-align', 'array64byte',
'-prec-div', '-prec-sqrt',# improve precision of FP divides and sqrt
'-fp-model', 'precise', # floating point model: precise
'-fimf-arch-consistency=true', # math library consistent results
'-mP2OPT_hpo_vec_divbyzero=F',
'-no-fma', # disable floating point fused multiply-add
'-fp-speculation=safe', # floating point speculations only when safe
'-fprotect-parens', # honor parenthesis during expression evaluation
'-fstack-protector-strong', # enable stack overflow protection checks
'-reentrancy', 'threaded', # important for thread-safety
#'-init=zero','-init=arrays', # automatically initialize all arrays to zero
#'-init=snan', '-init=arrays', # automatically initialize all arrays to SNAN
'-msse3', # generate SSE3, SSE2, and SSE instructions
'-axcore-avx2,avx',
'-WB', '-I%I', '-I'+abaHomeInc, '%P']
link_sl = [fortCmd,
'-V',
'-cxxlib', '-fPIC', '-threads', '-shared','-Wl,--add-needed',
'%E', '-Wl,-soname,%U', '-o', '%U', '%F', '%A', "/path/to/precice/mod/object/precice.o",
"-L/path/to/precice/library/", "-lprecice",
"-lstdc++", '%L', '%B', '-parallel',
'-Wl,-Bdynamic', '-shared-intel']
print(link_sl)
# Remove the temporary names from the namespace
del fortCmd
del abaHomeInc
subroutine vexternaldb(lOp, i_Array, niArray, r_Array, nrArray)
C
use precice
include 'vaba_param.inc'
c
C Contents of i_Array
parameter( i_int_nTotalNodes = 1,
* i_int_nTotalElements = 2,
* i_int_kStep = 3,
* i_int_kInc = 4,
* i_int_iStatus = 5,
* i_int_lWriteRestart = 6,
* i_int_ExtraOutputFrame = 7 )
C Possible values for the lOp argument
parameter( j_int_StartAnalysis = 0,
* j_int_StartStep = 1,
* j_int_SetupIncrement = 2,
* j_int_StartIncrement = 3,
* j_int_EndIncrement = 4,
* j_int_EndStep = 5,
* j_int_EndAnalysis = 6 )
C Possible values for i_Array(i_int_iStatus)
parameter( j_int_Continue = 0,
* j_int_TerminateStep = 1,
* j_int_TerminateAnalysis = 2 )
C Contents of r_Array
parameter( i_flt_TotalTime = 1,
* i_flt_StepTime = 2,
* i_flt_dTime = 3 )
C
dimension i_Array(niArray),
* r_Array(nrArray)