├── .gitattributes ├── .gitignore ├── LICENSE.txt ├── contributing-checklist.md ├── etc ├── git_version.py └── hook.sample ├── examples ├── CompDam.parameters ├── abaqus_v6.env ├── example_runner.py ├── test_DCB_fatigue.inp └── test_DCB_fatigue_expected.py ├── for ├── CompDam_DGD.for ├── DGD.for ├── cohesive.for ├── fiberDamage.for ├── forlog.for ├── friction.for ├── matProp.for ├── matrixUtil.for ├── parameters.for ├── plasticity.for ├── schaefer.for ├── schapery.for ├── stateVar.for ├── strain.for ├── stress.for ├── version.for.nogit ├── vexternaldb.for ├── vucharlength.for └── vumatArgs.for ├── pyextmod ├── IM7-8552.props ├── Makefile ├── helpers.py ├── kind_map ├── run_debug_file.py ├── test_pyextmod_dgdevolve.py ├── test_pyextmod_dgdkinkband.py ├── vaba_param.inc ├── verify_debug.py └── viz.py ├── readme.md ├── setup.py ├── tests ├── CompDam.parameters ├── IM7-8552.props ├── abaqus_v6.env ├── abaverify_remote_options.py ├── automatic_testing_script.py ├── pyextmod_compile.sh ├── pyextmod_run.sh ├── runtimeplots_testing_script.py ├── template_run_time_plots_body.html ├── template_run_time_plots_compdam.py ├── test_C3D6_elementSize.inp ├── test_C3D6_elementSize_expected.py ├── test_C3D6_matrixTension.inp ├── test_C3D6_matrixTension_expected.py ├── test_C3D6_simpleShear12.inp ├── test_C3D6_simpleShear12_expected.py ├── test_C3D8R_elastic_fiberTension.inp ├── test_C3D8R_elastic_fiberTension_expected.py ├── test_C3D8R_elastic_matrixTension.inp ├── test_C3D8R_elastic_matrixTension_expected.py ├── test_C3D8R_elastic_simpleShear12.inp ├── test_C3D8R_elastic_simpleShear12_expected.py ├── test_C3D8R_elementSize.inp ├── test_C3D8R_elementSize_expected.py ├── test_C3D8R_error.inp ├── test_C3D8R_error_expected.py ├── test_C3D8R_failureEnvelope_sig11sig22.inp ├── test_C3D8R_failureEnvelope_sig11sig22_expected.py ├── test_C3D8R_failureEnvelope_sig12sig22.inp ├── test_C3D8R_failureEnvelope_sig12sig22_expected.py ├── test_C3D8R_fatigue_matrixTension.inp ├── test_C3D8R_fatigue_matrixTension.parameters ├── test_C3D8R_fatigue_matrixTension_expected.py ├── test_C3D8R_fatigue_simpleShear12.inp ├── test_C3D8R_fatigue_simpleShear12.parameters ├── test_C3D8R_fatigue_simpleShear12_expected.py ├── test_C3D8R_fiberCompression_BL.inp ├── test_C3D8R_fiberCompression_BL_FN.inp ├── test_C3D8R_fiberCompression_BL_FN_expected.py ├── test_C3D8R_fiberCompression_BL_expected.py ├── test_C3D8R_fiberCompression_FKT_12.inp ├── test_C3D8R_fiberCompression_FKT_12_FF.inp ├── test_C3D8R_fiberCompression_FKT_12_FF_expected.py ├── test_C3D8R_fiberCompression_FKT_12_FF_negphi0.inp ├── test_C3D8R_fiberCompression_FKT_12_FF_negphi0_expected.py ├── test_C3D8R_fiberCompression_FKT_12_FN.inp ├── test_C3D8R_fiberCompression_FKT_12_FN_expected.py ├── test_C3D8R_fiberCompression_FKT_12_expected.py ├── test_C3D8R_fiberCompression_FKT_13.inp ├── test_C3D8R_fiberCompression_FKT_13_FF.inp ├── test_C3D8R_fiberCompression_FKT_13_FF_expected.py ├── test_C3D8R_fiberCompression_FKT_13_FN.inp ├── test_C3D8R_fiberCompression_FKT_13_FN_expected.py ├── test_C3D8R_fiberCompression_FKT_13_expected.py ├── test_C3D8R_fiberCompression_FKT_3D.inp ├── test_C3D8R_fiberCompression_FKT_3D_expected.py ├── test_C3D8R_fiberCompression_FKT_3D_pert.inp ├── test_C3D8R_fiberCompression_FKT_3D_pert_expected.py ├── test_C3D8R_fiberCompression_FKT_3D_spring_ip.inp ├── test_C3D8R_fiberCompression_FKT_3D_spring_ip_expected.py ├── test_C3D8R_fiberCompression_FKT_3D_spring_oop.inp ├── test_C3D8R_fiberCompression_FKT_3D_spring_oop_expected.py ├── test_C3D8R_fiberLoadReversal.inp ├── test_C3D8R_fiberLoadReversal_FN.inp ├── test_C3D8R_fiberLoadReversal_FN_expected.py ├── test_C3D8R_fiberLoadReversal_expected.py ├── test_C3D8R_fiberTension.inp ├── test_C3D8R_fiberTension_FN.inp ├── test_C3D8R_fiberTension_FN_expected.py ├── test_C3D8R_fiberTension_expected.py ├── test_C3D8R_matrixCompression.inp ├── test_C3D8R_matrixCompression.parameters ├── test_C3D8R_matrixCompression_expected.py ├── test_C3D8R_matrixCompression_friction.inp ├── test_C3D8R_matrixCompression_friction.parameters ├── test_C3D8R_matrixCompression_friction_expected.py ├── test_C3D8R_matrixTension.inp ├── test_C3D8R_matrixTension_expected.py ├── test_C3D8R_mixedModeMatrix.inp ├── test_C3D8R_mixedModeMatrix_expected.py ├── test_C3D8R_nonlinearShear12.inp ├── test_C3D8R_nonlinearShear12_expected.py ├── test_C3D8R_nonlinearShear12_loadReversal.inp ├── test_C3D8R_nonlinearShear12_loadReversal_expected.py ├── test_C3D8R_nonlinearShear12_monotonic.inp ├── test_C3D8R_nonlinearShear12_monotonic_expected.py ├── test_C3D8R_nonlinearShear12_withFKT.inp ├── test_C3D8R_nonlinearShear12_withFKT_expected.py ├── test_C3D8R_nonlinearShear13.inp ├── test_C3D8R_nonlinearShear13_expected.py ├── test_C3D8R_nonlinearShear13_loadReversal.inp ├── test_C3D8R_nonlinearShear13_loadReversal_expected.py ├── test_C3D8R_residualStress.inp ├── test_C3D8R_residualStress_IM7-8552.props ├── test_C3D8R_residualStress_expected.py ├── test_C3D8R_schaefer_oat30.inp ├── test_C3D8R_schaefer_oat30_expected.py ├── test_C3D8R_schaefer_oat60.inp ├── test_C3D8R_schaefer_oat60_expected.py ├── test_C3D8R_schaefer_oat75.inp ├── test_C3D8R_schaefer_oat75_expected.py ├── test_C3D8R_schaefer_oat90.inp ├── test_C3D8R_schaefer_oat90_expected.py ├── test_C3D8R_schapery12.inp ├── test_C3D8R_schapery12_expected.py ├── test_C3D8R_simpleShear12.inp ├── test_C3D8R_simpleShear12_expected.py ├── test_C3D8R_simpleShear12friction.inp ├── test_C3D8R_simpleShear12friction_expected.py ├── test_C3D8R_twoElement_fiberCompression_FKT.py ├── test_C3D8R_twoElement_fiberCompression_FKT_expected.py ├── test_COH2D4_normal.inp ├── test_COH2D4_normal_expected.py ├── test_COH2D4_shear.inp ├── test_COH2D4_shear_compression.inp ├── test_COH2D4_shear_compression_expected.py ├── test_COH2D4_shear_expected.py ├── test_COH2D4_shear_friction.inp ├── test_COH2D4_shear_friction_expected.py ├── test_COH3D8_fatigue_normal.inp ├── test_COH3D8_fatigue_normal.parameters ├── test_COH3D8_fatigue_normal_expected.py ├── test_COH3D8_fatigue_shear13.inp ├── test_COH3D8_fatigue_shear13.parameters ├── test_COH3D8_fatigue_shear13_expected.py ├── test_COH3D8_normal.inp ├── test_COH3D8_normal_expected.py ├── test_COH3D8_shear13.inp ├── test_COH3D8_shear13_compression.inp ├── test_COH3D8_shear13_compression_expected.py ├── test_COH3D8_shear13_expected.py ├── test_COH3D8_shear13_friction.inp ├── test_COH3D8_shear13_friction_expected.py ├── test_COH3D8_shear23.inp ├── test_COH3D8_shear23_compression.inp ├── test_COH3D8_shear23_compression_expected.py ├── test_COH3D8_shear23_expected.py ├── test_COH3D8_shear23_friction.inp ├── test_COH3D8_shear23_friction_expected.py ├── test_COH3D8_thick_normal.inp ├── test_COH3D8_thick_normal_expected.py ├── test_COH3D8_thick_shear13.inp ├── test_COH3D8_thick_shear13_expected.py ├── test_COH3D8_thick_shear23.inp ├── test_COH3D8_thick_shear23_expected.py ├── test_CPS4R_elementSize.inp ├── test_CPS4R_elementSize_expected.py ├── test_S4R_elementSize.inp ├── test_S4R_elementSize_expected.py ├── test_runner.py ├── verify_debug_test_C3D8R_fiberCompression_FKT_12_expected.py └── verify_debug_test_C3D8R_matrixTension_expected.py ├── usersubroutine-prerequisites.md └── utilities ├── abaqus-python-addpkg ├── abaqus-python-addpkg.py └── readme.md ├── meshtools ├── __init__.py ├── meshtools │ ├── __init__.py │ ├── _version.py │ ├── meshing.py │ ├── points.py │ └── vectors.py ├── readme.md └── setup.py ├── ramberg-osgood-fit ├── ro-fit.py ├── soden1998_as4_3501-6.csv ├── soden1998_eglass_LY556.csv └── soden1998_eglass_MY750.csv └── readme.md /.gitattributes: -------------------------------------------------------------------------------- 1 | # Set the default behavior, in case people don't have core.autocrlf set. 2 | * text=auto 3 | 4 | # Declare files that will always have linux line endings on checkout. 5 | *.sh text eol=lf 6 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | 5 | # Distribution / packaging 6 | .Python 7 | build/ 8 | develop-eggs/ 9 | dist/ 10 | downloads/ 11 | eggs/ 12 | .eggs/ 13 | lib/ 14 | lib64/ 15 | parts/ 16 | sdist/ 17 | var/ 18 | wheels/ 19 | *.egg-info/ 20 | .installed.cfg 21 | *.egg 22 | MANIFEST 23 | 24 | # Configuration file 25 | etc/config.json 26 | 27 | # Version file 28 | for/version.for 29 | 30 | # Abaverify 31 | abaverify/ 32 | 33 | # Compiled fortran files and modules 34 | build/ 35 | 36 | # Abaqus output files 37 | *.abq 38 | *.com 39 | *.dat 40 | *.log 41 | *.mdl 42 | *.msg 43 | *.odb 44 | *.pac 45 | *.par 46 | *.pes 47 | *.pmg 48 | *.prt 49 | *.res 50 | *.sel 51 | *.sim 52 | *.sta 53 | *.stt 54 | 55 | # Abaqus cae files 56 | *.cae 57 | *.jnl 58 | *.rec 59 | *.deps 60 | *.rpy* 61 | 62 | # Dynamically generated input files for testing 63 | tests/test_C3D8R_mixedModeMatrix_alpha* 64 | *abcissa* 65 | 66 | # Old files directory (backup) 67 | old/ 68 | 69 | # Results 70 | results/ 71 | testOutput/ 72 | archivedTestResults/ 73 | 74 | # Sublime text 75 | *.sublime-project 76 | *.sublime-workspace 77 | 78 | # vscode 79 | .vscode/ 80 | 81 | # Python extension module build files 82 | pyextmod/*.f90 83 | pyextmod/*.o 84 | pyextmod/*.fpp 85 | pyextmod/*.mod 86 | pyextmod/src* 87 | pyextmod/*.so 88 | pyextmod/.f2py_f2cmap 89 | pyextmod/libsrc.a 90 | pyextmod/CompDam_DGD.py 91 | pyextmod/pyextmod*.txt 92 | -------------------------------------------------------------------------------- /contributing-checklist.md: -------------------------------------------------------------------------------- 1 | # Checklist for contributions to CompDam 2 | 3 | Pull requests to CompDam are welcome and much appreciated. Here is a checklist to go through before submitting a PR: 4 | 1. The new code is formatted consistently with the existing code base 5 | 2. One or more tests is included that demonstrate and verify the new functionality 6 | 3. The new functionality is documented in the README as appropriate 7 | 4. All tests are passing (please attach the test report to the PR) 8 | 5. Spell check 9 | 6. Update the section 'Citing CompDam' in the README with the new proposed version number -------------------------------------------------------------------------------- /etc/git_version.py: -------------------------------------------------------------------------------- 1 | """ 2 | Generates a fortran version file. Runs on git-hook post-checkout. 3 | """ 4 | 5 | import subprocess 6 | 7 | 8 | if __name__ == "__main__": 9 | sha = subprocess.check_output("git rev-parse HEAD", shell=True) 10 | t = subprocess.check_output("git show -s --format=%ci", shell=True) 11 | 12 | with open('for/version.for', 'w') as f: 13 | f.write(' Module version_Mod\n') 14 | f.write(' Character(len=40), parameter :: hash = "' + str(sha).strip() + '"\n') 15 | f.write(' Character(len=50), parameter :: timestamp = "' + str(t).strip() + '"\n') 16 | f.write(' End Module\n') 17 | 18 | 19 | -------------------------------------------------------------------------------- /etc/hook.sample: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # 3 | # This hook updates the file for/version.for 4 | # 5 | 6 | python etc/git_version.py -------------------------------------------------------------------------------- /examples/abaqus_v6.env: -------------------------------------------------------------------------------- 1 | # 2 | # Sample Abaqus environment file for Abaqus 2016 or newer. 3 | # 4 | 5 | import sys 6 | import os 7 | 8 | usub_lib_dir = os.path.join(os.getcwd(), '../for') 9 | 10 | if sys.platform.startswith('linux'): 11 | 12 | compile_fortran = ['ifort', '-free', '-mkl=sequential', '-DABQ_LNX86_64', 13 | '-axCORE-AVX2', '-xSSE3', 14 | '-V', '-c', '-fPIC', '-auto', '-mP2OPT_hpo_vec_divbyzero=F', '-extend_source', 15 | '-fpp', '-WB', '-I%I'] 16 | 17 | elif sys.platform == 'win32': 18 | 19 | compile_fortran = ['ifort', '/free', '/Qmkl:sequential', 20 | '/c','/DABQ_WIN86_64', '/extend-source', '/fpp', 21 | '/iface:cref', '/recursive', '/Qauto-scalar', 22 | '/QxSSE3', '/QaxAVX', 23 | '/heap-arrays:1', 24 | '/Od', '/Ob0', # <-- Optimization Debugging 25 | # '/Zi', # <-- Debugging 26 | #'/gen-interfaces', '/warn:interfaces', '/check', '/fpe:0', # <-- Debugging 27 | '/include:%I'] 28 | 29 | 30 | # Check for uncommmited changes For development; not needed for production. To 31 | # use, uncomment and be sure to set the compdam_source_dir to the absolute path 32 | # to the CompDam directory. This function only applies to code compiled from 33 | # source during the job execution; not compatible with pre-compiled libraries. 34 | # def onJobStartup(): 35 | # import os, sys, subprocess 36 | 37 | # # !!! UPDATE to point to compdam source directory !!! 38 | # compdam_source_dir = os.path.join(savedir, os.pardir, os.pardir) 39 | 40 | # # Platform dependent stuff 41 | # if sys.platform.startswith('linux'): 42 | # chain_command_char = '; ' 43 | # elif sys.platform == 'win32': 44 | # chain_command_char = '& ' 45 | # else: 46 | # print('Skipping check for uncommmited changes.') 47 | # return 48 | 49 | # # Get the current hash 50 | # cmd = 'cd ' + compdam_source_dir + chain_command_char + 'git rev-parse --verify HEAD' 51 | # githash = subprocess.check_output(cmd, shell=True) 52 | 53 | # # Check for changes to compdam 54 | # cmd = 'cd ' + compdam_source_dir + chain_command_char + 'git diff for/' 55 | # gitdiff = subprocess.check_output(cmd, shell=True) 56 | # if len(gitdiff): 57 | # print('\nWARNING: Found uncommmited changes to compdam source; see ' + id + '.diff\n') 58 | 59 | # with open(os.path.join(savedir,id+'.diff'), 'w') as f: 60 | # f.write('Last commit: ' + githash+'\n\n') 61 | # f.write(gitdiff+'\n\n') 62 | # else: 63 | # print('Checked for uncommmited changes; none found.') 64 | -------------------------------------------------------------------------------- /examples/example_runner.py: -------------------------------------------------------------------------------- 1 | # 2 | # Code to run example problems 3 | # 4 | 5 | import os 6 | import shutil 7 | import abaverify as av 8 | import re 9 | 10 | 11 | def modifyParametersFile(jobName='CompDam', **kwargs): 12 | ''' 13 | For modifying the parameters file 14 | Input dictionary should have key, value pairs that correspond to entries in CompDam.parameters 15 | ''' 16 | 17 | # Copy/modify parameters file 18 | with open(os.path.join(os.getcwd(), 'CompDam.parameters'), 'r') as f: 19 | data = f.read() 20 | 21 | for key, value in kwargs.items(): 22 | data = re.sub(key + r' ?= ?[-0-9\.d]*', key + ' = ' + value, data) 23 | 24 | # Write to testOutput directory 25 | with open(os.path.join(os.getcwd(), 'testOutput', jobName + '.parameters'), 'w') as f: 26 | f.write(data) 27 | 28 | 29 | class DCB_fatigue(av.TestCase): 30 | """ 31 | Demonstrates the cohesive fatigue model with double cantilever beam analyses under displacement control 32 | """ 33 | 34 | # Specify meta class 35 | __metaclass__ = av.ParametricMetaClass 36 | 37 | # Refers to the template input file name 38 | baseName = "test_DCB_fatigue" 39 | 40 | # disp is the maximum applied displacement during each fatigue cycle 41 | parameters = {'disp': [1.48, 1.70, 1.92, 2.25]} 42 | 43 | # staticLoad is the maximum reaction force in the initial static loading step 44 | expectedpy_parameters = {'staticLoad': [1.813, 2.083, 2.352, 2.754]} 45 | 46 | @classmethod 47 | def setUpClass(cls): 48 | modifyParametersFile( 49 | fatigue_step = '2', 50 | fatigue_R_ratio = '0.1d0', 51 | cycles_per_increment_init = '1.d-5', 52 | cycles_per_increment_mod = '0.1d0', 53 | fatigue_damage_min_threshold = '5.d-5', 54 | fatigue_damage_max_threshold = '1.d-3' 55 | ) 56 | 57 | 58 | if __name__ == "__main__": 59 | av.runTests(relPathToUserSub='../for/CompDam_DGD', double=True) 60 | -------------------------------------------------------------------------------- /examples/test_DCB_fatigue_expected.py: -------------------------------------------------------------------------------- 1 | staticLoad = 2.352 2 | 3 | parameters = { 4 | "results": [ 5 | { 6 | "type": "max", 7 | "step": "Load", 8 | "identifier": { 9 | "symbol": "RF3", 10 | "nset": "T_NODE", 11 | "position": "Node 9999998" 12 | }, 13 | "referenceValue": staticLoad, 14 | "tolerance": staticLoad * 0.01 15 | }, 16 | { 17 | "type": "max", 18 | "identifier": "Plastic dissipation: ALLPD in ELSET COH", 19 | "referenceValue": 1.605, # Unrecoverable energy dissipation from fracture * fracture area: GIc_init * delta_a * width 20 | "tolerance": 0.05 21 | }, 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /for/schapery.for: -------------------------------------------------------------------------------- 1 | Module schapery_mod 2 | ! Module for all Schapery theory-related work 3 | 4 | Contains 5 | 6 | Function Schapery_damage(m, eps, Sr_old) result(Sr) 7 | ! Determine the current Schapery damage state variable based on the current strain state. 8 | 9 | Use matProp_Mod 10 | 11 | ! Arguments 12 | Type(matProps), intent(IN) :: m 13 | Double Precision, intent(IN) :: eps(3,3) ! strain tensor 14 | Double Precision, intent(IN) :: Sr_old ! previous converged value for Schapery damage 15 | Double Precision :: Sr 16 | 17 | ! Locals 18 | Double Precision :: Sr_A, Sr_B, Sr_C 19 | Parameter (zero=0.d0, one=1.d0, two=2.d0, three=3.d0, four=4.d0, six=6.d0) 20 | ! -------------------------------------------------------------------- ! 21 | 22 | ! Determine the reduce Schapery damage state variable, Sr 23 | Sr_A = ( eps(2,2)**2*m%E2*m%es(4) + (two*eps(1,2))**2*m%G12*m%gs(4) ) / two + one 24 | Sr_B = ( eps(2,2)**2*m%E2*m%es(3) + (two*eps(1,2))**2*m%G12*m%gs(3) ) / three 25 | Sr_C = ( eps(2,2)**2*m%E2*m%es(2) + (two*eps(1,2))**2*m%G12*m%gs(2) ) / six 26 | 27 | Sr = ( -Sr_B + SQRT( Sr_B*Sr_B - four*Sr_A*Sr_C ) ) / ( two*Sr_A ) 28 | 29 | Sr = max(Sr, Sr_old) 30 | 31 | Return 32 | End Function Schapery_damage 33 | 34 | Function Schapery_reduction(Sr, c) result(reduction) 35 | ! Calculates the stiffness reduction according to Schapery theory. 36 | 37 | ! Arguments 38 | Double Precision, intent(IN) :: Sr ! Reduced Schapery damage state variable 39 | Double Precision, intent(IN) :: c(4) ! Schapery coefficients 40 | Double Precision :: reduction 41 | ! -------------------------------------------------------------------- ! 42 | 43 | reduction = c(1) + c(2)*Sr + c(3)*Sr**2 + c(4)*Sr**3 44 | 45 | Return 46 | End Function Schapery_reduction 47 | 48 | End Module schapery_mod 49 | -------------------------------------------------------------------------------- /for/strain.for: -------------------------------------------------------------------------------- 1 | Module strain_mod 2 | ! Module for all strain-related calculations 3 | 4 | Contains 5 | 6 | Subroutine Strains(F, m, DT, ndir, eps) 7 | ! The purpose of this subroutine is to calculate the strains (eps, plas12, inel12) 8 | ! for the given deformation gradient and temperature. 9 | ! 10 | ! If a nonzero value for R_phi0 is provided, the strains are given in the fiber reference frame 11 | 12 | Use matProp_Mod 13 | Use forlog_Mod 14 | 15 | ! Arguments 16 | Type(matProps), intent(IN) :: m 17 | Double Precision, intent(IN) :: F(3,3) ! Deformation gradient 18 | Double Precision, intent(IN) :: DT ! Temperature change 19 | Integer, intent(IN) :: ndir 20 | Double Precision, intent(OUT) :: eps(ndir,ndir) ! GL stain tensor, without plasticity 21 | 22 | ! Locals 23 | Parameter (zero=0.d0) 24 | ! -------------------------------------------------------------------- ! 25 | 26 | ! Initialize strain tensor 27 | eps = zero 28 | 29 | ! Calculate the total Green-Lagrange strain from the deformation gradient tensor 30 | eps = GLStrain(F,ndir) 31 | 32 | ! Find the mechanical strain by subtracting the thermal strain from the total strain 33 | If (DT /= zero) Then 34 | eps(1,1) = eps(1,1) - m%cte(1)*DT 35 | eps(2,2) = eps(2,2) - m%cte(2)*DT 36 | eps(3,3) = eps(3,3) - m%cte(3)*DT 37 | End If 38 | 39 | Return 40 | End Subroutine Strains 41 | 42 | 43 | Pure Function GLStrain(F, ndir) 44 | ! Computes the Green-Lagrange strain from the deformation gradient 45 | 46 | ! Input 47 | Double Precision, intent(IN) :: F(3,3) 48 | Integer, intent(IN) :: ndir 49 | 50 | ! Output 51 | Double Precision :: GLStrain(ndir,ndir) 52 | 53 | ! Locals 54 | Double Precision :: eye(ndir,ndir) ! Identity 55 | Double Precision, parameter :: zero=0.d0, one=1.d0, half=0.5d0 56 | ! -------------------------------------------------------------------- ! 57 | 58 | ! Initialize identity matrix 59 | eye = zero; Do I = 1,3; eye(I,I) = one; End Do 60 | 61 | GLStrain = (MATMUL(TRANSPOSE(F), F) - eye)*half 62 | 63 | Return 64 | End Function GLStrain 65 | 66 | 67 | 68 | End Module strain_mod 69 | -------------------------------------------------------------------------------- /for/version.for.nogit: -------------------------------------------------------------------------------- 1 | Module version_Mod 2 | Character(len=40), parameter :: hash = "v2.6.1" 3 | Character(len=50), parameter :: timestamp = "2023-06-22" 4 | End Module 5 | -------------------------------------------------------------------------------- /for/vumatArgs.for: -------------------------------------------------------------------------------- 1 | Module vumatArg_Mod 2 | ! Module to load and store the general VUMAT parameters for passing of information to user modules 3 | 4 | Type vumatArg 5 | 6 | Integer :: nblock, ndir, nshr, nstatev 7 | Double Precision :: stepTime, totalTime, dt 8 | ! Double Precision :: strainInc(nblock,ndir+nshr) 9 | ! Double Precision :: tempOld(nblock), tempNew(nblock) 10 | ! Double Precision :: stretchOld(nblock,ndir+nshr), stretchNew(nblock,ndir+nshr) 11 | ! Double Precision :: defgradOld(nblock,ndir+nshr+nshr), defgradNew(nblock,ndir+nshr+nshr) 12 | ! Double Precision :: stressOld(nblock,ndir+nshr) 13 | ! Double Precision :: stateOld(nblock,nstatev) 14 | ! Double Precision :: enerInternOld(nblock) 15 | ! Double Precision :: enerInelasOld(nblock) 16 | Integer :: nElement, nMatPoint, nLayer, nSecPoint 17 | Contains 18 | procedure :: init => vumatArg_init 19 | procedure :: update 20 | 21 | End Type vumatArg 22 | 23 | Contains 24 | 25 | Pure Subroutine vumatArg_init(a, nblock, ndir, nshr, nstatev, stepTime, totalTime, dt) 26 | 27 | ! Arguments 28 | Class(vumatArg), intent(INOUT) :: a 29 | Integer, intent(IN) :: nblock, ndir, nshr, nstatev 30 | Double Precision, intent(IN) :: stepTime, totalTime, dt 31 | 32 | a%nblock = nblock 33 | a%ndir = ndir 34 | a%nshr = nshr 35 | a%nstatev = nstatev 36 | a%stepTime = stepTime 37 | a%totalTime = totalTime 38 | a%dt = dt 39 | 40 | End Subroutine vumatArg_init 41 | 42 | 43 | Pure Subroutine update(a, nElement, nMatPoint, nLayer, nSecPoint) 44 | 45 | ! Arguments 46 | Class(vumatArg), intent(INOUT) :: a 47 | Integer, intent(IN) :: nElement, nMatPoint, nLayer, nSecPoint 48 | 49 | a%nElement = nElement 50 | a%nMatPoint = nMatPoint 51 | a%nLayer = nLayer 52 | a%nSecPoint = nSecPoint 53 | 54 | End Subroutine update 55 | 56 | 57 | End Module vumatArg_Mod 58 | -------------------------------------------------------------------------------- /pyextmod/IM7-8552.props: -------------------------------------------------------------------------------- 1 | ../tests/IM7-8552.props -------------------------------------------------------------------------------- /pyextmod/helpers.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import CompDam_DGD 3 | import os, sys 4 | 5 | 6 | def loaddebugpy(filename='', jobname='', suffix=''): 7 | ''' 8 | This function provides functionality to load a debug.py file 9 | Specifiy filename or jobname 10 | Assumes debug.py is in working directory 11 | ''' 12 | 13 | # Handle arguments 14 | if (filename and jobname) or (not filename and not jobname): 15 | raise Exception('Must specify either filename or jobname') 16 | if jobname: 17 | filename = jobname+'-debug' 18 | 19 | # Import the debug file 20 | print("Importing: " + filename+suffix) 21 | debugpy = __import__(filename+suffix) 22 | 23 | # Material properties 24 | first_line = [int(debugpy.featureFlags['integer']), 2., debugpy.thickness, 0., 0., 0., 0., 0., ] 25 | m = CompDam_DGD.matprop_mod.loadmatprops('IM7-8552', 40, first_line + debugpy.m) 26 | CompDam_DGD.matprop_mod.consistencychecks(m, issuewarnings=False) 27 | 28 | # Parameters 29 | p = debugpy.p 30 | default_parameters = CompDam_DGD.parameters_mod.loadparameters() 31 | for k, v in p.items(): 32 | setattr(default_parameters, k.lower(), v) 33 | p = default_parameters 34 | print(p) 35 | 36 | # Deformations 37 | F = tensorAsListTo3x3(debugpy.F) 38 | F_old = tensorAsListTo3x3(debugpy.F_old) 39 | U = tensorAsListTo3x3(debugpy.U) 40 | 41 | # State variables 42 | sv = CompDam_DGD.statevar_mod.loadstatevars(len(debugpy.sv), debugpy.sv, m) 43 | sv_old = CompDam_DGD.statevar_mod.loadstatevars(len(debugpy.sv_old), debugpy.sv_old, m) 44 | 45 | return (m, p, sv, sv_old, F, F_old, U, debugpy) 46 | 47 | 48 | def tensorAsListTo3x3(t): 49 | ''' 50 | Convert a list (len=9) to a 3x3 numpy array 51 | Follows abaqus VUMAT component ordering 52 | ''' 53 | n = np.array([ 54 | [t[0], t[3], t[8]], 55 | [t[6], t[1], t[4]], 56 | [t[5], t[7], t[2]] ]) 57 | return n -------------------------------------------------------------------------------- /pyextmod/kind_map: -------------------------------------------------------------------------------- 1 | { 2 | 'real': { '' : 'float', 3 | '4' : 'float', 4 | 'isp' : 'float', 5 | '8' : 'double', 6 | 'dp' : 'double', 7 | 'idp' : 'double'}, 8 | 'complex' : { '' : 'complex_float', 9 | '8' : 'complex_double', 10 | '16' : 'complex_long_double', 11 | 'dp' : 'complex_double'}, 12 | 'integer' : { '4' : 'int', 13 | '8' : 'long_long', 14 | 'dp' : 'long_long' } 15 | } 16 | -------------------------------------------------------------------------------- /pyextmod/run_debug_file.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import CompDam_DGD 3 | import helpers as h 4 | 5 | CompDam_DGD.dgd_mod.log_init(level=4, filename='pyextmod_run_output.txt') 6 | (m, p, sv, sv_old, F, F_old, U, debugpy) = h.loaddebugpy(filename='') 7 | 8 | # Run CompDam 9 | sv_calculated = sv_old 10 | Cauchy = np.zeros((3,3), order='F') 11 | enerintern = 0 12 | enerinelas = 0 13 | func = getattr(CompDam_DGD.dgd_mod, debugpy.called_from.lower()) 14 | func(u=U, f=F, f_old=F_old, m=m, p=p, sv=sv_calculated, ndir=3, nshr=3, dt=0, density_abq=debugpy.density_abq, cauchy=Cauchy, enerintern=enerintern, enerinelas=enerinelas) 15 | 16 | CompDam_DGD.dgd_mod.log_close() 17 | -------------------------------------------------------------------------------- /pyextmod/test_pyextmod_dgdevolve.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import CompDam_DGD 3 | import viz 4 | 5 | # logging 6 | CompDam_DGD.dgd_mod.log_init(level=4, filename='pyextmod_run_output.txt') 7 | 8 | # Load material properties 9 | m = CompDam_DGD.matprop_mod.loadmatprops('IM7-8552', 40, 10 | [10300, 0, 0.2, 0, 0, 0, 0, 0, 11 | 140653., 8703., 5164., 0.32, 0.45, 80.1, 97.6, 0.24, 12 | 0.739, 2.07, 288.2, 0.925, 8703., 5164., 3001., 0.32, 13 | -5.5e-06, 2.58e-05, 4.06e-09, 5.4, 2326.2, 0.2, 205., 0.5, 14 | 1730.6, 0.2, 61., 0.5, 10., 0.05, 0., 0.3]) 15 | CompDam_DGD.matprop_mod.consistencychecks(m, True) 16 | 17 | # Load parameters from the 'CompDam.parameters' file 18 | p = CompDam_DGD.parameters_mod.loadparameters() 19 | 20 | # State variables 21 | svarray = [ 22 | 0.900000000000000E+00, # SV1, CDM_d2 23 | 0.000000000000000E+00, # SV2, CDM_Fb1 24 | 1.000000000000000E+00, # SV3, CDM_Fb2 25 | 0.000000000000000E+00, # SV4, CDM_Fb3 26 | 0.000000000000000E+00, # SV5, CDM_B 27 | 0.200000000000000E+00, # SV6, CDM_Lc1 28 | 0.200000000000000E+00, # SV7, CDM_Lc2 29 | 0.183000000000000E+00, # SV8, CDM_Lc3 30 | 0.000000000000000E+00, # SV9, CDM_FIm 31 | 0.349000000000000E+00, # SV10, CDM_alpha 32 | 1.000000000000000E+00, # SV11, CDM_STATUS 33 | 0.000000000000000E+00, # SV12, CDM_Plas12 34 | 0.000000000000000E+00, # SV13, CDM_Inel12 35 | 0.000000000000000E+00, # SV14, CDM_FIfT 36 | 0.000000000000000E+00, # SV15, CDM_slide1 37 | 0.000000000000000E+00, # SV16, CDM_slide2 38 | 0.000000000000000E+00, # SV17, CDM_FIfC 39 | 0.000000000000000E+00, # SV18, CDM_d1T 40 | 0.000000000000000E+00 # SV19, CDM_d1C 41 | ] 42 | sv = CompDam_DGD.statevar_mod.loadstatevars(len(svarray), svarray, m) 43 | print(sv) 44 | 45 | 46 | # Other inputs 47 | F = np.array([ 48 | [1.000000000000000E+00, 0.000000000000000E+00, 0.000000000000000E+00], 49 | [0.000000000000000E+00, 1.200000000000000E+00, 0.000000000000000E+00], 50 | [0.000000000000000E+00, 0.100000000000000E+00, 1.000000000000000E+00]]) 51 | 52 | F_old = np.array([ 53 | [1.000000000000000E+00, 0.000000000000000E+00, 0.000000000000000E+00], 54 | [0.000000000000000E+00, 1.000000000000000E+00, 0.000000000000000E+00], 55 | [0.000000000000000E+00, 0.000000000000000E+00, 1.000000000000000E+00]]) 56 | 57 | U = np.array([ 58 | [1.000000000000000E+00, 0.000000000000000E+00, 0.000000000000000E+00], 59 | [0.000000000000000E+00, 1.000000000000000E+00, 0.000000000000000E+00], 60 | [0.000000000000000E+00, 0.000000000000000E+00, 1.000000000000000E+00]]) 61 | 62 | Cauchy = np.zeros((3,3), order='F') 63 | 64 | enerintern = 0 65 | enerinelas = 0 66 | 67 | CompDam_DGD.dgd_mod.dgdevolve(u=U, f=F, f_old=F_old, m=m, p=p, sv=sv, ndir=3, nshr=3, dt=0, density_abq=1, cauchy=Cauchy, enerintern=enerintern, enerinelas=enerinelas, fatigue_step=False) 68 | # print Cauchy 69 | 70 | CompDam_DGD.dgd_mod.log_close() 71 | 72 | 73 | # Visualize 74 | viz.visualize(lc=svarray[5:8], alpha=svarray[9], F=F, pathToLogFile='pyextmod_run_output.txt', initMD=1, initEQk=1) 75 | -------------------------------------------------------------------------------- /pyextmod/test_pyextmod_dgdkinkband.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import CompDam_DGD 3 | 4 | # logging 5 | CompDam_DGD.dgd_mod.log_init(level=4, filename='pyextmod_run_output.txt') 6 | 7 | # Load material properties from props file 8 | # m = CompDam_DGD.matprop_mod.loadmatprops('IM7-8552', False, 4, [10300, 0, 0.2, 0]) 9 | m = CompDam_DGD.matprop_mod.loadmatprops('IM7-8552', 40, 10 | [10300, 0, 0.2, 0, 0, 0, 0, 0, 11 | 140653., 8703., 5164., 0.32, 0.45, 80.1, 97.6, 0.24, 12 | 0.739, 2.07, 288.2, 0.925, 8703., 5164., 3001., 0.32, 13 | -5.5e-06, 2.58e-05, 4.06e-09, 5.4, 2326.2, 0.2, 205., 0.5, 14 | 1730.6, 0.2, 61., 0.5, 10., 0.05, 0., 0.3]) 15 | CompDam_DGD.matprop_mod.consistencychecks(m, True) 16 | 17 | 18 | # Load parameters from the 'CompDam.parameters' file 19 | p = CompDam_DGD.parameters_mod.loadparameters() 20 | 21 | # State variables 22 | svarray = [ 23 | 0, # d2 24 | 0.100010907174600E+01, # Fb1 25 | 0.285074113899452E-02, # Fb2 26 | -.564065053387765E-03, # Fb3 27 | 0, # B 28 | 0.251999888476518E+00, # LC1 29 | 0.252000390522334E+00, # LC2 30 | 0.182999998000000E+00, # LC3 31 | 0, # FIm 32 | 0, # alpha 33 | 1, # STATUS 34 | 0.834099516228293E-03, # Plas12 35 | 0.834106365248572E-03, # Inel12 36 | 0.100000000000000E+01, # FIft 37 | 0.000000000000000E+00, # slide 1 38 | 0.000000000000000E+00, # slide 2 39 | 0.393443624534415E-02, # FIfc 40 | 0, # d1T 41 | 0.100000000000000E-05, # d1C 42 | 0.000000000000000E+00, # Plas13 43 | 0.000000000000000E+00, # Inel13 44 | -.121216129159982E-01, # phi0 45 | 0.288105568001332E-02, # gamma 46 | 0.000000000000000E+00, # Fm1 47 | 0.000000000000000E+00, # Fm2 48 | 0.000000000000000E+00 # Fm3 49 | ] 50 | sv = CompDam_DGD.statevar_mod.loadstatevars(len(svarray), svarray, m) 51 | print(sv) 52 | 53 | 54 | # Other inputs 55 | F = np.array([ 56 | [0.100010537052244E+01, 0.671448581859227E-02, -.394071455445696E-04], 57 | [0.215218597548654E-02, 0.995441501182020E+00, -.100155558582461E-02], 58 | [-.559184398241147E-03, -.122772703106108E-02, 0.100136989172593E+01]]) 59 | 60 | F_old = np.array([ 61 | [0.100010292495566E+01, 0.669475133238129E-02, -.355545830703892E-04], 62 | [0.217728430299811E-02, 0.995457191114569E+00, -.995635844788960E-03], 63 | [-.564742609464082E-03, -.122174252924641E-02, 0.100137225125743E+01]]) 64 | 65 | U = np.array([ 66 | [0.100009794753325E+01, 0.443883268741269E-02, -.298066487405907E-03], 67 | [0.443883268741269E-02, 0.995454383031751E+00, -.111443987390743E-02], 68 | [-.298066487405907E-03, -.111443987390743E-02, 0.100136972887234E+01]]) 69 | 70 | Cauchy = np.zeros((3,3), order='F') 71 | 72 | enerintern = 0 73 | enerinelas = 0 74 | 75 | CompDam_DGD.dgd_mod.dgdkinkband(u=U, f=F, f_old=F_old, m=m, p=p, sv=sv, ndir=3, nshr=3, dt=0, density_abq=1, cauchy=Cauchy, enerintern=enerintern, enerinelas=enerinelas) 76 | # print Cauchy 77 | 78 | CompDam_DGD.dgd_mod.log_close() 79 | -------------------------------------------------------------------------------- /pyextmod/vaba_param.inc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nasa/CompDam_DGD/1c6832051ca8890fb711853bcead25ccaa9114b7/pyextmod/vaba_param.inc -------------------------------------------------------------------------------- /tests/abaqus_v6.env: -------------------------------------------------------------------------------- 1 | # 2 | # Sample Abaqus environment file for Abaqus 2016 or newer. 3 | # 4 | 5 | import sys 6 | import os 7 | 8 | usub_lib_dir = os.path.join(os.getcwd(), '../for') 9 | 10 | if sys.platform.startswith('linux'): 11 | 12 | compile_fortran = ['ifort', '-free', '-mkl=sequential', '-DABQ_LNX86_64', 13 | '-axCORE-AVX2', '-xSSE3', 14 | '-V', '-c', '-fPIC', '-auto', '-mP2OPT_hpo_vec_divbyzero=F', '-extend_source', 15 | '-fpp', '-WB', '-I%I'] 16 | 17 | elif sys.platform == 'win32': 18 | 19 | compile_fortran = ['ifort', '/free', '/Qmkl:sequential', 20 | '/c','/DABQ_WIN86_64', '/extend-source', '/fpp', 21 | '/iface:cref', '/recursive', '/Qauto-scalar', 22 | '/QxSSE3', '/QaxAVX', 23 | '/heap-arrays:1', 24 | '/Od', '/Ob0', # <-- Optimization Debugging 25 | # '/Zi', # <-- Debugging 26 | #'/gen-interfaces', '/warn:interfaces', '/check', '/fpe:0', # <-- Debugging 27 | '/include:%I'] 28 | 29 | 30 | # Check for uncommmited changes For development; not needed for production. To 31 | # use, uncomment and be sure to set the compdam_source_dir to the absolute path 32 | # to the CompDam directory. This function only applies to code compiled from 33 | # source during the job execution; not compatible with pre-compiled libraries. 34 | # def onJobStartup(): 35 | # import os, sys, subprocess 36 | 37 | # # !!! UPDATE to point to compdam source directory !!! 38 | # compdam_source_dir = os.path.join(savedir, os.pardir, os.pardir) 39 | 40 | # # Platform dependent stuff 41 | # if sys.platform.startswith('linux'): 42 | # chain_command_char = '; ' 43 | # elif sys.platform == 'win32': 44 | # chain_command_char = '& ' 45 | # else: 46 | # print('Skipping check for uncommmited changes.') 47 | # return 48 | 49 | # # Get the current hash 50 | # cmd = 'cd ' + compdam_source_dir + chain_command_char + 'git rev-parse --verify HEAD' 51 | # githash = subprocess.check_output(cmd, shell=True) 52 | 53 | # # Check for changes to compdam 54 | # cmd = 'cd ' + compdam_source_dir + chain_command_char + 'git diff for/' 55 | # gitdiff = subprocess.check_output(cmd, shell=True) 56 | # if len(gitdiff): 57 | # print('\nWARNING: Found uncommmited changes to compdam source; see ' + id + '.diff\n') 58 | 59 | # with open(os.path.join(savedir,id+'.diff'), 'w') as f: 60 | # f.write('Last commit: ' + githash+'\n\n') 61 | # f.write(gitdiff+'\n\n') 62 | # else: 63 | # print('Checked for uncommmited changes; none found.') 64 | -------------------------------------------------------------------------------- /tests/abaverify_remote_options.py: -------------------------------------------------------------------------------- 1 | # Remote run directory [Default is abaverify_temp] 2 | # Command line run directory will override the value specified here if both are provided 3 | #remote_run_directory = 'abaverify_temp' 4 | 5 | 6 | # Add files to copy to the remote [Default is empty list] 7 | # Paths relative to /tests directory 8 | local_files_to_copy_to_remote = ['CompDam.parameters'] 9 | 10 | 11 | # Specify which files to copy back from remote to local after job ends 12 | file_extensions_to_copy_to_local = ['.dat', '.inp', '.msg', '.odb', '.sta', '.py'] 13 | 14 | 15 | # Regular expression for source files to copy [Default is below] 16 | #source_file_extensions_to_copy = r'.*\.for$' 17 | 18 | 19 | # Copy results back to local directory? [Defualt is False] 20 | copy_results_to_local = True 21 | 22 | 23 | # Name of environment file to use on remote [Default is 'abaqus_v6_remote.env'] 24 | environment_file_name = 'abaqus_v6_remote.env' -------------------------------------------------------------------------------- /tests/automatic_testing_script.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | # Sample script for automatically running abaverify verification tests 4 | # Use a utility like cron or a git hook to call this script as needed 5 | 6 | import os 7 | import inspect 8 | from optparse import OptionParser 9 | import abaverify as av 10 | 11 | import pprint 12 | pp = pprint.PrettyPrinter(indent=4) 13 | 14 | # Set paths relative to the location of this file 15 | pathForThisFile = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) 16 | 17 | # Location for storing automatic test results 18 | archive_dir = os.path.join(pathForThisFile, 'archivedTestResults') 19 | 20 | # Initialize the automatic tester 21 | av_auto = av.Automatic(test_directory=pathForThisFile, 22 | archive_directory=archive_dir, 23 | repository = { 24 | 'name': 'CompDam_DGD', 25 | 'remote': 'origin', 26 | 'branch': 'dev' 27 | }, 28 | tests_to_run=[], 29 | verbose=True, 30 | abaqus_cmd='abq2017') 31 | 32 | 33 | # Run the tests 34 | result = av_auto.run() 35 | 36 | # PNG files in testOutpu 37 | attach = [os.path.join(os.getcwd(), 'testOutput', x) for x in os.listdir(os.path.join(os.getcwd(), 'testOutput')) if x.endswith(".png")] 38 | 39 | # Process the results 40 | if result: 41 | av_auto.generateRunTimePlots(template='template_run_time_plots_compdam') 42 | 43 | av_auto.emailResults(recipients=["andrew.c.bergan@nasa.gov", "frank.a.leone@nasa.gov"], sender="noreply@nasa.gov", 44 | template='template_email_summary', attachments=attach) 45 | 46 | 47 | # TODO - implement below: 48 | 49 | # # Post the results to github 50 | # html_test_list = av_auto.generateReport('my_cool_template_file') 51 | # html_plots = av_auto.generateRunTimePlots('a_template_for_plotting') 52 | # av_auto.commitReportToGitHub([html_test_list, html_plots], github_info) 53 | -------------------------------------------------------------------------------- /tests/pyextmod_compile.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # 4 | # NOTE: must run with -i argument to allow bash to source ~/.bashrc 5 | # 6 | 7 | source ~/.bashrc 8 | 9 | source activate compdam 10 | cd ../pyextmod 11 | make clean 12 | make $MAKE_F90 13 | -------------------------------------------------------------------------------- /tests/pyextmod_run.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # 4 | # NOTE: must run with -i argument to allow bash to source ~/.bashrc 5 | # 6 | 7 | source ~/.bashrc 8 | 9 | source activate compdam 10 | cd ../pyextmod 11 | python verify_debug.py $1 ../tests/testOutput/$2 12 | -------------------------------------------------------------------------------- /tests/runtimeplots_testing_script.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | # Script for debugging features of automatic.py 4 | 5 | import os 6 | import abaverify as av 7 | 8 | av.Automatic.generateRunTimePlots2(template='template_run_time_plots_compdam', 9 | path_to_archived_tests=os.path.abspath('archivedTestResults'), 10 | saveAs='testing_run_time_plots.html') -------------------------------------------------------------------------------- /tests/template_run_time_plots_body.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 37 | 38 |
39 |
40 | 41 |
42 | 43 | {plots} 44 |
45 | 46 |
47 | 48 |
49 |
    50 | {toc} 51 |
52 |
53 |
54 | 55 |
56 |
57 | 58 | 96 | 97 | 98 | -------------------------------------------------------------------------------- /tests/template_run_time_plots_compdam.py: -------------------------------------------------------------------------------- 1 | # Specify either 'commit' (to label the x-axis with commit sha) or 'date' (to label the x-axis with the date the test was run) 2 | x_axis_qty = 'date' 3 | 4 | # Plot dims in pixels 5 | plot_height = '300' 6 | plot_width = '' 7 | 8 | # For grouping tests together on same axes 9 | test_group_prefixes = ['test_C3D8R_failureEnvelope_sig11sig22', 10 | 'test_C3D8R_failureEnvelope_sig12sig22', 11 | 'test_C3D8R_failureEnvelope_sig12sig23', 12 | 'test_C3D8R_mixedModeMatrix', 13 | 'test_C3D8R_fiberCompression_DGD_wkbToTotal', 14 | 'test_C3D8R_twoElement_fiberCompression_DGD'] 15 | 16 | # Grouping charts into subsections 17 | chart_groups = dict() 18 | chart_groups['failure-envelopes-C3D8R'] = { 19 | 'name_pretty': 'Failure Envelopes, C3D8R', 20 | 'charts': ['test_C3D8R_failureEnvelope_sig11sig22', 'test_C3D8R_failureEnvelope_sig12sig22', 'test_C3D8R_failureEnvelope_sig12sig23'] 21 | } 22 | chart_groups['single-element-C3D8R'] = { 23 | 'name_pretty': 'Single Element, C3D8R', 24 | 'charts': ['test_C3D8R_elastic_fiberTension', 'test_C3D8R_elastic_matrixTension', 'test_C3D8R_elementSize', 'test_C3D8R_fiberCompression_CDM', 'test_C3D8R_fiberLoadReversal', 'test_C3D8R_fiberTension', 'test_C3D8R_matrixCompression', 'test_C3D8R_matrixTension', 'test_C3D8R_nonlinearShear12', 'test_C3D8R_schapery12', 'test_C3D8R_simpleShear12', 'test_C3D8R_simpleShear12friction'] 25 | } 26 | chart_groups['Fiber-Compression-DGD'] = { 27 | 'name_pretty': 'Fiber Compression, DGD', 28 | 'charts': ['test_C3D8R_fiberCompression_DGD', 'test_C3D8R_twoElement_fiberCompression_DGD'] 29 | } 30 | 31 | 32 | 33 | # Subsection heading 34 | subsection = """ 35 |
36 |

{section_name}

37 | {plots} 38 |
39 | """ 40 | 41 | # Subsection toc wrapper 42 | subsection_toc_wrapper = """ 43 |
  • 44 | {section_name} 45 | 48 |
  • 49 | """ 50 | 51 | # Formatting for each plt 52 | plot = """ 53 |
    54 | {plot} 55 |
    56 |

    57 | """ 58 | 59 | # Table of contents 60 | toc = """ 61 |
  • 62 | {plot_title} 63 |
  • 64 | """ 65 | 66 | # Overall page formatting 67 | body = "" 68 | with open('template_run_time_plots_body.html') as f: 69 | body = f.read() 70 | -------------------------------------------------------------------------------- /tests/test_C3D6_elementSize.inp: -------------------------------------------------------------------------------- 1 | *Heading 2 | Single element test for characteristic element length calculations 3 | ** 4 | *Parameter 5 | ** Inputs parameters 6 | alpha = 1.0 7 | ** 8 | length2 = 0.2 9 | length1 = length2 * alpha 10 | length3 = 0.1 11 | displacement = 0.0 12 | stepDuration = 5.e-7 13 | ** 14 | fiber_angle = 0.0 15 | misalignment_angle = 0.0 16 | skew_angle = 0.0 17 | ** 18 | ** Dependent parameters and constants 19 | Pi = 2.0 * acos(0.0) 20 | skew_1 = length2 * sin(Pi * skew_angle / 180.0) 21 | skew_2 = length2 * (1.0 - cos(Pi * skew_angle / 180.0)) 22 | ** 23 | *Node, nset=AllNodes 24 | 1, 0., 0., 0. 25 | 2, , 0., 0. 26 | 3, 0., , 0. 27 | 5, 0., 0., 28 | 6, , 0., 29 | 7, 0., , 30 | *NSET, NSET=X+ 31 | 2, 3, 6, 7 32 | *NSET, NSET=X- 33 | 1, 5 34 | *NSET, NSET=Y+ 35 | 3, 7 36 | *NSET, NSET=Y- 37 | 1, 2, 5, 6 38 | *NSET, NSET=Z+ 39 | 5, 6, 7 40 | *NSET, NSET=Z- 41 | 1, 2, 3 42 | *NMAP, type=TRANSLATION, nset=Y+ 43 | 0., 0., 0., 1., 0., 0. 44 | 45 | *NMAP, type=TRANSLATION, nset=Y+ 46 | 0., 0., 0., 0., 1., 0. 47 | - 48 | *NMAP, type=ROTATION, nset=AllNodes 49 | 0., 0., 0., 0., 0., 1. 50 | 1., 0., 0. 51 | 52 | ** 53 | *Element, type=C3D6, elset=SingleElement 54 | 1, 1, 2, 3, 5, 6, 7 55 | ** 56 | *Orientation, name=Ori-1 57 | 1., 0., 0., 0., 1., 0. 58 | 3, 59 | *Solid Section, elset=SingleElement, orientation=Ori-1, material=IM7-8552 60 | ** 61 | *Material, name=IM7-8552 62 | *Density 63 | 1.57e-09, 64 | *User material, constants=4 65 | ** feature flags, , thickness, 4, 5, 6, 7, 8 66 | 0, , , , , , , , 67 | *Depvar, delete=11 68 | 19, 69 | 1, CDM_d2 70 | 2, CDM_Fb1 71 | 3, CDM_Fb2 72 | 4, CDM_Fb3 73 | 5, CDM_B 74 | 6, CDM_Lc1 75 | 7, CDM_Lc2 76 | 8, CDM_Lc3 77 | 9, CDM_FIm 78 | 10, CDM_alpha 79 | 11, CDM_STATUS 80 | 12, CDM_Plas12 81 | 13, CDM_Inel12 82 | 14, CDM_FIfT 83 | 15, CDM_slide1 84 | 16, CDM_slide2 85 | 17, CDM_FIfC 86 | 18, CDM_d1T 87 | 19, CDM_d1C 88 | *Characteristic Length, definition=USER, components=3 89 | ** 90 | *Initial Conditions, type=Solution 91 | SingleElement, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 92 | 0.d0, 0.d0, 0.d0, 1, 0.d0, 0.d0, 0.d0, 93 | 0.d0, 0.d0, 0.d0, 0.d0, 0.d0 94 | *Boundary 95 | AllNodes, 1, 3, 0 96 | ** 97 | *Step, nlgeom=YES 98 | *Dynamic, Explicit 99 | , , , 100 | *Fixed Mass Scaling, type=BELOW MIN, dt= 101 | ** 102 | *Output, FIELD 103 | *Element Output 104 | SDV 105 | *Node Output 106 | U, RF 107 | *Output, HISTORY, frequency=1 108 | *Energy Output 109 | ALLIE, ALLKE 110 | *Element Output, elset=SingleElement 111 | SDV 112 | ** 113 | *End Step 114 | -------------------------------------------------------------------------------- /tests/test_C3D6_elementSize_expected.py: -------------------------------------------------------------------------------- 1 | Lc1 = 0 2 | Lc2 = 0 3 | 4 | parameters = { 5 | "results": [ 6 | { 7 | "type": "max", 8 | "identifier": 9 | { 10 | "symbol": "SDV_CDM_Lc1", 11 | "elset": "SINGLEELEMENT", 12 | "position": "Element 1 Int Point 1" 13 | }, 14 | "referenceValue": Lc1, 15 | "tolerance": Lc1*0.001 16 | }, 17 | { 18 | "type": "max", 19 | "identifier": 20 | { 21 | "symbol": "SDV_CDM_Lc2", 22 | "elset": "SINGLEELEMENT", 23 | "position": "Element 1 Int Point 1" 24 | }, 25 | "referenceValue": Lc2, 26 | "tolerance": Lc2*0.001 27 | }, 28 | { 29 | "type": "max", 30 | "identifier": 31 | { 32 | "symbol": "SDV_CDM_Lc3", 33 | "elset": "SINGLEELEMENT", 34 | "position": "Element 1 Int Point 1" 35 | }, 36 | "referenceValue": 0.1, 37 | "tolerance": 0.0001 38 | } 39 | ] 40 | } 41 | -------------------------------------------------------------------------------- /tests/test_C3D6_simpleShear12.inp: -------------------------------------------------------------------------------- 1 | *Heading 2 | Single element test for simple shear loading 3 | ** 4 | *Parameter 5 | length = 0.1 6 | displacement = 0.1 7 | ** 8 | ** NODES 9 | ** 10 | *NODE, NSET=GLOBAL 11 | 1, 0., 0., 0. 12 | 2, , 0., 0. 13 | 3, , , 0. 14 | 4, 0., , 0. 15 | 5, 0., 0., 16 | 6, , 0., 17 | 7, , , 18 | 8, 0., , 19 | *NSET, NSET=X+ 20 | 2, 3, 6, 7 21 | *NSET, NSET=X- 22 | 1, 4, 5, 8 23 | *NSET, NSET=Y+ 24 | 3, 4, 7, 8 25 | *NSET, NSET=Y- 26 | 1, 2, 5, 6 27 | *NSET, NSET=Z+ 28 | 5, 6, 7, 8 29 | *NSET, NSET=Z- 30 | 1, 2, 3, 4 31 | ** 32 | ** ELEMENTS 33 | ** 34 | *ELEMENT, TYPE=C3D6, ELSET=ALL_ELEMS 35 | 1, 1, 2, 4, 5, 6, 8 36 | 2, 2, 3, 4, 6, 7, 8 37 | ** 1, 1, 2, 3, 5, 6, 7 38 | ** 2, 1, 3, 4, 5, 7, 8 39 | ** 40 | ** PROPERTIES 41 | ** 42 | *Orientation, name=Ori-1 43 | 1., 0., 0., 0., 1., 0. 44 | 3, 0. 45 | *SOLID SECTION, ELSET=ALL_ELEMS, MATERIAL=IM7-8552, ORIENTATION=Ori-1 46 | ** 47 | ** MATERIALS 48 | ** 49 | *Material, name=IM7-8552 50 | *Density 51 | 1.59d-05, 52 | *User material, constants=4 53 | ** 1 2 3 4 54 | ** feature flags, , thickness, 4, 5, 6, 7, 8 55 | 100000, , , , , , , , 56 | ** 57 | *Depvar, delete=11 58 | 19, 59 | 1, CDM_d2 60 | 2, CDM_Fb1 61 | 3, CDM_Fb2 62 | 4, CDM_Fb3 63 | 5, CDM_B 64 | 6, CDM_Lc1 65 | 7, CDM_Lc2 66 | 8, CDM_Lc3 67 | 9, CDM_FIm 68 | 10, CDM_alpha 69 | 11, CDM_STATUS 70 | 12, CDM_Plas12 71 | 13, CDM_Inel12 72 | 14, CDM_FIfT 73 | 15, CDM_slide1 74 | 16, CDM_slide2 75 | 17, CDM_FIfC 76 | 18, CDM_d1T 77 | 19, CDM_d1C 78 | *Characteristic Length, definition=USER, components=3 79 | ** 80 | ** INITIAL CONDITIONS 81 | ** 82 | *Initial Conditions, Type=Solution 83 | ALL_ELEMS, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 84 | 0.d0, 0.d0, 0.d0, 1, 0.d0, 0.d0, 0.d0, 0.d0, 85 | 0.d0, 0.d0, 0.d0, 0.d0 86 | *BOUNDARY 87 | Y-, 1, 3, 0 88 | Y+, 2, 3, 0 89 | *Amplitude, name=LoadUp, definition=SMOOTH STEP 90 | 0., 0., 0.1, 1. 91 | ** STEP 1 - TENSION MECHANICAL CYCLE 92 | ** 93 | *STEP, NLGEOM=YES 94 | *Dynamic, Explicit 95 | , 0.1, , 96 | ** 97 | ** OUTPUT 98 | ** 99 | *OUTPUT, FIELD 100 | *ELEMENT OUTPUT 101 | SDV, S, LE 102 | *Node Output 103 | U, RF 104 | *OUTPUT, HISTORY, frequency=1 105 | *Energy Output 106 | ALLIE, ALLKE, ALLPD, ALLSE 107 | *NODE OUTPUT, NSET=Y+ 108 | U 109 | *NODE OUTPUT, NSET=Y+ 110 | RF 111 | *ELEMENT OUTPUT, ELSET=ALL_ELEMS 112 | SDV, S, LE 113 | ** 114 | ** LOADING 115 | ** 116 | *Boundary, AMPLITUDE=LoadUp 117 | Y+, 1, 1, 118 | *END STEP 119 | -------------------------------------------------------------------------------- /tests/test_C3D8R_elastic_matrixTension.inp: -------------------------------------------------------------------------------- 1 | *Heading 2 | Single element test for matrix-direction elastic response 3 | ** 4 | *Parameter 5 | length = 0.2 6 | displacement = 0.02*length 7 | stepDuration = 0.1 8 | ** 9 | ** NODES 10 | ** 11 | *NODE, NSET=GLOBAL 12 | 1, 0., 0., 0. 13 | 2, , 0., 0. 14 | 3, , , 0. 15 | 4, 0., , 0. 16 | 5, 0., 0., 17 | 6, , 0., 18 | 7, , , 19 | 8, 0., , 20 | *NSET, NSET=X+ 21 | 2, 3, 6, 7 22 | *NSET, NSET=X- 23 | 1, 4, 5, 8 24 | *NSET, NSET=Y+ 25 | 3, 4, 7, 8 26 | *NSET, NSET=Y- 27 | 1, 2, 5, 6 28 | *NSET, NSET=Z+ 29 | 5, 6, 7, 8 30 | *NSET, NSET=Z- 31 | 1, 2, 3, 4 32 | ** 33 | ** ELEMENTS 34 | ** 35 | *ELEMENT, TYPE=C3D8R, ELSET=ALL_ELEMS 36 | 1, 1, 2, 3, 4, 5, 6, 7, 8 37 | ** 38 | ** PROPERTIES 39 | ** 40 | *SOLID SECTION, ELSET=ALL_ELEMS, MATERIAL=IM7-8552 41 | ** 42 | ** MATERIALS 43 | ** 44 | *Material, name=IM7-8552 45 | *Density 46 | 1.57e-09, 47 | *User material, constants=4 48 | 0, 49 | *Depvar, delete=11 50 | 19, 51 | 1, CDM_d2 52 | 2, CDM_Fb1 53 | 3, CDM_Fb2 54 | 4, CDM_Fb3 55 | 5, CDM_B 56 | 6, CDM_Lc1 57 | 7, CDM_Lc2 58 | 8, CDM_Lc3 59 | 9, CDM_FIm 60 | 10, CDM_alpha 61 | 11, CDM_STATUS 62 | 12, CDM_Plas12 63 | 13, CDM_Inel12 64 | 14, CDM_FIfT 65 | 15, CDM_slide1 66 | 16, CDM_slide2 67 | 17, CDM_FIfC 68 | 18, CDM_d1T 69 | 19, CDM_d1C 70 | *Characteristic Length, definition=USER, components=3 71 | ** 72 | ** INITIAL CONDITIONS 73 | ** 74 | *Initial Conditions, Type=Solution 75 | ALL_ELEMS, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 76 | 0.d0, 0.d0, 0.d0, 1, 0.d0, 0.d0, 0.d0, 77 | 0.d0, 0.d0, 0.d0, 0.d0, 0.d0 78 | *BOUNDARY 79 | Y-, 2, 2, 0 80 | X-, 1, 1, 0 81 | Z-, 3, 3, 0 82 | ** 83 | *Amplitude, name=LoadUp, definition=SMOOTH STEP 84 | 0., 0., , 1. 85 | ** STEP 1 - TENSION MECHANICAL CYCLE 86 | ** 87 | *STEP, NLGEOM=YES 88 | *Dynamic, Explicit 89 | , , , 90 | *Bulk Viscosity 91 | 0.06, 1.2 92 | ** Mass Scaling: Semi-Automatic 93 | ** Whole Model 94 | *Fixed Mass Scaling, factor=5000. 95 | ** 96 | ** LOADING 97 | ** 98 | *Boundary, AMPLITUDE=LoadUp 99 | Y+, 2, 2, 100 | ** 101 | ** OUTPUT 102 | ** 103 | *OUTPUT, FIELD 104 | *ELEMENT OUTPUT 105 | SDV, S, LE 106 | *Node Output 107 | U, RF 108 | *OUTPUT, HISTORY, frequency=1 109 | *Energy Output 110 | ALLIE, ALLKE, ALLPD, ALLSE 111 | *NODE OUTPUT, NSET=Y+ 112 | U 113 | *NODE OUTPUT, NSET=Y+ 114 | RF 115 | *ELEMENT OUTPUT, ELSET=ALL_ELEMS 116 | SDV, S, LE 117 | ** 118 | *END STEP 119 | -------------------------------------------------------------------------------- /tests/test_C3D8R_elastic_simpleShear12.inp: -------------------------------------------------------------------------------- 1 | *Heading 2 | Single element test for simple shear loading 3 | ** 4 | *Parameter 5 | length = 0.1 6 | displacement = 0.1 7 | ** 8 | ** NODES 9 | ** 10 | *NODE, NSET=GLOBAL 11 | 1, 0., 0., 0. 12 | 2, , 0., 0. 13 | 3, , , 0. 14 | 4, 0., , 0. 15 | 5, 0., 0., 16 | 6, , 0., 17 | 7, , , 18 | 8, 0., , 19 | *NSET, NSET=X+ 20 | 2, 3, 6, 7 21 | *NSET, NSET=X- 22 | 1, 4, 5, 8 23 | *NSET, NSET=Y+ 24 | 3, 4, 7, 8 25 | *NSET, NSET=Y- 26 | 1, 2, 5, 6 27 | *NSET, NSET=Z+ 28 | 5, 6, 7, 8 29 | *NSET, NSET=Z- 30 | 1, 2, 3, 4 31 | ** 32 | ** ELEMENTS 33 | ** 34 | *ELEMENT, TYPE=C3D8R, ELSET=ALL_ELEMS 35 | 1, 1, 2, 3, 4, 5, 6, 7, 8 36 | ** 37 | ** PROPERTIES 38 | ** 39 | *Orientation, name=Ori-1 40 | 1., 0., 0., 0., 1., 0. 41 | 3, 0. 42 | *SOLID SECTION, ELSET=ALL_ELEMS, MATERIAL=IM7-8552, ORIENTATION=Ori-1 43 | ** 44 | ** MATERIALS 45 | ** 46 | *Material, name=IM7-8552 47 | *Density 48 | 1.59d-05, 49 | *User material, constants=4 50 | ** 1 2 3 4 51 | 0, , , , , , , , 52 | ** 53 | *Depvar, delete=11 54 | 19, 55 | 1, CDM_d2 56 | 2, CDM_Fb1 57 | 3, CDM_Fb2 58 | 4, CDM_Fb3 59 | 5, CDM_B 60 | 6, CDM_Lc1 61 | 7, CDM_Lc2 62 | 8, CDM_Lc3 63 | 9, CDM_FIm 64 | 10, CDM_alpha 65 | 11, CDM_STATUS 66 | 12, CDM_Plas12 67 | 13, CDM_Inel12 68 | 14, CDM_FIfT 69 | 15, CDM_slide1 70 | 16, CDM_slide2 71 | 17, CDM_FIfC 72 | 18, CDM_d1T 73 | 19, CDM_d1C 74 | *Characteristic Length, definition=USER, components=3 75 | ** 76 | ** INITIAL CONDITIONS 77 | ** 78 | *Initial Conditions, Type=Solution 79 | ALL_ELEMS, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 80 | 0.d0, 0.d0, 0.d0, 1, 0.d0, 0.d0, 0.d0, 0.d0, 81 | 0.d0, 0.d0, 0.d0, 0.d0 82 | *BOUNDARY 83 | Y-, 1, 3, 0 84 | Y+, 2, 3, 0 85 | *Amplitude, name=LoadUp, definition=SMOOTH STEP 86 | 0., 0., 0.1, 1. 87 | ** STEP 1 - TENSION MECHANICAL CYCLE 88 | ** 89 | *STEP, NLGEOM=YES 90 | *Dynamic, Explicit 91 | , 0.1, , 92 | ** 93 | ** OUTPUT 94 | ** 95 | *OUTPUT, FIELD 96 | *ELEMENT OUTPUT 97 | SDV, S, LE 98 | *Node Output 99 | U, RF 100 | *OUTPUT, HISTORY, frequency=1 101 | *Energy Output 102 | ALLIE, ALLKE 103 | *NODE OUTPUT, NSET=Y+ 104 | U 105 | *NODE OUTPUT, NSET=Y+ 106 | RF 107 | *ELEMENT OUTPUT, ELSET=ALL_ELEMS 108 | SDV, S, LE 109 | ** 110 | ** LOADING 111 | ** 112 | *Boundary, AMPLITUDE=LoadUp 113 | Y+, 1, 1, 114 | *END STEP 115 | -------------------------------------------------------------------------------- /tests/test_C3D8R_elastic_simpleShear12_expected.py: -------------------------------------------------------------------------------- 1 | parameters = { 2 | "results": [ 3 | { 4 | "type": "max", 5 | "identifier": 6 | { 7 | "symbol": "S12", 8 | "elset": "ALL_ELEMS", 9 | "position": "Element 1 Int Point 1" 10 | }, 11 | "referenceValue": 12443, 12 | "tolerance": 2.0 13 | }, 14 | { 15 | "type": "max", 16 | "identifier": 17 | { 18 | "symbol": "SDV_CDM_d2", 19 | "elset": "ALL_ELEMS", 20 | "position": "Element 1 Int Point 1" 21 | }, 22 | "referenceValue": 0.0, 23 | "tolerance": 0.0 24 | }, 25 | { 26 | "type": "max", 27 | "identifier": 28 | { 29 | "symbol": "SDV_CDM_d1T", 30 | "elset": "ALL_ELEMS", 31 | "position": "Element 1 Int Point 1" 32 | }, 33 | "referenceValue": 0.0, 34 | "tolerance": 0.0 35 | }, 36 | { 37 | "type": "max", 38 | "identifier": 39 | { 40 | "symbol": "SDV_CDM_d1C", 41 | "elset": "ALL_ELEMS", 42 | "position": "Element 1 Int Point 1" 43 | }, 44 | "referenceValue": 0.0, 45 | "tolerance": 0.0 46 | } 47 | ] 48 | } -------------------------------------------------------------------------------- /tests/test_C3D8R_elementSize.inp: -------------------------------------------------------------------------------- 1 | *Heading 2 | Single element test for characteristic element length calculations 3 | ** 4 | *Parameter 5 | ** Inputs parameters 6 | alpha = 1.0 7 | ** 8 | length2 = 0.2 9 | length1 = length2 * alpha 10 | length3 = 0.1 11 | displacement = 0.0 12 | stepDuration = 5.e-7 13 | ** 14 | fiber_angle = 0.0 15 | misalignment_angle = 0.0 16 | skew_angle = 0.0 17 | ** 18 | ** Dependent parameters and constants 19 | Pi = 2.0 * acos(0.0) 20 | skew_1 = length2 * sin(Pi * skew_angle / 180.0) 21 | skew_2 = length2 * (1.0 - cos(Pi * skew_angle / 180.0)) 22 | ** 23 | *Node, nset=AllNodes 24 | 1, 0., 0., 0. 25 | 2, , 0., 0. 26 | 3, , , 0. 27 | 4, 0., , 0. 28 | 5, 0., 0., 29 | 6, , 0., 30 | 7, , , 31 | 8, 0., , 32 | *NSET, NSET=X+ 33 | 2, 3, 6, 7 34 | *NSET, NSET=X- 35 | 1, 4, 5, 8 36 | *NSET, NSET=Y+ 37 | 3, 4, 7, 8 38 | *NSET, NSET=Y- 39 | 1, 2, 5, 6 40 | *NSET, NSET=Z+ 41 | 5, 6, 7, 8 42 | *NSET, NSET=Z- 43 | 1, 2, 3, 4 44 | *NMAP, type=TRANSLATION, nset=Y+ 45 | 0., 0., 0., 1., 0., 0. 46 | 47 | *NMAP, type=TRANSLATION, nset=Y+ 48 | 0., 0., 0., 0., 1., 0. 49 | - 50 | *NMAP, type=ROTATION, nset=AllNodes 51 | 0., 0., 0., 0., 0., 1. 52 | 1., 0., 0. 53 | 54 | ** 55 | *Element, type=C3D8R, elset=SingleElement 56 | 1, 1, 2, 3, 4, 5, 6, 7, 8 57 | ** 58 | *Orientation, name=Ori-1 59 | 1., 0., 0., 0., 1., 0. 60 | 3, 61 | *Solid Section, elset=SingleElement, orientation=Ori-1, material=IM7-8552 62 | ** 63 | *Material, name=IM7-8552 64 | *Density 65 | 1.57e-09, 66 | *User material, constants=4 67 | ** feature flags, , thickness, 4, 5, 6, 7, 8 68 | 0, , , , , , , , 69 | *Depvar, delete=11 70 | 19, 71 | 1, CDM_d2 72 | 2, CDM_Fb1 73 | 3, CDM_Fb2 74 | 4, CDM_Fb3 75 | 5, CDM_B 76 | 6, CDM_Lc1 77 | 7, CDM_Lc2 78 | 8, CDM_Lc3 79 | 9, CDM_FIm 80 | 10, CDM_alpha 81 | 11, CDM_STATUS 82 | 12, CDM_Plas12 83 | 13, CDM_Inel12 84 | 14, CDM_FIfT 85 | 15, CDM_slide1 86 | 16, CDM_slide2 87 | 17, CDM_FIfC 88 | 18, CDM_d1T 89 | 19, CDM_d1C 90 | *Characteristic Length, definition=USER, components=3 91 | ** 92 | *Initial Conditions, type=Solution 93 | SingleElement, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 94 | 0.d0, 0.d0, 0.d0, 1, 0.d0, 0.d0, 0.d0, 95 | 0.d0, 0.d0, 0.d0, 0.d0, 0.d0 96 | *Boundary 97 | AllNodes, 1, 3, 0 98 | ** 99 | *Step, nlgeom=YES 100 | *Dynamic, Explicit 101 | , , , 102 | *Fixed Mass Scaling, type=BELOW MIN, dt= 103 | ** 104 | *Output, FIELD 105 | *Element Output 106 | SDV 107 | *Node Output 108 | U, RF 109 | *Output, HISTORY, frequency=1 110 | *Energy Output 111 | ALLIE, ALLKE 112 | *Element Output, elset=SingleElement 113 | SDV 114 | ** 115 | *End Step 116 | -------------------------------------------------------------------------------- /tests/test_C3D8R_elementSize_expected.py: -------------------------------------------------------------------------------- 1 | Lc1 = 0 2 | Lc2 = 0 3 | 4 | parameters = { 5 | "results": [ 6 | { 7 | "type": "max", 8 | "identifier": 9 | { 10 | "symbol": "SDV_CDM_Lc1", 11 | "elset": "SINGLEELEMENT", 12 | "position": "Element 1 Int Point 1" 13 | }, 14 | "referenceValue": Lc1, 15 | "tolerance": Lc1*0.001 16 | }, 17 | { 18 | "type": "max", 19 | "identifier": 20 | { 21 | "symbol": "SDV_CDM_Lc2", 22 | "elset": "SINGLEELEMENT", 23 | "position": "Element 1 Int Point 1" 24 | }, 25 | "referenceValue": Lc2, 26 | "tolerance": Lc2*0.001 27 | }, 28 | { 29 | "type": "max", 30 | "identifier": 31 | { 32 | "symbol": "SDV_CDM_Lc3", 33 | "elset": "SINGLEELEMENT", 34 | "position": "Element 1 Int Point 1" 35 | }, 36 | "referenceValue": 0.1, 37 | "tolerance": 0.0001 38 | } 39 | ] 40 | } 41 | -------------------------------------------------------------------------------- /tests/test_C3D8R_error.inp: -------------------------------------------------------------------------------- 1 | *Heading 2 | Single element test for inducing a DGD convergence error 3 | ** 4 | *Parameter 5 | length = 0.2 6 | displacement = 0.01 7 | stepDuration = 0.1 8 | ** 9 | error_time_fraction = 0.45 10 | error_time = stepDuration * error_time_fraction 11 | error_time_end = error_time + stepDuration * 0.001 12 | ** 13 | *Node, nset=AllNodes 14 | 1, 0., 0., 0. 15 | 2, , 0., 0. 16 | 3, , , 0. 17 | 4, 0., , 0. 18 | 5, 0., 0., 19 | 6, , 0., 20 | 7, , , 21 | 8, 0., , 22 | *Nset, nset=X+ 23 | 2, 3, 6, 7 24 | *Nset, nset=X- 25 | 1, 4, 5, 8 26 | *Nset, nset=Y+ 27 | 3, 4, 7, 8 28 | *Nset, nset=Y- 29 | 1, 2, 5, 6 30 | *Nset, nset=Z+ 31 | 5, 6, 7, 8 32 | *Nset, nset=Z- 33 | 1, 2, 3, 4 34 | ** 35 | *Element, type=C3D8R, elset=SingleElement 36 | 1, 1, 2, 3, 4, 5, 6, 7, 8 37 | ** 38 | *Solid Section, elset=SingleElement, material=IM7-8552 39 | ** 40 | *Material, name=IM7-8552 41 | *Density 42 | 1.57e-09, 43 | *User material, constants=4 44 | 100000, , , , , , , , 45 | *Depvar, delete=11 46 | 19, 47 | 1, CDM_d2 48 | 2, CDM_Fb1 49 | 3, CDM_Fb2 50 | 4, CDM_Fb3 51 | 5, CDM_B 52 | 6, CDM_Lc1 53 | 7, CDM_Lc2 54 | 8, CDM_Lc3 55 | 9, CDM_FIm 56 | 10, CDM_alpha 57 | 11, CDM_STATUS 58 | 12, CDM_Plas12 59 | 13, CDM_Inel12 60 | 14, CDM_FIfT 61 | 15, CDM_slide1 62 | 16, CDM_slide2 63 | 17, CDM_FIfC 64 | 18, CDM_d1T 65 | 19, CDM_d1C 66 | *Characteristic Length, definition=USER, components=3 67 | ** 68 | *Initial Conditions, type=Solution 69 | SingleElement, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 70 | 0.d0, 0.d0, 0.d0, 1, 0.d0, 0.d0, 0.d0, 71 | 0.d0, 0.d0, 0.d0, 0.d0, 0.d0 72 | *Boundary 73 | 1, 2, 3 74 | 2, 1, 3 75 | 3, 1, 1 76 | 3, 3, 3 77 | 4, 1, 1 78 | 4, 3, 3 79 | 5, 2, 2 80 | 6, 1, 2 81 | 7, 1, 1 82 | 7, 3, 3 83 | 8, 1, 1 84 | 8, 3, 3 85 | ** 86 | *Amplitude, name=Displace, definition=SMOOTH STEP 87 | 0., 0., , 88 | *Amplitude, name=InsideOut, definition=TABULAR 89 | 0., 0., , 0., , , , 90 | ** 91 | *Step, nlgeom=YES 92 | *Dynamic, Explicit 93 | , , , 94 | ** 95 | *Fixed Mass Scaling, factor=5000. 96 | ** 97 | *Boundary, amplitude=Displace 98 | Y+, 2, 2, -1.0 99 | *Boundary, amplitude=InsideOut 100 | 1, 1, 1, 1.0 101 | 1, 3, 3, 1.0 102 | 2, 1, 1, -1.0 103 | 2, 3, 3, 1.0 104 | 5, 1, 1, 1.0 105 | 5, 3, 3, -1.0 106 | 6, 1, 1, -1.0 107 | 6, 3, 3, -1.0 108 | ** 109 | *Output, HISTORY, frequency=1 110 | *Energy Output 111 | ALLWK, ALLSE, ALLKE, ALLPD, ALLAE 112 | *Element Output, elset=SingleElement 113 | SDV1, SDV2, SDV3, SDV4, SDV5, SDV9, SDV11, SDV15, 114 | SDV16 115 | ** 116 | *Output, FIELD, number interval=10 117 | *Element Output 118 | SDV, S, LE 119 | *Node Output 120 | U, RF 121 | ** 122 | *END STEP 123 | -------------------------------------------------------------------------------- /tests/test_C3D8R_error_expected.py: -------------------------------------------------------------------------------- 1 | parameters = { 2 | "results": [ 3 | { 4 | "type": "max", 5 | "identifier": 6 | { 7 | "symbol": "SDV_CDM_d2", 8 | "elset": "SINGLEELEMENT", 9 | "position": "Element 1 Int Point 1" 10 | }, 11 | "referenceValue": 1.0, 12 | "tolerance": 0.0 13 | } 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /tests/test_C3D8R_failureEnvelope_sig11sig22.inp: -------------------------------------------------------------------------------- 1 | *Parameter 2 | l = 0.5 3 | t = 0.25 4 | stepDuration = 0.1 5 | loadRatio = 0.8 6 | abcissaStrength = 2326.2 7 | ordinateStrength = 62.3 8 | normalTraction11 = loadRatio*abcissaStrength*3 9 | normalTraction22 = (1-loadRatio)*(ordinateStrength*3) 10 | ** 11 | *Node, nset=all 12 | 1, , , 13 | 2, , 0., 14 | 3, , , 0. 15 | 4, , 0., 0. 16 | 5, 0., , 17 | 6, 0., 0., 18 | 7, 0., , 0. 19 | 8, 0., 0., 0. 20 | *Element, type=C3D8R, elset=all 21 | 1, 3, 4, 2, 1, 7, 8, 6, 5 22 | ** 23 | *Nset, nset=loadSurface 24 | 1, 3, 5, 7, 25 | *Nset, nset=followersx 26 | 2, 3, 4 27 | *Nset, nset=followersy 28 | 3, 5, 7 29 | *Nset, nset=followersz 30 | 2, 5, 6 31 | *Nset, nset=pin 32 | 8, 33 | *Nset, nset=piny 34 | 2, 4, 6 35 | *Nset, nset=pinx 36 | 5, 6, 7 37 | *Nset, nset=pinz 38 | 3, 4, 7 39 | ** 40 | *Orientation, name=Ori-1 41 | 1., 0., 0., 0., 1., 0. 42 | 3, 0. 43 | ** 44 | *Solid Section, elset=all, orientation=Ori-1, material=IM7-8552, controls=SectionCtrl-1 45 | , 46 | ** 47 | *Equation 48 | 2 49 | followersx, 1, -1., 1, 1, 1. 50 | 2 51 | followersy, 2, -1., 1, 2, 1. 52 | 2 53 | followersz, 3, -1., 1, 3, 1. 54 | ** 55 | *Section controls, name=SectionCtrl-1, distortion control=YES 56 | ** 57 | *Amplitude, name=Amp-1, definition=SMOOTH STEP 58 | 0., 0., , 1. 59 | ** 60 | *Material, name=IM7-8552 61 | *Density 62 | 1.57e-09, 63 | *User material, constants=5 64 | 101101, , , , , , , , 65 | *Depvar 66 | 19, 67 | 1, CDM_d2 68 | 2, CDM_Fb1 69 | 3, CDM_Fb2 70 | 4, CDM_Fb3 71 | 5, CDM_B 72 | 6, CDM_Lc1 73 | 7, CDM_Lc2 74 | 8, CDM_Lc3 75 | 9, CDM_FIm 76 | 10, CDM_alpha 77 | 11, CDM_STATUS 78 | 12, CDM_Plas12 79 | 13, CDM_Inel12 80 | 14, CDM_FIfT 81 | 15, CDM_slide1 82 | 16, CDM_slide2 83 | 17, CDM_FIfC 84 | 18, CDM_d1T 85 | 19, CDM_d1C 86 | *Characteristic Length, definition=USER, components=3 87 | ** 88 | *Initial Conditions, Type=Solution 89 | all, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 90 | 0.d0, 0.d0, 0.d0, 1, 0.d0, 0.d0, 0.d0, 91 | 0.d0, 0.d0, 0.d0, 0.d0, 0.d0 92 | ** 93 | *Boundary 94 | pin, 1, 1 95 | pin, 2, 2 96 | pin, 3, 3 97 | piny, 2, 2 98 | pinx, 1, 1 99 | pinz, 3, 3 100 | ** 101 | *Filter, name=haltOnFailure, operator=Max, limit=1.0, HALT 102 | ** ---------------------------------------------------------------- 103 | *Step, name=Step-1, nlgeom=YES 104 | *Dynamic, Explicit 105 | , 106 | ** 107 | *Fixed Mass Scaling, factor=5000. 108 | ** 109 | *Dload, Amplitude=Amp-1, Constant resultant=Yes, follower=No 110 | 1, TRVEC1, , 1.0, 0.0, 0.0 111 | 1, TRVEC6, , 0.0, 1.0, 0.0 112 | ** 113 | *Output, field, number interval=50 114 | *Node Output 115 | U, RF 116 | *Element Output 117 | S, LE, SDV 118 | ** 119 | *Output, history, frequency=1 120 | *Energy Output 121 | ALLIE, ALLKE 122 | ** 123 | *Element Output, elset=all 124 | S, LE, SDV 125 | ** 126 | *Output, history, frequency=1, filter=haltOnFailure 127 | *Element Output, elset=all 128 | SDV9, SDV14, SDV17 129 | ** 130 | *End Step 131 | -------------------------------------------------------------------------------- /tests/test_C3D8R_failureEnvelope_sig11sig22_expected.py: -------------------------------------------------------------------------------- 1 | parameters = { 2 | "results": [ 3 | { 4 | "type": "log_stress_at_failure_init", 5 | "step": "Step-1", 6 | "failureIndices": [ 7 | { 8 | "symbol": "SDV_CDM_FIM", 9 | "elset": "ALL", 10 | "position": "Element 1 Int Point 1" 11 | }, 12 | { 13 | "symbol": "SDV_CDM_FIFT", 14 | "elset": "ALL", 15 | "position": "Element 1 Int Point 1" 16 | }, 17 | { 18 | "symbol": "SDV_CDM_FIFC", 19 | "elset": "ALL", 20 | "position": "Element 1 Int Point 1" 21 | } 22 | ], 23 | "stressComponents": [ 24 | { 25 | "symbol": "S11", 26 | "elset": "ALL", 27 | "position": "Element 1 Int Point 1" 28 | }, 29 | { 30 | "symbol": "S22", 31 | "elset": "ALL", 32 | "position": "Element 1 Int Point 1" 33 | } 34 | ], 35 | "additionalIdentifiersToStore": [ 36 | { 37 | "symbol": "SDV_CDM_ALPHA", 38 | "elset": "ALL", 39 | "position": "Element 1 Int Point 1" 40 | } 41 | ] 42 | } 43 | ] 44 | } 45 | -------------------------------------------------------------------------------- /tests/test_C3D8R_failureEnvelope_sig12sig22.inp: -------------------------------------------------------------------------------- 1 | *Parameter 2 | l = 0.2 3 | t = 0.1 4 | stepDuration = 0.1 5 | loadRatio = 0.8 6 | matrixStrength = -199 7 | SL = 92.3 8 | shearTraction = loadRatio*(SL*2) 9 | normalTraction = (1-loadRatio)*(matrixStrength*2) 10 | ** 11 | *Node, nset=all 12 | 1, , , 13 | 2, , 0., 14 | 3, , , 0. 15 | 4, , 0., 0. 16 | 5, 0., , 17 | 6, 0., 0., 18 | 7, 0., , 0. 19 | 8, 0., 0., 0. 20 | *Element, type=C3D8R, elset=all 21 | 1, 3, 4, 2, 1, 7, 8, 6, 5 22 | ** 23 | *Nset, nset=loadSurface 24 | 1, 3, 5, 7, 25 | *Nset, nset=followers 26 | 3, 5, 7 27 | *Nset, nset=pin 28 | 8, 29 | *Nset, nset=piny 30 | 2, 4, 6 31 | ** 32 | *Orientation, name=Ori-1 33 | 1., 0., 0., 0., 1., 0. 34 | 3, 0. 35 | ** 36 | *Solid Section, elset=all, orientation=Ori-1, material=IM7-8552, controls=SectionCtrl-1 37 | , 38 | ** 39 | *Equation 40 | 2 41 | followers, 2, -1., 1, 2, 1. 42 | 2 43 | followers, 1, -1., 1, 1, 1. 44 | ** 45 | *Section controls, name=SectionCtrl-1, distortion control=YES 46 | ** 47 | *Amplitude, name=Amp-1, definition=SMOOTH STEP 48 | 0., 0., , 1. 49 | ** 50 | *Material, name=IM7-8552 51 | *Density 52 | 1.57e-09, 53 | *User material, constants=5 54 | 101101, , , , , , , , 55 | *Depvar, delete=11 56 | 19, 57 | 1, CDM_d2 58 | 2, CDM_Fb1 59 | 3, CDM_Fb2 60 | 4, CDM_Fb3 61 | 5, CDM_B 62 | 6, CDM_Lc1 63 | 7, CDM_Lc2 64 | 8, CDM_Lc3 65 | 9, CDM_FIm 66 | 10, CDM_alpha 67 | 11, CDM_STATUS 68 | 12, CDM_Plas12 69 | 13, CDM_Inel12 70 | 14, CDM_FIfT 71 | 15, CDM_slide1 72 | 16, CDM_slide2 73 | 17, CDM_FIfC 74 | 18, CDM_d1T 75 | 19, CDM_d1C 76 | *Characteristic Length, definition=USER, components=3 77 | ** 78 | *Initial Conditions, Type=Solution 79 | all, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 80 | 0.d0, 0.d0, 0.d0, 1, 0.d0, 0.d0, 0.d0, 81 | 0.d0, 0.d0, 0.d0, 0.d0, 0.d0 82 | ** 83 | *Boundary 84 | pin, 1, 1 85 | pin, 2, 2 86 | pin, 3, 3 87 | piny, 2, 2 88 | 6, 1, 1 89 | ** 90 | *Filter, name=haltOnFailure, operator=Max, limit=1.0, HALT 91 | ** ---------------------------------------------------------------- 92 | *Step, name=Step-1, nlgeom=YES 93 | *Dynamic, Explicit 94 | , 95 | ** 96 | *Fixed Mass Scaling, factor=5000. 97 | ** 98 | *Dload, Amplitude=Amp-1, Constant resultant=Yes, follower=No 99 | 1, TRVEC6, , 1.0, 0.0, 0.0 100 | 1, TRVEC4, , -1.0, 0.0, 0.0 101 | 1, TRVEC6, , 0.0, 1.0, 0.0 102 | ** 103 | *Output, field, number interval=50 104 | *Node Output 105 | U, RF 106 | *Element Output 107 | S, LE, SDV 108 | ** 109 | *Output, history, frequency=1 110 | *Energy Output 111 | ALLIE, ALLKE 112 | ** 113 | *Element Output, elset=all 114 | S, LE, SDV 115 | ** 116 | *Output, history, frequency=1, filter=haltOnFailure 117 | *Element Output, elset=all 118 | SDV9 119 | ** 120 | *End Step 121 | -------------------------------------------------------------------------------- /tests/test_C3D8R_failureEnvelope_sig12sig22_expected.py: -------------------------------------------------------------------------------- 1 | parameters = { 2 | "results": [ 3 | { 4 | "type": "log_stress_at_failure_init", 5 | "step": "Step-1", 6 | "failureIndices": [ 7 | { 8 | "symbol": "SDV_CDM_FIM", 9 | "elset": "ALL", 10 | "position": "Element 1 Int Point 1" 11 | } 12 | ], 13 | "stressComponents": [ 14 | { 15 | "symbol": "S12", 16 | "elset": "ALL", 17 | "position": "Element 1 Int Point 1" 18 | }, 19 | { 20 | "symbol": "S22", 21 | "elset": "ALL", 22 | "position": "Element 1 Int Point 1" 23 | } 24 | ], 25 | "additionalIdentifiersToStore": [ 26 | { 27 | "symbol": "SDV_CDM_ALPHA", 28 | "elset": "ALL", 29 | "position": "Element 1 Int Point 1" 30 | } 31 | ] 32 | }, 33 | { 34 | "type": "max", 35 | "step": "Step-1", 36 | "identifier": { 37 | "symbol": "SDV_CDM_FIM", 38 | "elset": "ALL", 39 | "position": "Element 1 Int Point 1" 40 | }, 41 | "referenceValue": 1.0, 42 | "tolerance": 0.0 43 | } 44 | ] 45 | } 46 | -------------------------------------------------------------------------------- /tests/test_C3D8R_fatigue_matrixTension.parameters: -------------------------------------------------------------------------------- 1 | // search for the matrix crack angle alpha which corresponds to the maximum failure index?, Logical 2 | alpha_search = .TRUE. // Default value: .TRUE. 3 | // increment for which the matrix failure criterion is evaluated [degrees], Integer 4 | alpha_inc = 10 // Default value: 10 5 | 6 | // fatigue analysis step number, Integer 7 | fatigue_step = 2 8 | 9 | // fatigue loading R ratio, Double Precision 10 | fatigue_R_ratio = 0.1d0 // Default value: 0.1d0 11 | 12 | // fatigue cycles per solution increment (initial), Double Precision 13 | cycles_per_increment_init = 1.d-4 // Default value: 1.d-4 14 | // fatigue cycles per solution increment (maximum), Double Precision 15 | cycles_per_increment_max = 1.d+5 // Default value: 1.d5 16 | // fatigue cycles per solution increment (minimum), Double Precision 17 | cycles_per_increment_min = 1.d-5 // Default value: 1.d-5 18 | // Percent change to fatigue cycles per solution increment when rate of energy dissipation is out-of-range, Double Precision 19 | cycles_per_increment_mod = 0.0005d0 // Default value: 0.1d0 20 | 21 | // thresholds for fatigue damage progression per solution increment in terms of percent fracture toughness, Double precision 22 | fatigue_damage_min_threshold = 5.d-7 // Default value: 5.d-6 23 | fatigue_damage_max_threshold = 1.d-5 // Default value: 1.d-4 24 | 25 | 26 | // End of file (Do not remove me) 27 | -------------------------------------------------------------------------------- /tests/test_C3D8R_fatigue_simpleShear12.parameters: -------------------------------------------------------------------------------- 1 | // search for the matrix crack angle alpha which corresponds to the maximum failure index?, Logical 2 | alpha_search = .TRUE. // Default value: .TRUE. 3 | // increment for which the matrix failure criterion is evaluated [degrees], Integer 4 | alpha_inc = 10 // Default value: 10 5 | 6 | // fatigue analysis step number, Integer 7 | fatigue_step = 2 8 | 9 | // fatigue loading R ratio, Double Precision 10 | fatigue_R_ratio = 0.1d0 // Default value: 0.1d0 11 | 12 | // fatigue cycles per solution increment (initial), Double Precision 13 | cycles_per_increment_init = 1.d-4 // Default value: 1.d-4 14 | // fatigue cycles per solution increment (maximum), Double Precision 15 | cycles_per_increment_max = 1.d+5 // Default value: 1.d5 16 | // fatigue cycles per solution increment (minimum), Double Precision 17 | cycles_per_increment_min = 1.d-5 // Default value: 1.d-5 18 | // Percent change to fatigue cycles per solution increment when rate of energy dissipation is out-of-range, Double Precision 19 | cycles_per_increment_mod = 0.001d0 // Default value: 0.1d0 20 | 21 | // thresholds for fatigue damage progression per solution increment in terms of percent fracture toughness, Double precision 22 | fatigue_damage_min_threshold = 5.d-7 // Default value: 5.d-6 23 | fatigue_damage_max_threshold = 1.d-5 // Default value: 1.d-4 24 | 25 | 26 | // End of file (Do not remove me) 27 | -------------------------------------------------------------------------------- /tests/test_C3D8R_fatigue_simpleShear12_expected.py: -------------------------------------------------------------------------------- 1 | stress_ratio = 0.5 2 | strength = 92.3 3 | toughness = 0.788 4 | modulus = 5290.0 5 | length = 0.1 6 | 7 | delta_i = strength / (modulus / length) 8 | delta_f = 2.0 * toughness / strength 9 | delta_inflection_fatigue = delta_f - stress_ratio * (delta_f - delta_i) 10 | 11 | parameters = { 12 | "results": [ 13 | { 14 | "type": "max", 15 | "step": "Load", 16 | "identifier": 17 | { 18 | "symbol": "S12", 19 | "elset": "ALL_ELEMS", 20 | "position": "Element 1 Int Point 1" 21 | }, 22 | "referenceValue": strength * stress_ratio, 23 | "tolerance": strength * stress_ratio * 0.005 24 | }, 25 | { 26 | "type": "max", 27 | "step": "Fatigue", 28 | "identifier": 29 | { 30 | "symbol": "S12", 31 | "elset": "ALL_ELEMS", 32 | "position": "Element 1 Int Point 1" 33 | }, 34 | "referenceValue": strength * stress_ratio, 35 | "tolerance": strength * stress_ratio * 0.005 36 | }, 37 | { 38 | "type": "finalValue", 39 | "identifier": 40 | { 41 | "symbol": "SDV_CDM_alpha", 42 | "elset": "ALL_ELEMS", 43 | "position": "Element 1 Int Point 1" 44 | }, 45 | "referenceValue": 0.0, 46 | "tolerance": 0.0 47 | }, 48 | { 49 | "type": "finalValue", 50 | "identifier": 51 | { 52 | "symbol": "U1", 53 | "nset": "LOADNODE", 54 | "position": "Node 3" 55 | }, 56 | "referenceValue": delta_f, 57 | "tolerance": delta_f * 0.1 58 | }, 59 | { 60 | "type": "max", 61 | "step": "Fatigue", 62 | "identifier": 63 | { 64 | "symbol": "SDV_CDM_d2", 65 | "elset": "ALL_ELEMS", 66 | "position": "Element 1 Int Point 1" 67 | }, 68 | "referenceValue": 1.0, 69 | "tolerance": 0.0 70 | }, 71 | ] 72 | } -------------------------------------------------------------------------------- /tests/test_C3D8R_fiberCompression_BL_FN_expected.py: -------------------------------------------------------------------------------- 1 | parameters = { 2 | "results": [ 3 | { 4 | "type": "min", 5 | "step": "Step-1", 6 | "identifier": { 7 | "symbol": "S11", 8 | "elset": "ALL", 9 | "position": "Element 1 Int Point 1" 10 | }, 11 | "referenceValue": -1200.1, 12 | "tolerance": 20.0 13 | }, 14 | { 15 | "type": "xy_infl_pt", 16 | "step": "Step-1", 17 | "identifier": [ 18 | { # x 19 | "symbol": "U1", 20 | "nset": "LOADAPP" 21 | }, 22 | { # y 23 | "symbol": "S11", 24 | "elset": "ALL", 25 | "position": "Element 1 Int Point 1" 26 | } 27 | ], 28 | "window": [-0.06, -0.03], 29 | "referenceValue": [-0.03958, -240.02], 30 | "tolerance": [0.0025, 40] 31 | }, 32 | { 33 | "type": "disp_at_zero_y", 34 | "step": "Step-1", 35 | "identifier": [ 36 | { # x 37 | "symbol": "U1", 38 | "nset": "LOADAPP" 39 | }, 40 | { # y 41 | "symbol": "S11", 42 | "elset": "ALL", 43 | "position": "Element 1 Int Point 1" 44 | } 45 | ], 46 | "window": [-0.35, -0.1], # [min, max] 47 | "zeroTol": 0.00623, # Defines how close to zero the y value needs to be 48 | "referenceValue": -0.1979, 49 | "tolerance": 0.075 50 | }, 51 | { 52 | "type": "max", 53 | "step": "Step-1", 54 | "identifier": { 55 | "symbol": "SDV_CDM_D2", 56 | "elset": "ALL", 57 | "position": "Element 1 Int Point 1" 58 | }, 59 | "referenceValue": 0.0, 60 | "tolerance": 0.0 61 | }, 62 | { 63 | "type": "continuous", 64 | "identifier": { 65 | "symbol": "S11", 66 | "elset": "ALL", 67 | "position": "Element 1 Int Point 1" 68 | }, 69 | "referenceValue": 0.0, 70 | "tolerance": 0.8 71 | } 72 | ] 73 | } 74 | -------------------------------------------------------------------------------- /tests/test_C3D8R_fiberCompression_BL_expected.py: -------------------------------------------------------------------------------- 1 | parameters = { 2 | "results": [ 3 | { 4 | "type": "min", 5 | "step": "Step-1", 6 | "identifier": { 7 | "symbol": "S11", 8 | "elset": "ALL", 9 | "position": "Element 1 Int Point 1" 10 | }, 11 | "referenceValue": -1200.1, 12 | "tolerance": 20.0 13 | }, 14 | { 15 | "type": "xy_infl_pt", 16 | "step": "Step-1", 17 | "identifier": [ 18 | { # x 19 | "symbol": "U1", 20 | "nset": "LOADAPP" 21 | }, 22 | { # y 23 | "symbol": "S11", 24 | "elset": "ALL", 25 | "position": "Element 1 Int Point 1" 26 | } 27 | ], 28 | "window": [-0.06, -0.03], 29 | "referenceValue": [-0.03958, -240.02], 30 | "tolerance": [0.0025, 40] 31 | }, 32 | { 33 | "type": "disp_at_zero_y", 34 | "step": "Step-1", 35 | "identifier": [ 36 | { # x 37 | "symbol": "U1", 38 | "nset": "LOADAPP" 39 | }, 40 | { # y 41 | "symbol": "S11", 42 | "elset": "ALL", 43 | "position": "Element 1 Int Point 1" 44 | } 45 | ], 46 | "window": [-0.35, -0.1], # [min, max] 47 | "zeroTol": 0.00623, # Defines how close to zero the y value needs to be 48 | "referenceValue": -0.1979, 49 | "tolerance": 0.075 50 | }, 51 | { 52 | "type": "max", 53 | "step": "Step-1", 54 | "identifier": { 55 | "symbol": "SDV_CDM_D2", 56 | "elset": "ALL", 57 | "position": "Element 1 Int Point 1" 58 | }, 59 | "referenceValue": 0.0, 60 | "tolerance": 0.0 61 | }, 62 | { 63 | "type": "continuous", 64 | "identifier": { 65 | "symbol": "S11", 66 | "elset": "ALL", 67 | "position": "Element 1 Int Point 1" 68 | }, 69 | "referenceValue": 0.0, 70 | "tolerance": 0.8 71 | } 72 | ] 73 | } 74 | -------------------------------------------------------------------------------- /tests/test_C3D8R_fiberCompression_FKT_12_FF.inp: -------------------------------------------------------------------------------- 1 | *Include, input=test_C3D8R_fiberCompression_FKT_12.inp 2 | -------------------------------------------------------------------------------- /tests/test_C3D8R_fiberCompression_FKT_12_FF_expected.py: -------------------------------------------------------------------------------- 1 | # Variable results 2 | crushStress=-9.55 3 | 4 | parameters = { 5 | "results": [ 6 | { 7 | "type": "min", 8 | "step": "Step-1", 9 | "identifier": { 10 | "symbol": "RF1", 11 | "nset": "LOADAPP", 12 | "position": "Node 4" 13 | }, 14 | "referenceValue": -71, 15 | "tolerance": 1.0 16 | }, 17 | { 18 | "type": "max", 19 | "step": "Step-1", 20 | "identifier": { 21 | "symbol": "SDV_CDM_PLAS12", 22 | "elset": "ALL", 23 | "position": "Element 1 Int Point 1" 24 | }, 25 | "referenceValue": 0.137, 26 | "tolerance": 0.01 27 | } 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /tests/test_C3D8R_fiberCompression_FKT_12_FF_negphi0_expected.py: -------------------------------------------------------------------------------- 1 | # Variable results 2 | crushStress=-9.55 3 | 4 | parameters = { 5 | "results": [ 6 | { 7 | "type": "min", 8 | "step": "Step-1", 9 | "identifier": { 10 | "symbol": "RF1", 11 | "nset": "LOADAPP", 12 | "position": "Node 4" 13 | }, 14 | "referenceValue": -71, 15 | "tolerance": 1.0 16 | }, 17 | { 18 | "type": "min", 19 | "step": "Step-1", 20 | "identifier": { 21 | "symbol": "SDV_CDM_PLAS12", 22 | "elset": "ALL", 23 | "position": "Element 1 Int Point 1" 24 | }, 25 | "referenceValue": -0.137, 26 | "tolerance": 0.01 27 | } 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /tests/test_C3D8R_fiberCompression_FKT_12_FN_expected.py: -------------------------------------------------------------------------------- 1 | # Variable results 2 | crushStress=-9.55 3 | 4 | parameters = { 5 | "results": [ 6 | { 7 | "type": "min", 8 | "step": "Step-1", 9 | "identifier": { 10 | "symbol": "RF1", 11 | "nset": "LOADAPP", 12 | "position": "Node 4" 13 | }, 14 | "referenceValue": -36.003, 15 | "tolerance": 0.72 # 2% 16 | }, 17 | { 18 | "type": "finalValue", 19 | "step": "Step-1", 20 | "identifier": { 21 | "symbol": "RF1", 22 | "nset": "LOADAPP", 23 | "position": "Node 4" 24 | }, 25 | "referenceValue": crushStress, 26 | "tolerance": 0.02*abs(crushStress) # 2% 27 | }, 28 | { 29 | "type": "x_at_peak_in_xy", 30 | "step": "Step-1", 31 | "identifier": [ 32 | { # x 33 | "symbol": "U1", 34 | "nset": "LOADAPP" 35 | }, 36 | { # y 37 | "symbol": "RF1", 38 | "nset": "LOADAPP" 39 | } 40 | ], 41 | "referenceValue": -0.00169, 42 | "tolerance": 0.00001 43 | } 44 | ] 45 | } -------------------------------------------------------------------------------- /tests/test_C3D8R_fiberCompression_FKT_12_expected.py: -------------------------------------------------------------------------------- 1 | # Variable results 2 | crushStress=-9.55 3 | 4 | parameters = { 5 | "results": [ 6 | { 7 | "type": "min", 8 | "step": "Step-1", 9 | "identifier": { 10 | "symbol": "RF1", 11 | "nset": "LOADAPP", 12 | "position": "Node 4" 13 | }, 14 | "referenceValue": -36.003, 15 | "tolerance": 0.72 # 2% 16 | }, 17 | { 18 | "type": "finalValue", 19 | "step": "Step-1", 20 | "identifier": { 21 | "symbol": "RF1", 22 | "nset": "LOADAPP", 23 | "position": "Node 4" 24 | }, 25 | "referenceValue": crushStress, 26 | "tolerance": 0.02*abs(crushStress) # 2% 27 | }, 28 | { 29 | "type": "x_at_peak_in_xy", 30 | "step": "Step-1", 31 | "identifier": [ 32 | { # x 33 | "symbol": "U1", 34 | "nset": "LOADAPP" 35 | }, 36 | { # y 37 | "symbol": "RF1", 38 | "nset": "LOADAPP" 39 | } 40 | ], 41 | "referenceValue": -0.00157, 42 | "tolerance": 0.0001 43 | } 44 | ] 45 | } 46 | -------------------------------------------------------------------------------- /tests/test_C3D8R_fiberCompression_FKT_13_FF.inp: -------------------------------------------------------------------------------- 1 | *Include, input=test_C3D8R_fiberCompression_FKT_13.inp 2 | -------------------------------------------------------------------------------- /tests/test_C3D8R_fiberCompression_FKT_13_FF_expected.py: -------------------------------------------------------------------------------- 1 | # Variable results 2 | crushStress=-9.55 3 | 4 | parameters = { 5 | "results": [ 6 | { 7 | "type": "min", 8 | "step": "Step-1", 9 | "identifier": { 10 | "symbol": "RF1", 11 | "nset": "LOADAPP", 12 | "position": "Node 4" 13 | }, 14 | "referenceValue": -71, 15 | "tolerance": 1.0 16 | }, 17 | { 18 | "type": "max", 19 | "step": "Step-1", 20 | "identifier": { 21 | "symbol": "SDV_CDM_PLAS13", 22 | "elset": "ALL", 23 | "position": "Element 1 Int Point 1" 24 | }, 25 | "referenceValue": 0.137, 26 | "tolerance": 0.01 27 | } 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /tests/test_C3D8R_fiberCompression_FKT_13_FN_expected.py: -------------------------------------------------------------------------------- 1 | # Variable results 2 | crushStress=-9.55 3 | 4 | parameters = { 5 | "results": [ 6 | { 7 | "type": "min", 8 | "step": "Step-1", 9 | "identifier": { 10 | "symbol": "RF1", 11 | "nset": "LOADAPP", 12 | "position": "Node 4" 13 | }, 14 | "referenceValue": -36.003, 15 | "tolerance": 0.72 # 2% 16 | }, 17 | { 18 | "type": "finalValue", 19 | "step": "Step-1", 20 | "identifier": { 21 | "symbol": "RF1", 22 | "nset": "LOADAPP", 23 | "position": "Node 4" 24 | }, 25 | "referenceValue": crushStress, 26 | "tolerance": 0.02*abs(crushStress) # 2% 27 | }, 28 | { 29 | "type": "x_at_peak_in_xy", 30 | "step": "Step-1", 31 | "identifier": [ 32 | { # x 33 | "symbol": "U1", 34 | "nset": "LOADAPP" 35 | }, 36 | { # y 37 | "symbol": "RF1", 38 | "nset": "LOADAPP" 39 | } 40 | ], 41 | "referenceValue": -0.00169, 42 | "tolerance": 0.00001 43 | } 44 | ] 45 | } -------------------------------------------------------------------------------- /tests/test_C3D8R_fiberCompression_FKT_13_expected.py: -------------------------------------------------------------------------------- 1 | # Variable results 2 | crushStress=-9.55 3 | 4 | parameters = { 5 | "results": [ 6 | { 7 | "type": "min", 8 | "step": "Step-1", 9 | "identifier": { 10 | "symbol": "RF1", 11 | "nset": "LOADAPP", 12 | "position": "Node 4" 13 | }, 14 | "referenceValue": -36.003, 15 | "tolerance": 0.72 # 2% 16 | }, 17 | { 18 | "type": "finalValue", 19 | "step": "Step-1", 20 | "identifier": { 21 | "symbol": "RF1", 22 | "nset": "LOADAPP", 23 | "position": "Node 4" 24 | }, 25 | "referenceValue": crushStress, 26 | "tolerance": 0.02*abs(crushStress) # 2% 27 | }, 28 | { 29 | "type": "x_at_peak_in_xy", 30 | "step": "Step-1", 31 | "identifier": [ 32 | { # x 33 | "symbol": "U1", 34 | "nset": "LOADAPP" 35 | }, 36 | { # y 37 | "symbol": "RF1", 38 | "nset": "LOADAPP" 39 | } 40 | ], 41 | "referenceValue": -0.00157, 42 | "tolerance": 0.0001 43 | } 44 | ] 45 | } 46 | -------------------------------------------------------------------------------- /tests/test_C3D8R_fiberCompression_FKT_3D_expected.py: -------------------------------------------------------------------------------- 1 | rf1 = -1*1200.1*(0.15*0.15) 2 | crushStress = -7.9 3 | dispatpeakload = -0.001326 4 | 5 | parameters = { 6 | "results": [ 7 | { 8 | "type": "min", 9 | "step": "Step-1", 10 | "identifier": { 11 | "symbol": "RF1", 12 | "nset": "LOADAPP", 13 | "position": "Node 4" 14 | }, 15 | "referenceValue": rf1, 16 | "tolerance": 0.02*abs(rf1) # 2% 17 | }, 18 | { 19 | "type": "finalValue", 20 | "step": "Step-1", 21 | "identifier": { 22 | "symbol": "SDV_CDM_GAMMA_12", 23 | "elset": "ALL", 24 | "position": "Element 1 Int Point 1" 25 | }, 26 | "referenceValue": 0.325, 27 | "tolerance": 0.003 28 | }, 29 | { 30 | "type": "finalValue", 31 | "step": "Step-1", 32 | "identifier": { 33 | "symbol": "RF1", 34 | "nset": "LOADAPP", 35 | "position": "Node 4" 36 | }, 37 | "referenceValue": crushStress, 38 | "tolerance": 0.02*abs(crushStress) # 2% 39 | }, 40 | { 41 | "type": "x_at_peak_in_xy", 42 | "step": "Step-1", 43 | "identifier": [ 44 | { # x 45 | "symbol": "U1", 46 | "nset": "LOADAPP" 47 | }, 48 | { # y 49 | "symbol": "RF1", 50 | "nset": "LOADAPP" 51 | } 52 | ], 53 | "referenceValue": dispatpeakload, 54 | "tolerance": 0.0001 55 | } 56 | ] 57 | } 58 | -------------------------------------------------------------------------------- /tests/test_C3D8R_fiberCompression_FKT_3D_pert_expected.py: -------------------------------------------------------------------------------- 1 | rf1 = -1*1200.1*(0.15*0.15) 2 | crushStress = -7.9 3 | dispatpeakload = -0.001326 4 | 5 | parameters = { 6 | "results": [ 7 | { 8 | "type": "min", 9 | "step": "Step-1", 10 | "identifier": { 11 | "symbol": "RF1", 12 | "nset": "LOADAPP", 13 | "position": "Node 4" 14 | }, 15 | "referenceValue": rf1, 16 | "tolerance": 0.02*abs(rf1) # 2% 17 | }, 18 | { 19 | "type": "finalValue", 20 | "step": "Step-1", 21 | "identifier": { 22 | "symbol": "SDV_CDM_GAMMA_13", 23 | "elset": "ALL", 24 | "position": "Element 1 Int Point 1" 25 | }, 26 | "referenceValue": 0.325, 27 | "tolerance": 0.003 28 | }, 29 | { 30 | "type": "finalValue", 31 | "step": "Step-1", 32 | "identifier": { 33 | "symbol": "RF1", 34 | "nset": "LOADAPP", 35 | "position": "Node 4" 36 | }, 37 | "referenceValue": crushStress, 38 | "tolerance": 0.02*abs(crushStress) # 2% 39 | }, 40 | { 41 | "type": "x_at_peak_in_xy", 42 | "step": "Step-1", 43 | "identifier": [ 44 | { # x 45 | "symbol": "U1", 46 | "nset": "LOADAPP" 47 | }, 48 | { # y 49 | "symbol": "RF1", 50 | "nset": "LOADAPP" 51 | } 52 | ], 53 | "referenceValue": dispatpeakload, 54 | "tolerance": 0.0001 55 | } 56 | ] 57 | } 58 | -------------------------------------------------------------------------------- /tests/test_C3D8R_fiberCompression_FKT_3D_spring_ip_expected.py: -------------------------------------------------------------------------------- 1 | rf1 = -1*1200.1*(0.15*0.15) 2 | crushStress = -7.9 3 | dispatpeakload = -0.001326 4 | 5 | parameters = { 6 | "results": [ 7 | { 8 | "type": "min", 9 | "step": "Step-1", 10 | "identifier": { 11 | "symbol": "RF1", 12 | "nset": "LOADAPP", 13 | "position": "Node 4" 14 | }, 15 | "referenceValue": rf1, 16 | "tolerance": 0.02*abs(rf1) # 2% 17 | }, 18 | { 19 | "type": "finalValue", 20 | "step": "Step-1", 21 | "identifier": { 22 | "symbol": "SDV_CDM_GAMMA_13", 23 | "elset": "ALL", 24 | "position": "Element 1 Int Point 1" 25 | }, 26 | "referenceValue": 0.325, 27 | "tolerance": 0.003 28 | }, 29 | { 30 | "type": "finalValue", 31 | "step": "Step-1", 32 | "identifier": { 33 | "symbol": "RF1", 34 | "nset": "LOADAPP", 35 | "position": "Node 4" 36 | }, 37 | "referenceValue": crushStress, 38 | "tolerance": 0.02*abs(crushStress) # 2% 39 | }, 40 | { 41 | "type": "x_at_peak_in_xy", 42 | "step": "Step-1", 43 | "identifier": [ 44 | { # x 45 | "symbol": "U1", 46 | "nset": "LOADAPP" 47 | }, 48 | { # y 49 | "symbol": "RF1", 50 | "nset": "LOADAPP" 51 | } 52 | ], 53 | "referenceValue": dispatpeakload, 54 | "tolerance": 0.0001 55 | } 56 | ] 57 | } 58 | -------------------------------------------------------------------------------- /tests/test_C3D8R_fiberCompression_FKT_3D_spring_oop_expected.py: -------------------------------------------------------------------------------- 1 | rf1 = -1*1200.1*(0.15*0.15) 2 | crushStress = -7.9 3 | dispatpeakload = -0.001326 4 | 5 | parameters = { 6 | "results": [ 7 | { 8 | "type": "min", 9 | "step": "Step-1", 10 | "identifier": { 11 | "symbol": "RF1", 12 | "nset": "LOADAPP", 13 | "position": "Node 4" 14 | }, 15 | "referenceValue": rf1, 16 | "tolerance": 0.02*abs(rf1) # 2% 17 | }, 18 | { 19 | "type": "finalValue", 20 | "step": "Step-1", 21 | "identifier": { 22 | "symbol": "SDV_CDM_GAMMA_12", 23 | "elset": "ALL", 24 | "position": "Element 1 Int Point 1" 25 | }, 26 | "referenceValue": 0.325, 27 | "tolerance": 0.003 28 | }, 29 | { 30 | "type": "finalValue", 31 | "step": "Step-1", 32 | "identifier": { 33 | "symbol": "RF1", 34 | "nset": "LOADAPP", 35 | "position": "Node 4" 36 | }, 37 | "referenceValue": crushStress, 38 | "tolerance": 0.02*abs(crushStress) # 2% 39 | }, 40 | { 41 | "type": "x_at_peak_in_xy", 42 | "step": "Step-1", 43 | "identifier": [ 44 | { # x 45 | "symbol": "U1", 46 | "nset": "LOADAPP" 47 | }, 48 | { # y 49 | "symbol": "RF1", 50 | "nset": "LOADAPP" 51 | } 52 | ], 53 | "referenceValue": dispatpeakload, 54 | "tolerance": 0.0001 55 | } 56 | ] 57 | } 58 | -------------------------------------------------------------------------------- /tests/test_C3D8R_fiberLoadReversal_FN_expected.py: -------------------------------------------------------------------------------- 1 | parameters = { 2 | "results": [ 3 | { 4 | "type": "continuous", 5 | "identifier": { 6 | "symbol": "S11", 7 | "elset": "ALL", 8 | "position": "Element 1 Int Point 1" 9 | }, 10 | "referenceValue": 0.0, 11 | "tolerance": 0.5 12 | }, 13 | { 14 | "type": "max", 15 | "step": "Step-1", 16 | "identifier": { 17 | "symbol": "S11", 18 | "elset": "ALL", 19 | "position": "Element 1 Int Point 1" 20 | }, 21 | "referenceValue": 2326.2, 22 | "tolerance": 60.0 23 | }, 24 | { 25 | "type": "min", 26 | "step": "Step-3", 27 | "identifier": { 28 | "symbol": "S11", 29 | "elset": "ALL", 30 | "position": "Element 1 Int Point 1" 31 | }, 32 | "referenceValue": -1200.1, 33 | "tolerance": 20.0 34 | }, 35 | { 36 | "type": "max", 37 | "step": "Step-5", 38 | "identifier": { 39 | "symbol": "S11", 40 | "elset": "ALL", 41 | "position": "Element 1 Int Point 1" 42 | }, 43 | "referenceValue": 1045, 44 | "tolerance": 5.0 45 | }, 46 | { 47 | "type": "min", 48 | "step": "Step-7", 49 | "identifier": { 50 | "symbol": "S11", 51 | "elset": "ALL", 52 | "position": "Element 1 Int Point 1" 53 | }, 54 | "referenceValue": -490, 55 | "tolerance": 5.0 56 | }, 57 | { 58 | "type": "max", 59 | "step": "Step-9", 60 | "identifier": { 61 | "symbol": "S11", 62 | "elset": "ALL", 63 | "position": "Element 1 Int Point 1" 64 | }, 65 | "referenceValue": 455, 66 | "tolerance": 5.0 67 | }, 68 | { 69 | "type": "disp_at_zero_y", 70 | "step": "Step-9", 71 | "identifier": [ 72 | { # x 73 | "symbol": "U1", 74 | "nset": "LOADAPP" 75 | }, 76 | { # y 77 | "symbol": "S11", 78 | "elset": "ALL", 79 | "position": "Element 1 Int Point 1" 80 | } 81 | ], 82 | "window": [0.15, 0.45], # [min, max] 83 | "zeroTol": 0.00623, # Defines how close to zero the y value needs to be 84 | "referenceValue": 0.25, 85 | "tolerance": 0.055 86 | }, 87 | { 88 | "type": "max", 89 | "step": "Step-9", 90 | "identifier": { 91 | "symbol": "SDV_CDM_D2", 92 | "elset": "ALL", 93 | "position": "Element 1 Int Point 1" 94 | }, 95 | "referenceValue": 0.0, 96 | "tolerance": 0.0 97 | } 98 | ] 99 | } 100 | -------------------------------------------------------------------------------- /tests/test_C3D8R_fiberLoadReversal_expected.py: -------------------------------------------------------------------------------- 1 | parameters = { 2 | "results": [ 3 | { 4 | "type": "continuous", 5 | "identifier": { 6 | "symbol": "S11", 7 | "elset": "ALL", 8 | "position": "Element 1 Int Point 1" 9 | }, 10 | "referenceValue": 0.0, 11 | "tolerance": 0.5 12 | }, 13 | { 14 | "type": "max", 15 | "step": "Step-1", 16 | "identifier": { 17 | "symbol": "S11", 18 | "elset": "ALL", 19 | "position": "Element 1 Int Point 1" 20 | }, 21 | "referenceValue": 2326.2, 22 | "tolerance": 60.0 23 | }, 24 | { 25 | "type": "min", 26 | "step": "Step-3", 27 | "identifier": { 28 | "symbol": "S11", 29 | "elset": "ALL", 30 | "position": "Element 1 Int Point 1" 31 | }, 32 | "referenceValue": -1200.1, 33 | "tolerance": 20.0 34 | }, 35 | { 36 | "type": "max", 37 | "step": "Step-5", 38 | "identifier": { 39 | "symbol": "S11", 40 | "elset": "ALL", 41 | "position": "Element 1 Int Point 1" 42 | }, 43 | "referenceValue": 925, 44 | "tolerance": 5.0 45 | }, 46 | { 47 | "type": "min", 48 | "step": "Step-7", 49 | "identifier": { 50 | "symbol": "S11", 51 | "elset": "ALL", 52 | "position": "Element 1 Int Point 1" 53 | }, 54 | "referenceValue": -490, 55 | "tolerance": 5.0 56 | }, 57 | { 58 | "type": "max", 59 | "step": "Step-9", 60 | "identifier": { 61 | "symbol": "S11", 62 | "elset": "ALL", 63 | "position": "Element 1 Int Point 1" 64 | }, 65 | "referenceValue": 430, 66 | "tolerance": 5.0 67 | }, 68 | { 69 | "type": "disp_at_zero_y", 70 | "step": "Step-9", 71 | "identifier": [ 72 | { # x 73 | "symbol": "U1", 74 | "nset": "LOADAPP" 75 | }, 76 | { # y 77 | "symbol": "S11", 78 | "elset": "ALL", 79 | "position": "Element 1 Int Point 1" 80 | } 81 | ], 82 | "window": [0.15, 0.45], # [min, max] 83 | "zeroTol": 0.00623, # Defines how close to zero the y value needs to be 84 | "referenceValue": 0.25, 85 | "tolerance": 0.055 86 | }, 87 | { 88 | "type": "max", 89 | "step": "Step-9", 90 | "identifier": { 91 | "symbol": "SDV_CDM_D2", 92 | "elset": "ALL", 93 | "position": "Element 1 Int Point 1" 94 | }, 95 | "referenceValue": 0.0, 96 | "tolerance": 0.0 97 | } 98 | ] 99 | } 100 | -------------------------------------------------------------------------------- /tests/test_C3D8R_fiberTension_FN_expected.py: -------------------------------------------------------------------------------- 1 | parameters = { 2 | "results": [ 3 | { 4 | "type": "max", 5 | "identifier": 6 | { 7 | "symbol": "S11", 8 | "elset": "ALL", 9 | "position": "Element 1 Int Point 1" 10 | }, 11 | "referenceValue": 2326.2, 12 | "tolerance": 60.0 13 | }, 14 | { 15 | "type": "xy_infl_pt", 16 | "identifier": [ 17 | { # x 18 | "symbol": "U1", 19 | "nset": "LOADAPP" 20 | }, 21 | { # y 22 | "symbol": "S11", 23 | "elset": "ALL", 24 | "position": "Element 1 Int Point 1" 25 | } 26 | ], 27 | "window": [0.05, 0.06], 28 | "referenceValue": [0.05730, 465.24], 29 | "tolerance": [0.003, 65] 30 | }, 31 | { 32 | "type": "disp_at_zero_y", 33 | "identifier": [ 34 | { # x 35 | "symbol": "U1", 36 | "nset": "LOADAPP" 37 | }, 38 | { # y 39 | "symbol": "S11", 40 | "elset": "ALL", 41 | "position": "Element 1 Int Point 1" 42 | } 43 | ], 44 | "window": [0.15, 0.4], # [min, max] 45 | "zeroTol": 0.00623, # Defines how close to zero the y value needs to be 46 | "referenceValue": 0.2865, 47 | "tolerance": 0.055 48 | }, 49 | { 50 | "type": "max", 51 | "identifier": 52 | { 53 | "symbol": "SDV_CDM_d2", 54 | "elset": "ALL", 55 | "position": "Element 1 Int Point 1" 56 | }, 57 | "referenceValue": 0.0, 58 | "tolerance": 0.0 59 | }, 60 | { 61 | "type": "continuous", 62 | "identifier": 63 | { 64 | "symbol": "S11", 65 | "elset": "ALL", 66 | "position": "Element 1 Int Point 1" 67 | }, 68 | "referenceValue": 0.0, 69 | "tolerance": 0.2 70 | } 71 | ] 72 | } 73 | -------------------------------------------------------------------------------- /tests/test_C3D8R_matrixCompression.inp: -------------------------------------------------------------------------------- 1 | *Heading 2 | Single element test for matrix compression 3 | ** 4 | *Parameter 5 | l = 0.15 6 | t = 0.1 7 | disp = l*0.25 8 | stepDuration = 0.1 9 | ** 10 | *Node 11 | 1, , , 12 | 2, , 0., 13 | 3, , , 0. 14 | 4, , 0., 0. 15 | 5, 0., , 16 | 6, 0., 0., 17 | 7, 0., , 0. 18 | 8, 0., 0., 0. 19 | *Element, type=C3D8R 20 | 1, 3, 4, 2, 1, 7, 8, 6, 5 21 | *Nset, nset=loadApp 22 | 7, 23 | *Nset, nset=loadFollowers 24 | 1, 3, 5 25 | *Nset, nset=top 26 | 1, 3, 5, 7 27 | *Nset, nset=bot 28 | 2, 4, 6, 8 29 | *Nset, nset=X- 30 | 5, 6, 7, 8 31 | *Nset, nset=all, generate 32 | 1, 8, 1 33 | *Elset, elset=all 34 | 1, 35 | *Orientation, name=Ori-1 36 | 1., 0., 0., 0., 1., 0. 37 | 3, 0. 38 | ** Section: Section-1 39 | *Solid Section, elset=all, orientation=Ori-1, material=IM7-8552, controls=SectionCtrl-1 40 | , 41 | ** 42 | *Equation 43 | 2 44 | loadFollowers, 2, -1., loadApp, 2, 1. 45 | ** 46 | *Equation 47 | 4 48 | 2, 3, 1., 1, 3, -1., 3, 3, 1., 4, 3, -1. 49 | *Equation 50 | 4 51 | 6, 3, 1., 5, 3, -1., 7, 3, 1., 8, 3, -1. 52 | *Equation 53 | 2 54 | 3, 3, 1.,7, 3, -1. 55 | *Equation 56 | 2 57 | 1, 1, 1.0, 2, 1, -1.0 58 | 2 59 | 2, 1, 1.0, 3, 1, -1.0 60 | 2 61 | 3, 1, 1.0, 4, 1, -1.0 62 | ** 63 | *Section controls, name=SectionCtrl-1, distortion control=No, element deletion=Yes 64 | ** 65 | *Amplitude, name=Amp-1, definition=SMOOTH STEP 66 | 0., 0., , 1. 67 | ** 68 | *Material, name=IM7-8552 69 | *Density 70 | 1.57e-09, 71 | *User material, constants=1 72 | 100000, 73 | *Depvar 74 | 19, 75 | 1, CDM_d2 76 | 2, CDM_Fb1 77 | 3, CDM_Fb2 78 | 4, CDM_Fb3 79 | 5, CDM_B 80 | 6, CDM_Lc1 81 | 7, CDM_Lc2 82 | 8, CDM_Lc3 83 | 9, CDM_FIm 84 | 10, CDM_alpha 85 | 11, CDM_STATUS 86 | 12, CDM_Plas12 87 | 13, CDM_Inel12 88 | 14, CDM_FIfT 89 | 15, CDM_slide1 90 | 16, CDM_slide2 91 | 17, CDM_FIfC 92 | 18, CDM_d1T 93 | 19, CDM_d1C 94 | *Characteristic Length, definition=USER, components=3 95 | *Damping, alpha=2.d+6 96 | ** 97 | ** INITIAL CONDITIONS 98 | ** 99 | *Initial Conditions, Type=Solution 100 | all, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 101 | 0.d0, 0.d0, 0.d0, 1, 0.d0, 0.d0, 0.d0, 102 | 0.d0, 0.d0, 0.d0, 0.d0, 0.d0 103 | ** 104 | ** Output filter 105 | ** 106 | *Filter, name=haltOnFailure, operator=Max, limit=1.0, HALT 107 | ** ---------------------------------------------------------------- 108 | *Step, name=Step-1, nlgeom=YES 109 | *Dynamic, Explicit 110 | , 111 | ** 112 | *Variable Mass Scaling, type=Below Min, dt=1.d-7, frequency=1 113 | ** 114 | *Boundary, amplitude=Amp-1 115 | loadApp, 2, 2, - 116 | X-, 1, 1 117 | bot, 2, 2 118 | ** 119 | *Output, field, number interval=100 120 | *Node Output 121 | U, RF 122 | *Element Output 123 | S, LE, SDV 124 | ** 125 | *Output, history, frequency=1, filter=haltOnFailure 126 | *Element Output, elset=all 127 | SDV1 128 | ** 129 | *Output, history, frequency=1 130 | *Energy Output 131 | ALLIE, ALLSE, ALLKE, ALLPD, ALLVD, ALLAE 132 | *Node Output, nset=loadApp 133 | RF2, U2 134 | *Element Output, elset=all 135 | S22, LE22, SDV 136 | *End Step 137 | -------------------------------------------------------------------------------- /tests/test_C3D8R_matrixCompression.parameters: -------------------------------------------------------------------------------- 1 | alpha_inc = 1 // Default value: 10 -------------------------------------------------------------------------------- /tests/test_C3D8R_matrixCompression_expected.py: -------------------------------------------------------------------------------- 1 | YC = 199.8 # matrix compression strength 2 | GSL = 0.788 3 | length = 0.15 4 | thickness = 0.1 5 | 6 | parameters = { 7 | "results": [ 8 | { 9 | "type": "min", 10 | "identifier": 11 | { 12 | "symbol": "S22", 13 | "elset": "ALL", 14 | "position": "Element 1 Int Point 1" 15 | }, 16 | "referenceValue": -YC, 17 | "tolerance": YC * 0.005 18 | }, 19 | { 20 | "type": "max", 21 | "identifier": 22 | { 23 | "symbol": "SDV_CDM_d2", 24 | "elset": "ALL", 25 | "position": "Element 1 Int Point 1" 26 | }, 27 | "referenceValue": 1.0, 28 | "tolerance": 0.0 29 | }, 30 | { 31 | "type": "max", 32 | "identifier": 33 | { 34 | "symbol": "SDV_CDM_d1T", 35 | "elset": "ALL", 36 | "position": "Element 1 Int Point 1" 37 | }, 38 | "referenceValue": 0.0, 39 | "tolerance": 0.0 40 | }, 41 | { 42 | "type": "max", 43 | "identifier": 44 | { 45 | "symbol": "SDV_CDM_d1C", 46 | "elset": "ALL", 47 | "position": "Element 1 Int Point 1" 48 | }, 49 | "referenceValue": 0.0, 50 | "tolerance": 0.0 51 | }, 52 | { 53 | "type": "finalValue", 54 | "identifier": 55 | { 56 | "symbol": "SDV_CDM_alpha", 57 | "elset": "ALL", 58 | "position": "Element 1 Int Point 1" 59 | }, 60 | "referenceValue": 53.0, 61 | "tolerance": 0.4 62 | }, 63 | { 64 | "type": "max", 65 | "identifier": "Plastic dissipation: ALLPD for Whole Model", 66 | "referenceValue": GSL * (length * thickness), # Unrecoverable energy dissipation from fracture * fracture area: GSL*LC1*LC3 67 | "tolerance": GSL * (length * thickness) * 0.01 68 | }, 69 | { 70 | "type": "continuous", 71 | "identifier": 72 | { 73 | "symbol": "S22", 74 | "elset": "ALL", 75 | "position": "Element 1 Int Point 1" 76 | }, 77 | "referenceValue": 0.0, 78 | "tolerance": 2.0 79 | } 80 | ] 81 | } 82 | -------------------------------------------------------------------------------- /tests/test_C3D8R_matrixCompression_friction.inp: -------------------------------------------------------------------------------- 1 | *Heading 2 | Single element test for matrix compression with friction 3 | ** 4 | *Parameter 5 | l = 0.15 6 | t = 0.1 7 | disp = l*0.25 8 | stepDuration = 0.1 9 | ** 10 | *Node 11 | 1, , , 12 | 2, , 0., 13 | 3, , , 0. 14 | 4, , 0., 0. 15 | 5, 0., , 16 | 6, 0., 0., 17 | 7, 0., , 0. 18 | 8, 0., 0., 0. 19 | *Element, type=C3D8R 20 | 1, 3, 4, 2, 1, 7, 8, 6, 5 21 | *Nset, nset=loadApp 22 | 7, 23 | *Nset, nset=loadFollowers 24 | 1, 3, 5 25 | *Nset, nset=top 26 | 1, 3, 5, 7 27 | *Nset, nset=bot 28 | 2, 4, 6, 8 29 | *Nset, nset=X- 30 | 5, 6, 7, 8 31 | *Nset, nset=all, generate 32 | 1, 8, 1 33 | *Elset, elset=all 34 | 1, 35 | *Orientation, name=Ori-1 36 | 1., 0., 0., 0., 1., 0. 37 | 3, 0. 38 | ** Section: Section-1 39 | *Solid Section, elset=all, orientation=Ori-1, material=IM7-8552, controls=SectionCtrl-1 40 | , 41 | ** 42 | *Equation 43 | 2 44 | loadFollowers, 2, -1., loadApp, 2, 1. 45 | ** 46 | *Equation 47 | 4 48 | 2, 3, 1., 1, 3, -1., 3, 3, 1., 4, 3, -1. 49 | *Equation 50 | 4 51 | 6, 3, 1., 5, 3, -1., 7, 3, 1., 8, 3, -1. 52 | *Equation 53 | 2 54 | 3, 3, 1.,7, 3, -1. 55 | *Equation 56 | 2 57 | 1, 1, 1.0, 2, 1, -1.0 58 | 2 59 | 2, 1, 1.0, 3, 1, -1.0 60 | 2 61 | 3, 1, 1.0, 4, 1, -1.0 62 | ** 63 | *Section controls, name=SectionCtrl-1, distortion control=No, element deletion=Yes 64 | ** 65 | *Amplitude, name=Amp-1, definition=SMOOTH STEP 66 | 0., 0., , 1. 67 | ** 68 | *Material, name=IM7-8552 69 | *Density 70 | 1.57e-09, 71 | *User material, constants=1 72 | 100001, 73 | *Depvar 74 | 19, 75 | 1, CDM_d2 76 | 2, CDM_Fb1 77 | 3, CDM_Fb2 78 | 4, CDM_Fb3 79 | 5, CDM_B 80 | 6, CDM_Lc1 81 | 7, CDM_Lc2 82 | 8, CDM_Lc3 83 | 9, CDM_FIm 84 | 10, CDM_alpha 85 | 11, CDM_STATUS 86 | 12, CDM_Plas12 87 | 13, CDM_Inel12 88 | 14, CDM_FIfT 89 | 15, CDM_slide1 90 | 16, CDM_slide2 91 | 17, CDM_FIfC 92 | 18, CDM_d1T 93 | 19, CDM_d1C 94 | *Characteristic Length, definition=USER, components=3 95 | *Damping, alpha=2.d+6 96 | ** 97 | ** INITIAL CONDITIONS 98 | ** 99 | *Initial Conditions, Type=Solution 100 | all, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 101 | 0.d0, 0.d0, 0.d0, 1, 0.d0, 0.d0, 0.d0, 102 | 0.d0, 0.d0, 0.d0, 0.d0, 0.d0 103 | ** 104 | ** Output filter 105 | ** 106 | *Filter, name=haltOnFailure, operator=Max, limit=1.0, HALT 107 | ** ---------------------------------------------------------------- 108 | *Step, name=Step-1, nlgeom=YES 109 | *Dynamic, Explicit 110 | , 111 | ** 112 | *Variable Mass Scaling, type=Below Min, dt=1.d-7, frequency=1 113 | ** 114 | *Boundary, amplitude=Amp-1 115 | loadApp, 2, 2, - 116 | X-, 1, 1 117 | bot, 2, 2 118 | ** 119 | *Output, field, number interval=100 120 | *Node Output 121 | U, RF 122 | *Element Output 123 | S, LE, SDV 124 | ** 125 | *Output, history, frequency=1, filter=haltOnFailure 126 | *Element Output, elset=all 127 | SDV1 128 | ** 129 | *Output, history, frequency=1 130 | *Energy Output 131 | ALLIE, ALLSE, ALLKE, ALLPD, ALLVD, ALLAE 132 | *Node Output, nset=loadApp 133 | RF2, U2 134 | *Element Output, elset=all 135 | S22, LE22, SDV 136 | *End Step 137 | -------------------------------------------------------------------------------- /tests/test_C3D8R_matrixCompression_friction.parameters: -------------------------------------------------------------------------------- 1 | alpha_search = .TRUE. // Default value: .TRUE. 2 | alpha_inc = 1 // Default value: 10 3 | 4 | 5 | // End of file (Do not remove me) -------------------------------------------------------------------------------- /tests/test_C3D8R_matrixCompression_friction_expected.py: -------------------------------------------------------------------------------- 1 | YC = 199.8 # matrix compression strength 2 | GSL = 0.788 3 | length = 0.15 4 | thickness = 0.1 5 | 6 | parameters = { 7 | "results": [ 8 | { 9 | "type": "min", 10 | "identifier": 11 | { 12 | "symbol": "S22", 13 | "elset": "ALL", 14 | "position": "Element 1 Int Point 1" 15 | }, 16 | "referenceValue": -YC, 17 | "tolerance": YC * 0.005 18 | }, 19 | { 20 | "type": "max", 21 | "identifier": 22 | { 23 | "symbol": "SDV_CDM_d2", 24 | "elset": "ALL", 25 | "position": "Element 1 Int Point 1" 26 | }, 27 | "referenceValue": 1.0, 28 | "tolerance": 0.0 29 | }, 30 | { 31 | "type": "max", 32 | "identifier": 33 | { 34 | "symbol": "SDV_CDM_d1T", 35 | "elset": "ALL", 36 | "position": "Element 1 Int Point 1" 37 | }, 38 | "referenceValue": 0.0, 39 | "tolerance": 0.0 40 | }, 41 | { 42 | "type": "max", 43 | "identifier": 44 | { 45 | "symbol": "SDV_CDM_d1C", 46 | "elset": "ALL", 47 | "position": "Element 1 Int Point 1" 48 | }, 49 | "referenceValue": 0.0, 50 | "tolerance": 0.0 51 | }, 52 | { 53 | "type": "finalValue", 54 | "identifier": 55 | { 56 | "symbol": "SDV_CDM_alpha", 57 | "elset": "ALL", 58 | "position": "Element 1 Int Point 1" 59 | }, 60 | "referenceValue": 53.0, 61 | "tolerance": 0.4 62 | }, 63 | { 64 | "type": "max", 65 | "identifier": "Plastic dissipation: ALLPD for Whole Model", 66 | "referenceValue": GSL * (length * thickness), # Unrecoverable energy dissipation from fracture * fracture area: GSL*LC1*LC3 67 | "tolerance": GSL * (length * thickness) * 0.01 68 | }, 69 | { 70 | "type": "continuous", 71 | "identifier": 72 | { 73 | "symbol": "S22", 74 | "elset": "ALL", 75 | "position": "Element 1 Int Point 1" 76 | }, 77 | "referenceValue": 0.0, 78 | "tolerance": 2.0 79 | } 80 | ] 81 | } 82 | -------------------------------------------------------------------------------- /tests/test_C3D8R_mixedModeMatrix_expected.py: -------------------------------------------------------------------------------- 1 | parameters = { 2 | "results": [ 3 | { 4 | "type": "max", 5 | "step": "Step-2", 6 | "identifier": 7 | { 8 | "symbol": "SDV_CDM_d2", 9 | "elset": "ALL_ELEMS", 10 | "position": "Element 1 Int Point 1" 11 | }, 12 | "referenceValue": 1.0, 13 | "tolerance": 0.0 14 | }, 15 | { 16 | "type": "max", 17 | "step": "Step-1", 18 | "identifier": 19 | { 20 | "symbol": "SDV_CDM_d1T", 21 | "elset": "ALL_ELEMS", 22 | "position": "Element 1 Int Point 1" 23 | }, 24 | "referenceValue": 0.0, 25 | "tolerance": 0.0 26 | }, 27 | { 28 | "type": "max", 29 | "step": "Step-1", 30 | "identifier": 31 | { 32 | "symbol": "SDV_CDM_d1C", 33 | "elset": "ALL_ELEMS", 34 | "position": "Element 1 Int Point 1" 35 | }, 36 | "referenceValue": 0.0, 37 | "tolerance": 0.0 38 | } 39 | ] 40 | } 41 | -------------------------------------------------------------------------------- /tests/test_C3D8R_nonlinearShear12_loadReversal_expected.py: -------------------------------------------------------------------------------- 1 | parameters = { 2 | "results": [ 3 | { 4 | "type": "min", 5 | "step": "Step-4", 6 | "identifier": 7 | { 8 | "symbol": "S12", 9 | "elset": "ALL_ELEMS", 10 | "position": "Element 1 Int Point 1" 11 | }, 12 | "referenceValue": -89, 13 | "tolerance": 1.0 14 | }, 15 | { 16 | "type": "max", 17 | "step": "Step-6", 18 | "identifier": 19 | { 20 | "symbol": "S12", 21 | "elset": "ALL_ELEMS", 22 | "position": "Element 1 Int Point 1" 23 | }, 24 | "referenceValue": 97.5, 25 | "tolerance": 1.0 26 | }, 27 | { 28 | "type": "continuous", 29 | "identifier": 30 | { 31 | "symbol": "S12", 32 | "elset": "ALL_ELEMS", 33 | "position": "Element 1 Int Point 1" 34 | }, 35 | "referenceValue": 0.0, 36 | "tolerance": 0.1 37 | } 38 | ] 39 | } 40 | -------------------------------------------------------------------------------- /tests/test_C3D8R_nonlinearShear12_monotonic.inp: -------------------------------------------------------------------------------- 1 | *Heading 2 | Single element test for simple shear loading 3 | ** 4 | *Parameter 5 | length = 0.1 6 | displacement = 0.05*length 7 | ** 8 | ** NODES 9 | ** 10 | *NODE, NSET=GLOBAL 11 | 1, 0., 0., 0. 12 | 2, , 0., 0. 13 | 3, , , 0. 14 | 4, 0., , 0. 15 | 5, 0., 0., 16 | 6, , 0., 17 | 7, , , 18 | 8, 0., , 19 | *NSET, NSET=X+ 20 | 2, 3, 6, 7 21 | *NSET, NSET=X- 22 | 1, 4, 5, 8 23 | *NSET, NSET=Y+ 24 | 3, 4, 7, 8 25 | *NSET, NSET=Y- 26 | 1, 2, 5, 6 27 | *NSET, NSET=Z+ 28 | 5, 6, 7, 8 29 | *NSET, NSET=Z- 30 | 1, 2, 3, 4 31 | ** 32 | ** ELEMENTS 33 | ** 34 | *ELEMENT, TYPE=C3D8R, ELSET=ALL_ELEMS 35 | 1, 1, 2, 3, 4, 5, 6, 7, 8 36 | ** 37 | ** PROPERTIES 38 | ** 39 | *Orientation, name=Ori-1 40 | 1., 0., 0., 0., 1., 0. 41 | 3, 0. 42 | *SOLID SECTION, ELSET=ALL_ELEMS, MATERIAL=IM7-8552, ORIENTATION=Ori-1 43 | ** 44 | ** MATERIALS 45 | ** 46 | *Material, name=IM7-8552 47 | *Density 48 | 1.59d-05, 49 | *User material, constants=4 50 | ** 1 2 3 4 51 | ** feature flags, , thickness, 4, 5, 6, 7, 8 52 | 10000, , , , , , , , 53 | ** 54 | *Depvar, delete=11 55 | 19, 56 | 1, CDM_d2 57 | 2, CDM_Fb1 58 | 3, CDM_Fb2 59 | 4, CDM_Fb3 60 | 5, CDM_B 61 | 6, CDM_Lc1 62 | 7, CDM_Lc2 63 | 8, CDM_Lc3 64 | 9, CDM_FIm 65 | 10, CDM_alpha 66 | 11, CDM_STATUS 67 | 12, CDM_Plas12 68 | 13, CDM_Inel12 69 | 14, CDM_FIfT 70 | 15, CDM_slide1 71 | 16, CDM_slide2 72 | 17, CDM_FIfC 73 | 18, CDM_d1T 74 | 19, CDM_d1C 75 | *Characteristic Length, definition=USER, components=3 76 | ** 77 | ** INITIAL CONDITIONS 78 | ** 79 | *Initial Conditions, Type=Solution 80 | ALL_ELEMS, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 81 | 0.d0, 0.d0, 0, 1, 0.d0, 0.d0, 0.d0, 82 | 0.d0, 0.d0, 0.d0, 0.d0, 0.d0 83 | *BOUNDARY 84 | Y-, 1, 3, 0 85 | Y+, 2, 3, 0 86 | *Amplitude, name=LoadUp, definition=SMOOTH STEP 87 | 0., 0., 0.1, 1. 88 | ** STEP 1 - TENSION MECHANICAL CYCLE 89 | ** 90 | *STEP, NLGEOM=YES 91 | *Dynamic, Explicit 92 | , 0.1, , 93 | ** 94 | ** OUTPUT 95 | ** 96 | *OUTPUT, FIELD 97 | *ELEMENT OUTPUT 98 | SDV, S, LE 99 | *Node Output 100 | U, RF 101 | *OUTPUT, HISTORY, frequency=1 102 | *Energy Output 103 | ALLIE, ALLKE, ALLPD, ALLSE 104 | *NODE OUTPUT, NSET=Y+ 105 | U 106 | *NODE OUTPUT, NSET=Y+ 107 | RF 108 | *ELEMENT OUTPUT, ELSET=ALL_ELEMS 109 | SDV, S, LE 110 | ** 111 | ** LOADING 112 | ** 113 | *Boundary, AMPLITUDE=LoadUp 114 | Y+, 1, 1, 115 | *END STEP 116 | -------------------------------------------------------------------------------- /tests/test_C3D8R_nonlinearShear12_monotonic_expected.py: -------------------------------------------------------------------------------- 1 | tau = 90 # Stress at 5% strain from RO law 2 | aPL = 4.412E-10 3 | nPL = 5.934 4 | G12 = 5290. 5 | enerElas = 0.5*tau**2/G12*0.1*0.1*0.1 6 | enerPlas = aPL/G12*tau**(nPL + 1.)*nPL/(nPL + 1.)*0.1**3 7 | 8 | parameters = { 9 | "results": [ 10 | { 11 | "type": "max", 12 | "identifier": 13 | { 14 | "symbol": "S12", 15 | "elset": "ALL_ELEMS", 16 | "position": "Element 1 Int Point 1" 17 | }, 18 | "referenceValue": tau, 19 | "tolerance": 0.01*tau 20 | }, 21 | { 22 | "type": "max", 23 | "identifier": 24 | { 25 | "symbol": "SDV_CDM_d2", 26 | "elset": "ALL_ELEMS", 27 | "position": "Element 1 Int Point 1" 28 | }, 29 | "referenceValue": 0.0, 30 | "tolerance": 0.0 31 | }, 32 | { 33 | "type": "max", 34 | "identifier": 35 | { 36 | "symbol": "SDV_CDM_d1T", 37 | "elset": "ALL_ELEMS", 38 | "position": "Element 1 Int Point 1" 39 | }, 40 | "referenceValue": 0.0, 41 | "tolerance": 0.0 42 | }, 43 | { 44 | "type": "max", 45 | "identifier": 46 | { 47 | "symbol": "SDV_CDM_d1C", 48 | "elset": "ALL_ELEMS", 49 | "position": "Element 1 Int Point 1" 50 | }, 51 | "referenceValue": 0.0, 52 | "tolerance": 0.0 53 | }, 54 | { 55 | "type": "continuous", 56 | "identifier": 57 | { 58 | "symbol": "S12", 59 | "elset": "ALL_ELEMS", 60 | "position": "Element 1 Int Point 1" 61 | }, 62 | "referenceValue": 0.0, 63 | "tolerance": 0.1 64 | }, 65 | { 66 | "type": "max", 67 | "identifier": "Strain energy: ALLSE for Whole Model", # Recoverable strain energy 68 | "referenceValue": enerElas, # Elastic strain energy * volume: 0.5*stress^2/G12*LC1*LC2*LC3 69 | "tolerance": 0.02*enerElas 70 | }, 71 | { 72 | "type": "max", 73 | "identifier": "Plastic dissipation: ALLPD for Whole Model", 74 | "referenceValue": enerPlas, # Plastic energy dissipation from RO law * volume: aPL/Modulus*tau**(nPL + one)*nPL/(nPL + one)*LC1*LC2*LC3 75 | "tolerance": 0.02*enerPlas # Enfore 2% error maximum. Note most of the error is related to large strain. 76 | }, 77 | { 78 | "type": "finalValue", 79 | "identifier": "Plastic dissipation: ALLPD for Whole Model", 80 | "referenceValue": enerPlas, # Plastic energy dissipation from RO law * volume: aPL/Modulus*tau**(nPL + one)*nPL/(nPL + one)*LC1*LC2*LC3 81 | "tolerance": 0.02*enerPlas 82 | } 83 | ] 84 | } -------------------------------------------------------------------------------- /tests/test_C3D8R_nonlinearShear12_withFKT_expected.py: -------------------------------------------------------------------------------- 1 | parameters = { 2 | "results": [ 3 | { 4 | "type": "max", 5 | "step": "Step-7", 6 | "identifier": 7 | { 8 | "symbol": "S12", 9 | "elset": "ALL_ELEMS", 10 | "position": "Element 1 Int Point 1" 11 | }, 12 | "referenceValue": 90.65, 13 | "tolerance": 0.01 14 | }, 15 | { 16 | "type": "max", 17 | "step": "Step-9", 18 | "identifier": 19 | { 20 | "symbol": "S12", 21 | "elset": "ALL_ELEMS", 22 | "position": "Element 1 Int Point 1" 23 | }, 24 | "referenceValue": 91.08, 25 | "tolerance": 0.01 26 | }, 27 | { 28 | "type": "max", 29 | "step": "Step-11", 30 | "identifier": 31 | { 32 | "symbol": "S12", 33 | "elset": "ALL_ELEMS", 34 | "position": "Element 1 Int Point 1" 35 | }, 36 | "referenceValue": 79.96, 37 | "tolerance": 0.04 38 | }, 39 | { 40 | "type": "max", 41 | "step": "Step-17", 42 | "identifier": 43 | { 44 | "symbol": "SDV_CDM_d1T", 45 | "elset": "ALL_ELEMS", 46 | "position": "Element 1 Int Point 1" 47 | }, 48 | "referenceValue": 0.0, 49 | "tolerance": 0.0 50 | }, 51 | { 52 | "type": "max", 53 | "step": "Step-17", 54 | "identifier": 55 | { 56 | "symbol": "SDV_CDM_d1C", 57 | "elset": "ALL_ELEMS", 58 | "position": "Element 1 Int Point 1" 59 | }, 60 | "referenceValue": 0.0, 61 | "tolerance": 0.0 62 | }, 63 | { 64 | "type": "continuous", 65 | "identifier": 66 | { 67 | "symbol": "S12", 68 | "elset": "ALL_ELEMS", 69 | "position": "Element 1 Int Point 1" 70 | }, 71 | "referenceValue": 0.0, 72 | "tolerance": 0.1 73 | } 74 | ] 75 | } 76 | -------------------------------------------------------------------------------- /tests/test_C3D8R_nonlinearShear13_loadReversal_expected.py: -------------------------------------------------------------------------------- 1 | parameters = { 2 | "results": [ 3 | { 4 | "type": "min", 5 | "step": "Step-4", 6 | "identifier": 7 | { 8 | "symbol": "S13", 9 | "elset": "ALL_ELEMS", 10 | "position": "Element 1 Int Point 1" 11 | }, 12 | "referenceValue": -89, 13 | "tolerance": 1.0 14 | }, 15 | { 16 | "type": "max", 17 | "step": "Step-6", 18 | "identifier": 19 | { 20 | "symbol": "S13", 21 | "elset": "ALL_ELEMS", 22 | "position": "Element 1 Int Point 1" 23 | }, 24 | "referenceValue": 97.5, 25 | "tolerance": 1.0 26 | }, 27 | { 28 | "type": "continuous", 29 | "identifier": 30 | { 31 | "symbol": "S13", 32 | "elset": "ALL_ELEMS", 33 | "position": "Element 1 Int Point 1" 34 | }, 35 | "referenceValue": 0.0, 36 | "tolerance": 0.1 37 | } 38 | ] 39 | } 40 | -------------------------------------------------------------------------------- /tests/test_C3D8R_residualStress_expected.py: -------------------------------------------------------------------------------- 1 | sigma11_residual = -50. 2 | sigma22_residual = 50. 3 | sigma33_residual = 0. 4 | tolerance = 0.00002 5 | 6 | parameters = { 7 | "results": [ 8 | { 9 | "type": "finalValue", 10 | "identifier": 11 | { 12 | "symbol": "S11", 13 | "elset": "ALL_ELEMS", 14 | "position": "Element 1 Int Point 1" 15 | }, 16 | "referenceValue": sigma11_residual, 17 | "tolerance": abs(sigma11_residual)*tolerance 18 | }, 19 | { 20 | "type": "finalValue", 21 | "identifier": 22 | { 23 | "symbol": "S22", 24 | "elset": "ALL_ELEMS", 25 | "position": "Element 1 Int Point 1" 26 | }, 27 | "referenceValue": sigma22_residual, 28 | "tolerance": abs(sigma22_residual)*tolerance 29 | }, 30 | { 31 | "type": "finalValue", 32 | "identifier": 33 | { 34 | "symbol": "S33", 35 | "elset": "ALL_ELEMS", 36 | "position": "Element 1 Int Point 1" 37 | }, 38 | "referenceValue": sigma33_residual, 39 | "tolerance": abs(sigma22_residual)*tolerance 40 | }, 41 | ] 42 | } 43 | -------------------------------------------------------------------------------- /tests/test_C3D8R_schaefer_oat30_expected.py: -------------------------------------------------------------------------------- 1 | reference_values = [(0.000000, 0.000000), 2 | (0.000058, 1.315872), 3 | (0.000427, 9.549489), 4 | (0.001313, 29.437089), 5 | (0.002826, 63.485028), 6 | (0.004987, 107.413523), 7 | (0.007755, 142.915494), 8 | (0.011031, 166.504341), 9 | (0.014675, 185.256466), 10 | (0.018510, 200.025433), 11 | (0.024228, 217.336078), ] 12 | length = 0.1 13 | area = length * length 14 | tolerance = [(a * 0.05, b * 0.05) for (a, b) in reference_values] 15 | parameters = { 16 | "results": [ 17 | { 18 | "type": "tabular", 19 | "identifier": [ 20 | { 21 | "label": "u_n5", 22 | "symbol": "U1", 23 | "position": "Node 5", 24 | "nset": "RIGHTEDGE" 25 | }, 26 | { 27 | "label": "rf_n5", 28 | "symbol": "RF1", 29 | "position": "Node 5", 30 | "nset": "RIGHTEDGE" 31 | }, 32 | { 33 | "label": "rf_n6", 34 | "symbol": "RF1", 35 | "position": "Node 6", 36 | "nset": "RIGHTEDGE" 37 | }, 38 | { 39 | "label": "rf_n7", 40 | "symbol": "RF1", 41 | "position": "Node 7", 42 | "nset": "RIGHTEDGE" 43 | }, 44 | { 45 | "label": "rf_n8", 46 | "symbol": "RF1", 47 | "position": "Node 8", 48 | "nset": "RIGHTEDGE" 49 | }, 50 | ], 51 | "xEvalStatement": "d['u_n5'] / {}".format(length), 52 | "yEvalStatement": "(d['rf_n5'] + d['rf_n6'] + d['rf_n7'] + d['rf_n8']) / {}".format(area), 53 | "referenceValue": reference_values, 54 | "tolerance": tolerance 55 | } 56 | ] 57 | } -------------------------------------------------------------------------------- /tests/test_C3D8R_schaefer_oat60_expected.py: -------------------------------------------------------------------------------- 1 | reference_values = [(0.000000, 0.000000), 2 | (0.000217, 2.245748), 3 | (0.001460, 14.883391), 4 | (0.004090, 41.966763), 5 | (0.007958, 77.524742), 6 | (0.012524, 103.247925), 7 | (0.017066, 116.964104), 8 | (0.020941, 124.527130), 9 | (0.023559, 129.381104), 10 | (0.024789, 131.595917), 11 | (0.025000, 132.018784), ] 12 | length = 0.1 13 | area = length * length 14 | tolerance = [(a * 0.05, b * 0.05) for (a, b) in reference_values] 15 | parameters = { 16 | "results": [ 17 | { 18 | "type": "tabular", 19 | "identifier": [ 20 | { 21 | "label": "u_n5", 22 | "symbol": "U1", 23 | "position": "Node 5", 24 | "nset": "RIGHTEDGE" 25 | }, 26 | { 27 | "label": "rf_n5", 28 | "symbol": "RF1", 29 | "position": "Node 5", 30 | "nset": "RIGHTEDGE" 31 | }, 32 | { 33 | "label": "rf_n6", 34 | "symbol": "RF1", 35 | "position": "Node 6", 36 | "nset": "RIGHTEDGE" 37 | }, 38 | { 39 | "label": "rf_n7", 40 | "symbol": "RF1", 41 | "position": "Node 7", 42 | "nset": "RIGHTEDGE" 43 | }, 44 | { 45 | "label": "rf_n8", 46 | "symbol": "RF1", 47 | "position": "Node 8", 48 | "nset": "RIGHTEDGE" 49 | }, 50 | ], 51 | "xEvalStatement": "d['u_n5'] / {}".format(length), 52 | "yEvalStatement": "(d['rf_n5'] + d['rf_n6'] + d['rf_n7'] + d['rf_n8']) / {}".format(area), 53 | "referenceValue": reference_values, 54 | "tolerance": tolerance 55 | } 56 | ] 57 | } -------------------------------------------------------------------------------- /tests/test_C3D8R_schaefer_oat75_expected.py: -------------------------------------------------------------------------------- 1 | # (strain, stress) value pairs 2 | reference_values = [(0.000000, 0.000000), 3 | (0.000217, 2.031003), 4 | (0.001449, 13.514810), 5 | (0.004098, 38.584564), 6 | (0.007939, 71.311012), 7 | (0.012510, 99.755920), 8 | (0.017078, 115.675209), 9 | (0.020937, 124.543907), 10 | (0.023561, 129.376526), 11 | (0.024788, 131.681854), 12 | (0.025000, 132.192749),] 13 | length = 0.1 14 | area = length * length 15 | tolerance = [(a * 0.05, b * 0.05) for (a, b) in reference_values] 16 | parameters = { 17 | "results": [ 18 | { 19 | "type": "tabular", 20 | "identifier": [ 21 | { 22 | "label": "u_n5", 23 | "symbol": "U1", 24 | "position": "Node 5", 25 | "nset": "RIGHTEDGE" 26 | }, 27 | { 28 | "label": "rf_n5", 29 | "symbol": "RF1", 30 | "position": "Node 5", 31 | "nset": "RIGHTEDGE" 32 | }, 33 | { 34 | "label": "rf_n6", 35 | "symbol": "RF1", 36 | "position": "Node 6", 37 | "nset": "RIGHTEDGE" 38 | }, 39 | { 40 | "label": "rf_n7", 41 | "symbol": "RF1", 42 | "position": "Node 7", 43 | "nset": "RIGHTEDGE" 44 | }, 45 | { 46 | "label": "rf_n8", 47 | "symbol": "RF1", 48 | "position": "Node 8", 49 | "nset": "RIGHTEDGE" 50 | }, 51 | ], 52 | "xEvalStatement": "d['u_n5'] / {}".format(length), 53 | "yEvalStatement": "(d['rf_n5'] + d['rf_n6'] + d['rf_n7'] + d['rf_n8']) / {}".format(area), 54 | "referenceValue": reference_values, 55 | "tolerance": tolerance 56 | } 57 | ] 58 | } 59 | -------------------------------------------------------------------------------- /tests/test_C3D8R_schaefer_oat90_expected.py: -------------------------------------------------------------------------------- 1 | reference_values = [(0.000137549, 0.0312886), 2 | (0.000629, 0.143), 3 | (0.00103, 0.220102), 4 | (0.0014, 0.26636)] 5 | tolerance = [(a * 0.1, b * 0.1) for (a, b) in reference_values] 6 | parameters = { 7 | "results": [ 8 | { 9 | "type": "tabular", 10 | "identifier": [ 11 | { # x 12 | "symbol": "U2", 13 | "nset": "INQUIRY" 14 | }, 15 | { # y 16 | "symbol": "RF2", 17 | "nset": "INQUIRY" 18 | } 19 | ], 20 | "referenceValue": reference_values, 21 | "tolerance": tolerance 22 | } 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /tests/test_C3D8R_schapery12_expected.py: -------------------------------------------------------------------------------- 1 | parameters = { 2 | "results": [ 3 | { 4 | "type": "max", 5 | "step": "Step-7", 6 | "identifier": 7 | { 8 | "symbol": "S12", 9 | "elset": "ALL_ELEMS", 10 | "position": "Element 1 Int Point 1" 11 | }, 12 | "referenceValue": 91.16, 13 | "tolerance": 0.01 14 | }, 15 | { 16 | "type": "max", 17 | "step": "Step-9", 18 | "identifier": 19 | { 20 | "symbol": "S12", 21 | "elset": "ALL_ELEMS", 22 | "position": "Element 1 Int Point 1" 23 | }, 24 | "referenceValue": 91.17, 25 | "tolerance": 0.01 26 | }, 27 | { 28 | "type": "max", 29 | "step": "Step-11", 30 | "identifier": 31 | { 32 | "symbol": "S12", 33 | "elset": "ALL_ELEMS", 34 | "position": "Element 1 Int Point 1" 35 | }, 36 | "referenceValue": 67.83, 37 | "tolerance": 0.04 38 | }, 39 | { 40 | "type": "max", 41 | "step": "Step-17", 42 | "identifier": 43 | { 44 | "symbol": "SDV_CDM_d1T", 45 | "elset": "ALL_ELEMS", 46 | "position": "Element 1 Int Point 1" 47 | }, 48 | "referenceValue": 0.0, 49 | "tolerance": 0.0 50 | }, 51 | { 52 | "type": "max", 53 | "step": "Step-17", 54 | "identifier": 55 | { 56 | "symbol": "SDV_CDM_d1C", 57 | "elset": "ALL_ELEMS", 58 | "position": "Element 1 Int Point 1" 59 | }, 60 | "referenceValue": 0.0, 61 | "tolerance": 0.0 62 | }, 63 | { 64 | "type": "continuous", 65 | "identifier": 66 | { 67 | "symbol": "S12", 68 | "elset": "ALL_ELEMS", 69 | "position": "Element 1 Int Point 1" 70 | }, 71 | "referenceValue": 0.0, 72 | "tolerance": 0.1 73 | } 74 | ] 75 | } 76 | -------------------------------------------------------------------------------- /tests/test_C3D8R_simpleShear12.inp: -------------------------------------------------------------------------------- 1 | *Heading 2 | Single element test for simple shear loading 3 | ** 4 | *Parameter 5 | length = 0.1 6 | displacement = 0.1 7 | ** 8 | ** NODES 9 | ** 10 | *NODE, NSET=GLOBAL 11 | 1, 0., 0., 0. 12 | 2, , 0., 0. 13 | 3, , , 0. 14 | 4, 0., , 0. 15 | 5, 0., 0., 16 | 6, , 0., 17 | 7, , , 18 | 8, 0., , 19 | *NSET, NSET=X+ 20 | 2, 3, 6, 7 21 | *NSET, NSET=X- 22 | 1, 4, 5, 8 23 | *NSET, NSET=Y+ 24 | 3, 4, 7, 8 25 | *NSET, NSET=Y- 26 | 1, 2, 5, 6 27 | *NSET, NSET=Z+ 28 | 5, 6, 7, 8 29 | *NSET, NSET=Z- 30 | 1, 2, 3, 4 31 | ** 32 | ** ELEMENTS 33 | ** 34 | *ELEMENT, TYPE=C3D8R, ELSET=ALL_ELEMS 35 | 1, 1, 2, 3, 4, 5, 6, 7, 8 36 | ** 37 | ** PROPERTIES 38 | ** 39 | *Orientation, name=Ori-1 40 | 1., 0., 0., 0., 1., 0. 41 | 3, 0. 42 | *SOLID SECTION, ELSET=ALL_ELEMS, MATERIAL=IM7-8552, ORIENTATION=Ori-1 43 | ** 44 | ** MATERIALS 45 | ** 46 | *Material, name=IM7-8552 47 | *Density 48 | 1.59d-05, 49 | *User material, constants=4 50 | ** 1 2 3 4 51 | ** feature flags, , thickness, 4, 5, 6, 7, 8 52 | 100000, , , , , , , , 53 | ** 54 | *Depvar, delete=11 55 | 19, 56 | 1, CDM_d2 57 | 2, CDM_Fb1 58 | 3, CDM_Fb2 59 | 4, CDM_Fb3 60 | 5, CDM_B 61 | 6, CDM_Lc1 62 | 7, CDM_Lc2 63 | 8, CDM_Lc3 64 | 9, CDM_FIm 65 | 10, CDM_alpha 66 | 11, CDM_STATUS 67 | 12, CDM_Plas12 68 | 13, CDM_Inel12 69 | 14, CDM_FIfT 70 | 15, CDM_slide1 71 | 16, CDM_slide2 72 | 17, CDM_FIfC 73 | 18, CDM_d1T 74 | 19, CDM_d1C 75 | *Characteristic Length, definition=USER, components=3 76 | ** 77 | ** INITIAL CONDITIONS 78 | ** 79 | *Initial Conditions, Type=Solution 80 | ALL_ELEMS, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 81 | 0.d0, 0.d0, 0.d0, 1, 0.d0, 0.d0, 0.d0, 0.d0, 82 | 0.d0, 0.d0, 0.d0, 0.d0 83 | *BOUNDARY 84 | Y-, 1, 3, 0 85 | Y+, 2, 3, 0 86 | *Amplitude, name=LoadUp, definition=SMOOTH STEP 87 | 0., 0., 0.1, 1. 88 | ** STEP 1 - TENSION MECHANICAL CYCLE 89 | ** 90 | *STEP, NLGEOM=YES 91 | *Dynamic, Explicit 92 | , 0.1, , 93 | ** 94 | ** OUTPUT 95 | ** 96 | *OUTPUT, FIELD 97 | *ELEMENT OUTPUT 98 | SDV, S, LE 99 | *Node Output 100 | U, RF 101 | *OUTPUT, HISTORY, frequency=1 102 | *Energy Output 103 | ALLIE, ALLKE, ALLPD, ALLSE 104 | *NODE OUTPUT, NSET=Y+ 105 | U 106 | *NODE OUTPUT, NSET=Y+ 107 | RF 108 | *ELEMENT OUTPUT, ELSET=ALL_ELEMS 109 | SDV, S, LE 110 | ** 111 | ** LOADING 112 | ** 113 | *Boundary, AMPLITUDE=LoadUp 114 | Y+, 1, 1, 115 | *END STEP 116 | -------------------------------------------------------------------------------- /tests/test_C3D8R_simpleShear12_expected.py: -------------------------------------------------------------------------------- 1 | SL = 92.3 2 | GSL = 0.788 3 | length = 0.1 4 | 5 | enerFrac = GSL * (length * length) 6 | 7 | parameters = { 8 | "results": [ 9 | { 10 | "type": "max", 11 | "identifier": 12 | { 13 | "symbol": "S12", 14 | "elset": "ALL_ELEMS", 15 | "position": "Element 1 Int Point 1" 16 | }, 17 | "referenceValue": SL, 18 | "tolerance": SL * 0.001 19 | }, 20 | { 21 | "type": "disp_at_zero_y", 22 | "step": "Step-1", 23 | "identifier": [ 24 | { # x 25 | "symbol": "U1", 26 | "nset": "Y+", 27 | "position": "Node 3" 28 | }, 29 | { # y 30 | "symbol": "S12", 31 | "elset": "ALL_ELEMS", 32 | "position": "Element 1 Int Point 1" 33 | } 34 | ], 35 | "zeroTol": 0.006, # Defines how close to zero the y value needs to be 36 | "referenceValue": 2. * GSL / SL, 37 | "tolerance": (2. * GSL / SL) * 0.001 38 | }, 39 | { 40 | "type": "max", 41 | "identifier": 42 | { 43 | "symbol": "SDV_CDM_d2", 44 | "elset": "ALL_ELEMS", 45 | "position": "Element 1 Int Point 1" 46 | }, 47 | "referenceValue": 1.0, 48 | "tolerance": 0.0 49 | }, 50 | { 51 | "type": "max", 52 | "identifier": 53 | { 54 | "symbol": "SDV_CDM_d1T", 55 | "elset": "ALL_ELEMS", 56 | "position": "Element 1 Int Point 1" 57 | }, 58 | "referenceValue": 0.0, 59 | "tolerance": 0.0 60 | }, 61 | { 62 | "type": "max", 63 | "identifier": 64 | { 65 | "symbol": "SDV_CDM_d1C", 66 | "elset": "ALL_ELEMS", 67 | "position": "Element 1 Int Point 1" 68 | }, 69 | "referenceValue": 0.0, 70 | "tolerance": 0.0 71 | }, 72 | { 73 | "type": "continuous", 74 | "identifier": 75 | { 76 | "symbol": "S12", 77 | "elset": "ALL_ELEMS", 78 | "position": "Element 1 Int Point 1" 79 | }, 80 | "referenceValue": 0.0, 81 | "tolerance": 0.1 82 | }, 83 | { 84 | "type": "max", 85 | "identifier": "Plastic dissipation: ALLPD for Whole Model", 86 | "referenceValue": enerFrac, # Unrecoverable energy dissipation from fracture * fracture area: GSL*LC1*LC3 87 | "tolerance": enerFrac * 0.001 88 | }, 89 | { 90 | "type": "finalValue", 91 | "identifier": "Plastic dissipation: ALLPD for Whole Model", 92 | "referenceValue": enerFrac, # Unrecoverable energy dissipation from fracture * fracture area: GSL*LC1*LC3 93 | "tolerance": enerFrac * 0.001 94 | } 95 | ] 96 | } -------------------------------------------------------------------------------- /tests/test_C3D8R_twoElement_fiberCompression_FKT_expected.py: -------------------------------------------------------------------------------- 1 | # Variable results 2 | crushStress=-9.55 3 | 4 | parameters = { 5 | "results": [ 6 | { 7 | "type": "min", 8 | "step": "Step-1", 9 | "identifier": { 10 | "symbol": "RF1", 11 | "nset": "BC-LOADAPP" 12 | }, 13 | "referenceValue": -36.003, 14 | "tolerance": 0.72 # 2% 15 | }, 16 | { 17 | "type": "finalValue", 18 | "step": "Step-1", 19 | "identifier": { 20 | "symbol": "RF1", 21 | "nset": "BC-LOADAPP", 22 | }, 23 | "referenceValue": crushStress, 24 | "tolerance": 0.02*abs(crushStress) # 2% 25 | } 26 | ] 27 | } -------------------------------------------------------------------------------- /tests/test_COH2D4_normal.inp: -------------------------------------------------------------------------------- 1 | *Heading 2 | Single cohesive element test for mode I response 3 | ** 4 | *Parameter 5 | length = 0.2 6 | thickness = 0.0 7 | displacement = 0.01 8 | stepDuration = 0.1 9 | ** 10 | *Node, nset=Nodes 11 | 1, 0., 0. 12 | 2, , 0. 13 | 3, , 14 | 4, 0., 15 | *Nset, nset=X+ 16 | 2, 3 17 | *Nset, nset=X- 18 | 1, 4 19 | *Nset, nset=Y+ 20 | 3, 4 21 | *Nset, nset=Y- 22 | 1, 2 23 | ** 24 | *Element, type=COH2D4, elset=COHESIVE 25 | 1, 1, 2, 3, 4 26 | ** 27 | *Cohesive Section, elset=COHESIVE, material=IM7-8552, response=TRACTION SEPARATION, thickness=SPECIFIED 28 | 1.0, 29 | ** 30 | *Material, name=IM7-8552 31 | *Density 32 | 1.57e-09, 33 | *User material, constants=40 34 | ** feature flags, , thickness, 4, 5, 6, 7, 8 35 | 200000, , , , , , , , 36 | ** 9 10 11 12 13 14 15 16 37 | ** E1, E2, G12, nu12, nu23, YT, SL GYT 38 | , , , , , 62.3, 92.30, 0.277, 39 | ** 17 18 19 20 21 22 23 24 40 | ** GSL, eta_BK, YC, alpha0 E3, G13, G23, nu13, 41 | 0.788, 1.634, 199.8, 0.925, 1.d6, , , , 42 | ** 25 26 27 28 29 30 31 32 43 | ** alpha11, alpha22, alpha_PL, n_PL, XT, fXT, GXT, fGXT, 44 | , , , , , , , , 45 | ** 33 34 35 36 37 38 39 40 46 | ** XC, fXC, GXC, fGXC, phi_ff, w_kb, T_sf, mu 47 | , , , , , , , 0.3 48 | *Depvar 49 | 19, 50 | 1, COH_dmg 51 | 2, COH_delta_s1 52 | 3, COH_delta_n 53 | 4, COH_delta_s2 54 | 5, COH_B 55 | 9, COH_FI 56 | 15, COH_slide1 57 | 16, COH_slide2 58 | ** *Characteristic Length, definition=USER, components=2 59 | ** 60 | *Initial Conditions, Type=Solution 61 | COHESIVE, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 62 | 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 63 | 0.d0, 0.d0, 0.d0, 0.d0, 0.d0 64 | *Boundary 65 | Y+, 1, 1, 0 66 | Y-, 1, 2, 0 67 | ** 68 | *Amplitude, name=LoadUp, definition=SMOOTH STEP 69 | 0., 0., , 1. 70 | ** 71 | *Step, nlgeom=YES 72 | *Dynamic, Explicit 73 | , , , 74 | *Fixed Mass Scaling, factor=5000. 75 | ** 76 | *Boundary, AMPLITUDE=LoadUp 77 | Y+, 2, 2, 78 | ** 79 | *Output, FIELD 80 | *Element Output 81 | SDV1, SDV2, SDV3, SDV4, SDV5, SDV9, SDV15, SDV16, S 82 | *Node Output 83 | U, RF 84 | *Output, HISTORY, frequency=1 85 | *Energy Output 86 | ALLIE, ALLKE, ALLPD, ALLSE 87 | *Node Output, NSET=Y+ 88 | U, RF 89 | *Element Output, ELSET=COHESIVE 90 | SDV1, SDV2, SDV3, SDV4, SDV5, SDV9, SDV15, SDV16, S 91 | ** 92 | *End Step 93 | -------------------------------------------------------------------------------- /tests/test_COH2D4_normal_expected.py: -------------------------------------------------------------------------------- 1 | YT = 62.3 2 | GYT = 0.277 3 | length = 0.2 4 | 5 | enerFrac = GYT * length * 1.0 6 | 7 | parameters = { 8 | "results": [ 9 | { 10 | "type": "max", 11 | "identifier": 12 | { 13 | "symbol": "S22", 14 | "elset": "COHESIVE", 15 | "position": "Element 1 Int Point 1" 16 | }, 17 | "referenceValue": YT, 18 | "tolerance": YT * 0.001 # 0.1% error 19 | }, 20 | { 21 | "type": "disp_at_zero_y", 22 | "step": "Step-1", 23 | "identifier": [ 24 | { # x 25 | "symbol": "U2", 26 | "nset": "Y+", 27 | "position": "Node 4" 28 | }, 29 | { # y 30 | "symbol": "S22", 31 | "elset": "COHESIVE", 32 | "position": "Element 1 Int Point 1" 33 | } 34 | ], 35 | "window": [0.008, 0.010], 36 | "zeroTol": 0.005, # Defines how close to zero the y value needs to be 37 | "referenceValue": 2. * GYT / YT, # Cohesive displacement-jump at complete failure 38 | "tolerance": 2. * GYT / YT * 0.001 # 0.1% error 39 | }, 40 | { 41 | "type": "max", 42 | "identifier": 43 | { 44 | "symbol": "SDV_COH_dmg", 45 | "elset": "COHESIVE", 46 | "position": "Element 1 Int Point 1" 47 | }, 48 | "referenceValue": 1.0, 49 | "tolerance": 0.0 50 | }, 51 | { 52 | "type": "continuous", 53 | "identifier": 54 | { 55 | "symbol": "S22", 56 | "elset": "COHESIVE", 57 | "position": "Element 1 Int Point 1" 58 | }, 59 | "referenceValue": 0.0, 60 | "tolerance": 0.1 61 | }, 62 | { 63 | "type": "max", 64 | "identifier": "Plastic dissipation: ALLPD for Whole Model", 65 | "referenceValue": enerFrac, # Unrecoverable energy dissipation from fracture * fracture area: GYT*area 66 | "tolerance": enerFrac * 0.001 # 0.1% error 67 | }, 68 | { 69 | "type": "finalValue", 70 | "identifier": "Plastic dissipation: ALLPD for Whole Model", 71 | "referenceValue": enerFrac, # Unrecoverable energy dissipation from fracture * fracture area: GYT*area 72 | "tolerance": enerFrac * 0.001 # 0.1% error 73 | } 74 | ] 75 | } 76 | -------------------------------------------------------------------------------- /tests/test_COH2D4_shear.inp: -------------------------------------------------------------------------------- 1 | *Heading 2 | Single cohesive element test for mode II response 3 | ** 4 | *Parameter 5 | length = 0.2 6 | thickness = 0.0 7 | displacement = 0.03 8 | stepDuration = 0.1 9 | ** 10 | *Node, nset=Nodes 11 | 1, 0., 0. 12 | 2, , 0. 13 | 3, , 14 | 4, 0., 15 | *Nset, nset=X+ 16 | 2, 3 17 | *Nset, nset=X- 18 | 1, 4 19 | *Nset, nset=Y+ 20 | 3, 4 21 | *Nset, nset=Y- 22 | 1, 2 23 | ** 24 | *Element, type=COH2D4, elset=COHESIVE 25 | 1, 1, 2, 3, 4 26 | ** 27 | *Cohesive Section, elset=COHESIVE, material=IM7-8552, response=TRACTION SEPARATION, thickness=SPECIFIED 28 | 1.0, 29 | ** 30 | *Material, name=IM7-8552 31 | *Density 32 | 1.57e-09, 33 | *User material, constants=40 34 | ** feature flags, , thickness, 4, 5, 6, 7, 8 35 | 200000, , , , , , , , 36 | ** 9 10 11 12 13 14 15 16 37 | ** E1, E2, G12, nu12, nu23, YT, SL GYT 38 | , , , , , 62.3, 92.3, 0.277, 39 | ** 17 18 19 20 21 22 23 24 40 | ** GSL, eta_BK, YC, alpha0 E3, G13, G23, nu13, 41 | 0.788, 1.634, 199.8, 0.925, 1.d6, , , , 42 | ** 25 26 27 28 29 30 31 32 43 | ** alpha11, alpha22, alpha_PL, n_PL, XT, fXT, GXT, fGXT, 44 | , , , , , , , , 45 | ** 33 34 35 36 37 38 39 40 46 | ** XC, fXC, GXC, fGXC, phi_ff, w_kb, T_sf, mu 47 | , , , , , , , 0.3 48 | *Depvar 49 | 19, 50 | 1, COH_dmg 51 | 2, COH_delta_s1 52 | 3, COH_delta_n 53 | 4, COH_delta_s2 54 | 5, COH_B 55 | 9, COH_FI 56 | 15, COH_slide1 57 | 16, COH_slide2 58 | ** *Characteristic Length, definition=USER, components=2 59 | ** 60 | *Initial Conditions, Type=Solution 61 | COHESIVE, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 62 | 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 63 | 0.d0, 0.d0, 0.d0, 0.d0, 0.d0 64 | *Boundary 65 | Y+, 2, 2, 0 66 | Y-, 1, 2, 0 67 | ** 68 | *Amplitude, name=LoadUp, definition=SMOOTH STEP 69 | 0., 0., , 1. 70 | ** 71 | *Step, nlgeom=YES 72 | *Dynamic, Explicit 73 | , , , 74 | *Fixed Mass Scaling, factor=5000. 75 | ** 76 | *Boundary, AMPLITUDE=LoadUp 77 | Y+, 1, 1, 78 | ** 79 | *Output, FIELD 80 | *Element Output 81 | SDV1, SDV2, SDV3, SDV4, SDV5, SDV9, SDV15, SDV16, S 82 | *Node Output 83 | U, RF 84 | *Output, HISTORY, frequency=1 85 | *Energy Output 86 | ALLIE, ALLKE, ALLPD, ALLSE 87 | *Node Output, NSET=Y+ 88 | U, RF 89 | *Element Output, ELSET=COHESIVE 90 | SDV1, SDV2, SDV3, SDV4, SDV5, SDV9, SDV15, SDV16, S 91 | ** 92 | *End Step 93 | -------------------------------------------------------------------------------- /tests/test_COH2D4_shear_expected.py: -------------------------------------------------------------------------------- 1 | SL = 92.3 2 | GSL = 0.788 3 | length = 0.2 4 | 5 | enerFrac = GSL * length * 1.0 6 | 7 | parameters = { 8 | "results": [ 9 | { 10 | "type": "max", 11 | "identifier": 12 | { 13 | "symbol": "S12", 14 | "elset": "COHESIVE", 15 | "position": "Element 1 Int Point 1" 16 | }, 17 | "referenceValue": SL, 18 | "tolerance": SL * 0.001 # 0.1% error 19 | }, 20 | { 21 | "type": "disp_at_zero_y", 22 | "step": "Step-1", 23 | "identifier": [ 24 | { # x 25 | "symbol": "U1", 26 | "nset": "Y+", 27 | "position": "Node 4" 28 | }, 29 | { # y 30 | "symbol": "S12", 31 | "elset": "COHESIVE", 32 | "position": "Element 1 Int Point 1" 33 | } 34 | ], 35 | "window": [0.015, 0.020], 36 | "zeroTol": 0.005, # Defines how close to zero the y value needs to be 37 | "referenceValue": 2. * GSL / SL, # Cohesive displacement-jump at complete failure 38 | "tolerance": 2. * GSL / SL * 0.001 # 0.1% error 39 | }, 40 | { 41 | "type": "max", 42 | "identifier": 43 | { 44 | "symbol": "SDV_COH_dmg", 45 | "elset": "COHESIVE", 46 | "position": "Element 1 Int Point 1" 47 | }, 48 | "referenceValue": 1.0, 49 | "tolerance": 0.0 50 | }, 51 | { 52 | "type": "continuous", 53 | "identifier": 54 | { 55 | "symbol": "S12", 56 | "elset": "COHESIVE", 57 | "position": "Element 1 Int Point 1" 58 | }, 59 | "referenceValue": 0.0, 60 | "tolerance": 0.2 61 | }, 62 | { 63 | "type": "max", 64 | "identifier": "Plastic dissipation: ALLPD for Whole Model", 65 | "referenceValue": enerFrac, # Unrecoverable energy dissipation from fracture * fracture area: GSL*area 66 | "tolerance": enerFrac * 0.001 # 0.1% error 67 | }, 68 | { 69 | "type": "finalValue", 70 | "identifier": "Plastic dissipation: ALLPD for Whole Model", 71 | "referenceValue": enerFrac, # Unrecoverable energy dissipation from fracture * fracture area: GSL*area 72 | "tolerance": enerFrac * 0.001 # 0.1% error 73 | } 74 | ] 75 | } 76 | -------------------------------------------------------------------------------- /tests/test_COH2D4_shear_friction_expected.py: -------------------------------------------------------------------------------- 1 | import math 2 | 3 | applied_compression = -10.0 4 | coefficient_of_friction = 0.3 5 | 6 | SL = 92.3 # longitudinal shear strength 7 | YC = 199.8 # matrix compressive strength 8 | GSL = 0.788 # Mode II matrix fracture toughness 9 | alpha0 = 0.925 # matrix crack orientation due to pure matrix compression failure 10 | length = 0.2 # element edge length 11 | 12 | eta_L = -SL * math.cos(2*alpha0) / (YC * math.cos(alpha0) * math.cos(alpha0)) 13 | 14 | enerFrac = GSL * length * 1.0 15 | 16 | parameters = { 17 | "results": [ 18 | { 19 | "type": "min", 20 | "step": "Compression", 21 | "identifier": 22 | { 23 | "symbol": "S22", 24 | "elset": "COHESIVE", 25 | "position": "Element 1 Int Point 1" 26 | }, 27 | "referenceValue": applied_compression, 28 | "tolerance": applied_compression * 0.001 # 0.1% error 29 | }, 30 | { 31 | "type": "max", 32 | "step": "Shear", 33 | "identifier": 34 | { 35 | "symbol": "S12", 36 | "elset": "COHESIVE", 37 | "position": "Element 1 Int Point 1" 38 | }, 39 | "referenceValue": SL - eta_L * applied_compression, 40 | "tolerance": (SL - eta_L * applied_compression) * 0.001 # 0.1% error 41 | }, 42 | { 43 | "type": "finalValue", 44 | "step": "Shear", 45 | "identifier": 46 | { 47 | "symbol": "S12", 48 | "elset": "COHESIVE", 49 | "position": "Element 1 Int Point 1" 50 | }, 51 | "referenceValue": -applied_compression * coefficient_of_friction, 52 | "tolerance": -applied_compression * coefficient_of_friction * 0.001 # 0.1% 53 | }, 54 | { 55 | "type": "max", 56 | "step": "Shear", 57 | "identifier": 58 | { 59 | "symbol": "SDV_COH_dmg", 60 | "elset": "COHESIVE", 61 | "position": "Element 1 Int Point 1" 62 | }, 63 | "referenceValue": 1.0, 64 | "tolerance": 0.0 65 | }, 66 | { 67 | "type": "continuous", 68 | "step": "Shear", 69 | "identifier": 70 | { 71 | "symbol": "S12", 72 | "elset": "COHESIVE", 73 | "position": "Element 1 Int Point 1" 74 | }, 75 | "referenceValue": 0.0, 76 | "tolerance": 0.2 77 | }, 78 | { 79 | "type": "max", 80 | "identifier": "Plastic dissipation: ALLPD for Whole Model", 81 | "referenceValue": enerFrac, # Unrecoverable energy dissipation from fracture * fracture area: GSL*area 82 | "tolerance": enerFrac * 0.001 # 0.1% error 83 | }, 84 | { 85 | "type": "finalValue", 86 | "identifier": "Plastic dissipation: ALLPD for Whole Model", 87 | "referenceValue": enerFrac, # Unrecoverable energy dissipation from fracture * fracture area: GSL*area 88 | "tolerance": enerFrac * 0.001 # 0.1% error 89 | } 90 | ] 91 | } 92 | -------------------------------------------------------------------------------- /tests/test_COH3D8_fatigue_normal.parameters: -------------------------------------------------------------------------------- 1 | // 2 | // CompDam Subroutine Parameters 3 | // 4 | // README 5 | // This is a comment line, it is ignored. Each uncommented line should 6 | // contain one subroutine parameter in the form [NAME] = [VALUE] 7 | // 8 | // This file optional, and is not required to execute the CompDam subroutine. 9 | // When used, this file must be placed in the Abaqus output directory, which is 10 | // the directory where the job is executed. If this file is not found, or 11 | // cannot be accessed, CompDam will use default values. 12 | 13 | 14 | // logger level of verbosity, Integer 15 | logLevel = 2 // Default value: 2 16 | 17 | // logger format (1=log file, 2=csv) 18 | logFormat = 1 19 | 20 | 21 | // fatigue analysis step number, Integer 22 | fatigue_step = 2 23 | 24 | // fatigue loading R ratio, Double Precision 25 | fatigue_R_ratio = 0.1d0 // Default value: 0.1d0 26 | 27 | // fatigue cycles per solution increment (initial), Double Precision 28 | cycles_per_increment_init = 1.d-4 // Default value: 1.d-4 29 | // fatigue cycles per solution increment (maximum), Double Precision 30 | cycles_per_increment_max = 1.d5 // Default value: 1.d5 31 | // fatigue cycles per solution increment (minimum), Double Precision 32 | cycles_per_increment_min = 1.d-5 // Default value: 1.d-5 33 | // Percent change to fatigue cycles per solution increment when rate of energy dissipation is out-of-range, Double Precision 34 | cycles_per_increment_mod = 0.1d0 // Default value: 0.1d0 35 | 36 | // thresholds for fatigue damage progression per solution increment in terms of percent fracture toughness, Double precision 37 | fatigue_damage_min_threshold = 5.d-7 // Default value: 5.d-6 38 | fatigue_damage_max_threshold = 1.d-4 // Default value: 1.d-4 39 | 40 | 41 | // End of file (Do not remove me) 42 | -------------------------------------------------------------------------------- /tests/test_COH3D8_fatigue_normal_expected.py: -------------------------------------------------------------------------------- 1 | stress_ratio = 0.5 2 | strength = 80.1 3 | toughness = 0.240 4 | penalty = 2.e5 5 | 6 | delta_i = strength / penalty 7 | delta_f = 2.0 * toughness / strength 8 | delta_inflection_fatigue = delta_f - stress_ratio * (delta_f - delta_i) 9 | 10 | parameters = { 11 | "results": [ 12 | { 13 | "type": "max", 14 | "step": "Load", 15 | "identifier": 16 | { 17 | "symbol": "S33", 18 | "elset": "COHESIVE", 19 | "position": "Element 1 Int Point 1" 20 | }, 21 | "referenceValue": strength * stress_ratio, 22 | "tolerance": strength * stress_ratio * 0.001 23 | }, 24 | { 25 | "type": "max", 26 | "step": "Fatigue", 27 | "identifier": 28 | { 29 | "symbol": "S33", 30 | "elset": "COHESIVE", 31 | "position": "Element 1 Int Point 1" 32 | }, 33 | "referenceValue": strength * stress_ratio, 34 | "tolerance": strength * stress_ratio * 0.003 35 | }, 36 | { 37 | "type": "xy_infl_pt_bilinear", 38 | "step": "Fatigue", 39 | "identifier": [ 40 | { # x 41 | "symbol": "U3", 42 | "nset": "Z+", 43 | "position": "Node 5" 44 | }, 45 | { # y 46 | "symbol": "S33", 47 | "elset": "COHESIVE", 48 | "position": "Element 1 Int Point 1" 49 | } 50 | ], 51 | "window": [ 52 | delta_inflection_fatigue - (delta_inflection_fatigue - delta_i) * 0.80, 53 | delta_inflection_fatigue + (delta_f - delta_inflection_fatigue) * 0.80 54 | ], 55 | "referenceValue": [delta_inflection_fatigue, strength * stress_ratio], 56 | "tolerance": [delta_inflection_fatigue * 0.02, strength * stress_ratio * 0.02], 57 | }, 58 | { 59 | "type": "max", 60 | "step": "Fatigue", 61 | "identifier": 62 | { 63 | "symbol": "SDV_COH_dmg", 64 | "elset": "COHESIVE", 65 | "position": "Element 1 Int Point 1" 66 | }, 67 | "referenceValue": 1.0, 68 | "tolerance": 0.0 69 | } 70 | ] 71 | } 72 | -------------------------------------------------------------------------------- /tests/test_COH3D8_fatigue_shear13.parameters: -------------------------------------------------------------------------------- 1 | // 2 | // CompDam Subroutine Parameters 3 | // 4 | // README 5 | // This is a comment line, it is ignored. Each uncommented line should 6 | // contain one subroutine parameter in the form [NAME] = [VALUE] 7 | // 8 | // This file optional, and is not required to execute the CompDam subroutine. 9 | // When used, this file must be placed in the Abaqus output directory, which is 10 | // the directory where the job is executed. If this file is not found, or 11 | // cannot be accessed, CompDam will use default values. 12 | 13 | 14 | // logger level of verbosity, Integer 15 | logLevel = 2 // Default value: 2 16 | 17 | // logger format (1=log file, 2=csv) 18 | logFormat = 1 19 | 20 | 21 | // fatigue analysis step number, Integer 22 | fatigue_step = 2 23 | 24 | // fatigue loading R ratio, Double Precision 25 | fatigue_R_ratio = 0.1d0 // Default value: 0.1d0 26 | 27 | // fatigue cycles per solution increment (initial), Double Precision 28 | cycles_per_increment_init = 1.d-4 // Default value: 1.d-4 29 | // fatigue cycles per solution increment (maximum), Double Precision 30 | cycles_per_increment_max = 1.d5 // Default value: 1.d5 31 | // fatigue cycles per solution increment (minimum), Double Precision 32 | cycles_per_increment_min = 1.d-5 // Default value: 1.d-5 33 | // Percent change to fatigue cycles per solution increment when rate of energy dissipation is out-of-range, Double Precision 34 | cycles_per_increment_mod = 0.1d0 // Default value: 0.1d0 35 | 36 | // thresholds for fatigue damage progression per solution increment in terms of percent fracture toughness, Double precision 37 | fatigue_damage_min_threshold = 5.d-7 // Default value: 5.d-6 38 | fatigue_damage_max_threshold = 1.d-4 // Default value: 1.d-4 39 | 40 | 41 | // End of file (Do not remove me) 42 | -------------------------------------------------------------------------------- /tests/test_COH3D8_normal.inp: -------------------------------------------------------------------------------- 1 | *Heading 2 | Single cohesive element test for mode I response 3 | ** 4 | *Parameter 5 | length = 0.2 6 | thickness = 0.0 7 | displacement = 0.01 8 | stepDuration = 0.1 9 | ** 10 | *Node, nset=Nodes 11 | 1, 0., 0., 0. 12 | 2, , 0., 0. 13 | 3, , , 0. 14 | 4, 0., , 0. 15 | 5, 0., 0., 16 | 6, , 0., 17 | 7, , , 18 | 8, 0., , 19 | *Nset, nset=X+ 20 | 2, 3, 6, 7 21 | *Nset, nset=X- 22 | 1, 4, 5, 8 23 | *Nset, nset=Y+ 24 | 3, 4, 7, 8 25 | *Nset, nset=Y- 26 | 1, 2, 5, 6 27 | *Nset, nset=Z+ 28 | 5, 6, 7, 8 29 | *Nset, nset=Z- 30 | 1, 2, 3, 4 31 | ** 32 | *Element, type=COH3D8, elset=COHESIVE 33 | 1, 1, 2, 3, 4, 5, 6, 7, 8 34 | ** 35 | *Cohesive Section, elset=COHESIVE, material=IM7-8552, response=TRACTION SEPARATION, thickness=SPECIFIED 36 | 1.0, 37 | ** 38 | *Material, name=IM7-8552 39 | *Density 40 | 1.57e-09, 41 | *User material, constants=40 42 | ** feature flags, , thickness, 4, 5, 6, 7, 8 43 | 200000, , , , , , , , 44 | ** 9 10 11 12 13 14 15 16 45 | ** E1, E2, G12, nu12, nu23, YT, SL GYT 46 | , , , , , 62.3, 92.30, 0.277, 47 | ** 17 18 19 20 21 22 23 24 48 | ** GSL, eta_BK, YC, alpha0 E3, G13, G23, nu13, 49 | 0.788, 1.634, 199.8, 0.925, 1.d6, , , , 50 | ** 25 26 27 28 29 30 31 32 51 | ** alpha11, alpha22, alpha_PL, n_PL, XT, fXT, GXT, fGXT, 52 | , , , , , , , , 53 | ** 33 34 35 36 37 38 39 40 54 | ** XC, fXC, GXC, fGXC, phi_ff, w_kb, T_sf, mu 55 | , , , , , , , 0.3 56 | *Depvar 57 | 19, 58 | 1, COH_dmg 59 | 2, COH_delta_s1 60 | 3, COH_delta_n 61 | 4, COH_delta_s2 62 | 5, COH_B 63 | 9, COH_FI 64 | 15, COH_slide1 65 | 16, COH_slide2 66 | ** *Characteristic Length, definition=USER, components=3 67 | ** 68 | *Initial Conditions, Type=Solution 69 | COHESIVE, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 70 | 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 71 | 0.d0, 0.d0, 0.d0, 0.d0, 0.d0 72 | *Boundary 73 | Z+, 1, 2, 0 74 | Z-, 1, 3, 0 75 | ** 76 | *Amplitude, name=LoadUp, definition=SMOOTH STEP 77 | 0., 0., , 1. 78 | ** 79 | *Step, nlgeom=YES 80 | *Dynamic, Explicit 81 | , , , 82 | *Fixed Mass Scaling, factor=5000. 83 | ** 84 | *Boundary, AMPLITUDE=LoadUp 85 | Z+, 3, 3, 86 | ** 87 | *Output, FIELD 88 | *Element Output 89 | SDV1, SDV2, SDV3, SDV4, SDV5, SDV9, SDV15, SDV16, S 90 | *Node Output 91 | U, RF 92 | *Output, HISTORY, frequency=1 93 | *Energy Output 94 | ALLIE, ALLKE, ALLPD, ALLSE 95 | *Node Output, NSET=Z+ 96 | U, RF 97 | *Element Output, ELSET=COHESIVE 98 | SDV1, SDV2, SDV3, SDV4, SDV5, SDV9, SDV15, SDV16, S 99 | ** 100 | *End Step 101 | -------------------------------------------------------------------------------- /tests/test_COH3D8_normal_expected.py: -------------------------------------------------------------------------------- 1 | YT = 62.3 2 | GYT = 0.277 3 | length = 0.2 4 | 5 | enerFrac = GYT * length * length 6 | 7 | parameters = { 8 | "results": [ 9 | { 10 | "type": "max", 11 | "identifier": 12 | { 13 | "symbol": "S33", 14 | "elset": "COHESIVE", 15 | "position": "Element 1 Int Point 1" 16 | }, 17 | "referenceValue": YT, 18 | "tolerance": YT * 0.001 # 0.1% error 19 | }, 20 | { 21 | "type": "disp_at_zero_y", 22 | "step": "Step-1", 23 | "identifier": [ 24 | { # x 25 | "symbol": "U3", 26 | "nset": "Z+", 27 | "position": "Node 5" 28 | }, 29 | { # y 30 | "symbol": "S33", 31 | "elset": "COHESIVE", 32 | "position": "Element 1 Int Point 1" 33 | } 34 | ], 35 | "window": [0.008, 0.010], 36 | "zeroTol": 0.005, # Defines how close to zero the y value needs to be 37 | "referenceValue": 2. * GYT / YT, # Cohesive displacement-jump at complete failure 38 | "tolerance": 2. * GYT / YT * 0.001 # 0.1% error 39 | }, 40 | { 41 | "type": "max", 42 | "identifier": 43 | { 44 | "symbol": "SDV_COH_dmg", 45 | "elset": "COHESIVE", 46 | "position": "Element 1 Int Point 1" 47 | }, 48 | "referenceValue": 1.0, 49 | "tolerance": 0.0 50 | }, 51 | { 52 | "type": "continuous", 53 | "identifier": 54 | { 55 | "symbol": "S33", 56 | "elset": "COHESIVE", 57 | "position": "Element 1 Int Point 1" 58 | }, 59 | "referenceValue": 0.0, 60 | "tolerance": 0.1 61 | }, 62 | { 63 | "type": "max", 64 | "identifier": "Plastic dissipation: ALLPD for Whole Model", 65 | "referenceValue": enerFrac, # Unrecoverable energy dissipation from fracture * fracture area: GYT*LC1*LC3 66 | "tolerance": enerFrac * 0.001 # 0.1% error 67 | }, 68 | { 69 | "type": "finalValue", 70 | "identifier": "Plastic dissipation: ALLPD for Whole Model", 71 | "referenceValue": enerFrac, # Unrecoverable energy dissipation from fracture * fracture area: GYT*LC1*LC3 72 | "tolerance": enerFrac * 0.001 # 0.1% error 73 | } 74 | ] 75 | } 76 | -------------------------------------------------------------------------------- /tests/test_COH3D8_shear13.inp: -------------------------------------------------------------------------------- 1 | *Heading 2 | Single cohesive element test for mode II response 3 | ** 4 | *Parameter 5 | length = 0.2 6 | thickness = 0.0 7 | displacement = 0.03 8 | stepDuration = 0.1 9 | ** 10 | *Node, nset=Nodes 11 | 1, 0., 0., 0. 12 | 2, , 0., 0. 13 | 3, , , 0. 14 | 4, 0., , 0. 15 | 5, 0., 0., 16 | 6, , 0., 17 | 7, , , 18 | 8, 0., , 19 | *Nset, nset=X+ 20 | 2, 3, 6, 7 21 | *Nset, nset=X- 22 | 1, 4, 5, 8 23 | *Nset, nset=Y+ 24 | 3, 4, 7, 8 25 | *Nset, nset=Y- 26 | 1, 2, 5, 6 27 | *Nset, nset=Z+ 28 | 5, 6, 7, 8 29 | *Nset, nset=Z- 30 | 1, 2, 3, 4 31 | ** 32 | *Element, type=COH3D8, elset=COHESIVE 33 | 1, 1, 2, 3, 4, 5, 6, 7, 8 34 | ** 35 | *Cohesive Section, elset=COHESIVE, material=IM7-8552, response=TRACTION SEPARATION, thickness=SPECIFIED 36 | 1.0, 37 | ** 38 | *Material, name=IM7-8552 39 | *Density 40 | 1.57e-09, 41 | *User material, constants=40 42 | ** feature flags, , thickness, 4, 5, 6, 7, 8 43 | 200000, , , , , , , , 44 | ** 9 10 11 12 13 14 15 16 45 | ** E1, E2, G12, nu12, nu23, YT, SL GYT 46 | , , , , , 62.3, 92.3, 0.277, 47 | ** 17 18 19 20 21 22 23 24 48 | ** GSL, eta_BK, YC, alpha0 E3, G13, G23, nu13, 49 | 0.788, 1.634, 199.8, 0.925, 1.d6, , , , 50 | ** 25 26 27 28 29 30 31 32 51 | ** alpha11, alpha22, alpha_PL, n_PL, XT, fXT, GXT, fGXT, 52 | , , , , , , , , 53 | ** 33 34 35 36 37 38 39 40 54 | ** XC, fXC, GXC, fGXC, phi_ff, w_kb, T_sf, mu 55 | , , , , , , , 0.3 56 | *Depvar 57 | 19, 58 | 1, COH_dmg 59 | 2, COH_delta_s1 60 | 3, COH_delta_n 61 | 4, COH_delta_s2 62 | 5, COH_B 63 | 9, COH_FI 64 | 15, COH_slide1 65 | 16, COH_slide2 66 | ** *Characteristic Length, definition=USER, components=3 67 | ** 68 | *Initial Conditions, Type=Solution 69 | COHESIVE, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 70 | 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 71 | 0.d0, 0.d0, 0.d0, 0.d0, 0.d0 72 | *Boundary 73 | Z+, 2, 3, 0 74 | Z-, 1, 3, 0 75 | ** 76 | *Amplitude, name=LoadUp, definition=SMOOTH STEP 77 | 0., 0., , 1. 78 | ** 79 | *Step, nlgeom=YES 80 | *Dynamic, Explicit 81 | , , , 82 | *Fixed Mass Scaling, factor=5000. 83 | ** 84 | *Boundary, AMPLITUDE=LoadUp 85 | Z+, 1, 1, 86 | ** 87 | *Output, FIELD 88 | *Element Output 89 | SDV1, SDV2, SDV3, SDV4, SDV5, SDV9, SDV15, SDV16, S 90 | *Node Output 91 | U, RF 92 | *Output, HISTORY, frequency=1 93 | *Energy Output 94 | ALLIE, ALLKE, ALLPD, ALLSE 95 | *Node Output, NSET=Z+ 96 | U, RF 97 | *Element Output, ELSET=COHESIVE 98 | SDV1, SDV2, SDV3, SDV4, SDV5, SDV9, SDV15, SDV16, S 99 | ** 100 | *End Step 101 | -------------------------------------------------------------------------------- /tests/test_COH3D8_shear13_expected.py: -------------------------------------------------------------------------------- 1 | SL = 92.3 2 | GSL = 0.788 3 | length = 0.2 4 | 5 | enerFrac = GSL * length * length 6 | 7 | parameters = { 8 | "results": [ 9 | { 10 | "type": "max", 11 | "identifier": 12 | { 13 | "symbol": "S13", 14 | "elset": "COHESIVE", 15 | "position": "Element 1 Int Point 1" 16 | }, 17 | "referenceValue": SL, 18 | "tolerance": SL * 0.001 # 0.1% error 19 | }, 20 | { 21 | "type": "disp_at_zero_y", 22 | "step": "Step-1", 23 | "identifier": [ 24 | { # x 25 | "symbol": "U1", 26 | "nset": "Z+", 27 | "position": "Node 5" 28 | }, 29 | { # y 30 | "symbol": "S13", 31 | "elset": "COHESIVE", 32 | "position": "Element 1 Int Point 1" 33 | } 34 | ], 35 | "window": [0.015, 0.020], 36 | "zeroTol": 0.005, # Defines how close to zero the y value needs to be 37 | "referenceValue": 2. * GSL / SL, # Cohesive displacement-jump at complete failure 38 | "tolerance": 2. * GSL / SL * 0.001 # 0.1% error 39 | }, 40 | { 41 | "type": "max", 42 | "identifier": 43 | { 44 | "symbol": "SDV_COH_dmg", 45 | "elset": "COHESIVE", 46 | "position": "Element 1 Int Point 1" 47 | }, 48 | "referenceValue": 1.0, 49 | "tolerance": 0.0 50 | }, 51 | { 52 | "type": "continuous", 53 | "identifier": 54 | { 55 | "symbol": "S13", 56 | "elset": "COHESIVE", 57 | "position": "Element 1 Int Point 1" 58 | }, 59 | "referenceValue": 0.0, 60 | "tolerance": 0.2 61 | }, 62 | { 63 | "type": "max", 64 | "identifier": "Plastic dissipation: ALLPD for Whole Model", 65 | "referenceValue": enerFrac, # Unrecoverable energy dissipation from fracture * fracture area: GSL*area 66 | "tolerance": enerFrac * 0.001 # 0.1% error 67 | }, 68 | { 69 | "type": "finalValue", 70 | "identifier": "Plastic dissipation: ALLPD for Whole Model", 71 | "referenceValue": enerFrac, # Unrecoverable energy dissipation from fracture * fracture area: GSL*area 72 | "tolerance": enerFrac * 0.001 # 0.1% error 73 | } 74 | ] 75 | } 76 | -------------------------------------------------------------------------------- /tests/test_COH3D8_shear13_friction_expected.py: -------------------------------------------------------------------------------- 1 | import math 2 | 3 | applied_compression = -10.0 4 | coefficient_of_friction = 0.3 5 | 6 | SL = 92.3 # longitudinal shear strength 7 | YC = 199.8 # matrix compressive strength 8 | GSL = 0.788 # Mode II matrix fracture toughness 9 | alpha0 = 0.925 # matrix crack orientation due to pure matrix compression failure 10 | length = 0.2 # element edge length 11 | 12 | eta_L = -SL * math.cos(2*alpha0) / (YC * math.cos(alpha0) * math.cos(alpha0)) 13 | 14 | enerFrac = GSL * length * length 15 | 16 | parameters = { 17 | "results": [ 18 | { 19 | "type": "min", 20 | "step": "Compression", 21 | "identifier": 22 | { 23 | "symbol": "S33", 24 | "elset": "COHESIVE", 25 | "position": "Element 1 Int Point 1" 26 | }, 27 | "referenceValue": applied_compression, 28 | "tolerance": applied_compression * 0.001 # 0.1% error 29 | }, 30 | { 31 | "type": "max", 32 | "step": "Shear", 33 | "identifier": 34 | { 35 | "symbol": "S13", 36 | "elset": "COHESIVE", 37 | "position": "Element 1 Int Point 1" 38 | }, 39 | "referenceValue": SL - eta_L * applied_compression, 40 | "tolerance": (SL - eta_L * applied_compression) * 0.001 # 0.1% error 41 | }, 42 | { 43 | "type": "finalValue", 44 | "step": "Shear", 45 | "identifier": 46 | { 47 | "symbol": "S13", 48 | "elset": "COHESIVE", 49 | "position": "Element 1 Int Point 1" 50 | }, 51 | "referenceValue": -applied_compression * coefficient_of_friction, 52 | "tolerance": -applied_compression * coefficient_of_friction * 0.001 # 0.1% 53 | }, 54 | { 55 | "type": "max", 56 | "step": "Shear", 57 | "identifier": 58 | { 59 | "symbol": "SDV_COH_dmg", 60 | "elset": "COHESIVE", 61 | "position": "Element 1 Int Point 1" 62 | }, 63 | "referenceValue": 1.0, 64 | "tolerance": 0.0 65 | }, 66 | { 67 | "type": "continuous", 68 | "step": "Shear", 69 | "identifier": 70 | { 71 | "symbol": "S13", 72 | "elset": "COHESIVE", 73 | "position": "Element 1 Int Point 1" 74 | }, 75 | "referenceValue": 0.0, 76 | "tolerance": 0.2 77 | }, 78 | { 79 | "type": "max", 80 | "identifier": "Plastic dissipation: ALLPD for Whole Model", 81 | "referenceValue": enerFrac, # Unrecoverable energy dissipation from fracture * fracture area: GSL*area 82 | "tolerance": enerFrac * 0.001 # 0.1% error 83 | }, 84 | { 85 | "type": "finalValue", 86 | "identifier": "Plastic dissipation: ALLPD for Whole Model", 87 | "referenceValue": enerFrac, # Unrecoverable energy dissipation from fracture * fracture area: GSL*area 88 | "tolerance": enerFrac * 0.001 # 0.1% error 89 | } 90 | ] 91 | } 92 | -------------------------------------------------------------------------------- /tests/test_COH3D8_shear23.inp: -------------------------------------------------------------------------------- 1 | *Heading 2 | Single cohesive element test for mode II response 3 | ** 4 | *Parameter 5 | length = 0.2 6 | thickness = 0.0 7 | displacement = 0.03 8 | stepDuration = 0.1 9 | ** 10 | *Node, nset=Nodes 11 | 1, 0., 0., 0. 12 | 2, , 0., 0. 13 | 3, , , 0. 14 | 4, 0., , 0. 15 | 5, 0., 0., 16 | 6, , 0., 17 | 7, , , 18 | 8, 0., , 19 | *Nset, nset=X+ 20 | 2, 3, 6, 7 21 | *Nset, nset=X- 22 | 1, 4, 5, 8 23 | *Nset, nset=Y+ 24 | 3, 4, 7, 8 25 | *Nset, nset=Y- 26 | 1, 2, 5, 6 27 | *Nset, nset=Z+ 28 | 5, 6, 7, 8 29 | *Nset, nset=Z- 30 | 1, 2, 3, 4 31 | ** 32 | *Element, type=COH3D8, elset=COHESIVE 33 | 1, 1, 2, 3, 4, 5, 6, 7, 8 34 | ** 35 | *Cohesive Section, elset=COHESIVE, material=IM7-8552, response=TRACTION SEPARATION, thickness=SPECIFIED 36 | 1.0, 37 | ** 38 | *Material, name=IM7-8552 39 | *Density 40 | 1.57e-09, 41 | *User material, constants=40 42 | ** feature flags, , thickness, 4, 5, 6, 7, 8 43 | 200000, , , , , , , , 44 | ** 9 10 11 12 13 14 15 16 45 | ** E1, E2, G12, nu12, nu23, YT, SL GYT 46 | , , , , , 62.3, 92.3, 0.277, 47 | ** 17 18 19 20 21 22 23 24 48 | ** GSL, eta_BK, YC, alpha0 E3, G13, G23, nu13, 49 | 0.788, 1.634, 199.8, 0.925, 1.d6, , , , 50 | ** 25 26 27 28 29 30 31 32 51 | ** alpha11, alpha22, alpha_PL, n_PL, XT, fXT, GXT, fGXT, 52 | , , , , , , , , 53 | ** 33 34 35 36 37 38 39 40 54 | ** XC, fXC, GXC, fGXC, phi_ff, w_kb, T_sf, mu 55 | , , , , , , , 0.3 56 | *Depvar 57 | 19, 58 | 1, COH_dmg 59 | 2, COH_delta_s1 60 | 3, COH_delta_n 61 | 4, COH_delta_s2 62 | 5, COH_B 63 | 9, COH_FI 64 | 15, COH_slide1 65 | 16, COH_slide2 66 | ** *Characteristic Length, definition=USER, components=3 67 | ** 68 | *Initial Conditions, Type=Solution 69 | COHESIVE, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 70 | 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 71 | 0.d0, 0.d0, 0.d0, 0.d0, 0.d0 72 | *Boundary 73 | Z+, 1, 1, 0 74 | Z+, 3, 3, 0 75 | Z-, 1, 3, 0 76 | ** 77 | *Amplitude, name=LoadUp, definition=SMOOTH STEP 78 | 0., 0., , 1. 79 | ** 80 | *Step, name=Shear, nlgeom=YES 81 | *Dynamic, Explicit 82 | , , , 83 | *Fixed Mass Scaling, factor=5000. 84 | ** 85 | *Boundary, AMPLITUDE=LoadUp 86 | Z+, 2, 2, 87 | ** 88 | *Output, FIELD 89 | *Element Output 90 | SDV1, SDV2, SDV3, SDV4, SDV5, SDV9, SDV15, SDV16, S 91 | *Node Output 92 | U, RF 93 | *Output, HISTORY, frequency=1 94 | *Energy Output 95 | ALLIE, ALLKE, ALLPD, ALLSE 96 | *Node Output, NSET=Z+ 97 | U, RF 98 | *Element Output, ELSET=COHESIVE 99 | SDV1, SDV2, SDV3, SDV4, SDV5, SDV9, SDV15, SDV16, S 100 | ** 101 | *End Step 102 | -------------------------------------------------------------------------------- /tests/test_COH3D8_shear23_expected.py: -------------------------------------------------------------------------------- 1 | import math 2 | 3 | SL = 92.3 # longitudinal shear strength 4 | GSL = 0.788 # Mode II matrix fracture toughness 5 | YC = 199.8 # matrix compressive strength 6 | alpha0 = 0.925 # matrix crack orientation due to pure matrix compression failure 7 | length = 0.2 # element edge length 8 | 9 | ST = YC * math.cos(alpha0) * (math.sin(alpha0) + math.cos(alpha0) / math.tan(2*alpha0)) 10 | enerFrac = GSL * length * length 11 | 12 | parameters = { 13 | "results": [ 14 | { 15 | "type": "max", 16 | "step": "Shear", 17 | "identifier": 18 | { 19 | "symbol": "S23", 20 | "elset": "COHESIVE", 21 | "position": "Element 1 Int Point 1" 22 | }, 23 | "referenceValue": ST, 24 | "tolerance": ST * 0.001 # 0.1% error 25 | }, 26 | { 27 | "type": "disp_at_zero_y", 28 | "step": "Shear", 29 | "identifier": [ 30 | { # x 31 | "symbol": "U2", 32 | "nset": "Z+", 33 | "position": "Node 5" 34 | }, 35 | { # y 36 | "symbol": "S23", 37 | "elset": "COHESIVE", 38 | "position": "Element 1 Int Point 1" 39 | } 40 | ], 41 | "window": [0.015, 0.025], 42 | "zeroTol": 0.005, # Defines how close to zero the y value needs to be 43 | "referenceValue": 2.0 * GSL / ST, # Cohesive displacement-jump at complete failure 44 | "tolerance": 2.0 * GSL / ST * 0.001 # 0.1% error 45 | }, 46 | { 47 | "type": "max", 48 | "step": "Shear", 49 | "identifier": 50 | { 51 | "symbol": "SDV_COH_dmg", 52 | "elset": "COHESIVE", 53 | "position": "Element 1 Int Point 1" 54 | }, 55 | "referenceValue": 1.0, 56 | "tolerance": 0.0 57 | }, 58 | { 59 | "type": "continuous", 60 | "step": "Shear", 61 | "identifier": 62 | { 63 | "symbol": "S23", 64 | "elset": "COHESIVE", 65 | "position": "Element 1 Int Point 1" 66 | }, 67 | "referenceValue": 0.0, 68 | "tolerance": 0.1 69 | }, 70 | { 71 | "type": "max", 72 | "identifier": "Plastic dissipation: ALLPD for Whole Model", 73 | "referenceValue": enerFrac, # Unrecoverable energy dissipation from fracture * fracture area: GSL*area 74 | "tolerance": enerFrac * 0.001 # 0.1% error 75 | }, 76 | { 77 | "type": "finalValue", 78 | "identifier": "Plastic dissipation: ALLPD for Whole Model", 79 | "referenceValue": enerFrac, # Unrecoverable energy dissipation from fracture * fracture area: GSL*area 80 | "tolerance": enerFrac * 0.001 # 0.1% error 81 | } 82 | ] 83 | } 84 | -------------------------------------------------------------------------------- /tests/test_COH3D8_shear23_friction_expected.py: -------------------------------------------------------------------------------- 1 | import math 2 | 3 | applied_compression = -10.0 4 | coefficient_of_friction = 0.3 5 | 6 | SL = 92.3 # longitudinal shear strength 7 | YC = 199.8 # matrix compressive strength 8 | GSL = 0.788 # Mode II matrix fracture toughness 9 | alpha0 = 0.925 # matrix crack orientation due to pure matrix compression failure 10 | length = 0.2 # element edge length 11 | 12 | ST = YC * math.cos(alpha0) * (math.sin(alpha0) + math.cos(alpha0) / math.tan(2*alpha0)) 13 | eta_T = -1./math.tan(2*alpha0) 14 | 15 | enerFrac = GSL * length * length 16 | 17 | parameters = { 18 | "results": [ 19 | { 20 | "type": "min", 21 | "step": "Compression", 22 | "identifier": 23 | { 24 | "symbol": "S33", 25 | "elset": "COHESIVE", 26 | "position": "Element 1 Int Point 1" 27 | }, 28 | "referenceValue": applied_compression, 29 | "tolerance": applied_compression * 0.001 # 0.1% error 30 | }, 31 | { 32 | "type": "max", 33 | "step": "Shear", 34 | "identifier": 35 | { 36 | "symbol": "S23", 37 | "elset": "COHESIVE", 38 | "position": "Element 1 Int Point 1" 39 | }, 40 | "referenceValue": ST - eta_T * applied_compression, 41 | "tolerance": (ST - eta_T * applied_compression) * 0.001 # 0.1% error 42 | }, 43 | { 44 | "type": "finalValue", 45 | "step": "Shear", 46 | "identifier": 47 | { 48 | "symbol": "S23", 49 | "elset": "COHESIVE", 50 | "position": "Element 1 Int Point 1" 51 | }, 52 | "referenceValue": -applied_compression * coefficient_of_friction, 53 | "tolerance": -applied_compression * coefficient_of_friction * 0.001 # 0.1% error 54 | }, 55 | { 56 | "type": "max", 57 | "step": "Shear", 58 | "identifier": 59 | { 60 | "symbol": "SDV_COH_dmg", 61 | "elset": "COHESIVE", 62 | "position": "Element 1 Int Point 1" 63 | }, 64 | "referenceValue": 1.0, 65 | "tolerance": 0.0 66 | }, 67 | { 68 | "type": "continuous", 69 | "step": "Shear", 70 | "identifier": 71 | { 72 | "symbol": "S23", 73 | "elset": "COHESIVE", 74 | "position": "Element 1 Int Point 1" 75 | }, 76 | "referenceValue": 0.0, 77 | "tolerance": 0.2 78 | }, 79 | { 80 | "type": "max", 81 | "identifier": "Plastic dissipation: ALLPD for Whole Model", 82 | "referenceValue": enerFrac, # Unrecoverable energy dissipation from fracture * fracture area: GSL*area 83 | "tolerance": enerFrac * 0.001 # 0.1% error 84 | }, 85 | { 86 | "type": "finalValue", 87 | "identifier": "Plastic dissipation: ALLPD for Whole Model", 88 | "referenceValue": enerFrac, # Unrecoverable energy dissipation from fracture * fracture area: GSL*area 89 | "tolerance": enerFrac * 0.001 # 0.1% error 90 | } 91 | ] 92 | } 93 | -------------------------------------------------------------------------------- /tests/test_COH3D8_thick_normal_expected.py: -------------------------------------------------------------------------------- 1 | YT = 62.3 2 | GYT = 0.277 3 | length = 0.2 4 | 5 | enerFrac = GYT * length * length 6 | 7 | parameters = { 8 | "results": [ 9 | { 10 | "type": "max", 11 | "identifier": 12 | { 13 | "symbol": "S33", 14 | "elset": "COHESIVE", 15 | "position": "Element 1 Int Point 1" 16 | }, 17 | "referenceValue": YT, 18 | "tolerance": YT * 0.001 # 0.1% error 19 | }, 20 | { 21 | "type": "disp_at_zero_y", 22 | "step": "Step-1", 23 | "identifier": [ 24 | { # x 25 | "symbol": "U3", 26 | "nset": "Z+", 27 | "position": "Node 5" 28 | }, 29 | { # y 30 | "symbol": "S33", 31 | "elset": "COHESIVE", 32 | "position": "Element 1 Int Point 1" 33 | } 34 | ], 35 | "window": [0.008, 0.010], 36 | "zeroTol": 0.005, # Defines how close to zero the y value needs to be 37 | "referenceValue": 2. * GYT / YT, # Cohesive displacement-jump at complete failure 38 | "tolerance": 2. * GYT / YT * 0.001 # 0.1% error 39 | }, 40 | { 41 | "type": "max", 42 | "identifier": 43 | { 44 | "symbol": "SDV_COH_dmg", 45 | "elset": "COHESIVE", 46 | "position": "Element 1 Int Point 1" 47 | }, 48 | "referenceValue": 1.0, 49 | "tolerance": 0.0 50 | }, 51 | { 52 | "type": "continuous", 53 | "identifier": 54 | { 55 | "symbol": "S33", 56 | "elset": "COHESIVE", 57 | "position": "Element 1 Int Point 1" 58 | }, 59 | "referenceValue": 0.0, 60 | "tolerance": 0.1 61 | }, 62 | { 63 | "type": "max", 64 | "identifier": "Plastic dissipation: ALLPD for Whole Model", 65 | "referenceValue": enerFrac, # Unrecoverable energy dissipation from fracture * fracture area: GYT*LC1*LC3 66 | "tolerance": enerFrac * 0.001 # 0.1% error 67 | }, 68 | { 69 | "type": "finalValue", 70 | "identifier": "Plastic dissipation: ALLPD for Whole Model", 71 | "referenceValue": enerFrac, # Unrecoverable energy dissipation from fracture * fracture area: GYT*LC1*LC3 72 | "tolerance": enerFrac * 0.001 # 0.1% error 73 | } 74 | ] 75 | } 76 | -------------------------------------------------------------------------------- /tests/test_COH3D8_thick_shear13_expected.py: -------------------------------------------------------------------------------- 1 | SL = 92.3 2 | GSL = 0.788 3 | length = 0.2 4 | 5 | enerFrac = GSL * length * length 6 | 7 | parameters = { 8 | "results": [ 9 | { 10 | "type": "max", 11 | "identifier": 12 | { 13 | "symbol": "S13", 14 | "elset": "COHESIVE", 15 | "position": "Element 1 Int Point 1" 16 | }, 17 | "referenceValue": SL, 18 | "tolerance": SL * 0.001 # 0.1% error 19 | }, 20 | { 21 | "type": "disp_at_zero_y", 22 | "step": "Step-1", 23 | "identifier": [ 24 | { # x 25 | "symbol": "U1", 26 | "nset": "Z+", 27 | "position": "Node 5" 28 | }, 29 | { # y 30 | "symbol": "S13", 31 | "elset": "COHESIVE", 32 | "position": "Element 1 Int Point 1" 33 | } 34 | ], 35 | "window": [0.015, 0.020], 36 | "zeroTol": 0.005, # Defines how close to zero the y value needs to be 37 | "referenceValue": 2. * GSL / SL, # Cohesive displacement-jump at complete failure 38 | "tolerance": 2. * GSL / SL * 0.001 # 0.1% error 39 | }, 40 | { 41 | "type": "max", 42 | "identifier": 43 | { 44 | "symbol": "SDV_COH_dmg", 45 | "elset": "COHESIVE", 46 | "position": "Element 1 Int Point 1" 47 | }, 48 | "referenceValue": 1.0, 49 | "tolerance": 0.0 50 | }, 51 | { 52 | "type": "continuous", 53 | "identifier": 54 | { 55 | "symbol": "S13", 56 | "elset": "COHESIVE", 57 | "position": "Element 1 Int Point 1" 58 | }, 59 | "referenceValue": 0.0, 60 | "tolerance": 0.2 61 | }, 62 | { 63 | "type": "max", 64 | "identifier": "Plastic dissipation: ALLPD for Whole Model", 65 | "referenceValue": enerFrac, # Unrecoverable energy dissipation from fracture * fracture area: GSL*area 66 | "tolerance": enerFrac * 0.001 # 0.1% error 67 | }, 68 | { 69 | "type": "finalValue", 70 | "identifier": "Plastic dissipation: ALLPD for Whole Model", 71 | "referenceValue": enerFrac, # Unrecoverable energy dissipation from fracture * fracture area: GSL*area 72 | "tolerance": enerFrac * 0.001 # 0.1% error 73 | } 74 | ] 75 | } 76 | -------------------------------------------------------------------------------- /tests/test_COH3D8_thick_shear23_expected.py: -------------------------------------------------------------------------------- 1 | import math 2 | 3 | SL = 92.3 # longitudinal shear strength 4 | GSL = 0.788 # Mode II matrix fracture toughness 5 | YC = 199.8 # matrix compressive strength 6 | alpha0 = 0.925 # matrix crack orientation due to pure matrix compression failure 7 | length = 0.2 # element edge length 8 | 9 | ST = YC * math.cos(alpha0) * (math.sin(alpha0) + math.cos(alpha0) / math.tan(2*alpha0)) 10 | enerFrac = GSL * length * length 11 | 12 | parameters = { 13 | "results": [ 14 | { 15 | "type": "max", 16 | "step": "Shear", 17 | "identifier": 18 | { 19 | "symbol": "S23", 20 | "elset": "COHESIVE", 21 | "position": "Element 1 Int Point 1" 22 | }, 23 | "referenceValue": ST, 24 | "tolerance": ST * 0.001 # 0.1% error 25 | }, 26 | { 27 | "type": "disp_at_zero_y", 28 | "step": "Shear", 29 | "identifier": [ 30 | { # x 31 | "symbol": "U2", 32 | "nset": "Z+", 33 | "position": "Node 5" 34 | }, 35 | { # y 36 | "symbol": "S23", 37 | "elset": "COHESIVE", 38 | "position": "Element 1 Int Point 1" 39 | } 40 | ], 41 | "window": [0.015, 0.025], 42 | "zeroTol": 0.005, # Defines how close to zero the y value needs to be 43 | "referenceValue": 2.0 * GSL / ST, # Cohesive displacement-jump at complete failure 44 | "tolerance": 2.0 * GSL / ST * 0.001 # 0.1% error 45 | }, 46 | { 47 | "type": "max", 48 | "step": "Shear", 49 | "identifier": 50 | { 51 | "symbol": "SDV_COH_dmg", 52 | "elset": "COHESIVE", 53 | "position": "Element 1 Int Point 1" 54 | }, 55 | "referenceValue": 1.0, 56 | "tolerance": 0.0 57 | }, 58 | { 59 | "type": "continuous", 60 | "step": "Shear", 61 | "identifier": 62 | { 63 | "symbol": "S23", 64 | "elset": "COHESIVE", 65 | "position": "Element 1 Int Point 1" 66 | }, 67 | "referenceValue": 0.0, 68 | "tolerance": 0.1 69 | }, 70 | { 71 | "type": "max", 72 | "identifier": "Plastic dissipation: ALLPD for Whole Model", 73 | "referenceValue": enerFrac, # Unrecoverable energy dissipation from fracture * fracture area: GSL*area 74 | "tolerance": enerFrac * 0.001 # 0.1% error 75 | }, 76 | { 77 | "type": "finalValue", 78 | "identifier": "Plastic dissipation: ALLPD for Whole Model", 79 | "referenceValue": enerFrac, # Unrecoverable energy dissipation from fracture * fracture area: GSL*area 80 | "tolerance": enerFrac * 0.001 # 0.1% error 81 | } 82 | ] 83 | } 84 | -------------------------------------------------------------------------------- /tests/test_CPS4R_elementSize.inp: -------------------------------------------------------------------------------- 1 | *Heading 2 | Single element test for element size calculations in CPS4R element 3 | ** 4 | *Parameter 5 | length1 = 0.1 6 | length2 = 0.2 7 | length3 = 0.3 8 | displacement = 0.01 9 | stepDuration = 0.1 10 | ** 11 | ** NODES 12 | ** 13 | *NODE, NSET=GLOBAL 14 | 1, 0., 0. 15 | 2, , 0. 16 | 3, , 17 | 4, 0., 18 | *NSET, NSET=X+ 19 | 2, 3 20 | *NSET, NSET=X- 21 | 1, 4 22 | *NSET, NSET=Y+ 23 | 3, 4 24 | *NSET, NSET=Y- 25 | 1, 2 26 | ** 27 | ** ELEMENTS 28 | ** 29 | *ELEMENT, TYPE=CPS4R, ELSET=ALL_ELEMS 30 | 1, 1, 2, 3, 4 31 | ** 32 | ** PROPERTIES 33 | ** 34 | *SOLID SECTION, ELSET=ALL_ELEMS, MATERIAL=IM7-8552, orientation=Ori-1 35 | ** 36 | *Orientation, name=Ori-1 37 | 1., 0., 0., 0., 1., 0. 38 | 3, 0. 39 | ** 40 | ** MATERIALS 41 | ** 42 | *Material, name=IM7-8552 43 | *Density 44 | 1.57e-09, 45 | *User material, constants=4 46 | ** 1 2 3 4 47 | ** feature flags, , thickness, 4, 5, 6, 7, 8 48 | 0, , , , , , , , 49 | ** 50 | *Depvar, delete=11 51 | 19, 52 | 1, CDM_d2 53 | 2, CDM_Fb1 54 | 3, CDM_Fb2 55 | 4, CDM_Fb3 56 | 5, CDM_B 57 | 6, CDM_Lc1 58 | 7, CDM_Lc2 59 | 8, CDM_Lc3 60 | 9, CDM_FIm 61 | 10, CDM_alpha 62 | 11, CDM_STATUS 63 | 12, CDM_Plas12 64 | 13, CDM_Inel12 65 | 14, CDM_FIfT 66 | 15, CDM_slide1 67 | 16, CDM_slide2 68 | 17, CDM_FIfC 69 | 18, CDM_d1T 70 | 19, CDM_d1C 71 | *Characteristic Length, definition=USER, components=2 72 | ** 73 | ** INITIAL CONDITIONS 74 | ** 75 | *Initial Conditions, Type=Solution 76 | ALL_ELEMS, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 77 | 0.d0, 0.d0, 0.d0, 1, 0.d0, 0.d0, 0.d0, 78 | 0.d0, 0.d0, 0.d0, 0.d0, 0.d0 79 | *Boundary 80 | Y-, 2, 2, 0 81 | X-, 1, 1, 0 82 | ** 83 | *Amplitude, name=LoadUp, definition=SMOOTH STEP 84 | 0., 0., , 1. 85 | ** STEP 1 - TENSION MECHANICAL CYCLE 86 | ** 87 | *STEP, NLGEOM=YES 88 | *Dynamic, Explicit 89 | , , , 90 | *Bulk Viscosity 91 | 0.06, 1.2 92 | ** Mass Scaling: Semi-Automatic 93 | ** Whole Model 94 | *Fixed Mass Scaling, factor=5000. 95 | ** 96 | ** LOADING 97 | ** 98 | *Boundary, AMPLITUDE=LoadUp 99 | Y+, 2, 2, 100 | ** 101 | ** OUTPUT 102 | ** 103 | *OUTPUT, FIELD 104 | *ELEMENT OUTPUT 105 | SDV, S, LE 106 | *Node Output 107 | U, RF 108 | *OUTPUT, HISTORY, frequency=1 109 | *Energy Output 110 | ALLIE, ALLKE 111 | *NODE OUTPUT, NSET=Y+ 112 | U 113 | *NODE OUTPUT, NSET=Y+ 114 | RF 115 | *ELEMENT OUTPUT, ELSET=ALL_ELEMS 116 | SDV, S, LE 117 | ** 118 | *END STEP 119 | -------------------------------------------------------------------------------- /tests/test_CPS4R_elementSize_expected.py: -------------------------------------------------------------------------------- 1 | parameters = { 2 | "results": [ 3 | { 4 | "type": "max", 5 | "identifier": 6 | { 7 | "symbol": "SDV_CDM_Lc1", 8 | "elset": "ALL_ELEMS", 9 | "position": "Element 1 Int Point 1" 10 | }, 11 | "referenceValue": 0.1, 12 | "tolerance": 0.0001 13 | }, 14 | { 15 | "type": "max", 16 | "identifier": 17 | { 18 | "symbol": "SDV_CDM_Lc2", 19 | "elset": "ALL_ELEMS", 20 | "position": "Element 1 Int Point 1" 21 | }, 22 | "referenceValue": 0.2, 23 | "tolerance": 0.0002 24 | }, 25 | { 26 | "type": "max", 27 | "identifier": 28 | { 29 | "symbol": "SDV_CDM_Lc3", 30 | "elset": "ALL_ELEMS", 31 | "position": "Element 1 Int Point 1" 32 | }, 33 | "referenceValue": 0.3, 34 | "tolerance": 0.0003 35 | } 36 | ] 37 | } 38 | -------------------------------------------------------------------------------- /tests/test_S4R_elementSize.inp: -------------------------------------------------------------------------------- 1 | *Heading 2 | Single element test for element size calculations in S4R element 3 | ** 4 | *Parameter 5 | length1 = 0.1 6 | length2 = 0.2 7 | thickness = 0.3 8 | displacement = 0.01 9 | stepDuration = 0.1 10 | ** 11 | G13 = 5290. 12 | G23 = 2987. 13 | K11 = G13 * thickness * (5./6.) 14 | K22 = G23 * thickness * (5./6.) 15 | K12 = 0.0 16 | ** 17 | ** NODES 18 | ** 19 | *NODE, NSET=GLOBAL 20 | 1, 0., 0., 0. 21 | 2, , 0., 0. 22 | 3, , , 0. 23 | 4, 0., , 0. 24 | *NSET, NSET=X+ 25 | 2, 3 26 | *NSET, NSET=X- 27 | 1, 4 28 | *NSET, NSET=Y+ 29 | 3, 4 30 | *NSET, NSET=Y- 31 | 1, 2 32 | ** 33 | ** ELEMENTS 34 | ** 35 | *ELEMENT, TYPE=S4R, ELSET=ALL_ELEMS 36 | 1, 1, 2, 3, 4 37 | ** 38 | ** PROPERTIES 39 | ** 40 | *SHELL SECTION, ELSET=ALL_ELEMS, MATERIAL=IM7-8552, orientation=Ori-1 41 | 42 | *TRANSVERSE SHEAR STIFFNESS 43 | , , 44 | ** 45 | *Orientation, name=Ori-1 46 | 1., 0., 0., 0., 1., 0. 47 | 3, 0. 48 | ** 49 | ** MATERIALS 50 | ** 51 | *Material, name=IM7-8552 52 | *Density 53 | 1.57e-09, 54 | *User material, constants=8 55 | ** feature flags, , thickness, 4, 5, 6, 7, 8 56 | 0, , , , , , , , 57 | ** 58 | *Depvar, delete=11 59 | 19, 60 | 1, CDM_d2 61 | 2, CDM_Fb1 62 | 3, CDM_Fb2 63 | 4, CDM_Fb3 64 | 5, CDM_B 65 | 6, CDM_Lc1 66 | 7, CDM_Lc2 67 | 8, CDM_Lc3 68 | 9, CDM_FIm 69 | 10, CDM_alpha 70 | 11, CDM_STATUS 71 | 12, CDM_Plas12 72 | 13, CDM_Inel12 73 | 14, CDM_FIfT 74 | 15, CDM_slide1 75 | 16, CDM_slide2 76 | 17, CDM_FIfC 77 | 18, CDM_d1T 78 | 19, CDM_d1C 79 | *Characteristic Length, definition=USER, components=2 80 | ** 81 | ** INITIAL CONDITIONS 82 | ** 83 | *Initial Conditions, Type=Solution 84 | ALL_ELEMS, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 0.d0, 85 | 0.d0, 0.d0, 0.d0, 1, 0.d0, 0.d0, 0.d0, 86 | 0.d0, 0.d0, 0.d0, 0.d0, 0.d0 87 | *Boundary 88 | Y-, 2, 2, 0 89 | X-, 1, 1, 0 90 | ** 91 | *Amplitude, name=LoadUp, definition=SMOOTH STEP 92 | 0., 0., , 1. 93 | ** STEP 1 - TENSION MECHANICAL CYCLE 94 | ** 95 | *STEP, NLGEOM=YES 96 | *Dynamic, Explicit 97 | , , , 98 | *Bulk Viscosity 99 | 0.06, 1.2 100 | ** Mass Scaling: Semi-Automatic 101 | ** Whole Model 102 | *Fixed Mass Scaling, factor=5000. 103 | ** 104 | ** LOADING 105 | ** 106 | *Boundary, AMPLITUDE=LoadUp 107 | Y+, 2, 2, 108 | ** 109 | ** OUTPUT 110 | ** 111 | *OUTPUT, FIELD 112 | *ELEMENT OUTPUT 113 | SDV, S, LE 114 | *Node Output 115 | U, RF 116 | *OUTPUT, HISTORY, frequency=1 117 | *Energy Output 118 | ALLIE, ALLKE 119 | *NODE OUTPUT, NSET=Y+ 120 | U 121 | *NODE OUTPUT, NSET=Y+ 122 | RF 123 | *ELEMENT OUTPUT, ELSET=ALL_ELEMS 124 | SDV, S, LE 125 | ** 126 | *END STEP 127 | -------------------------------------------------------------------------------- /tests/test_S4R_elementSize_expected.py: -------------------------------------------------------------------------------- 1 | parameters = { 2 | "results": [ 3 | { 4 | "type": "max", 5 | "identifier": 6 | { 7 | "symbol": "SDV_CDM_Lc1", 8 | "elset": "ALL_ELEMS", 9 | "position": "Element 1 Int Point 1 Sec Pt SPOS, (fraction = 1:0)" 10 | }, 11 | "referenceValue": 0.1, 12 | "tolerance": 0.0001 13 | }, 14 | { 15 | "type": "max", 16 | "identifier": 17 | { 18 | "symbol": "SDV_CDM_Lc2", 19 | "elset": "ALL_ELEMS", 20 | "position": "Element 1 Int Point 1 Sec Pt SPOS, (fraction = 1:0)" 21 | }, 22 | "referenceValue": 0.2, 23 | "tolerance": 0.0002 24 | }, 25 | { 26 | "type": "max", 27 | "identifier": 28 | { 29 | "symbol": "SDV_CDM_Lc3", 30 | "elset": "ALL_ELEMS", 31 | "position": "Element 1 Int Point 1 Sec Pt SPOS, (fraction = 1:0)" 32 | }, 33 | "referenceValue": 0.3, 34 | "tolerance": 0.0003 35 | } 36 | ] 37 | } 38 | -------------------------------------------------------------------------------- /tests/verify_debug_test_C3D8R_fiberCompression_FKT_12_expected.py: -------------------------------------------------------------------------------- 1 | parameters = { 2 | # Add entry for each state variable to check; number is tolerance 3 | "alpha": 0.0, 4 | "b": 0.0, 5 | "d1c": 0.0, 6 | "d1t": 0.0, 7 | "d2": 0.0, 8 | "gamma_12": 1e-7, 9 | "inel12": 1e-7, 10 | "plas12": 1e-7, 11 | "phi0_12": 0.0, 12 | } -------------------------------------------------------------------------------- /tests/verify_debug_test_C3D8R_matrixTension_expected.py: -------------------------------------------------------------------------------- 1 | parameters = { 2 | # Add entry for each state variable to check; number is tolerance 3 | "alpha": 0.0, 4 | "b": 0.0, 5 | "d1c": 0.0, 6 | "d1t": 0.0, 7 | "d2": 0.0, 8 | "fb1": 0.0, 9 | "fb2": 0.0, 10 | "fb3": 0.0, 11 | "nstatev": 0, 12 | "phi0_12": 0.0, 13 | } -------------------------------------------------------------------------------- /usersubroutine-prerequisites.md: -------------------------------------------------------------------------------- 1 | # Abaqus Prerequisites for User Subroutines 2 | 3 | The table below summarizes the recommended compilers for use with different versions of Abaqus. See Abaqus documentation for more details. 4 | 5 | ## Windows 7, 8, 10 6 | | Abaqus version | C++ Compiler | Fortran Compiler | MPI* | 7 | |----------------|-----------------------------|------------------------------------------|-----------------| 8 | | 6.14 | Visual Studio 2010 SP1 | Intel Fortran Composer XE 2011 Update 6 | MS-MPI | 9 | | 2016 | Visual Studio 2012 Update 4 | Intel Fortran Composer XE 2011 Update 6 | MS-MPI | 10 | | 2017 | Visual Studio 2012 Update 5 | Intel Visual Fortran 16.0 update 1 | MS-MPI 4.2, 5.0 | 11 | | 2018 | Visual Studio 2015 Update 3 | Intel Visual Fortran 16.0 update 1 | MS-MPI 5.0, 8.0 | 12 | | 2019 | Visual Studio 2015 Update 3 | Intel Visual Fortran 16.0 update 1 | MS-MPI 9.0.1 | 13 | | 2020 | Visual Studio 2017 | Intel Visual Fortran 19.0.4 | MS-MPI 9.0.1 | 14 | | 2021 | Visual Studio 2017 | Intel Visual Fortran 19.0.5 | MS-MPI 9.0.1 | 15 | 16 | * Windos only seems to allow 1 MS-MPI installation. MS-MPI 9.0.1 appears to work for Abaqus 2017+. 17 | 18 | 19 | ## Linux 20 | | Abaqus version | C++ Compiler | Fortran Compiler | 21 | |----------------|-----------------------------|------------------------------------------| 22 | | 6.14 | GCC 4.4.7 | Intel Fortran Composer XE 2011 Update 6 | 23 | | 2016 | GCC | Intel Fortran Composer XE 2011 Update 6 | 24 | | 2017 | GCC | Intel Visual Fortran 16.0 update 1 | 25 | | 2018 | GCC | Intel Visual Fortran 16.0 update 1 | 26 | | 2019 | GCC | Intel Visual Fortran 16.0 update 1 | 27 | | 2020 | GCC >= 8.2 | Intel Visual Fortran 16.0.1 | 28 | | 2021 | GCC >= 8.2 | Intel Visual Fortran 16.0.1 | -------------------------------------------------------------------------------- /utilities/meshtools/__init__.py: -------------------------------------------------------------------------------- 1 | from meshtools import * -------------------------------------------------------------------------------- /utilities/meshtools/meshtools/__init__.py: -------------------------------------------------------------------------------- 1 | from points import * 2 | from vectors import * 3 | from meshing import * 4 | -------------------------------------------------------------------------------- /utilities/meshtools/meshtools/_version.py: -------------------------------------------------------------------------------- 1 | __version__ = "0.1.0" 2 | -------------------------------------------------------------------------------- /utilities/meshtools/meshtools/meshing.py: -------------------------------------------------------------------------------- 1 | from abaqus import * 2 | from abaqusConstants import * 3 | import mesh 4 | 5 | import itertools 6 | import numpy as np 7 | import operator 8 | import abc 9 | 10 | from points import * 11 | 12 | 13 | class Mesh(object): 14 | ''' 15 | Container for items related to meshing 16 | ''' 17 | 18 | 19 | @staticmethod 20 | def sortEdgesForBiasSeed(part, edges, center): 21 | ''' 22 | Arguments: 23 | part: reference to the part object 24 | edges: a tuple of edges 25 | center: a Point instance indicating the center of the fine mesh region 26 | 27 | This function returns the tuples e1 and e2 which corresponds to the arguments needed in seedEdgeByBias() 28 | where end1Edges = e1 and end2Edges = e2. In the seedEdgeByBias(), the smallest elements are 29 | positioned near the first vertice on the edge for edges passed in to end1Edges and visa versa. 30 | ''' 31 | 32 | # Check that e is a tuple of edges TODO 33 | # Check that c is a tuple of three floats TODO 34 | 35 | e1 = list() 36 | e2 = list() 37 | 38 | for e in edges: 39 | (v1, v2) = e.getVertices() 40 | v1Distance = Point.distance(Point.fromVertex(part.vertices[v1]), center) 41 | v2Distance = Point.distance(Point.fromVertex(part.vertices[v2]), center) 42 | 43 | if v1Distance < v2Distance: 44 | e1.append(e) 45 | else: 46 | e2.append(e) 47 | 48 | return (tuple(e1), tuple(e2)) 49 | 50 | 51 | @staticmethod 52 | def elementsFromNodeArray(nodeArray): 53 | ''' 54 | Given a this function returns a list of labels of the elements 55 | that are connected to the nodes in 56 | ''' 57 | # TODO: Check that the argument is a node Array 58 | 59 | # Get list of tuples of elements connected to each node (contains duplicates) 60 | allEls = [node.getElements() for node in nodeArray] 61 | 62 | # Flatten into a single list 63 | flattened = list(itertools.chain(*allEls)) 64 | 65 | # Remove duplicates and return a list of the labels 66 | return list({x.label for x in flattened}) 67 | 68 | -------------------------------------------------------------------------------- /utilities/meshtools/readme.md: -------------------------------------------------------------------------------- 1 | # meshtools 2 | This package provides useful tools for python scripting in Abaqus CAE. The source code is located in the directory `meshtools`. 3 | 4 | This code package is designed for use in Abaqus/CAE python scripts or in the Abaqus/CAE command line. 5 | 6 | 7 | ## Getting started 8 | 9 | ### Installation 10 | Meshtools must be installed so that it can be found by the Abaqus CAE interpreter (which is not the same as you system-wide python installation). Each version of Abaqus installed on your machine has it's own python installation, so you will need to repeat this procedure for every version of Abaqus that you want to be able to use `meshtools`. The installation can be automated using [`abaqus-python-addpkg`](../abaqus-python-addpkg/readme.md) with the `--local` option. 11 | ``` 12 | abaqus-python-addpkg.py install --local relative/path/to/this/directory 13 | ``` 14 | 15 | ### Usage 16 | To use this code, import the package in parent project python scrips: 17 | ``` 18 | import meshtools as mt 19 | 20 | ... 21 | # Other code here to create the model, mesh etc) 22 | ... 23 | 24 | # Example usage 25 | (e1, e2) = mt.Mesh.sortEdgesForBiasSeed(part=p, edges=e, center=mt.Point(x=0, y=0, z=0)) 26 | ``` 27 | Where `p` is a reference to the part object, `e` is a reference to an `EdgeArray` that specify the edges for which a bias seed should be applied, and `center` is an instance of `Point` that specifies the location toward which the seeds should be biased. The function returns a tuple of two `EdgeArray` in the format required by the native abaqus function `seedEdgeByBias` where `e1` is passed to `end1Edges` and `e2` is passed to `end2Edges`. 28 | 29 | 30 | 31 | ## Related libraries 32 | 1. Abapy: https://github.com/lcharleux/abapy 33 | -------------------------------------------------------------------------------- /utilities/meshtools/setup.py: -------------------------------------------------------------------------------- 1 | from setuptools import setup 2 | import re 3 | 4 | 5 | def get_version(path): 6 | version_file_as_str = open(path, "rt").read() 7 | version_re = r"^__version__ = ['\"]([^'\"]*)['\"]" 8 | match = re.search(version_re, version_file_as_str, re.M) 9 | if match: 10 | return match.group(1) 11 | else: 12 | raise RuntimeError("Unable to find version string.") 13 | 14 | 15 | setup( 16 | name="meshTools", 17 | version=get_version("./meshTools/_version.py"), 18 | install_requires=[], 19 | packages=["meshTools", ], 20 | ) 21 | -------------------------------------------------------------------------------- /utilities/ramberg-osgood-fit/soden1998_as4_3501-6.csv: -------------------------------------------------------------------------------- 1 | strain [mm/mm], stress [MPa] 2 | 0,0 3 | 0.00076,5 4 | 0.00114,7.5 5 | 0.00152,10 6 | 0.0019,12.5 7 | 0.00228,15 8 | 0.00266,17.5 9 | 0.00305,20 10 | 0.00344,22.5 11 | 0.00383,25 12 | 0.00424,27.5 13 | 0.00465,30 14 | 0.00507,32.5 15 | 0.00551,35 16 | 0.00587,37 17 | 0.00596,37.5 18 | 0.00644,40 19 | 0.00746,45 20 | 0.0086,50 21 | 0.00991,55 22 | 0.01142,60 23 | 0.01319,65 24 | 0.01527,70 25 | 0.01772,75 26 | 0.02,79 27 | -------------------------------------------------------------------------------- /utilities/ramberg-osgood-fit/soden1998_eglass_LY556.csv: -------------------------------------------------------------------------------- 1 | strain [mm/mm], stress [MPa] 2 | 0,0 3 | 0.001,5.83 4 | 0.002,11.66 5 | 0.003,17.49 6 | 0.004,23.32 7 | 0.005,29.15 8 | 0.006,34.98 9 | 0.007,37.705 10 | 0.008,41.298 11 | 0.009,44.535 12 | 0.01,47.446 13 | 0.011,50.056 14 | 0.012,52.391 15 | 0.013,54.475 16 | 0.014,56.331 17 | 0.015,57.982 18 | 0.016,59.447 19 | 0.017,60.748 20 | 0.018,61.902 21 | 0.019,62.927 22 | 0.02,63.839 23 | 0.021,64.653 24 | 0.022,65.382 25 | 0.023,66.041 26 | 0.024,66.639 27 | 0.025,67.188 28 | 0.026,67.696 29 | 0.027,68.173 30 | 0.028,68.624 31 | 0.029,69.055 32 | 0.03,69.472 33 | 0.032,70.273 34 | 0.034,71.039 35 | 0.035,71.409 36 | 0.037,72.109 37 | -------------------------------------------------------------------------------- /utilities/ramberg-osgood-fit/soden1998_eglass_MY750.csv: -------------------------------------------------------------------------------- 1 | strain [mm/mm], stress [MPa] 2 | 0.000, 0.0 3 | 0.001, 5.830 4 | 0.002, 11.660 5 | 0.003, 17.490 6 | 0.004, 23.320 7 | 0.005, 29.150 8 | 0.006, 34.980 9 | 0.007, 37.705 10 | 0.008, 41.298 11 | 0.009, 44.535 12 | 0.010, 47.446 13 | 0.011, 50.056 14 | 0.012, 52.391 15 | 0.013, 54.475 16 | 0.014, 56.331 17 | 0.015, 57.982 18 | 0.016, 59.447 19 | 0.017, 60.748 20 | 0.018, 61.902 21 | 0.019, 62.927 22 | 0.020, 63.839 23 | 0.021, 64.653 24 | 0.022, 65.382 25 | 0.023, 66.041 26 | 0.024, 66.639 27 | 0.025, 67.188 28 | 0.026, 67.696 29 | 0.027, 68.173 30 | 0.028, 68.624 31 | 0.029, 69.055 32 | 0.030, 69.472 33 | 0.032, 70.273 34 | 0.034, 71.039 35 | 0.035, 71.409 36 | 0.037, 72.109 37 | 0.038, 72.432 38 | 0.039, 72.728 39 | 0.040, 72.991 -------------------------------------------------------------------------------- /utilities/readme.md: -------------------------------------------------------------------------------- 1 | # CompDam Utilities 2 | 3 | This directory includes utilities that have been developed in parallel with CompDam. The utilities are organized into directories. Installation and usage information are included for each utility. 4 | 5 | ## Listing of utility tools 6 | 1. `abaqus-python-addpkg`: Command line tool for adding and removing python packages in the python installation used by abaqus/CAE and viewer. 7 | 2. `meshtools`: A collection of useful tools for python scripting finite element model mesh generation in Abaqus CAE. 8 | --------------------------------------------------------------------------------