diff --git a/src/biodomain_equation_routines.f90 b/src/biodomain_equation_routines.f90 index 7d62f40a..ccf9e2ed 100755 --- a/src/biodomain_equation_routines.f90 +++ b/src/biodomain_equation_routines.f90 @@ -310,7 +310,8 @@ SUBROUTINE Biodomain_EquationsSetSetup(EQUATIONS_SET,EQUATIONS_SET_SETUP,err,err CALL FIELD_VARIABLE_TYPES_SET_AND_LOCK(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD,[FIELD_U_VARIABLE_TYPE, & & FIELD_DELUDELN_VARIABLE_TYPE],err,error,*999) CASE(EQUATIONS_SET_1D3D_MONODOMAIN_ELASTICITY_SUBTYPE,EQUATIONS_SET_MONODOMAIN_ELASTICITY_VELOCITY_SUBTYPE, & - & EQUATIONS_SET_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE,EQUATIONS_SET_1D3D_MONODOMAIN_ACTIVE_STRAIN_SUBTYPE) + & EQUATIONS_SET_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE,EQUATIONS_SET_1D3D_MONODOMAIN_ACTIVE_STRAIN_SUBTYPE, & + & EQUATIONS_SET_MONODOMAIN_ELASTICITY_MUSCLE_TENDON_SUBTYPE) CALL FIELD_NUMBER_OF_VARIABLES_SET_AND_LOCK(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD,3,err,error,*999) CALL FIELD_VARIABLE_TYPES_SET_AND_LOCK(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD,[FIELD_U_VARIABLE_TYPE, & & FIELD_DELUDELN_VARIABLE_TYPE,FIELD_V_VARIABLE_TYPE],err,error,*999) @@ -382,7 +383,8 @@ SUBROUTINE Biodomain_EquationsSetSetup(EQUATIONS_SET,EQUATIONS_SET_SETUP,err,err CALL FIELD_VARIABLE_TYPES_CHECK(EQUATIONS_SET_SETUP%FIELD,[FIELD_U_VARIABLE_TYPE,FIELD_DELUDELN_VARIABLE_TYPE], & & err,error,*999) CASE(EQUATIONS_SET_1D3D_MONODOMAIN_ELASTICITY_SUBTYPE,EQUATIONS_SET_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE, & - & EQUATIONS_SET_MONODOMAIN_ELASTICITY_VELOCITY_SUBTYPE,EQUATIONS_SET_1D3D_MONODOMAIN_ACTIVE_STRAIN_SUBTYPE) + & EQUATIONS_SET_MONODOMAIN_ELASTICITY_VELOCITY_SUBTYPE,EQUATIONS_SET_1D3D_MONODOMAIN_ACTIVE_STRAIN_SUBTYPE , & + & EQUATIONS_SET_MONODOMAIN_ELASTICITY_MUSCLE_TENDON_SUBTYPE) CALL FIELD_NUMBER_OF_VARIABLES_CHECK(EQUATIONS_SET_SETUP%FIELD,3,err,error,*999) CALL FIELD_VARIABLE_TYPES_CHECK(EQUATIONS_SET_SETUP%FIELD,[FIELD_U_VARIABLE_TYPE,FIELD_DELUDELN_VARIABLE_TYPE, & & FIELD_V_VARIABLE_TYPE],err,error,*999) @@ -644,7 +646,7 @@ SUBROUTINE Biodomain_EquationsSetSetup(EQUATIONS_SET,EQUATIONS_SET_SETUP,err,err CASE(EQUATIONS_SET_MONODOMAIN_EQUATION_TYPE) SELECT CASE(EQUATIONS_SET_SPEC_SUBTYPE) CASE(EQUATIONS_SET_1D3D_MONODOMAIN_ELASTICITY_SUBTYPE,EQUATIONS_SET_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE, & - & EQUATIONS_SET_1D3D_MONODOMAIN_ACTIVE_STRAIN_SUBTYPE) + & EQUATIONS_SET_1D3D_MONODOMAIN_ACTIVE_STRAIN_SUBTYPE,EQUATIONS_SET_MONODOMAIN_ELASTICITY_MUSCLE_TENDON_SUBTYPE) IF(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD_AUTO_CREATED) THEN !Create the auto created independent field CALL FIELD_CREATE_START(EQUATIONS_SET_SETUP%FIELD_USER_NUMBER,EQUATIONS_SET%REGION,EQUATIONS_SET%INDEPENDENT% & @@ -687,7 +689,8 @@ SUBROUTINE Biodomain_EquationsSetSetup(EQUATIONS_SET,EQUATIONS_SET_SETUP,err,err IF(EQUATIONS_SET_SPEC_SUBTYPE==EQUATIONS_SET_1D3D_MONODOMAIN_ELASTICITY_SUBTYPE) THEN CALL FIELD_NUMBER_OF_COMPONENTS_SET_AND_LOCK(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,FIELD_U_VARIABLE_TYPE, & & 1,err,error,*999) - ELSEIF(EQUATIONS_SET_SPEC_SUBTYPE==EQUATIONS_SET_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE) THEN + ELSEIF(EQUATIONS_SET_SPEC_SUBTYPE==EQUATIONS_SET_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE .OR. & + & EQUATIONS_SET_SPEC_SUBTYPE==EQUATIONS_SET_MONODOMAIN_ELASTICITY_MUSCLE_TENDON_SUBTYPE) THEN CALL FIELD_NUMBER_OF_COMPONENTS_SET_AND_LOCK(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,FIELD_U_VARIABLE_TYPE, & & 6,err,error,*999) ELSEIF(EQUATIONS_SET_SPEC_SUBTYPE==EQUATIONS_SET_1D3D_MONODOMAIN_ACTIVE_STRAIN_SUBTYPE) THEN @@ -696,7 +699,8 @@ SUBROUTINE Biodomain_EquationsSetSetup(EQUATIONS_SET,EQUATIONS_SET_SETUP,err,err ENDIF CALL FIELD_NUMBER_OF_COMPONENTS_SET_AND_LOCK(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,FIELD_V_VARIABLE_TYPE,5, & & err,error,*999) - IF(EQUATIONS_SET_SPEC_SUBTYPE==EQUATIONS_SET_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE) THEN + IF(EQUATIONS_SET_SPEC_SUBTYPE==EQUATIONS_SET_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE .OR. & + & EQUATIONS_SET_SPEC_SUBTYPE==EQUATIONS_SET_MONODOMAIN_ELASTICITY_MUSCLE_TENDON_SUBTYPE) THEN CALL FIELD_NUMBER_OF_COMPONENTS_SET_AND_LOCK(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,FIELD_U1_VARIABLE_TYPE, & & 4,err,error,*999) ELSE @@ -710,7 +714,8 @@ SUBROUTINE Biodomain_EquationsSetSetup(EQUATIONS_SET,EQUATIONS_SET_SETUP,err,err & GEOMETRIC_MESH_COMPONENT,err,error,*999) CALL FIELD_COMPONENT_MESH_COMPONENT_SET(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,FIELD_U_VARIABLE_TYPE,1, & & GEOMETRIC_MESH_COMPONENT,err,error,*999) - IF(EQUATIONS_SET_SPEC_SUBTYPE==EQUATIONS_SET_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE) THEN + IF(EQUATIONS_SET_SPEC_SUBTYPE==EQUATIONS_SET_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE .OR. & + & EQUATIONS_SET_SPEC_SUBTYPE==EQUATIONS_SET_MONODOMAIN_ELASTICITY_MUSCLE_TENDON_SUBTYPE) THEN CALL FIELD_COMPONENT_MESH_COMPONENT_SET(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,FIELD_U_VARIABLE_TYPE,2, & & GEOMETRIC_MESH_COMPONENT,err,error,*999) CALL FIELD_COMPONENT_MESH_COMPONENT_SET(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,FIELD_U_VARIABLE_TYPE,3, & @@ -738,7 +743,8 @@ SUBROUTINE Biodomain_EquationsSetSetup(EQUATIONS_SET,EQUATIONS_SET_SETUP,err,err & GEOMETRIC_MESH_COMPONENT,err,error,*999) CALL FIELD_COMPONENT_MESH_COMPONENT_SET(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,FIELD_U1_VARIABLE_TYPE,3, & & GEOMETRIC_MESH_COMPONENT,err,error,*999) - IF(EQUATIONS_SET_SPEC_SUBTYPE==EQUATIONS_SET_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE) THEN + IF(EQUATIONS_SET_SPEC_SUBTYPE==EQUATIONS_SET_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE .OR. & + & EQUATIONS_SET_SPEC_SUBTYPE==EQUATIONS_SET_MONODOMAIN_ELASTICITY_MUSCLE_TENDON_SUBTYPE) THEN CALL FIELD_COMPONENT_MESH_COMPONENT_SET(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,FIELD_U1_VARIABLE_TYPE, & & 4,GEOMETRIC_MESH_COMPONENT,err,error,*999) ENDIF @@ -758,7 +764,8 @@ SUBROUTINE Biodomain_EquationsSetSetup(EQUATIONS_SET,EQUATIONS_SET_SETUP,err,err CASE(EQUATIONS_SET_FEM_SOLUTION_METHOD) CALL FIELD_COMPONENT_INTERPOLATION_SET_AND_LOCK(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD, & & FIELD_U_VARIABLE_TYPE,1,FIELD_NODE_BASED_INTERPOLATION,err,error,*999) - IF(EQUATIONS_SET_SPEC_SUBTYPE==EQUATIONS_SET_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE) THEN + IF(EQUATIONS_SET_SPEC_SUBTYPE==EQUATIONS_SET_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE .OR. & + & EQUATIONS_SET_SPEC_SUBTYPE==EQUATIONS_SET_MONODOMAIN_ELASTICITY_MUSCLE_TENDON_SUBTYPE) THEN CALL FIELD_COMPONENT_INTERPOLATION_SET_AND_LOCK(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD, & & FIELD_U_VARIABLE_TYPE,2,FIELD_NODE_BASED_INTERPOLATION,err,error,*999) CALL FIELD_COMPONENT_INTERPOLATION_SET_AND_LOCK(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD, & @@ -786,7 +793,8 @@ SUBROUTINE Biodomain_EquationsSetSetup(EQUATIONS_SET,EQUATIONS_SET_SETUP,err,err & FIELD_U1_VARIABLE_TYPE,2,FIELD_CONSTANT_INTERPOLATION,err,error,*999) CALL FIELD_COMPONENT_INTERPOLATION_SET_AND_LOCK(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD, & & FIELD_U1_VARIABLE_TYPE,3,FIELD_CONSTANT_INTERPOLATION,err,error,*999) - IF(EQUATIONS_SET_SPEC_SUBTYPE==EQUATIONS_SET_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE) THEN + IF(EQUATIONS_SET_SPEC_SUBTYPE==EQUATIONS_SET_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE .OR. & + & EQUATIONS_SET_SPEC_SUBTYPE==EQUATIONS_SET_MONODOMAIN_ELASTICITY_MUSCLE_TENDON_SUBTYPE) THEN CALL FIELD_COMPONENT_INTERPOLATION_SET_AND_LOCK(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD, & & FIELD_U1_VARIABLE_TYPE,4,FIELD_NODE_BASED_INTERPOLATION,err,error,*999) ENDIF @@ -837,13 +845,15 @@ SUBROUTINE Biodomain_EquationsSetSetup(EQUATIONS_SET,EQUATIONS_SET_SETUP,err,err CALL FIELD_DATA_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U2_VARIABLE_TYPE,FIELD_DP_TYPE,err,error,*999) IF(EQUATIONS_SET_SPEC_SUBTYPE==EQUATIONS_SET_1D3D_MONODOMAIN_ELASTICITY_SUBTYPE) THEN CALL FIELD_NUMBER_OF_COMPONENTS_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE,1,err,error,*999) - ELSE IF(EQUATIONS_SET_SPEC_SUBTYPE==EQUATIONS_SET_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE) THEN + ELSE IF(EQUATIONS_SET_SPEC_SUBTYPE==EQUATIONS_SET_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE .OR. & + & EQUATIONS_SET_SPEC_SUBTYPE==EQUATIONS_SET_MONODOMAIN_ELASTICITY_MUSCLE_TENDON_SUBTYPE) THEN CALL FIELD_NUMBER_OF_COMPONENTS_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE,6,err,error,*999) ELSEIF(EQUATIONS_SET_SPEC_SUBTYPE==EQUATIONS_SET_1D3D_MONODOMAIN_ACTIVE_STRAIN_SUBTYPE) THEN CALL FIELD_NUMBER_OF_COMPONENTS_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE,4,err,error,*999) ENDIF CALL FIELD_NUMBER_OF_COMPONENTS_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_V_VARIABLE_TYPE,5,err,error,*999) - IF(EQUATIONS_SET_SPEC_SUBTYPE==EQUATIONS_SET_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE) THEN + IF(EQUATIONS_SET_SPEC_SUBTYPE==EQUATIONS_SET_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE .OR. & + & EQUATIONS_SET_SPEC_SUBTYPE==EQUATIONS_SET_MONODOMAIN_ELASTICITY_MUSCLE_TENDON_SUBTYPE) THEN CALL FIELD_NUMBER_OF_COMPONENTS_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U1_VARIABLE_TYPE,4,err,error,*999) ELSE CALL FIELD_NUMBER_OF_COMPONENTS_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U1_VARIABLE_TYPE,3,err,error,*999) @@ -853,7 +863,8 @@ SUBROUTINE Biodomain_EquationsSetSetup(EQUATIONS_SET,EQUATIONS_SET_SETUP,err,err CASE(EQUATIONS_SET_FEM_SOLUTION_METHOD) CALL FIELD_COMPONENT_INTERPOLATION_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE,1, & & FIELD_NODE_BASED_INTERPOLATION,err,error,*999) - IF(EQUATIONS_SET_SPEC_SUBTYPE==EQUATIONS_SET_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE) THEN + IF(EQUATIONS_SET_SPEC_SUBTYPE==EQUATIONS_SET_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE .OR. & + & EQUATIONS_SET_SPEC_SUBTYPE==EQUATIONS_SET_MONODOMAIN_ELASTICITY_MUSCLE_TENDON_SUBTYPE) THEN CALL FIELD_COMPONENT_INTERPOLATION_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE,2, & & FIELD_NODE_BASED_INTERPOLATION,err,error,*999) CALL FIELD_COMPONENT_INTERPOLATION_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE,3, & @@ -881,7 +892,8 @@ SUBROUTINE Biodomain_EquationsSetSetup(EQUATIONS_SET,EQUATIONS_SET_SETUP,err,err & FIELD_CONSTANT_INTERPOLATION,err,error,*999) CALL FIELD_COMPONENT_INTERPOLATION_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U1_VARIABLE_TYPE,3, & & FIELD_CONSTANT_INTERPOLATION,err,error,*999) - IF(EQUATIONS_SET_SPEC_SUBTYPE==EQUATIONS_SET_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE) THEN + IF(EQUATIONS_SET_SPEC_SUBTYPE==EQUATIONS_SET_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE .OR. & + & EQUATIONS_SET_SPEC_SUBTYPE==EQUATIONS_SET_MONODOMAIN_ELASTICITY_MUSCLE_TENDON_SUBTYPE) THEN CALL FIELD_COMPONENT_INTERPOLATION_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U1_VARIABLE_TYPE,4, & & FIELD_NODE_BASED_INTERPOLATION,err,error,*999) ENDIF @@ -1451,7 +1463,7 @@ SUBROUTINE Biodomain_EquationsSetSolutionMethodSet(EQUATIONS_SET,SOLUTION_METHOD SELECT CASE(EQUATIONS_SET_SPEC_SUBTYPE) CASE(EQUATIONS_SET_NO_SUBTYPE,EQUATIONS_SET_1D3D_MONODOMAIN_ELASTICITY_SUBTYPE, & & EQUATIONS_SET_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE,EQUATIONS_SET_MONODOMAIN_ELASTICITY_VELOCITY_SUBTYPE, & - & EQUATIONS_SET_1D3D_MONODOMAIN_ACTIVE_STRAIN_SUBTYPE) + & EQUATIONS_SET_1D3D_MONODOMAIN_ACTIVE_STRAIN_SUBTYPE,EQUATIONS_SET_MONODOMAIN_ELASTICITY_MUSCLE_TENDON_SUBTYPE) SELECT CASE(SOLUTION_METHOD) CASE(EQUATIONS_SET_FEM_SOLUTION_METHOD) EQUATIONS_SET%SOLUTION_METHOD=EQUATIONS_SET_FEM_SOLUTION_METHOD @@ -1567,7 +1579,8 @@ SUBROUTINE Biodomain_EquationsSetSpecificationSet(equationsSet,specification,err CASE(EQUATIONS_SET_1D3D_MONODOMAIN_ELASTICITY_SUBTYPE, & & EQUATIONS_SET_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE, & & EQUATIONS_SET_MONODOMAIN_ELASTICITY_VELOCITY_SUBTYPE, & - & EQUATIONS_SET_1D3D_MONODOMAIN_ACTIVE_STRAIN_SUBTYPE) + & EQUATIONS_SET_1D3D_MONODOMAIN_ACTIVE_STRAIN_SUBTYPE, & + & EQUATIONS_SET_MONODOMAIN_ELASTICITY_MUSCLE_TENDON_SUBTYPE) !ok CASE DEFAULT localError="The third equations set specification of "//TRIM(NumberToVstring(equationsSetSubtype,"*",err,error))// & @@ -1716,7 +1729,7 @@ SUBROUTINE BIODOMAIN_PRE_SOLVE(SOLVER,err,error,*) SELECT CASE(PROBLEM%SPECIFICATION(3)) CASE(PROBLEM_GUDUNOV_MONODOMAIN_SIMPLE_ELASTICITY_SUBTYPE,PROBLEM_GUDUNOV_MONODOMAIN_1D3D_ELASTICITY_SUBTYPE, & & PROBLEM_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE,EQUATIONS_SET_MONODOMAIN_ELASTICITY_VELOCITY_SUBTYPE, & - & PROBLEM_MONODOMAIN_1D3D_ACTIVE_STRAIN_SUBTYPE) + & PROBLEM_MONODOMAIN_1D3D_ACTIVE_STRAIN_SUBTYPE,PROBLEM_MONODOMAIN_ELASTICITY_MUSCLE_TENDON_SUBTYPE) SELECT CASE(SOLVER%GLOBAL_NUMBER) CASE(1) CALL SOLVER_DAE_TIMES_SET(SOLVER,CURRENT_TIME,CURRENT_TIME+TIME_INCREMENT,err,error,*999) diff --git a/src/bioelectric_finite_elasticity_routines.f90 b/src/bioelectric_finite_elasticity_routines.f90 index 5ecae7e5..30280253 100755 --- a/src/bioelectric_finite_elasticity_routines.f90 +++ b/src/bioelectric_finite_elasticity_routines.f90 @@ -125,7 +125,8 @@ SUBROUTINE BioelectricFiniteElasticity_EquationsSetSolutionMethodSet(EQUATIONS_S & EQUATIONS_SET_1D3D_MONODOMAIN_ELASTICITY_SUBTYPE, & & EQUATIONS_SET_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE, & & EQUATIONS_SET_MONODOMAIN_ELASTICITY_VELOCITY_SUBTYPE, & - & EQUATIONS_SET_1D3D_MONODOMAIN_ACTIVE_STRAIN_SUBTYPE) + & EQUATIONS_SET_1D3D_MONODOMAIN_ACTIVE_STRAIN_SUBTYPE, & + & EQUATIONS_SET_MONODOMAIN_ELASTICITY_MUSCLE_TENDON_SUBTYPE) SELECT CASE(SOLUTION_METHOD) CASE(EQUATIONS_SET_FEM_SOLUTION_METHOD) EQUATIONS_SET%SOLUTION_METHOD=EQUATIONS_SET_FEM_SOLUTION_METHOD @@ -236,7 +237,8 @@ SUBROUTINE BioelectricFiniteElasticity_ProblemSpecificationSet(problem,problemSp & PROBLEM_GUDUNOV_MONODOMAIN_1D3D_ELASTICITY_SUBTYPE, & & PROBLEM_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE, & & PROBLEM_MONODOMAIN_ELASTICITY_VELOCITY_SUBTYPE, & - & PROBLEM_MONODOMAIN_1D3D_ACTIVE_STRAIN_SUBTYPE) + & PROBLEM_MONODOMAIN_1D3D_ACTIVE_STRAIN_SUBTYPE, & + & PROBLEM_MONODOMAIN_ELASTICITY_MUSCLE_TENDON_SUBTYPE) !ok CASE DEFAULT localError="The third problem specification of "//TRIM(NumberToVstring(problemSubtype,"*",err,error))// & @@ -312,7 +314,7 @@ SUBROUTINE BIOELECTRIC_FINITE_ELASTICITY_PROBLEM_SETUP(PROBLEM,PROBLEM_SETUP,ERR !-------------------------------------------------------------------- CASE(PROBLEM_GUDUNOV_MONODOMAIN_SIMPLE_ELASTICITY_SUBTYPE,PROBLEM_GUDUNOV_MONODOMAIN_1D3D_ELASTICITY_SUBTYPE, & & PROBLEM_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE,PROBLEM_MONODOMAIN_ELASTICITY_VELOCITY_SUBTYPE, & - & PROBLEM_MONODOMAIN_1D3D_ACTIVE_STRAIN_SUBTYPE) + & PROBLEM_MONODOMAIN_1D3D_ACTIVE_STRAIN_SUBTYPE,PROBLEM_MONODOMAIN_ELASTICITY_MUSCLE_TENDON_SUBTYPE) SELECT CASE(PROBLEM_SETUP%SETUP_TYPE) CASE(PROBLEM_SETUP_INITIAL_TYPE) SELECT CASE(PROBLEM_SETUP%ACTION_TYPE) @@ -562,7 +564,8 @@ SUBROUTINE BIOELECTRIC_FINITE_ELASTICITY_PRE_SOLVE(CONTROL_LOOP,SOLVER,ERR,ERROR END IF SELECT CASE(CONTROL_LOOP%PROBLEM%SPECIFICATION(3)) CASE(PROBLEM_GUDUNOV_MONODOMAIN_SIMPLE_ELASTICITY_SUBTYPE,PROBLEM_GUDUNOV_MONODOMAIN_1D3D_ELASTICITY_SUBTYPE, & - & PROBLEM_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE,PROBLEM_MONODOMAIN_1D3D_ACTIVE_STRAIN_SUBTYPE) + & PROBLEM_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE,PROBLEM_MONODOMAIN_1D3D_ACTIVE_STRAIN_SUBTYPE, & + & PROBLEM_MONODOMAIN_ELASTICITY_MUSCLE_TENDON_SUBTYPE) SELECT CASE(CONTROL_LOOP%LOOP_TYPE) CASE(PROBLEM_CONTROL_TIME_LOOP_TYPE) CALL BIODOMAIN_PRE_SOLVE(SOLVER,ERR,ERROR,*999) @@ -636,7 +639,7 @@ SUBROUTINE BIOELECTRIC_FINITE_ELASTICITY_POST_SOLVE(CONTROL_LOOP,SOLVER,ERR,ERRO SELECT CASE(CONTROL_LOOP%PROBLEM%SPECIFICATION(3)) CASE(PROBLEM_GUDUNOV_MONODOMAIN_SIMPLE_ELASTICITY_SUBTYPE,PROBLEM_GUDUNOV_MONODOMAIN_1D3D_ELASTICITY_SUBTYPE, & & PROBLEM_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE,PROBLEM_MONODOMAIN_ELASTICITY_VELOCITY_SUBTYPE, & - & PROBLEM_MONODOMAIN_1D3D_ACTIVE_STRAIN_SUBTYPE) + & PROBLEM_MONODOMAIN_1D3D_ACTIVE_STRAIN_SUBTYPE,PROBLEM_MONODOMAIN_ELASTICITY_MUSCLE_TENDON_SUBTYPE) SELECT CASE(SOLVER%SOLVE_TYPE) CASE(SOLVER_DAE_TYPE) CALL BIOELECTRIC_POST_SOLVE(SOLVER,ERR,ERROR,*999) @@ -707,7 +710,7 @@ SUBROUTINE BioelectricFiniteElasticity_ControlLoopPreLoop(CONTROL_LOOP,ERR,ERROR SELECT CASE(PROBLEM%SPECIFICATION(3)) CASE(PROBLEM_GUDUNOV_MONODOMAIN_1D3D_ELASTICITY_SUBTYPE,PROBLEM_MONODOMAIN_1D3D_ACTIVE_STRAIN_SUBTYPE) CALL BioelectricFiniteElasticity_IndependentFieldInterpolate(CONTROL_LOOP,ERR,ERROR,*999) - CASE(PROBLEM_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE) + CASE(PROBLEM_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE,PROBLEM_MONODOMAIN_ELASTICITY_MUSCLE_TENDON_SUBTYPE) CALL BIOELECTRIC_FINITE_ELASTICITY_COMPUTE_TITIN(CONTROL_LOOP,ERR,ERROR,*999) CALL BioelectricFiniteElasticity_IndependentFieldInterpolate(CONTROL_LOOP,ERR,ERROR,*999) CASE DEFAULT @@ -1456,7 +1459,8 @@ SUBROUTINE BioelectricFiniteElasticity_ControlLoopPostLoop(CONTROL_LOOP,ERR,ERRO IF((PROBLEM%SPECIFICATION(3)==PROBLEM_GUDUNOV_MONODOMAIN_1D3D_ELASTICITY_SUBTYPE).OR. & & (PROBLEM%SPECIFICATION(3)==PROBLEM_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE).OR. & & (PROBLEM%SPECIFICATION(3)==PROBLEM_MONODOMAIN_ELASTICITY_VELOCITY_SUBTYPE).OR. & - & (PROBLEM%SPECIFICATION(3)==PROBLEM_MONODOMAIN_1D3D_ACTIVE_STRAIN_SUBTYPE)) THEN + & (PROBLEM%SPECIFICATION(3)==PROBLEM_MONODOMAIN_1D3D_ACTIVE_STRAIN_SUBTYPE).OR. & + & (PROBLEM%SPECIFICATION(3)==PROBLEM_MONODOMAIN_ELASTICITY_MUSCLE_TENDON_SUBTYPE)) THEN NULLIFY(SOLVERS) NULLIFY(SOLVER) NULLIFY(SOLVER_EQUATIONS) @@ -1817,7 +1821,7 @@ SUBROUTINE BioelectricFiniteElasticity_UpdateGeometricField(CONTROL_LOOP,CALC_CL ENDDO CASE(PROBLEM_GUDUNOV_MONODOMAIN_1D3D_ELASTICITY_SUBTYPE,PROBLEM_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE, & - & PROBLEM_MONODOMAIN_1D3D_ACTIVE_STRAIN_SUBTYPE) + & PROBLEM_MONODOMAIN_1D3D_ACTIVE_STRAIN_SUBTYPE,PROBLEM_MONODOMAIN_ELASTICITY_MUSCLE_TENDON_SUBTYPE) CONTROL_LOOP_ROOT=>PROBLEM%CONTROL_LOOP CALL CONTROL_LOOP_GET(CONTROL_LOOP_ROOT,CONTROL_LOOP_NODE,CONTROL_LOOP_PARENT,ERR,ERROR,*999) @@ -2683,7 +2687,8 @@ SUBROUTINE BioelectricFiniteElasticity_IndependentFieldInterpolate(CONTROL_LOOP, END IF SELECT CASE(PROBLEM%SPECIFICATION(3)) CASE(PROBLEM_GUDUNOV_MONODOMAIN_1D3D_ELASTICITY_SUBTYPE,PROBLEM_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE, & - & PROBLEM_MONODOMAIN_ELASTICITY_VELOCITY_SUBTYPE,PROBLEM_MONODOMAIN_1D3D_ACTIVE_STRAIN_SUBTYPE) + & PROBLEM_MONODOMAIN_ELASTICITY_VELOCITY_SUBTYPE,PROBLEM_MONODOMAIN_1D3D_ACTIVE_STRAIN_SUBTYPE, & + & PROBLEM_MONODOMAIN_ELASTICITY_MUSCLE_TENDON_SUBTYPE) IF(CONTROL_LOOP%NUMBER_OF_SUB_LOOPS==0) THEN CONTROL_LOOP_ROOT=>PROBLEM%CONTROL_LOOP CALL CONTROL_LOOP_GET(CONTROL_LOOP_ROOT,CONTROL_LOOP_NODE,CONTROL_LOOP_PARENT,ERR,ERROR,*999) @@ -2799,7 +2804,7 @@ SUBROUTINE BioelectricFiniteElasticity_IndependentFieldInterpolate(CONTROL_LOOP, !add up the active stress value ACTIVE_STRESS_VALUES(nearestGP)=ACTIVE_STRESS_VALUES(nearestGP)+ACTIVE_STRESS - CASE(PROBLEM_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE) + CASE(PROBLEM_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE,PROBLEM_MONODOMAIN_ELASTICITY_MUSCLE_TENDON_SUBTYPE) !component 1 of variable U contains the active stress dof_idx=FIELD_VARIABLE_U%COMPONENTS(1)%PARAM_TO_DOF_MAP%NODE_PARAM2DOF_MAP%NODES(node_idx)%DERIVATIVES(1)% & @@ -2916,7 +2921,7 @@ SUBROUTINE BioelectricFiniteElasticity_IndependentFieldInterpolate(CONTROL_LOOP, CALL FIELD_PARAMETER_SET_UPDATE_LOCAL_DOF(INDEPENDENT_FIELD_ELASTICITY,FIELD_U_VARIABLE_TYPE, & & FIELD_VALUES_SET_TYPE,dof_idx,ACTIVE_STRESS,ERR,ERROR,*999) - CASE(PROBLEM_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE) + CASE(PROBLEM_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE,PROBLEM_MONODOMAIN_ELASTICITY_MUSCLE_TENDON_SUBTYPE) dof_idx=FIELD_VARIABLE_FE%COMPONENTS(1)%PARAM_TO_DOF_MAP%GAUSS_POINT_PARAM2DOF_MAP%GAUSS_POINTS(gauss_idx,ne) CALL FIELD_PARAMETER_SET_UPDATE_LOCAL_DOF(INDEPENDENT_FIELD_ELASTICITY,FIELD_U_VARIABLE_TYPE, & @@ -3111,7 +3116,7 @@ SUBROUTINE BIOELECTRIC_FINITE_ELASTICITY_COMPUTE_TITIN(CONTROL_LOOP,ERR,ERROR,*) PROBLEM=>CONTROL_LOOP%PROBLEM IF(ASSOCIATED(PROBLEM)) THEN SELECT CASE(PROBLEM%SPECIFICATION(3)) - CASE(PROBLEM_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE) + CASE(PROBLEM_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE,PROBLEM_MONODOMAIN_ELASTICITY_MUSCLE_TENDON_SUBTYPE) IF(CONTROL_LOOP%NUMBER_OF_SUB_LOOPS==0) THEN CONTROL_LOOP_ROOT=>PROBLEM%CONTROL_LOOP CALL CONTROL_LOOP_GET(CONTROL_LOOP_ROOT,CONTROL_LOOP_NODE,CONTROL_LOOP_PARENT,ERR,ERROR,*999) diff --git a/src/equations_set_constants.f90 b/src/equations_set_constants.f90 index d250200d..8958f03a 100644 --- a/src/equations_set_constants.f90 +++ b/src/equations_set_constants.f90 @@ -312,6 +312,7 @@ MODULE EquationsSetConstants INTEGER(INTG), PARAMETER :: EQUATIONS_SET_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE=143 INTEGER(INTG), PARAMETER :: EQUATIONS_SET_MONODOMAIN_ELASTICITY_VELOCITY_SUBTYPE=144 INTEGER(INTG), PARAMETER :: EQUATIONS_SET_1D3D_MONODOMAIN_ACTIVE_STRAIN_SUBTYPE=145 + INTEGER(INTG), PARAMETER :: EQUATIONS_SET_MONODOMAIN_ELASTICITY_MUSCLE_TENDON_SUBTYPE=146 INTEGER(INTG), PARAMETER :: EQUATIONS_SET_FINITE_ELASTICITY_NAVIER_STOKES_ALE_SUBTYPE=151 !Fitting class diff --git a/src/finite_elasticity_routines.f90 b/src/finite_elasticity_routines.f90 index ab1ebcf6..1ff4ee87 100644 --- a/src/finite_elasticity_routines.f90 +++ b/src/finite_elasticity_routines.f90 @@ -1806,7 +1806,7 @@ SUBROUTINE FiniteElasticity_FiniteElementResidualEvaluate(EQUATIONS_SET,elementN & EQUATIONS_SET_ORTHOTROPIC_MATERIAL_HOLZAPFEL_OGDEN_SUBTYPE,EQUATIONS_SET_1D3D_MONODOMAIN_ELASTICITY_SUBTYPE, & & EQUATIONS_SET_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE,EQUATIONS_SET_MONODOMAIN_ELASTICITY_VELOCITY_SUBTYPE, & & EQUATIONS_SET_ACTIVE_STRAIN_SUBTYPE,EQUATIONS_SET_MULTISCALE_ACTIVE_STRAIN_SUBTYPE, & - & EQUATIONS_SET_1D3D_MONODOMAIN_ACTIVE_STRAIN_SUBTYPE, & + & EQUATIONS_SET_1D3D_MONODOMAIN_ACTIVE_STRAIN_SUBTYPE,EQUATIONS_SET_MONODOMAIN_ELASTICITY_MUSCLE_TENDON_SUBTYPE, & & EQUATIONS_SET_INCOMPRESSIBLE_ELASTICITY_DRIVEN_DARCY_SUBTYPE,EQUATIONS_SET_TRANSVERSE_ISOTROPIC_POLYNOMIAL_SUBTYPE, & & EQUATIONS_SET_TRANSVERSE_ISOTROPIC_HUMPHREY_YIN_SUBTYPE, & & EQUATIONS_SET_TRANSVERSE_ISOTROPIC_ACTIVE_SUBTYPE,EQUATIONS_SET_TRANS_ISOTROPIC_ACTIVE_TRANSITION_SUBTYPE, & @@ -3534,6 +3534,7 @@ SUBROUTINE FiniteElasticity_FiniteElementPreResidualEvaluate(equationsSet,err,er & EQUATIONS_SET_TRANSVERSE_ISOTROPIC_HUMPHREY_YIN_SUBTYPE, & & EQUATIONS_SET_STANDARD_MONODOMAIN_ELASTICITY_SUBTYPE,EQUATIONS_SET_1D3D_MONODOMAIN_ELASTICITY_SUBTYPE, & & EQUATIONS_SET_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE,EQUATIONS_SET_MONODOMAIN_ELASTICITY_VELOCITY_SUBTYPE, & + & EQUATIONS_SET_MONODOMAIN_ELASTICITY_MUSCLE_TENDON_SUBTYPE, & & EQUATIONS_SET_HOLZAPFEL_OGDEN_ACTIVECONTRACTION_SUBTYPE, & & EQUATIONS_SET_GROWTH_LAW_IN_CELLML_SUBTYPE, & & EQUATIONS_SET_MR_AND_GROWTH_LAW_IN_CELLML_SUBTYPE, & @@ -3590,6 +3591,7 @@ SUBROUTINE FiniteElasticity_FiniteElementPostResidualEvaluate(EQUATIONS_SET,err, & EQUATIONS_SET_ANISOTROPIC_POLYNOMIAL_SUBTYPE,EQUATIONS_SET_ANISOTROPIC_POLYNOMIAL_ACTIVE_SUBTYPE, & & EQUATIONS_SET_ACTIVECONTRACTION_SUBTYPE,EQUATIONS_SET_NO_SUBTYPE,EQUATIONS_SET_1D3D_MONODOMAIN_ELASTICITY_SUBTYPE, & & EQUATIONS_SET_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE,EQUATIONS_SET_MONODOMAIN_ELASTICITY_VELOCITY_SUBTYPE, & + & EQUATIONS_SET_MONODOMAIN_ELASTICITY_MUSCLE_TENDON_SUBTYPE, & & EQUATIONS_SET_INCOMPRESSIBLE_FINITE_ELASTICITY_DARCY_SUBTYPE,EQUATIONS_SET_ELASTICITY_DARCY_INRIA_MODEL_SUBTYPE, & & EQUATIONS_SET_INCOMPRESSIBLE_ELASTICITY_DRIVEN_DARCY_SUBTYPE, & & EQUATIONS_SET_ORTHOTROPIC_MATERIAL_HOLZAPFEL_OGDEN_SUBTYPE, & @@ -6005,6 +6007,93 @@ SUBROUTINE FINITE_ELASTICITY_GAUSS_CAUCHY_TENSOR(EQUATIONS_SET,DEPENDENT_INTERPO & C(i)*EVALUES(3)**(C(i+3)/2.0_DP-1.0_DP)*N3 END DO PIOLA_TENSOR=PIOLA_TENSOR*C(7)+2.0_DP*P*AZU + + CASE(EQUATIONS_SET_MONODOMAIN_ELASTICITY_MUSCLE_TENDON_SUBTYPE) + + ! Calculate Eigenvalues of the right Cauchy-Green Deformation Tensor + TEMP = AZL + CALL DSYEV('V','U',3,TEMP,3,EVALUES,WORK,-1,ERR) + IF(ERR.NE.0) CALL FlagError("Error in Eigenvalue computation",ERR,ERROR,*999) + LWORK=MIN(LWMAX,INT(WORK(1))) + CALL DSYEV('V','U',3,TEMP,3,EVALUES,WORK,LWORK,ERR) + IF(ERR.NE.0) CALL FlagError("Error in Eigenvalue computation",ERR,ERROR,*999) + EVECTOR_1=TEMP(:,1) + EVECTOR_2=TEMP(:,2) + EVECTOR_3=TEMP(:,3) + ! Construct "Eigenmatrix" + DO i=1,3 + DO j=1,3 + EMATRIX_1(i,j)=EVECTOR_1(i)*EVECTOR_1(j) + EMATRIX_2(i,j)=EVECTOR_2(i)*EVECTOR_2(j) + EMATRIX_3(i,j)=EVECTOR_3(i)*EVECTOR_3(j) + END DO + END DO + + ! Odgen-type hyperelastic material (N=1), cf. Ogden 1972. -> Material Parameters C(1) = mu_0*mu_1 C(2) = alpha + PIOLA_TENSOR= & + & EVALUES(1)**(C(2)/2.0_DP-1.0_DP)*EMATRIX_1+ & + & EVALUES(2)**(C(2)/2.0_DP-1.0_DP)*EMATRIX_2+ & + & EVALUES(3)**(C(2)/2.0_DP-1.0_DP)*EMATRIX_3 + PIOLA_TENSOR=PIOLA_TENSOR*C(1)-1.0_DP*P*AZU + + ! add active stress component + CALL Field_VariableGet(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,FIELD_U_VARIABLE_TYPE,FIELD_VARIABLE,err,error,*999) + dof_idx=FIELD_VARIABLE%COMPONENTS(1)%PARAM_TO_DOF_MAP%GAUSS_POINT_PARAM2DOF_MAP%GAUSS_POINTS(GAUSS_POINT_NUMBER, & + & ELEMENT_NUMBER) + CALL FIELD_PARAMETER_SET_GET_LOCAL_DOF(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,FIELD_U_VARIABLE_TYPE, & + & FIELD_VALUES_SET_TYPE,dof_idx,VALUE,err,error,*999) + IF(VALUE.LT.0.0_DP) VALUE=0.0_DP + !divide by lambda and multiply by P_max + VALUE=VALUE/SQRT(AZL(1,1))*C(3) + PIOLA_TENSOR(1,1)=PIOLA_TENSOR(1,1)+VALUE + + ! add titin stress (cf. Heidlauf et al 2016,2017) + ! unbound Titin-stress + dof_idx=FIELD_VARIABLE%COMPONENTS(2)%PARAM_TO_DOF_MAP%GAUSS_POINT_PARAM2DOF_MAP%GAUSS_POINTS(GAUSS_POINT_NUMBER, & + & ELEMENT_NUMBER) + CALL FIELD_PARAMETER_SET_GET_LOCAL_DOF(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,FIELD_U_VARIABLE_TYPE, & + & FIELD_VALUES_SET_TYPE,dof_idx,TITIN_UNBOUND,err,error,*999) + ! bound Titin-stress -> Rode Model + dof_idx=FIELD_VARIABLE%COMPONENTS(3)%PARAM_TO_DOF_MAP%GAUSS_POINT_PARAM2DOF_MAP%GAUSS_POINTS(GAUSS_POINT_NUMBER, & + & ELEMENT_NUMBER) + CALL FIELD_PARAMETER_SET_GET_LOCAL_DOF(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,FIELD_U_VARIABLE_TYPE, & + & FIELD_VALUES_SET_TYPE,dof_idx,TITIN_BOUND,err,error,*999) + ! activation + dof_idx=FIELD_VARIABLE%COMPONENTS(6)%PARAM_TO_DOF_MAP%GAUSS_POINT_PARAM2DOF_MAP%GAUSS_POINTS(GAUSS_POINT_NUMBER, & + & ELEMENT_NUMBER) + CALL FIELD_PARAMETER_SET_GET_LOCAL_DOF(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,FIELD_U_VARIABLE_TYPE, & + & FIELD_VALUES_SET_TYPE,dof_idx,activation,err,error,*999) + IF(activation.GT.1.0_DP) activation=1.0_DP + IF(activation.LT.0.0_DP) activation=0.0_DP + + ! parameter to switch on and off actin-titin interaction + activation=C(5)*activation + + ! normalized Titin-stress -> weighted sum of bound and unbound titin-stress + TITIN_VALUE=activation*TITIN_BOUND+(1.0_DP-activation)*TITIN_UNBOUND + ! divide by lambda and multiply by P_max + TITIN_VALUE=TITIN_VALUE/SQRT(AZL(1,1))*C(4) + + PIOLA_TENSOR(1,1)=PIOLA_TENSOR(1,1)+TITIN_VALUE + + ! unbound titin-stress in cross-fibre direction + dof_idx=FIELD_VARIABLE%COMPONENTS(4)%PARAM_TO_DOF_MAP%GAUSS_POINT_PARAM2DOF_MAP%GAUSS_POINTS(GAUSS_POINT_NUMBER, & + & ELEMENT_NUMBER) + CALL FIELD_PARAMETER_SET_GET_LOCAL_DOF(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,FIELD_U_VARIABLE_TYPE, & + & FIELD_VALUES_SET_TYPE,dof_idx,TITIN_UNBOUND_CROSS_FIBRE,ERR,ERROR,*999) + ! bound titin-stress in cross-fibre direction + dof_idx=FIELD_VARIABLE%COMPONENTS(5)%PARAM_TO_DOF_MAP%GAUSS_POINT_PARAM2DOF_MAP%GAUSS_POINTS(GAUSS_POINT_NUMBER, & + & ELEMENT_NUMBER) + CALL FIELD_PARAMETER_SET_GET_LOCAL_DOF(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,FIELD_U_VARIABLE_TYPE, & + & FIELD_VALUES_SET_TYPE,dof_idx,TITIN_BOUND_CROSS_FIBRE,ERR,ERROR,*999) + + ! normalized XF-Titin-stress -> weighted sum of bound and unbound XF-titin-stress + TITIN_VALUE_CROSS_FIBRE=activation*TITIN_BOUND_CROSS_FIBRE+(1.0_DP-activation)*TITIN_UNBOUND_CROSS_FIBRE + ! divide by lambda and multiply by P_max + TITIN_VALUE_CROSS_FIBRE=TITIN_VALUE_CROSS_FIBRE*C(4) !/SQRT(AZL(1,1)) + + !PIOLA_TENSOR(2,2)=PIOLA_TENSOR(2,2)+TITIN_VALUE_CROSS_FIBRE + !PIOLA_TENSOR(3,3)=PIOLA_TENSOR(3,3)+TITIN_VALUE_CROSS_FIBRE CASE(EQUATIONS_SET_MOONEY_RIVLIN_SUBTYPE,EQUATIONS_SET_MOONEY_RIVLIN_ACTIVECONTRACTION_SUBTYPE,EQUATIONS_SET_MEMBRANE_SUBTYPE,& & EQUATIONS_SET_NO_SUBTYPE,EQUATIONS_SET_ANISOTROPIC_POLYNOMIAL_SUBTYPE,EQUATIONS_SET_ANISOTROPIC_POLYNOMIAL_ACTIVE_SUBTYPE,& @@ -6126,13 +6215,13 @@ SUBROUTINE FINITE_ELASTICITY_GAUSS_CAUCHY_TENSOR(EQUATIONS_SET,DEPENDENT_INTERPO IF(activation.LT.0.0_DP) activation=0.0_DP ! parameter to switch on and off actin-titin interaction - activation=C(6)*activation + activation=C(7)*activation ! normalized Titin-stress -> weighted sum of bound and unbound titin-stress TITIN_VALUE=activation*TITIN_BOUND+(1.0_DP-activation)*TITIN_UNBOUND !TITIN_VALUE=activation*TITIN_BOUND*0.5_DP+(1.0_DP-activation)*TITIN_UNBOUND !TK Hack ! divide by lambda and multiply by P_max - TITIN_VALUE=TITIN_VALUE/SQRT(AZL(1,1))*C(5) + TITIN_VALUE=TITIN_VALUE/SQRT(AZL(1,1))*C(6) PIOLA_TENSOR(1,1)=PIOLA_TENSOR(1,1)+TITIN_VALUE @@ -6150,7 +6239,7 @@ SUBROUTINE FINITE_ELASTICITY_GAUSS_CAUCHY_TENSOR(EQUATIONS_SET,DEPENDENT_INTERPO ! normalized XF-Titin-stress -> weighted sum of bound and unbound XF-titin-stress TITIN_VALUE_CROSS_FIBRE=activation*TITIN_BOUND_CROSS_FIBRE+(1.0_DP-activation)*TITIN_UNBOUND_CROSS_FIBRE ! divide by lambda and multiply by P_max - TITIN_VALUE_CROSS_FIBRE=TITIN_VALUE_CROSS_FIBRE*C(5) !/SQRT(AZL(1,1)) + TITIN_VALUE_CROSS_FIBRE=TITIN_VALUE_CROSS_FIBRE*C(8) !/SQRT(AZL(1,1)) PIOLA_TENSOR(2,2)=PIOLA_TENSOR(2,2)+TITIN_VALUE_CROSS_FIBRE PIOLA_TENSOR(3,3)=PIOLA_TENSOR(3,3)+TITIN_VALUE_CROSS_FIBRE @@ -7366,6 +7455,7 @@ SUBROUTINE FINITE_ELASTICITY_EQUATIONS_SET_SETUP(EQUATIONS_SET,EQUATIONS_SET_SET & EQUATIONS_SET_ELASTICITY_FLUID_PRESSURE_HOLMES_MOW_SUBTYPE,EQUATIONS_SET_TRANSVERSE_ISOTROPIC_HUMPHREY_YIN_SUBTYPE, & & EQUATIONS_SET_STANDARD_MONODOMAIN_ELASTICITY_SUBTYPE,EQUATIONS_SET_1D3D_MONODOMAIN_ELASTICITY_SUBTYPE, & & EQUATIONS_SET_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE,EQUATIONS_SET_MONODOMAIN_ELASTICITY_VELOCITY_SUBTYPE, & + & EQUATIONS_SET_MONODOMAIN_ELASTICITY_MUSCLE_TENDON_SUBTYPE, & & EQUATIONS_SET_HOLZAPFEL_OGDEN_ACTIVECONTRACTION_SUBTYPE, & & EQUATIONS_SET_RATE_BASED_SMOOTH_MODEL_SUBTYPE,EQUATIONS_SET_COMPRESSIBLE_RATE_BASED_SMOOTH_MODEL_SUBTYPE, & & EQUATIONS_SET_RATE_BASED_GROWTH_MODEL_SUBTYPE,EQUATIONS_SET_COMPRESSIBLE_RATE_BASED_GROWTH_MODEL_SUBTYPE) @@ -7473,7 +7563,8 @@ SUBROUTINE FINITE_ELASTICITY_EQUATIONS_SET_SETUP(EQUATIONS_SET,EQUATIONS_SET_SET & EQUATIONS_SET_STANDARD_MONODOMAIN_ELASTICITY_SUBTYPE, & & EQUATIONS_SET_1D3D_MONODOMAIN_ELASTICITY_SUBTYPE,EQUATIONS_SET_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE, & & EQUATIONS_SET_MONODOMAIN_ELASTICITY_VELOCITY_SUBTYPE,EQUATIONS_SET_ACTIVE_STRAIN_SUBTYPE, & - & EQUATIONS_SET_MULTISCALE_ACTIVE_STRAIN_SUBTYPE,EQUATIONS_SET_1D3D_MONODOMAIN_ACTIVE_STRAIN_SUBTYPE, & + & EQUATIONS_SET_MULTISCALE_ACTIVE_STRAIN_SUBTYPE,EQUATIONS_SET_1D3D_MONODOMAIN_ACTIVE_STRAIN_SUBTYPE, & + & EQUATIONS_SET_MONODOMAIN_ELASTICITY_MUSCLE_TENDON_SUBTYPE, & & EQUATIONS_SET_TRANSVERSE_ISOTROPIC_HUMPHREY_YIN_SUBTYPE, & & EQUATIONS_SET_HOLZAPFEL_OGDEN_ACTIVECONTRACTION_SUBTYPE, & & EQUATIONS_SET_RATE_BASED_SMOOTH_MODEL_SUBTYPE,EQUATIONS_SET_COMPRESSIBLE_RATE_BASED_SMOOTH_MODEL_SUBTYPE, & @@ -7556,6 +7647,7 @@ SUBROUTINE FINITE_ELASTICITY_EQUATIONS_SET_SETUP(EQUATIONS_SET,EQUATIONS_SET_SET & EQUATIONS_SET_INCOMPRESSIBLE_MOONEY_RIVLIN_SUBTYPE,EQUATIONS_SET_NEARLY_INCOMPRESSIBLE_MOONEY_RIVLIN_SUBTYPE, & & EQUATIONS_SET_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE, & & EQUATIONS_SET_MONODOMAIN_ELASTICITY_VELOCITY_SUBTYPE, & + & EQUATIONS_SET_MONODOMAIN_ELASTICITY_MUSCLE_TENDON_SUBTYPE, & & EQUATIONS_SET_HOLZAPFEL_OGDEN_ACTIVECONTRACTION_SUBTYPE) SELECT CASE(EQUATIONS_SET_SETUP%ACTION_TYPE) CASE(EQUATIONS_SET_SETUP_START_ACTION) @@ -9712,7 +9804,7 @@ SUBROUTINE FINITE_ELASTICITY_EQUATIONS_SET_SETUP(EQUATIONS_SET,EQUATIONS_SET_SET ENDIF !INDEPENDENT_FIELD_AUTO_CREATED CASE(EQUATIONS_SET_1D3D_MONODOMAIN_ELASTICITY_SUBTYPE,EQUATIONS_SET_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE, & - & EQUATIONS_SET_1D3D_MONODOMAIN_ACTIVE_STRAIN_SUBTYPE) + & EQUATIONS_SET_1D3D_MONODOMAIN_ACTIVE_STRAIN_SUBTYPE,EQUATIONS_SET_MONODOMAIN_ELASTICITY_MUSCLE_TENDON_SUBTYPE) IF(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD_AUTO_CREATED) THEN !Create the auto created independent field CALL FIELD_CREATE_START(EQUATIONS_SET_SETUP%FIELD_USER_NUMBER,EQUATIONS_SET%REGION,EQUATIONS_SET%INDEPENDENT% & @@ -9739,7 +9831,8 @@ SUBROUTINE FINITE_ELASTICITY_EQUATIONS_SET_SETUP(EQUATIONS_SET,EQUATIONS_SET_SET IF(EQUATIONS_SET_SUBTYPE==EQUATIONS_SET_1D3D_MONODOMAIN_ELASTICITY_SUBTYPE) THEN CALL FIELD_NUMBER_OF_COMPONENTS_SET_AND_LOCK(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,FIELD_U_VARIABLE_TYPE, & & 1,err,error,*999) - ELSEIF(EQUATIONS_SET_SUBTYPE==EQUATIONS_SET_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE) THEN + ELSEIF((EQUATIONS_SET_SUBTYPE==EQUATIONS_SET_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE).OR. & + & (EQUATIONS_SET_SUBTYPE==EQUATIONS_SET_MONODOMAIN_ELASTICITY_MUSCLE_TENDON_SUBTYPE)) THEN CALL FIELD_NUMBER_OF_COMPONENTS_SET_AND_LOCK(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,FIELD_U_VARIABLE_TYPE, & & 6,err,error,*999) ELSEIF(EQUATIONS_SET_SUBTYPE==EQUATIONS_SET_1D3D_MONODOMAIN_ACTIVE_STRAIN_SUBTYPE) THEN @@ -9753,7 +9846,8 @@ SUBROUTINE FINITE_ELASTICITY_EQUATIONS_SET_SETUP(EQUATIONS_SET,EQUATIONS_SET_SET & 1,GEOMETRIC_MESH_COMPONENT,err,error,*999) CALL FIELD_COMPONENT_MESH_COMPONENT_SET(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,FIELD_U_VARIABLE_TYPE, & & 1,GEOMETRIC_MESH_COMPONENT,err,error,*999) - IF(EQUATIONS_SET_SUBTYPE==EQUATIONS_SET_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE) THEN + IF(EQUATIONS_SET_SUBTYPE==EQUATIONS_SET_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE .OR. & + & EQUATIONS_SET_SUBTYPE==EQUATIONS_SET_MONODOMAIN_ELASTICITY_MUSCLE_TENDON_SUBTYPE) THEN CALL FIELD_COMPONENT_MESH_COMPONENT_SET(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,FIELD_U_VARIABLE_TYPE, & & 2,GEOMETRIC_MESH_COMPONENT,err,error,*999) CALL FIELD_COMPONENT_MESH_COMPONENT_SET(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,FIELD_U_VARIABLE_TYPE, & @@ -9779,7 +9873,8 @@ SUBROUTINE FINITE_ELASTICITY_EQUATIONS_SET_SETUP(EQUATIONS_SET,EQUATIONS_SET_SET !Set to node based interpolation CALL FIELD_COMPONENT_INTERPOLATION_SET_AND_LOCK(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD, & & FIELD_U_VARIABLE_TYPE,1,FIELD_GAUSS_POINT_BASED_INTERPOLATION,err,error,*999) - IF(EQUATIONS_SET_SUBTYPE==EQUATIONS_SET_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE) THEN + IF(EQUATIONS_SET_SUBTYPE==EQUATIONS_SET_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE .OR. & + & EQUATIONS_SET_SUBTYPE==EQUATIONS_SET_MONODOMAIN_ELASTICITY_MUSCLE_TENDON_SUBTYPE) THEN CALL FIELD_COMPONENT_INTERPOLATION_SET_AND_LOCK(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD, & & FIELD_U_VARIABLE_TYPE,2,FIELD_GAUSS_POINT_BASED_INTERPOLATION,err,error,*999) CALL FIELD_COMPONENT_INTERPOLATION_SET_AND_LOCK(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD, & @@ -9830,7 +9925,8 @@ SUBROUTINE FINITE_ELASTICITY_EQUATIONS_SET_SETUP(EQUATIONS_SET,EQUATIONS_SET_SET IF(EQUATIONS_SET_SUBTYPE==EQUATIONS_SET_1D3D_MONODOMAIN_ELASTICITY_SUBTYPE) THEN CALL FIELD_NUMBER_OF_COMPONENTS_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE,1, & & err,error,*999) - ELSE IF(EQUATIONS_SET_SUBTYPE==EQUATIONS_SET_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE) THEN + ELSE IF(EQUATIONS_SET_SUBTYPE==EQUATIONS_SET_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE .OR. & + & EQUATIONS_SET_SUBTYPE==EQUATIONS_SET_MONODOMAIN_ELASTICITY_MUSCLE_TENDON_SUBTYPE) THEN CALL FIELD_NUMBER_OF_COMPONENTS_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE,6, & & err,error,*999) ELSEIF(EQUATIONS_SET_SUBTYPE==EQUATIONS_SET_1D3D_MONODOMAIN_ACTIVE_STRAIN_SUBTYPE) THEN @@ -10109,7 +10205,9 @@ SUBROUTINE FINITE_ELASTICITY_EQUATIONS_SET_SETUP(EQUATIONS_SET,EQUATIONS_SET_SET CASE(EQUATIONS_SET_1D3D_MONODOMAIN_ELASTICITY_SUBTYPE,EQUATIONS_SET_MONODOMAIN_ELASTICITY_VELOCITY_SUBTYPE) NUMBER_OF_COMPONENTS=5; CASE(EQUATIONS_SET_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE) - NUMBER_OF_COMPONENTS=6; + NUMBER_OF_COMPONENTS=8; + CASE(EQUATIONS_SET_MONODOMAIN_ELASTICITY_MUSCLE_TENDON_SUBTYPE) + NUMBER_OF_COMPONENTS=5; CASE(EQUATIONS_SET_1D3D_MONODOMAIN_ACTIVE_STRAIN_SUBTYPE) NUMBER_OF_COMPONENTS=8; CASE(EQUATIONS_SET_MEMBRANE_SUBTYPE) @@ -10758,6 +10856,7 @@ SUBROUTINE FiniteElasticity_EquationsSetSolutionMethodSet(EQUATIONS_SET,SOLUTION & EQUATIONS_SET_STANDARD_MONODOMAIN_ELASTICITY_SUBTYPE, & & EQUATIONS_SET_1D3D_MONODOMAIN_ELASTICITY_SUBTYPE, & & EQUATIONS_SET_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE, & + & EQUATIONS_SET_MONODOMAIN_ELASTICITY_MUSCLE_TENDON_SUBTYPE, & & EQUATIONS_SET_MONODOMAIN_ELASTICITY_VELOCITY_SUBTYPE, & & EQUATIONS_SET_HOLZAPFEL_OGDEN_ACTIVECONTRACTION_SUBTYPE, & & EQUATIONS_SET_ACTIVE_STRAIN_SUBTYPE, & @@ -10852,6 +10951,7 @@ SUBROUTINE FiniteElasticity_EquationsSetSpecificationSet(equationsSet,specificat & EQUATIONS_SET_STANDARD_MONODOMAIN_ELASTICITY_SUBTYPE,EQUATIONS_SET_1D3D_MONODOMAIN_ELASTICITY_SUBTYPE, & & EQUATIONS_SET_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE,EQUATIONS_SET_ACTIVE_STRAIN_SUBTYPE, & & EQUATIONS_SET_MULTISCALE_ACTIVE_STRAIN_SUBTYPE,EQUATIONS_SET_MONODOMAIN_ELASTICITY_VELOCITY_SUBTYPE, & + & EQUATIONS_SET_MONODOMAIN_ELASTICITY_MUSCLE_TENDON_SUBTYPE, & & EQUATIONS_SET_1D3D_MONODOMAIN_ACTIVE_STRAIN_SUBTYPE, & & EQUATIONS_SET_HOLZAPFEL_OGDEN_ACTIVECONTRACTION_SUBTYPE, & & EQUATIONS_SET_RATE_BASED_SMOOTH_MODEL_SUBTYPE,EQUATIONS_SET_COMPRESSIBLE_RATE_BASED_SMOOTH_MODEL_SUBTYPE, & @@ -12219,7 +12319,8 @@ SUBROUTINE FiniteElasticity_PreSolve(solver,err,error,*) ! every solve CASE(PROBLEM_GUDUNOV_MONODOMAIN_SIMPLE_ELASTICITY_SUBTYPE) ! do nothing - CASE(PROBLEM_GUDUNOV_MONODOMAIN_1D3D_ELASTICITY_SUBTYPE,PROBLEM_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE) + CASE(PROBLEM_GUDUNOV_MONODOMAIN_1D3D_ELASTICITY_SUBTYPE,PROBLEM_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE, & + PROBLEM_MONODOMAIN_ELASTICITY_MUSCLE_TENDON_SUBTYPE) ! do nothing CASE(EQUATIONS_SET_MONODOMAIN_ELASTICITY_VELOCITY_SUBTYPE) ! do nothing diff --git a/src/opencmiss_iron.f90 b/src/opencmiss_iron.f90 index b5fb6cf4..96011d78 100644 --- a/src/opencmiss_iron.f90 +++ b/src/opencmiss_iron.f90 @@ -2786,6 +2786,8 @@ MODULE OpenCMISS_Iron & EQUATIONS_SET_MONODOMAIN_ELASTICITY_VELOCITY_SUBTYPE !