void NonlinearPoissonResidual<EvalT, Traits>:: evaluateFields(typename Traits::EvalData workset) { // u residual for (std::size_t cell = 0; cell < workset.numCells; ++cell) { for (std::size_t node = 0; node < num_nodes_; ++node) { residual_(cell,node) = 0.0; } for (std::size_t qp = 0; qp < num_qps_; ++qp) { for (std::size_t node = 0; node < num_nodes_; ++node) { for (std::size_t i = 0; i < num_dims_; ++i) { residual_(cell,node) += (1.0 + u_(cell,qp)*u_(cell,qp)) * u_grad_(cell,qp,i) * w_grad_bf_(cell,node,qp,i); } } } } // source function for (std::size_t cell = 0; cell < workset.numCells; ++cell) { for (std::size_t qp = 0; qp < num_qps_; ++qp) { for (std::size_t node = 0; node < num_nodes_; ++node) { residual_(cell,node) -= w_bf_(cell,node,qp) * source_(cell,qp); } } } }
void ElectrostaticResidual<EvalT, Traits>::evaluateFields( typename Traits::EvalData workset) { for (int cell = 0; cell < workset.numCells; ++cell) { for (int node = 0; node < num_nodes_; ++node) residual_(cell, node) = ScalarT(0); for (int pt = 0; pt < num_pts_; ++pt) for (int node = 0; node < num_nodes_; ++node) for (int i = 0; i < num_dims_; ++i) residual_(cell, node) += edisp_(cell, pt, i) * w_grad_bf_(cell, node, pt, i); } }
void MechanicsResidual<EvalT, Traits>:: evaluateFields(typename Traits::EvalData workset) { std::cout.precision(15); // initilize Tensors Intrepid::Tensor<ScalarT> F(num_dims_), P(num_dims_), sig(num_dims_); Intrepid::Tensor<ScalarT> I(Intrepid::eye<ScalarT>(num_dims_)); if (have_pore_pressure_) { for (std::size_t cell=0; cell < workset.numCells; ++cell) { for (std::size_t pt=0; pt < num_pts_; ++pt) { // Effective Stress theory sig.fill( &stress_(cell,pt,0,0) ); sig -= biot_coeff_(cell,pt) * pore_pressure_(cell,pt) * I; for (std::size_t i=0; i<num_dims_; i++) { for (std::size_t j=0; j<num_dims_; j++) { stress_(cell,pt,i,j) = sig(i,j); } } } } } // initialize residual if(have_strain_){ // for small deformation, use Cauchy stress for (std::size_t cell=0; cell < workset.numCells; ++cell) { for (std::size_t node=0; node < num_nodes_; ++node) { for (std::size_t dim=0; dim<num_dims_; ++dim) { residual_(cell,node,dim)=0.0; } } for (std::size_t pt=0; pt < num_pts_; ++pt) { //F.fill( &def_grad_(cell,pt,0,0) ); sig.fill( &stress_(cell,pt,0,0) ); for (std::size_t node=0; node < num_nodes_; ++node) { for (std::size_t i=0; i<num_dims_; ++i) { for (std::size_t j=0; j<num_dims_; ++j) { residual_(cell,node,i) += sig(i, j) * w_grad_bf_(cell, node, pt, j); } } } } } } else { // for large deformation, map Cauchy stress to 1st PK stress for (std::size_t cell=0; cell < workset.numCells; ++cell) { for (std::size_t node=0; node < num_nodes_; ++node) { for (std::size_t dim=0; dim<num_dims_; ++dim) { residual_(cell,node,dim)=0.0; } } for (std::size_t pt=0; pt < num_pts_; ++pt) { F.fill( &def_grad_(cell,pt,0,0) ); sig.fill( &stress_(cell,pt,0,0) ); // map Cauchy stress to 1st PK P = Intrepid::piola(F,sig); for (std::size_t node=0; node < num_nodes_; ++node) { for (std::size_t i=0; i<num_dims_; ++i) { for (std::size_t j=0; j<num_dims_; ++j) { residual_(cell,node,i) += P(i, j) * w_grad_bf_(cell, node, pt, j); } } } } } } // optional body force if (have_body_force_) { for (std::size_t cell=0; cell < workset.numCells; ++cell) { for (std::size_t node=0; node < num_nodes_; ++node) { for (std::size_t pt=0; pt < num_pts_; ++pt) { for (std::size_t dim=0; dim<num_dims_; ++dim) { residual_(cell,node,dim) += w_bf_(cell,node,pt) * body_force_(cell,pt,dim); } } } } } }
void PhaseResidual<EvalT, Traits>:: evaluateFields(typename Traits::EvalData workset) { typedef Intrepid::FunctionSpaceTools FST; FST::scalarMultiplyDataData<ScalarT> (term1_,k_,T_grad_); FST::integrate<ScalarT>(residual_,term1_,w_grad_bf_,Intrepid::COMP_CPP,false); FST::scalarMultiplyDataData<ScalarT> (term2_,rho_cp_,T_dot_); FST::integrate<ScalarT>(residual_,term2_,w_bf_,Intrepid::COMP_CPP,true); for (int i=0; i<source_.size(); ++i) source_[i] *= -1.0; FST::integrate<ScalarT>(residual_,source_,w_bf_,Intrepid::COMP_CPP,true); for (int i=0; i<laser_source_.size(); ++i) laser_source_[i] *= -1.0; FST::integrate<ScalarT>(residual_,laser_source_,w_bf_,Intrepid::COMP_CPP,true); /* std::cout<<"rho Cp values"<<std::endl; for (std::size_t cell = 0; cell < workset.numCells; ++cell) { for (std::size_t qp = 0; qp < num_qps_; ++qp) { std::cout<<rho_cp_(cell,qp)<<" "; } std::cout<<std::endl; } std::cout<<"Thermal cond values"<<std::endl; for (std::size_t cell = 0; cell < workset.numCells; ++cell) { for (std::size_t qp = 0; qp < num_qps_; ++qp) { std::cout<<k_(cell,qp)<<" "; } std::cout<<std::endl; } */ //---------------------------- #if 0 for (std::size_t cell = 0; cell < workset.numCells; ++cell) { for (std::size_t qp = 0; qp < num_qps_; ++qp) { term2_(cell,qp) = rho_cp_(cell,qp)*T_dot_(cell,qp); } } #endif // no rho_cp_ term - equivalent to heat problem // FST::integrate<ScalarT>(residual_,T_dot_,w_bf_,Intrepid::COMP_CPP,true); #if 0 // temperature residual for (std::size_t cell = 0; cell < workset.numCells; ++cell) { for (std::size_t node = 0; node < num_nodes_; ++node) { residual_(cell,node) = 0.0; } for (std::size_t qp = 0; qp < num_qps_; ++qp) { for (std::size_t node = 0; node < num_nodes_; ++node) { for (std::size_t i = 0; i < num_dims_; ++i) { residual_(cell,node) += k_(cell,qp) * T_grad_(cell,qp,i) * w_grad_bf_(cell,node,qp,i) + rho_cp_(cell,qp) * T_dot_(cell,qp) * w_bf_(cell,node,qp); } } } } // source function for (std::size_t cell = 0; cell < workset.numCells; ++cell) { for (std::size_t qp = 0; qp < num_qps_; ++qp) { for (std::size_t node = 0; node < num_nodes_; ++node) { residual_(cell,node) -= source_(cell,qp) * w_bf_(cell,node,qp); } } } #endif }
void PhaseResidual<EvalT, Traits>:: evaluateFields(typename Traits::EvalData workset) { // time step ScalarT dt = deltaTime(0); typedef Intrepid2::FunctionSpaceTools<PHX::Device> FST; if (dt == 0.0) dt = 1.0e-15; //grab old temperature Albany::MDArray T_old = (*workset.stateArrayPtr)[Temperature_Name_]; // Compute Temp rate for (std::size_t cell = 0; cell < workset.numCells; ++cell) { for (std::size_t qp = 0; qp < num_qps_; ++qp) { T_dot_(cell, qp) = (T_(cell, qp) - T_old(cell, qp)) / dt; } } // diffusive term FST::scalarMultiplyDataData<ScalarT> (term1_, k_.get_view(), T_grad_.get_view()); // FST::integrate(residual_, term1_, w_grad_bf_, false); //Using for loop to calculate the residual // zero out residual for (int cell = 0; cell < workset.numCells; ++cell) { for (int node = 0; node < num_nodes_; ++node) { residual_(cell,node) = 0.0; } } // for (int cell = 0; cell < workset.numCells; ++cell) { // for (int qp = 0; qp < num_qps_; ++qp) { // for (int node = 0; node < num_nodes_; ++node) { // for (int i = 0; i < num_dims_; ++i) { // residual_(cell,node) += w_grad_bf_(cell,node,qp,i) * term1_(cell,qp,i); // } // } // } // } //THESE ARE HARD CODED NOW. NEEDS TO BE CHANGED TO USER INPUT LATER ScalarT Coeff_volExp = 65.2e-6; //per kelvins ScalarT Ini_temp = 300; //kelvins if (hasConsolidation_) { for (int cell = 0; cell < workset.numCells; ++cell) { for (int qp = 0; qp < num_qps_; ++qp) { for (int node = 0; node < num_nodes_; ++node) { //Use if consolidation and expansion is considered // porosity_function1 = pow( ((1.0 - porosity_(cell, qp)) / ((1+Coeff_volExp*(T_(cell,qp) -Ini_temp))*(1.0 - Initial_porosity))), 2); // porosity_function2 = (1+Coeff_volExp*(T_(cell,qp) -Ini_temp))*(1.0 - Initial_porosity) / (1.0 - porosity_(cell, qp)); //Use if only consolidation is considered porosity_function1 = pow( ((1.0 - porosity_(cell, qp)) / (1.0 - Initial_porosity)), 2); porosity_function2 = (1.0 - Initial_porosity) / (1.0 - porosity_(cell, qp)); //In the model that is currently used, the Z-axis corresponds to the depth direction. Hence the term porosity //function1 is multiplied with the second term. residual_(cell, node) += porosity_function2 * ( w_grad_bf_(cell, node, qp, 0) * term1_(cell, qp, 0) + w_grad_bf_(cell, node, qp, 1) * term1_(cell, qp, 1) + porosity_function1 * w_grad_bf_(cell, node, qp, 2) * term1_(cell, qp, 2)); } } } // heat source from laser for (int cell = 0; cell < workset.numCells; ++cell) { for (int qp = 0; qp < num_qps_; ++qp) { for (int node = 0; node < num_nodes_; ++node) { //Use if consolidation and expansion is considered // porosity_function2 = (1+Coeff_volExp*(T_(cell,qp) -Ini_temp))*(1.0 - Initial_porosity) / (1.0 - porosity_(cell, qp)); //Use if only consolidation is considered porosity_function2 = (1.0 - Initial_porosity) / (1.0 - porosity_(cell, qp)); residual_(cell, node) -= porosity_function2 * (w_bf_(cell, node, qp) * laser_source_(cell, qp)); } } } // all other problem sources for (int cell = 0; cell < workset.numCells; ++cell) { for (int qp = 0; qp < num_qps_; ++qp) { for (int node = 0; node < num_nodes_; ++node) { //Use if consolidation and expansion is considered // porosity_function2 = (1+Coeff_volExp*(T_(cell,qp) -Ini_temp))*(1.0 - Initial_porosity) / (1.0 - porosity_(cell, qp)); //Use if only consolidation is considered porosity_function2 = (1.0 - Initial_porosity) / (1.0 - porosity_(cell, qp)); residual_(cell, node) -= porosity_function2 * (w_bf_(cell, node, qp) * source_(cell, qp)); } } } // transient term for (int cell = 0; cell < workset.numCells; ++cell) { for (int qp = 0; qp < num_qps_; ++qp) { for (int node = 0; node < num_nodes_; ++node) { //Use if consolidation and expansion is considered // porosity_function2 = (1+Coeff_volExp*(T_(cell,qp) -Ini_temp))*(1.0 - Initial_porosity) / (1.0 - porosity_(cell, qp)); //Use if only consolidation is considered porosity_function2 = (1.0 - Initial_porosity) / (1.0 - porosity_(cell, qp)); residual_(cell, node) += porosity_function2 * (w_bf_(cell, node, qp) * energyDot_(cell, qp)); } } } } else { // does not have consolidation for (int cell = 0; cell < workset.numCells; ++cell) { for (int qp = 0; qp < num_qps_; ++qp) { for (int node = 0; node < num_nodes_; ++node) { residual_(cell, node) += ( w_grad_bf_(cell, node, qp, 0) * term1_(cell, qp, 0) + w_grad_bf_(cell, node, qp, 1) * term1_(cell, qp, 1) + w_grad_bf_(cell, node, qp, 2) * term1_(cell, qp, 2)); } } } // heat source from laser for (int cell = 0; cell < workset.numCells; ++cell) { for (int qp = 0; qp < num_qps_; ++qp) { for (int node = 0; node < num_nodes_; ++node) { residual_(cell, node) -= (w_bf_(cell, node, qp) * laser_source_(cell, qp)); } } } // all other problem sources for (int cell = 0; cell < workset.numCells; ++cell) { for (int qp = 0; qp < num_qps_; ++qp) { for (int node = 0; node < num_nodes_; ++node) { residual_(cell, node) -= (w_bf_(cell, node, qp) * source_(cell, qp)); } } } // transient term for (int cell = 0; cell < workset.numCells; ++cell) { for (int qp = 0; qp < num_qps_; ++qp) { for (int node = 0; node < num_nodes_; ++node) { residual_(cell, node) += (w_bf_(cell, node, qp) * energyDot_(cell, qp)); } } } } // heat source from laser //PHAL::scale(laser_source_, -1.0); //FST::integrate(residual_, laser_source_, w_bf_, true); // all other problem sources //PHAL::scale(source_, -1.0); //FST::integrate(residual_, source_, w_bf_, true); // transient term //FST::integrate(residual_, energyDot_, w_bf_, true); }