def formulation(): import calcul_sigmachap epsilon = grad_sym_col(dep.expr) epstest = grad_sym_col(dep.test) epsilonchap = grad_sym_col(depchap.expr) #calcul de sigmachap sigmachap=calcul_sigmachap.endommagement(epsilonchap,d.expr, elastic_modulus_1.expr,elastic_modulus_2.expr,elastic_modulus_3.expr, poisson_ratio_12.expr,poisson_ratio_13.expr,poisson_ratio_23.expr, shear_modulus_12.expr,shear_modulus_13.expr,shear_modulus_23.expr, v1.expr,v2.expr,alpha_1.expr,alpha_2.expr,alpha_3.expr,dim,deltaT.expr,type_stress_2D='plane stress') #direction de recherche K0,H0,epsth0,P0 = hooke_orthotrope_th_3d(elastic_modulus_1.expr,elastic_modulus_2.expr,elastic_modulus_3.expr, poisson_ratio_12.expr,poisson_ratio_13.expr,poisson_ratio_23.expr, shear_modulus_12.expr,shear_modulus_13.expr,shear_modulus_23.expr, v1.expr,v2.expr,alpha_1.expr,alpha_2.expr,alpha_3.expr) H = simplification_behaviour(K0,H0,epsth0,dim,type_stress_2D='plane stress')[0] sigma = mul(H,epsilon - epsilonchap) + sigmachap res=0 for i in range(dim): res += sigma[i] * epstest[i] for i in range(dim,epsilon.size()): res += 2 * sigma[i] * epstest[i] return res * dV
def apply_on_elements_after_solve(unk_subs): # return a string import calcul_sigmachap epsilon = grad_sym_col(dep.expr) epsilonchap = grad_sym_col(depchap.expr) sigmachap=calcul_sigmachap.endommagement(epsilonchap,d.expr, elastic_modulus_1.expr,elastic_modulus_2.expr,elastic_modulus_3.expr, poisson_ratio_12.expr,poisson_ratio_13.expr,poisson_ratio_23.expr, shear_modulus_12.expr,shear_modulus_13.expr,shear_modulus_23.expr, v1.expr,v2.expr,alpha_1.expr,alpha_2.expr,alpha_3.expr,dim,deltaT.expr,'plane stress') K0,H0,epsth0,P0 = hooke_orthotrope_th_3d(elastic_modulus_1.expr,elastic_modulus_2.expr,elastic_modulus_3.expr, poisson_ratio_12.expr,poisson_ratio_13.expr,poisson_ratio_23.expr, shear_modulus_12.expr,shear_modulus_13.expr,shear_modulus_23.expr, v1.expr,v2.expr,alpha_1.expr,alpha_2.expr,alpha_3.expr) H, epsths = simplification_behaviour(K0,H0,epsth0,dim,type_stress_2D='plane stress') P=simplification_projection(P0,dim) sigma = sigmachap + mul(H,epsilon-epsilonchap) ener=0 for i in range(dim): ener += sigma[i] * (epsilon[i] - epsths[i]*deltaT.expr) for i in range(dim,epsilon.size()): ener += 2. * sigma[i] * (epsilon[i] - epsths[i]*deltaT.expr) ener = e.integration( ener, 2 )/2 sigmalocal = mul(P,sigma) epsilon_3d,sigma_3d = reconstruction_quantites_3d(epsilon,K0,H0,epsth0,deltaT.expr,dim,type_stress_2D='plane stress') sigma_von_mises=von_mises( sigma_3d ) #TODO dans le cas ou l'on a plusieurs points de gauss....... my_subs = unk_subs #my_subs[ time ] = time_steps[0] for vi in e.var_inter: my_subs[vi] = number(0.5) sigma = sigma.subs(EM(my_subs)) epsilon = epsilon.subs(EM(my_subs)) sigmalocal = sigmalocal.subs(EM(my_subs)) sigma_von_mises = sigma_von_mises.subs(EM(my_subs)) cw = Write_code('T') for i in range(dim*(dim+1)/2): cw.add( epsilon[i], 'elem.epsilon[0]['+str(i)+']', Write_code.Set ) cw.add( sigma[i], 'elem.sigma[0]['+str(i)+']', Write_code.Set ) cw.add( sigmalocal[i], 'elem.sigma_local[0]['+str(i)+']', Write_code.Set ) cw.add( ener, 'elem.ener', Write_code.Set ) return cw.to_string()
def apply_on_elements_after_solve_2(unk_subs): # return a string import calcul_sigmachap epsilonchap = grad_sym_col(depchap.expr) sigmachap_xyz=calcul_sigmachap.endommagement(epsilonchap,d.expr, elastic_modulus_1.expr,elastic_modulus_2.expr,elastic_modulus_3.expr, poisson_ratio_12.expr,poisson_ratio_13.expr,poisson_ratio_23.expr, shear_modulus_12.expr,shear_modulus_13.expr,shear_modulus_23.expr, v1.expr,v2.expr,alpha_1.expr,alpha_2.expr,alpha_3.expr,dim,deltaT.expr,'plane stress') P0 = hooke_orthotrope_th_3d(elastic_modulus_1.expr,elastic_modulus_2.expr,elastic_modulus_3.expr, poisson_ratio_12.expr,poisson_ratio_13.expr,poisson_ratio_23.expr, shear_modulus_12.expr,shear_modulus_13.expr,shear_modulus_23.expr, v1.expr,v2.expr,alpha_1.expr,alpha_2.expr,alpha_3.expr)[3] P=simplification_projection(P0,dim) sigmachap=mul(P,sigmachap_xyz) #calcul de Ye par element Ye12 et Ye22 d1=d.expr coef12=(1-eqz(d1[0]-1)) * ( sigmachap[dim]/ (1.-d1[0]) ) coef22=(1-eqz(d1[1]-1)) * ( sigmachap[1]*heavyside(sigmachap[1])/(1.-d1[1]) ) Y12 = coef12*coef12 / (2.*shear_modulus_12.expr) Y22 = coef22*coef22 / (2.*elastic_modulus_2.expr) Yelem = Ye.expr Yelem[0]=e.integration(Y12,2) Yelem[1]=e.integration(Y22,2) # #TODO dans le cas ou l'on a plusieurs points de gauss....... # #my_subs = unk_subs # #my_subs[ time ] = time_steps[0] # #for vi in e.var_inter: my_subs[vi] = number(0.5) # #sigma = sigma.subs(EM(my_subs)) # #epsilon = epsilon.subs(EM(my_subs)) # cw = Write_code('T') # for i in range(dim*(dim+1)/2): # cw.add( sigma[i], 'elem.sigma[0]['+str(i)+']', Write_code.Set ) # return cw.to_string() cw = Write_code('T') for i in range(2): cw.add( Yelem[i], 'elem.Ye['+str(i)+']', Write_code.Set ) return cw.to_string()