예제 #1
0
def picd(a):  # creats vtu data with cell situation at time step

    x_list = [0]
    y_list = [0]
    z_list = [0]
    r_list = [0]
    F_x = [0]
    F_y = [0]
    F_z = [0]

    vtk_writer = vtktools.VTK_XML_Serial_Unstructured()

    for elem in c_ary:
        if c_ary[elem].name == 'maybe':
            x_list.append(c_ary[elem].xcor)
            y_list.append(c_ary[elem].ycor)
            z_list.append(c_ary[elem].zcor)
            r_list.append(c_ary[elem].radius)
            F_x.append(fx[elem])
            F_y.append(fy[elem])
            F_z.append(fz[elem])

    vtk_writer.snapshot("cell_arrangements_maybe" + str(a) + ".vtu",
                        x_list,
                        y_list,
                        z_list,
                        radii=r_list,
                        x_force=F_x,
                        y_force=F_y,
                        z_force=F_z)
    vtk_writer.writePVD("cell_arrangements_maybe" + str(a) + ".pvd")
    def run(self):
        """
        Use Verlet integral method to do the simulation, return the trajectory in the form of
        traj[time_slice, particle_index, dim]
        """
        if self.inter_range is not None:
            cells_shape = (self.box // self.inter_range).astype(int)
            for k in range(len(cells_shape)):
                if cells_shape[k] == 0:
                    cells_shape[k] = 1
            cell_size = self.box / cells_shape
        else:
            cells_shape = None
            cell_size = None

        vtk_writer = vtktools.VTK_XML_Serial_Unstructured()

        if not self.initialized:
            # create random points inthe box
            self.traj[0] = np.random.rand(self.par_num, self.dim) * self.box
            self.v0 = np.zeros((self.par_num, self.dim), dtype=float)

        self.traj[1] = np.mod(self.traj[0] + self.v0, self.box)
        next = 2
        while next < self.traj.shape[0]:
            # calculate force
            if self.inter_range is not None:
                self.linked_cell = Linked_cell(self.traj[next - 1], self.box,
                                               self.inter_range)
            force = self.cal_force(self.traj[next - 1], self.linked_cell,
                                   cells_shape, cell_size)
            # verlet step
            self.traj[next] = 2 * self.traj[next - 1] - self.traj[
                next - 2] + self.dt**2 * force
            # periodic boundary
            self.traj[next] = np.mod(
                self.traj[next],
                self.box)  #??????????????????? mod could be a problem

            #vktools
            r_x = self.traj[next][:, 0]
            r_y = self.traj[next][:, 1]
            r_z = self.traj[next][:, 2]
            F_x = force[:, 0]
            F_y = force[:, 1]
            F_z = force[:, 2]
            vtk_writer.snapshot("simu/MD_" + str(self.dt) + ".vtu",
                                r_x,
                                r_y,
                                r_z,
                                x_force=F_x,
                                y_force=F_y,
                                z_force=F_z)

            next += 1

        # vtk_writer.writePVD("MD.pvd")
        return self.traj
예제 #3
0
def vtk_generator(simType, resultdir, resfile_i, dempath, nx, ny, dxy):

    #simname = dm.getsimname_2(resultdir, simType)

    vtk_writer = vtktools.VTK_XML_Serial_Unstructured()

    simpath = resultdir + resfile_i
    #simpath = 'model_geo.txt'
    xyz_columndata_all = pd.read_csv(simpath, error_bad_lines=False)
    xyz_columndata_all = xyz_columndata_all.values
    xyz_columndata = dm.xyz_extract_z_column(
        xyz_columndata_all, 0, 1, 4, 5)  # extract relevant column (x,y,z,h)

    x = xyz_columndata[:, 0]
    y = xyz_columndata[:, 1]
    z = xyz_columndata[:, 2]
    h = xyz_columndata[:, 3]

    xyz_columndata_2 = dm.xyz_extract_z_column(
        xyz_columndata_all, 8, 9, 11,
        12)  # extract relevant column (ux,uy,qx,qy)
    ux = xyz_columndata_2[:, 0] * 1000 / (dxy * dxy)  # m3/s -> l/s
    uy = xyz_columndata_2[:, 1] * 1000 / (dxy * dxy)  # m3/s -> l/s
    qx = xyz_columndata_2[:, 0]  # m3/s
    qy = xyz_columndata_2[:, 1]  # m3/s
    conc_sw = xyz_columndata_2[:, 2]
    conc_soil = xyz_columndata_2[:, 3]

    xyz_columndata_4 = dm.xyz_extract_z_column(
        xyz_columndata_all, 15, 0, 0,
        0)  # extract relevant column (ux,uy,qx,qy)
    timeconnect_h = xyz_columndata_4[:, 0]

    outputnam = resultdir + "vtk/" + resfile_i[0:len(resfile_i) - 4]

    #vtk_writer.snapshot(outputnam + ".vtu", x, y, z, h, ux, uy, qx, qy, conc_sw, conc_soil)
    vtk_writer.snapshot(outputnam + ".vtu", x, y, z, h, ux, uy, qy, qx,
                        conc_sw, conc_soil, timeconnect_h)
    #vtk_writer.snapshot(outputnam + ".vtu", x, y, h, ux, uy, qy, qx, conc_soil)
    vtk_writer.writePVD(outputnam + ".pvd")
예제 #4
0
import vtktools

vtk_writer = vtktools.VTK_XML_Serial_Unstructured()
''' Only plot cells '''

x = [-2.0, 0.0, 1.5]
y = [2.0, -2.5, 3.0]
z = [0.0, 0.0, 0.0]
R = [2.0, 2.5, 3.0]
''' Plot cells and forces '''

F_x = [10.0, 10.0, 20.0]
F_y = [15.0, -5.0, 0.0]
F_z = [0.0, 0.0, 0.0]

vtk_writer.snapshot("cell_arrangements.vtu",
                    x,
                    y,
                    z,
                    radii=R,
                    x_force=F_x,
                    y_force=F_y,
                    z_force=F_z)
vtk_writer.writePVD("cell_arrangements.pvd")

#vtk_writer.snapshot("cell_arrangements.vtu", x, y, z, radii = R)
#vtk_writer.writePVD("cell_arrangements.pvd")