def DDG_uv(U, V, dV):
    u = U[0]
    v = U[1]
    u_ = V[0]
    v_ = V[1]
    du = dV[0]
    dv = dV[1]
    em = emin(u, v)
    eM = emax(u, v)
    abs_u = pow((pow(u[0], 2) + pow(u[1], 2)), 1 / 2)

    martEnergy_uu = -3. / 2. * (1. / 3. * v / abs_u - 1. / 2.) * inner(u_, du)
    stiffEnergy_uu = -3./2.*(1./3.*v/abs_u - 1./2.)*inner(u_, du) \
         + 1./2.*((v/abs_u + 1./2.))*inner(du, u_)

    martEnergy_vv = 1. / 3. * dv * v_
    stiffEnergy_vv = 1. / 3. * dv * v_ + dv * v_

    isLiquid = And(And(gt(em, -1 / 3), lt(eM, -2 * em)), gt(eM, -em / 2))
    isMartensite = And(And(lt(em, -1 / 3), lt(eM, -2 * em)),
                       gt(eM, -em / 2 + 1 / 2))

    isStiff = conditional(
        And(And(lt(em, -1 / 3), gt(eM, -em / 2.)), lt(eM, -em / 2 + 1 / 2)),
        stiffEnergy_uu + stiffEnergy_vv, 0)
    isSolid = conditional(isMartensite, martEnergy_uu + martEnergy_vv, isStiff)
    eff_density_uv = conditional(isLiquid, 0., isSolid)
    return eff_density_uv * dx
def DG_uv(U, V):
    u = U[0]
    v = U[1]
    u_ = V[0]
    v_ = V[1]
    em = emin(u, v)
    eM = emax(u, v)
    abs_u = pow((pow(u[0], 2) + pow(u[1], 2)), 1 / 2)

    martEnergy_u = 3. / 2. * (em - 1. / 3.) * 2 * (-1. / 2.) * inner(
        u, u_) / abs_u
    stiffEnergy_u = 3./2.*(em - 1./3.)*2*(-1./2.)*inner(u, u_)/abs_u \
         + (em + 2.*eM-1)*inner(u, u_)/abs_u

    martEnergy_v = 3. / 2. * (em - 1. / 3.) * 2 * 1. / 3. * v_
    stiffEnergy_v = 3./2.*(em - 1./3.)*2*1./3.*v_ \
         + (em + 2.*eM-1)*v_

    isLiquid = And(And(gt(em, -1 / 3), lt(eM, -2 * em)), gt(eM, -em / 2))
    isMartensite = And(And(lt(em, -1 / 3), lt(eM, -2 * em)),
                       gt(eM, -em / 2 + 1 / 2))

    isStiff = conditional(
        And(And(lt(em, -1 / 3), gt(eM, -em / 2.)), lt(eM, -em / 2 + 1 / 2)),
        stiffEnergy_u + stiffEnergy_v, 0)
    isSolid = conditional(isMartensite, martEnergy_u + martEnergy_v, isStiff)
    eff_density_uv = conditional(isLiquid, 0., isSolid)
    return eff_density_uv * dx
    def G(U):
        v = U[1]
        stiffEnergy = 1 / 2 * 2. / 3. * pow((v - 1.), 2.)
        martEnergy = 1 / 2 * 2. / 3. * pow((v + 1. / 2.), 2.)

        # isLiquid = And(And(gt(em, -1/3), lt(eM,-2.*em)), gt(eM, - em/2.))
        isLiquid = And(gt(v, -1 / 2), lt(v, 1.))
        isElastic = gt(v, 1.)
        isMartensite = lt(v, -1. / 2.)
        isSolid = conditional(isMartensite, martEnergy, stiffEnergy)

        eff_density = conditional(isLiquid, 0., isSolid)
        return eff_density * dx
    def DDG_uv(U, V, dV):
        v = U[1]
        v_ = V[1]
        dv = dV[1]
        stiffEnergy = 2. / 3. * dv * v_
        martEnergy = 2. / 3. * dv * v_

        # isLiquid = And(And(gt(em, -1/3), lt(eM,-2.*em)), gt(eM, - em/2.))
        isLiquid = And(gt(v, -1 / 2), lt(v, 1.))
        isElastic = gt(v, 1.)
        isMartensite = lt(v, -1. / 2.)
        isSolid = conditional(isMartensite, martEnergy, stiffEnergy)

        eff_density = conditional(isLiquid, 0., isSolid)
        return eff_density * dx
    def DG_uv(U, V):
        v = U[1]
        v_ = V[1]
        # em = emin(u, v)
        # eM = emax(u, v)
        stiffEnergy = 2. / 3. * (v - 1.) * v_
        martEnergy = 2. / 3. * (v + 1. / 2.) * v_

        # isLiquid = And(And(gt(em, -1/3), lt(eM,-2.*em)), gt(eM, - em/2.))
        isLiquid = And(gt(v, -1 / 2), lt(v, 1.))
        isElastic = gt(v, 1.)
        isMartensite = lt(v, -1. / 2.)
        isSolid = conditional(isMartensite, martEnergy, stiffEnergy)

        eff_density = conditional(isLiquid, 0., isSolid)
        return eff_density * dx
def phase(u, v):
    # phase of dofs
    em = emin(u, v)
    eM = emax(u, v)
    isLiquid = And(And(gt(em, -1 / 3), lt(eM, -2 * em)), gt(eM, -em / 2))
    isMartensite = And(And(lt(em, -1 / 3), lt(eM, -2 * em)),
                       gt(eM, -em / 2 + 1 / 2))

    isStiff = conditional(
        And(And(lt(em, -1 / 3), gt(eM, -em / 2.)), lt(eM, -em / 2 + 1 / 2)), 3,
        -1)
    isSolid = conditional(isMartensite, 2, isStiff)
    # phase = conditional(isLiquid, 1, isSolid)
    phase = conditional(isLiquid, 1, 0)
    return phase
def H(v):
    em = v / 6.
    eM = conditional(gt(-v, 0), -v / 3., +v / 6.)

    martEnergy = 3. / 2. * pow((em - 1. / 3.), 2.)
    stiffEnergy = 3. / 2. * pow((em - 1. / 3.), 2.) + 1. / 2. * pow(
        (em + 2. * eM - 1.), 2.)

    isLiquid = And(And(gt(em, -1 / 3), lt(eM, -2 * em)), gt(eM, -em / 2))
    isMartensite = And(And(lt(em, -1 / 3), lt(eM, -2 * em)),
                       gt(eM, -em / 2 + 1 / 2))

    isStiff = conditional(
        And(And(lt(em, -1 / 3), gt(eM, -em / 2.)), lt(eM, -em / 2 + 1 / 2)),
        stiffEnergy, 0)
    isSolid = conditional(isMartensite, martEnergy, isStiff)
    eff_density = conditional(isLiquid, 0., isSolid)
    return eff_density * dx + lmbda / (2. * mu) * v * v * dx
def G(U):
    u = U[0]
    v = U[1]
    em = emin(u, v)
    eM = emax(u, v)
    martEnergy = 3. / 2. * pow((em + 1. / 3.), 2.)
    stiffEnergy = 3. / 2. * pow((em + 1. / 3.), 2.) + 1. / 2. * pow(
        (em + 2. * eM - 1.), 2.)

    isLiquid = And(And(gt(em, -1 / 3), lt(eM, -2. * em)), gt(eM, -em / 2.))
    isMartensite = And(And(lt(em, -1 / 3), lt(eM, -2 * em)),
                       gt(eM, -em / 2 + 1 / 2))
    isStiff = conditional(
        And(And(lt(em, -1 / 3), gt(eM, -em / 2.)), lt(eM, -em / 2 + 1 / 2)),
        stiffEnergy, 0)
    isSolid = conditional(isMartensite, martEnergy, isStiff)
    eff_density = conditional(isLiquid, 0., isSolid)
    return eff_density * dx
Пример #9
0
    def G(self, U):
        u = U[0]
        v = U[1]
        em = self.emin(u, v)
        eM = self.emax(u, v)
        martEnergy = 3. / 2. * pow((em + 1. / 3.), 2.)
        stiffEnergy = 3. / 2. * pow((em + 1. / 3.), 2.) + 1. / 2. * pow(
            (em + 2. * eM - 1.), 2.)

        isLiquid = And(And(gt(em, -1 / 3), lt(eM, -2. * em)), gt(eM, -em / 2.))
        isMartensite = And(And(lt(em, -1 / 3), lt(eM, -2 * em)),
                           gt(eM, -em / 2 + 1 / 2))
        isStiff = conditional(
            And(And(lt(em, -1 / 3), gt(eM, -em / 2.)),
                lt(eM, -em / 2 + 1 / 2)), stiffEnergy, 0)
        isSolid = conditional(isMartensite, martEnergy, isStiff)
        eff_density = conditional(isLiquid, 0., isSolid)
        _lmbda = project(Constant(self.lmbda),
                         FunctionSpace(self.mesh, 'DG', 0))
        return eff_density * self.dx + _lmbda / (2. *
                                                 self.mu) * v * v * self.dx
def isElastic(em, eM):
    return And(And(lt(em, -1 / 3), gt(eM, -em / 2.)), lt(eM, -em / 2 + 1 / 2))
def isMartensite(em, eM):
    return And(And(lt(em, -1 / 3), lt(eM, -2 * em)), gt(eM, -em / 2 + 1 / 2))
def isLiquid(em, eM):
    return And(And(gt(em, -1 / 3), lt(eM, -2. * em + DOLFIN_EPS)),
               gt(eM, -em / 2. - DOLFIN_EPS))