80 fA_= this->params_->sublist(
"Parameter Solid").get(
"FA",30.e0);
81 lambdaC50_ = this->params_->sublist(
"Parameter Solid").get(
"LambdaC50",0.12e1);
82 gamma3_= this->params_->sublist(
"Parameter Solid").get(
"Gamma3",0.9e0);
83 lambdaBarCDotMax_= this->params_->sublist(
"Parameter Solid").get(
"LambdaBarCDotMax",0.443e-1);
84 lambdaBarCDotMin_= this->params_->sublist(
"Parameter Solid").get(
"LambdaBarCDotMin",-0.443e-1);
85 gamma2_ = this->params_->sublist(
"Parameter Solid").get(
"Gamma2",50.0e0);
86 gamma1_ = this->params_->sublist(
"Parameter Solid").get(
"Gamma1",0.5131e0);
87 eta_ = this->params_->sublist(
"Parameter Solid").get(
"Eta",0.18745e0);
88 ca50_ = this->params_->sublist(
"Parameter Solid").get(
"Ca50",0.4e0);
89 k2_ = this->params_->sublist(
"Parameter Solid").get(
"K2",0.2e0);
90 k5_ = this->params_->sublist(
"Parameter Solid").get(
"K5",0.2e0);
91 k3_ = this->params_->sublist(
"Parameter Solid").get(
"K3",0.134e0);
92 k4_ = this->params_->sublist(
"Parameter Solid").get(
"K4",0.166e-2);
93 k7_= this->params_->sublist(
"Parameter Solid").get(
"K7",0.66e-4);
94 kappa_ = this->params_->sublist(
"Parameter Solid").get(
"Kappa",0.148262e0);
95 beta1_ = this->params_->sublist(
"Parameter Solid").get(
"Beta1",0.1006e-2);
96 muA_ = this->params_->sublist(
"Parameter Solid").get(
"MuA",0.11857e-1);
97 beta2_ = this->params_->sublist(
"Parameter Solid").get(
"Beta2",0.2668e-1);
98 alpha2_ = this->params_->sublist(
"Parameter Solid").get(
"Alpha2",0.15173775e0);
99 alpha3_ = this->params_->sublist(
"Parameter Solid").get(
"Alpha3",0.275662e1);
100 alpha1_ = this->params_->sublist(
"Parameter Solid").get(
"Alpha1",11.52507e-3);
101 alpha4_ = this->params_->sublist(
"Parameter Solid").get(
"Alpha4",1.27631e-3);
102 alpha5_ = this->params_->sublist(
"Parameter Solid").get(
"Alpha5",0.308798e1);
103 gamma6_ = this->params_->sublist(
"Parameter Solid").get(
"Gamma6",0.15e1);
104 lambdaP50_ = this->params_->sublist(
"Parameter Solid").get(
"LambdaP50",1.0e0);
105 kDotMin_ = this->params_->sublist(
"Parameter Solid").get(
"KDotMin",-0.10694e-1);
106 zeta1_ = this->params_->sublist(
"Parameter Solid").get(
"Zeta1",100.e0);
107 kDotMax_ = this->params_->sublist(
"Parameter Solid").get(
"KDotMax",0.9735e-3);
108 gamma4_ = this->params_->sublist(
"Parameter Solid").get(
"Gamma4",200.e0);
109 lambdaBarDotPMin_ = this->params_->sublist(
"Parameter Solid").get(
"LambdaBarDotMin",-0.2323e-3);
110 lambdaBarDotPMax_ = this->params_->sublist(
"Parameter Solid").get(
"LambdaBarDotMax",0.699e-4);
111 gamma5_ = this->params_->sublist(
"Parameter Solid").get(
"Gamma5", 50.e0 );
112 zeta2_ = this->params_->sublist(
"Parameter Solid").get(
"Zeta2", 1000.e0 );
113 DeltaLambdaBarPMin_ =this->params_->sublist(
"Parameter Solid").get(
"DeltaLambdaBarPMin", -0.1e-4);
114 p1_ = this->params_->sublist(
"Parameter Solid").get(
"P1",0.6e0);
115 p3_ = this->params_->sublist(
"Parameter Solid").get(
"P3",0.6e0);
116 c50_ = this->params_->sublist(
"Parameter Solid").get(
"C50",0.5e0);
117 d0_ = this->params_->sublist(
"Parameter Diffusion").get(
"D0",6.e-05);
118 m_ = this->params_->sublist(
"Parameter Solid").get(
"m",0.e0);
119 activeStartTime_ = this->params_->sublist(
"Parameter Solid").get(
"ActiveStartTime",1.0);
120 kEtaPlus_ = this->params_->sublist(
"Parameter Solid").get(
"KEtaPlus",0.1e-3);
121 mEtaPlus_ = this->params_->sublist(
"Parameter Solid").get(
"MEtaPlus",5.0e0);
122 growthStartTime_ = this->params_->sublist(
"Parameter Solid").get(
"GrowthStartTime",0.e0);
123 reorientationStartTime_ = this->params_->sublist(
"Parameter Solid").get(
"ReorientationStartTime",0.e0);
124 growthEndTime_ = this->params_->sublist(
"Parameter Solid").get(
"GrowthEndTime",0.e0);
125 reorientationEndTime_ = this->params_->sublist(
"Parameter Solid").get(
"ReorientationEndTime",0.e0);
126 kThetaPlus_ = this->params_->sublist(
"Parameter Solid").get(
"KThetaPlus",1.e-4);
127 kThetaMinus_ = this->params_->sublist(
"Parameter Solid").get(
"KThetaMinus",1.e-4);
128 mThetaPlus_ = this->params_->sublist(
"Parameter Solid").get(
"MThetaPlus",3.e0);
129 mThetaMinus_ = this->params_->sublist(
"Parameter Solid").get(
"MThetaMinus",3.e0);
130 thetaPlus1_ = this->params_->sublist(
"Parameter Solid").get(
"ThetaPlus1",1.005063);
131 thetaPlus2_ = this->params_->sublist(
"Parameter Solid").get(
"ThetaPlus2",1.020595);
132 thetaPlus3_ = this->params_->sublist(
"Parameter Solid").get(
"ThetaPlus3",1.119918);
133 thetaMinus1_ = this->params_->sublist(
"Parameter Solid").get(
"ThetaMinus1",0.98e0);
134 thetaMinus2_ = this->params_->sublist(
"Parameter Solid").get(
"ThetaMinus2",0.98e0);
135 thetaMinus3_ = this->params_->sublist(
"Parameter Solid").get(
"ThetaMinus3",0.98e0);
136 kMin_ = this->params_->sublist(
"Parameter Solid").get(
"KMin",0.15e0);
137 rho_ = this->params_->sublist(
"Parameter Solid").get(
"Rho",1.e0);
142 FEType_ = std::get<1>(this->diskTuple_->at(0));
143 dofsSolid_ = std::get<2>(this->diskTuple_->at(0));
144 dofsChem_ = std::get<2>(this->diskTuple_->at(1));
146 numNodesSolid_ = std::get<3>(this->diskTuple_->at(0));
147 numNodesChem_ = std::get<3>(this->diskTuple_->at(1));
149 dofsElement_ = dofsSolid_*numNodesSolid_ + dofsChem_*numNodesChem_;
152 this->history_ ={1., 1., 1., 1., 0., 0., 0., 0., 0., 0., 1., 1., 1.82758, 1.82758, 1., 1., 1., 1., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
153 1., 1., 1., 1., 0., 0., 0., 0., 0., 0., 1., 1., 1.82758, 1.82758, 1., 1., 1., 1., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
154 1., 1., 1., 1., 0., 0., 0., 0., 0., 0., 1., 1., 1.82758, 1.82758, 1., 1., 1., 1., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
155 1., 1., 1., 1., 0., 0., 0., 0., 0., 0., 1., 1., 1.82758, 1.82758, 1., 1., 1., 1., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.};
161 this->historyLength_ = 0;
162#ifdef FEDD_HAVE_ACEGENINTERFACE
163 AceGenInterface::DeformationDiffusionSmoothMuscleActiveGrowthReorientationTetrahedra3D10 tempElem(iCode_);
164 this->historyLength_ = tempElem.getHistoryLength();
166 TEUCHOS_TEST_FOR_EXCEPTION(this->historyLength_ != this->history_.size(), std::logic_error,
"History input length does not match history size of model! \n Hisory input length: " << this->history_.size() <<
"\n History size of model: " << this->historyLength_ <<
"\n");
169 this->historyUpdated_.resize(this->historyLength_,0.);
172 solutionC_n_.resize(10,0.);
173 solutionC_n1_.resize(10,0.);
175 this->solution_.reset(
new vec_dbl_Type ( dofsElement_,0.) );
188 massMatrix_ = Teuchos::rcp(
new SmallMatrix_Type(10,0.));
191template <
class SC,
class LO,
class GO,
class NO>
194 SmallMatrixPtr_Type elementMatrix = Teuchos::rcp(
new SmallMatrix_Type(this->dofsElement_,0.));
196 assemble_SCI_SMC_Active_Growth_Reorientation(elementMatrix);
198 this->jacobian_ = elementMatrix;
201template <
class SC,
class LO,
class GO,
class NO>
210 this->timeStep_ = this->timeStep_ + this->timeIncrement_;
212 this->timeIncrement_ = dt;
214 for(
int i=0; i< this->historyLength_; i++){
216 this->history_[i] = this->historyUpdated_[i];
219 for(
int i=0; i< 10 ; i++)
220 this->solutionC_n_[i]=(*this->solution_)[i+30];
228 this->rhsVec_.reset(
new vec_dbl_Type ( this->dofsElement_,0.) );
230#ifdef FEDD_HAVE_ACEGENINTERFACE
235 double positions[30];
238 for(
int i=0;i<10;i++){
239 for(
int j=0;j<3;j++){
256 double displacements[30];
257 for(
int i = 0; i < 30; i++)
259 displacements[i]=(*this->solution_)[i];
263 std::vector<double> history(this->historyLength_, 0.0);
264 for(
int i = 0; i < this->historyLength_; i++){
265 history[i] = this->history_[i];
268 double concentrations[10];
269 for(
int i = 0; i < 10; i++)
271 concentrations[i]= (*this->solution_)[i+30];
272 this->solutionC_n1_[i] = (*this->solution_)[i+30];
275 double accelerations[] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
277 std::vector<double> domainData = {this->fA_, this->lambdaC50_, this->gamma3_, this->lambdaBarCDotMax_, this->lambdaBarCDotMin_, this->gamma2_, this->gamma1_, this->eta_, this->ca50_, this->k2_, this->k5_,
278 this->k3_, this->k4_, this->k7_, this->kappa_, this->beta1_, this->muA_, this->beta2_, this->alpha2_, this->alpha3_, this->alpha1_, this->alpha4_, this->alpha5_,
279 this->gamma6_, this->lambdaP50_, this->kDotMin_, this->zeta1_, this->kDotMax_, this->gamma4_, this->lambdaBarDotPMin_, this->lambdaBarDotPMax_, this->gamma5_, this->zeta2_,
280 this->DeltaLambdaBarPMin_, this->p1_, this->p3_, this->c50_, this->d0_, this->m_, this->activeStartTime_, this->kEtaPlus_, this->mEtaPlus_, this->growthStartTime_,
281 this->reorientationStartTime_, this->growthEndTime_, this->reorientationEndTime_, this->kThetaPlus_, this->kThetaMinus_, this->mThetaPlus_, this->mThetaMinus_, this->thetaPlus1_,
282 this->thetaPlus2_, this->thetaPlus3_, this->thetaMinus1_, this->thetaMinus2_, this->thetaMinus3_, this->kMin_, this->rho_};
286 for(
int i=0; i<10 ; i++){
287 rates[i] =(this->solutionC_n1_[i]-this->solutionC_n_[i])/deltaT;
293 double subIterationTolerance = 1.e-7;
296 double historyUpdated[] = {1., 1., 1., 1., 0., 0., 0., 0., 0., 0., 1., 1., 1.512656, 1.512656, 1., 1., 1., 1., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
297 1., 1., 1., 1., 0., 0., 0., 0., 0., 0., 1., 1., 1.512656, 1.512656, 1., 1., 1., 1., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
298 1., 1., 1., 1., 0., 0., 0., 0., 0., 0., 1., 1., 1.512656, 1.512656, 1., 1., 1., 1., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
299 1., 1., 1., 1., 0., 0., 0., 0., 0., 0., 1., 1., 1.512656, 1.512656, 1., 1., 1., 1., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.};
301 AceGenInterface::DeformationDiffusionSmoothMuscleActiveGrowthReorientationTetrahedra3D10 elem(positions, displacements, concentrations, accelerations, rates, &domainData[0], &history[0], subIterationTolerance, deltaT, time, this->iCode_,this->getGlobalElementID());
302 int errorCode = elem.compute();
304 TEUCHOS_TEST_FOR_EXCEPTION(errorCode == 2, std::runtime_error,
"Subiteration Fail in Element" << this->getGlobalElementID() );
307 double *residuumRint = elem.getResiduumVectorRint();
318 double *residuumRDyn = elem.getResiduumVectorRdyn();
320 for(
int i=0; i< 30 ; i++){
321 (*this->rhsVec_)[i] = residuumRint[i];
324 double *residuumRc = elem.getResiduumVectorRc();
326 for(
int i=0; i< 10 ; i++){
327 (*this->rhsVec_)[i+30] = residuumRc[i];