ansys / pydpf-core

Data Processing Framework - Python Core
http://dpf.docs.pyansys.com/
MIT License
67 stars 25 forks source link

why don't my dpf core elastic strain results match my ansys mechanical results? #154

Closed mcMunich closed 2 years ago

mcMunich commented 2 years ago

hello, trying to match some ansys mechanical results and I am pretty sure it is some detail I am not aware of. I have a simple model in mechanical that is solved and the .rst written to file. The equivalent stress and strain are calculated as expected.

The equivalent strain is equivalent stress/E modulus: image In my dpf core instance, I get the same values for equivalent stress: image But when I generate a strain I can't match my mechanical results (and I think I tried all the available). image

Is there some averaging or nodal calculation going that I am missing? I would like to be able to match a mechanical generated strain with a dpf post processed result.

rlagha commented 2 years ago

Hi @mcMunich , May I ask you to compare normal and shear strains? I suspect an issue on NUXY. Thanks Ramdane

mcMunich commented 2 years ago

hey Ramdane, the elastic_strain_X,Y,Z do agree with the mechanical result. As do the shear strains.

rlagha commented 2 years ago

@mcMunich , please could you try this?

strain = model.results.elastic_strain()
strain.inputs.requested_location.connect(dpf.locations.nodal)
eqv = dpf.operators.invariant.von_mises_eqv_fc(fields_container=strain.outputs.fields_container)
model.metadata.meshed_region.plot(eqv.eval())

Thanks Ramdane

mcMunich commented 2 years ago

@rlagha That works. The eqv equals the mechanical equivalent elastic strain - Averaged. invariant? wasn't on my radar.

rlagha commented 2 years ago

@mcMunich yes, we classified the equivalent von mises as an inviariant quantity since it's derived from the eigen values of the stress or strain tensors. The issue with strain eqv, is that it needs the NUXY, thus I recommend to request the trsain split by body/material, when it's a multi body/material model. strain = model.results.elastic_strain.split_by_body()

Thanks Ramdane