82 fA_= this->params_->sublist(
"Parameter Solid").get(
"FA",30.e0);
83 lambdaC50_ = this->params_->sublist(
"Parameter Solid").get(
"LambdaC50",0.12e1);
84 gamma3_= this->params_->sublist(
"Parameter Solid").get(
"Gamma3",0.9e0);
85 lambdaBarCDotMax_= this->params_->sublist(
"Parameter Solid").get(
"LambdaBarCDotMax",0.443e-1);
86 lambdaBarCDotMin_= this->params_->sublist(
"Parameter Solid").get(
"LambdaBarCDotMin",-0.443e-1);
87 gamma2_ = this->params_->sublist(
"Parameter Solid").get(
"Gamma2",50.0e0);
88 gamma1_ = this->params_->sublist(
"Parameter Solid").get(
"Gamma1",0.5131e0);
89 eta_ = this->params_->sublist(
"Parameter Solid").get(
"Eta",0.18745e0);
90 ca50_ = this->params_->sublist(
"Parameter Solid").get(
"Ca50",0.4e0);
91 k2_ = this->params_->sublist(
"Parameter Solid").get(
"K2",0.2e0);
92 k5_ = this->params_->sublist(
"Parameter Solid").get(
"K5",0.2e0);
93 k3_ = this->params_->sublist(
"Parameter Solid").get(
"K3",0.134e0);
94 k4_ = this->params_->sublist(
"Parameter Solid").get(
"K4",0.166e-2);
95 k7_= this->params_->sublist(
"Parameter Solid").get(
"K7",0.66e-4);
96 kappa_ = this->params_->sublist(
"Parameter Solid").get(
"Kappa",0.148262e0);
97 beta1_ = this->params_->sublist(
"Parameter Solid").get(
"Beta1",0.1006e-2);
98 muA_ = this->params_->sublist(
"Parameter Solid").get(
"MuA",0.11857e-1);
99 beta2_ = this->params_->sublist(
"Parameter Solid").get(
"Beta2",0.2668e-1);
100 alpha2_ = this->params_->sublist(
"Parameter Solid").get(
"Alpha2",0.15173775e0);
101 alpha3_ = this->params_->sublist(
"Parameter Solid").get(
"Alpha3",0.275662e1);
102 alpha1_ = this->params_->sublist(
"Parameter Solid").get(
"Alpha1",11.52507e-3);
103 alpha4_ = this->params_->sublist(
"Parameter Solid").get(
"Alpha4",1.27631e-3);
104 alpha5_ = this->params_->sublist(
"Parameter Solid").get(
"Alpha5",0.308798e1);
105 gamma6_ = this->params_->sublist(
"Parameter Solid").get(
"Gamma6",0.15e1);
106 lambdaP50_ = this->params_->sublist(
"Parameter Solid").get(
"LambdaP50",1.0e0);
107 kDotMin_ = this->params_->sublist(
"Parameter Solid").get(
"KDotMin",-0.10694e-1);
108 zeta1_ = this->params_->sublist(
"Parameter Solid").get(
"Zeta1",100.e0);
109 kDotMax_ = this->params_->sublist(
"Parameter Solid").get(
"KDotMax",0.9735e-3);
110 gamma4_ = this->params_->sublist(
"Parameter Solid").get(
"Gamma4",200.e0);
111 lambdaBarDotPMin_ = this->params_->sublist(
"Parameter Solid").get(
"LambdaBarDotMin",-0.2323e-3);
112 lambdaBarDotPMax_ = this->params_->sublist(
"Parameter Solid").get(
"LambdaBarDotMax",0.699e-4);
113 gamma5_ = this->params_->sublist(
"Parameter Solid").get(
"Gamma5", 50.e0 );
114 zeta2_ = this->params_->sublist(
"Parameter Solid").get(
"Zeta2", 1000.e0 );
115 DeltaLambdaBarPMin_ =this->params_->sublist(
"Parameter Solid").get(
"DeltaLambdaBarPMin", -0.1e-4);
116 p1_ = this->params_->sublist(
"Parameter Solid").get(
"P1",0.6e0);
117 p3_ = this->params_->sublist(
"Parameter Solid").get(
"P3",0.6e0);
118 c50_ = this->params_->sublist(
"Parameter Solid").get(
"C50",0.5e0);
119 d0_ = this->params_->sublist(
"Parameter Diffusion").get(
"D0",6.e-05);
120 m_ = this->params_->sublist(
"Parameter Solid").get(
"m",0.e0);
121 activeStartTime_ = this->params_->sublist(
"Parameter Solid").get(
"ActiveStartTime",1.0);
122 kEtaPlus_ = this->params_->sublist(
"Parameter Solid").get(
"KEtaPlus",0.1e-3);
123 mEtaPlus_ = this->params_->sublist(
"Parameter Solid").get(
"MEtaPlus",5.0e0);
124 growthStartTime_ = this->params_->sublist(
"Parameter Solid").get(
"GrowthStartTime",0.e0);
125 reorientationStartTime_ = this->params_->sublist(
"Parameter Solid").get(
"ReorientationStartTime",0.e0);
126 growthEndTime_ = this->params_->sublist(
"Parameter Solid").get(
"GrowthEndTime",0.e0);
127 reorientationEndTime_ = this->params_->sublist(
"Parameter Solid").get(
"ReorientationEndTime",0.e0);
128 kThetaPlus_ = this->params_->sublist(
"Parameter Solid").get(
"KThetaPlus",1.e-4);
129 kThetaMinus_ = this->params_->sublist(
"Parameter Solid").get(
"KThetaMinus",1.e-4);
130 mThetaPlus_ = this->params_->sublist(
"Parameter Solid").get(
"MThetaPlus",3.e0);
131 mThetaMinus_ = this->params_->sublist(
"Parameter Solid").get(
"MThetaMinus",3.e0);
132 thetaPlus1_ = this->params_->sublist(
"Parameter Solid").get(
"ThetaPlus1",1.005063);
133 thetaPlus2_ = this->params_->sublist(
"Parameter Solid").get(
"ThetaPlus2",1.020595);
134 thetaPlus3_ = this->params_->sublist(
"Parameter Solid").get(
"ThetaPlus3",1.119918);
135 thetaMinus1_ = this->params_->sublist(
"Parameter Solid").get(
"ThetaMinus1",0.98e0);
136 thetaMinus2_ = this->params_->sublist(
"Parameter Solid").get(
"ThetaMinus2",0.98e0);
137 thetaMinus3_ = this->params_->sublist(
"Parameter Solid").get(
"ThetaMinus3",0.98e0);
138 kMin_ = this->params_->sublist(
"Parameter Solid").get(
"KMin",0.15e0);
139 rho_ = this->params_->sublist(
"Parameter Solid").get(
"Rho",1.e0);
144 FEType_ = std::get<1>(this->diskTuple_->at(0));
145 dofsSolid_ = std::get<2>(this->diskTuple_->at(0));
146 dofsChem_ = std::get<2>(this->diskTuple_->at(1));
148 numNodesSolid_ = std::get<3>(this->diskTuple_->at(0));
149 numNodesChem_ = std::get<3>(this->diskTuple_->at(1));
151 dofsElement_ = dofsSolid_*numNodesSolid_ + dofsChem_*numNodesChem_;
154 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.,
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.,
156 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.,
157 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.};
163 this->historyLength_ = 0;
164#ifdef FEDD_HAVE_ACEGENINTERFACE
165 AceGenInterface::DeformationDiffusionSmoothMuscleActiveGrowthReorientationTetrahedra3D10 tempElem(iCode_);
166 this->historyLength_ = tempElem.getHistoryLength();
168 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");
171 this->historyUpdated_.resize(this->historyLength_,0.);
174 solutionC_n_.resize(10,0.);
175 solutionC_n1_.resize(10,0.);
177 this->solution_.reset(
new vec_dbl_Type ( dofsElement_,0.) );
190 massMatrix_ = Teuchos::rcp(
new SmallMatrix_Type(10,0.));
193template <
class SC,
class LO,
class GO,
class NO>
196 SmallMatrixPtr_Type elementMatrix = Teuchos::rcp(
new SmallMatrix_Type(this->dofsElement_,0.));
198 assemble_SCI_SMC_Active_Growth_Reorientation(elementMatrix);
200 this->jacobian_ = elementMatrix;
203template <
class SC,
class LO,
class GO,
class NO>
212 this->timeStep_ = this->timeStep_ + this->timeIncrement_;
214 this->timeIncrement_ = dt;
216 for(
int i=0; i< this->historyLength_; i++){
218 this->history_[i] = this->historyUpdated_[i];
221 for(
int i=0; i< 10 ; i++)
222 this->solutionC_n_[i]=(*this->solution_)[i+30];
230 this->rhsVec_.reset(
new vec_dbl_Type ( this->dofsElement_,0.) );
232#ifdef FEDD_HAVE_ACEGENINTERFACE
237 double positions[30];
240 for(
int i=0;i<10;i++){
241 for(
int j=0;j<3;j++){
258 double displacements[30];
259 for(
int i = 0; i < 30; i++)
261 displacements[i]=(*this->solution_)[i];
265 std::vector<double> history(this->historyLength_, 0.0);
266 for(
int i = 0; i < this->historyLength_; i++){
267 history[i] = this->history_[i];
270 double concentrations[10];
271 for(
int i = 0; i < 10; i++)
273 concentrations[i]= (*this->solution_)[i+30];
274 this->solutionC_n1_[i] = (*this->solution_)[i+30];
277 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};
279 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_,
280 this->k3_, this->k4_, this->k7_, this->kappa_, this->beta1_, this->muA_, this->beta2_, this->alpha2_, this->alpha3_, this->alpha1_, this->alpha4_, this->alpha5_,
281 this->gamma6_, this->lambdaP50_, this->kDotMin_, this->zeta1_, this->kDotMax_, this->gamma4_, this->lambdaBarDotPMin_, this->lambdaBarDotPMax_, this->gamma5_, this->zeta2_,
282 this->DeltaLambdaBarPMin_, this->p1_, this->p3_, this->c50_, this->d0_, this->m_, this->activeStartTime_, this->kEtaPlus_, this->mEtaPlus_, this->growthStartTime_,
283 this->reorientationStartTime_, this->growthEndTime_, this->reorientationEndTime_, this->kThetaPlus_, this->kThetaMinus_, this->mThetaPlus_, this->mThetaMinus_, this->thetaPlus1_,
284 this->thetaPlus2_, this->thetaPlus3_, this->thetaMinus1_, this->thetaMinus2_, this->thetaMinus3_, this->kMin_, this->rho_};
288 for(
int i=0; i<10 ; i++){
289 rates[i] =(this->solutionC_n1_[i]-this->solutionC_n_[i])/deltaT;
295 double subIterationTolerance = 1.e-7;
298 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.,
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.,
300 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 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.};
303 AceGenInterface::DeformationDiffusionSmoothMuscleActiveGrowthReorientationTetrahedra3D10 elem(positions, displacements, concentrations, accelerations, rates, &domainData[0], &history[0], subIterationTolerance, deltaT, time, this->iCode_,this->getGlobalElementID());
304 int errorCode = elem.compute();
306 TEUCHOS_TEST_FOR_EXCEPTION(errorCode == 2, std::runtime_error,
"Subiteration Fail in Element" << this->getGlobalElementID() );
309 double *residuumRint = elem.getResiduumVectorRint();
320 double *residuumRDyn = elem.getResiduumVectorRdyn();
322 for(
int i=0; i< 30 ; i++){
323 (*this->rhsVec_)[i] = residuumRint[i];
326 double *residuumRc = elem.getResiduumVectorRc();
328 for(
int i=0; i< 10 ; i++){
329 (*this->rhsVec_)[i+30] = residuumRc[i];