[docs]@unittest.skipIf(usingTestingFilter,'')deftestAreaIntegrals(self):edgeA=np.array([[0.1,0.1],[0.2,0.1]])edgeB=np.array([[0.22,0.0],[0.18,0.0]])# eventually...# can give options on integrating on common vs different surfaces# can give options on quadrature rule on common surfacecommonArea=MortarContact.integrate_with_mortar(edgeA,edgeB,self.f_common_normal,lambdaxiA,xiB,g:g,relativeSmoothingSize=1e-7)self.assertNear(commonArea,0.002,9)
[docs]@unittest.skipIf(True,'Used to visually explore smoothing')deftestSpline(self):frommatplotlibimportpyplotaspltx=np.linspace(0.0,1.0,100)y=jax.vmap(spline_ramp)(x)#y = jax.vmap(smooth_linear,(0,None))(x,0.1) plt.clf()plt.plot(x,y)plt.savefig('tmp.png')
[docs]@unittest.skipIf(False,'Used to visually explore contact behavior')deftestMortarIntegralOneSided(self):frommatplotlibimportpyplotaspltdefintegrate_multipliers(edgeA,edgeB,lambdaA,lambdaB):defq(xiA,xiB,g):lamA=MortarContact.eval_linear_field_on_edge(lambdaA,xiA)lamB=MortarContact.eval_linear_field_on_edge(lambdaB,xiB)returng*(lamA+lamB)returnMortarContact.integrate_with_mortar(edgeA,edgeB,self.f_common_normal,q,relativeSmoothingSize=0.03)edgeA=np.array([[1.0,0.1],[2.0,0.1]])edgeB=np.array([[3.0,0.0],[2.0,0.0]])lambdaA=np.array([1.0,1.0])lambdaB=np.zeros(2)defgap_of_y(y):ea=edgeA.at[0,0].set(y)ea=ea.at[1,0].set(y+1.0)returnintegrate_multipliers(ea,edgeB,lambdaA,lambdaB)N=500edgeAy=np.linspace(0.9,3.1,N)energy=jax.vmap(gap_of_y)(edgeAy)force=jax.vmap(jax.grad(gap_of_y))(edgeAy)plt.clf()plt.plot(edgeAy,energy)plt.savefig('energy.png')plt.clf()plt.plot(edgeAy,force)plt.savefig('force.png')