-
Notifications
You must be signed in to change notification settings - Fork 17
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
creating functions to avoid superfluous computation of 0 gradient val…
…ues for non-local ivs; cleaning up unit test harness
- Loading branch information
Showing
2 changed files
with
148 additions
and
47 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
from collections import namedtuple | ||
|
||
from optimism.JaxConfig import * | ||
from optimism import Mechanics | ||
from optimism import FunctionSpace | ||
|
||
MechanicsInverseFunctions = namedtuple('MechanicsInverseFunctions', | ||
['partial_ivs_update_partial_ivs_prev']) | ||
|
||
def _compute_updated_internal_variables_gradient(dispGrads, states, dt, compute_state_new, gradient_shape): | ||
dgQuadPointRavel = dispGrads.reshape(dispGrads.shape[0]*dispGrads.shape[1],*dispGrads.shape[2:]) | ||
stQuadPointRavel = states.reshape(states.shape[0]*states.shape[1],*states.shape[2:]) | ||
statesNew = vmap(compute_state_new, (0, 0, None))(dgQuadPointRavel, stQuadPointRavel, dt) | ||
return statesNew.reshape(gradient_shape) | ||
|
||
def create_mechanics_inverse_functions(functionSpace, mode2D, materialModel, pressureProjectionDegree=None): | ||
fs = functionSpace | ||
|
||
if mode2D == 'plane strain': | ||
grad_2D_to_3D = Mechanics.plane_strain_gradient_transformation | ||
elif mode2D == 'axisymmetric': | ||
raise NotImplementedError | ||
|
||
modify_element_gradient = grad_2D_to_3D | ||
if pressureProjectionDegree is not None: | ||
raise NotImplementedError | ||
|
||
def compute_partial_ivs_update_partial_ivs_prev(U, stateVariables, dt=0.0): | ||
dispGrads = FunctionSpace.compute_field_gradient(fs, U, modify_element_gradient) | ||
update_gradient = jacfwd(materialModel.compute_state_new, argnums=1) | ||
grad_shape = stateVariables.shape + (stateVariables.shape[2],) | ||
return _compute_updated_internal_variables_gradient(dispGrads, stateVariables, dt,\ | ||
update_gradient, grad_shape) | ||
|
||
return MechanicsInverseFunctions(jit(compute_partial_ivs_update_partial_ivs_prev)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters