Esempio n. 1
0
    def update_state(self, time, dtime, temp, dtemp, energy, rho, F0, F,
        stran, d, elec_field, stress, statev, **kwargs):
        """Compute updated stress given strain increment"""
        log = logging.getLogger('matmodlab.mmd.simulator')

        # defaults
        cmname = '{0:8s}'.format('umat')
        dfgrd0 = reshape(F0, (3, 3), order='F')
        dfgrd1 = reshape(F, (3, 3), order='F')
        dstran = d * dtime
        ddsdde = zeros((6, 6), order='F')
        ddsddt = zeros(6, order='F')
        drplde = zeros(6, order='F')
        predef = zeros(1, order='F')
        dpred = zeros(1, order='F')
        coords = zeros(3, order='F')
        drot = eye(3)
        ndi = nshr = 3
        spd = scd = rpl = drpldt = pnewdt = 0.
        noel = npt = layer = kspt = kinc = 1
        sse = mmlabpack.ddot(stress, stran) / rho
        celent = 1.
        kstep = 1
        time = array([time, time])

        self.lib.umat(stress, statev, ddsdde,
            sse, spd, scd, rpl, ddsddt, drplde, drpldt, stran, dstran,
            time, dtime, temp, dtemp, predef, dpred, cmname, ndi, nshr,
            self.num_sdv, self.params, coords, drot, pnewdt, celent, dfgrd0,
            dfgrd1, noel, npt, layer, kspt, kstep, kinc, log.info, log.warn,
            StopFortran)

        return stress, statev, ddsdde
Esempio n. 2
0
    def update_state(self,
                     time,
                     dtime,
                     temp,
                     dtemp,
                     energy,
                     rho,
                     F0,
                     F,
                     stran,
                     d,
                     elec_field,
                     stress,
                     statev,
                     num_sdv=None,
                     **kwargs):

        log = logging.getLogger('matmodlab.mmd.simulator')

        # abaqus defaults
        w = np.array([1, 1, 1, 2, 2, 2], dtype=np.float64)
        cmname = '{0:8s}'.format('umat')
        dfgrd0 = np.reshape(F0, (3, 3), order='F')
        dfgrd1 = np.reshape(F, (3, 3), order='F')
        dstran = d * dtime
        ddsdde = np.zeros((6, 6), order='F')
        ddsddt = np.zeros(6, order='F')
        drplde = np.zeros(6, order='F')
        predef = np.zeros(1, order='F')
        dpred = np.zeros(1, order='F')
        coords = np.zeros(3, order='F')
        drot = np.eye(3)
        ndi = nshr = 3
        spd = scd = rpl = drpldt = pnewdt = 0.
        noel = npt = layer = kspt = kinc = 1
        sse = mmlabpack.ddot(stress, stran) / rho
        celent = 1.
        kstep = 1
        time = np.array([time, time])
        # abaqus ordering
        stress = stress[self.ordering]
        # abaqus passes engineering strain
        dstran = dstran[self.ordering]  #* w
        stran = stran[self.ordering]  #* w

        self.lib.umat(stress, statev, ddsdde, sse, spd, scd, rpl, ddsddt,
                      drplde, drpldt, stran, dstran, time, dtime, temp, dtemp,
                      predef, dpred, cmname, ndi, nshr, self.num_sdv,
                      self.params, coords, drot, pnewdt, celent, dfgrd0,
                      dfgrd1, noel, npt, layer, kspt, kstep, kinc, log.info,
                      log.warn, StopFortran)
        stress = stress[self.ordering]
        ddsdde = ddsdde[self.ordering, [[i] for i in self.ordering]]
        if abs(pnewdt) > 1e-12:
            CB.request_cutback(pnewdt=pnewdt)
        return stress, statev, ddsdde
Esempio n. 3
0
    def update_state(self, time, dtime, temp, dtemp, energy, rho, F0, F,
        stran, d, elec_field, stress, statev, **kwargs):

        log = logging.getLogger('matmodlab.mmd.simulator')

        # abaqus defaults
        cmname = '{0:8s}'.format('umat')
        dfgrd0 = np.reshape(F0, (3, 3), order='F')
        dfgrd1 = np.reshape(F, (3, 3), order='F')
        dstran = d * dtime
        ddsdde = np.zeros((6, 6), order='F')
        ddsddt = np.zeros(6, order='F')
        drplde = np.zeros(6, order='F')
        predef = np.zeros(1, order='F')
        dpred = np.zeros(1, order='F')
        coords = np.zeros(3, order='F')
        drot = np.eye(3)
        ndi = nshr = 3
        spd = scd = rpl = drpldt = pnewdt = 0.
        noel = npt = layer = kspt = kinc = 1
        sse = mmlabpack.ddot(stress, stran) / rho
        celent = 1.
        kstep = 1
        time = np.array([time, time])
        # abaqus ordering
        stress = stress[self.ordering]
        # abaqus passes engineering strain
        dstran = dstran[self.ordering]
        stran = stran[self.ordering]

        self.lib.umat(stress, statev, ddsdde,
            sse, spd, scd, rpl, ddsddt, drplde, drpldt, stran, dstran,
            time, dtime, temp, dtemp, predef, dpred, cmname, ndi, nshr,
            self.num_sdv, self.params, coords, drot, pnewdt, celent, dfgrd0,
            dfgrd1, noel, npt, layer, kspt, kstep, kinc, log.info, log.warn,
            StopFortran)
        stress = stress[self.ordering]
        ddsdde = ddsdde[self.ordering, [[i] for i in self.ordering]]
        if abs(pnewdt) > 1e-12:
            CB.request_cutback(pnewdt=pnewdt)
        return stress, statev, ddsdde