mpi_3d_tsfem.f90 Source File


Source Code

program main
    use TSFEMClass
    implicit none

    type(FEMDomain_) :: domain
    type(FEMDomain_) :: my_domain
    type(TSFEM_)     :: TSFEM
    type(MPI_)       :: mpid
    integer(int32)   :: n
    integer(int32),allocatable :: LocalNodeList(:),idx(:)

    call mpid%init()



    call domain%create("Cube3D",x_num=100,y_num=100,z_num=1)
    call domain%resize(x=50.0d0,y=50.0d0,z=0.10d0)
    my_domain = domain%divide(mpid)
    n = domain%nn()
    call domain%remove()
    
    call my_domain%vtk("Cube3D"+zfill(mpid%myrank,4) )
    
    call TSFEM%init(femdomain=my_domain,density=2.50d0,&
        YoungModulus=dble(1.0e+7),PoissonRatio=0.30d0,DOF=3,mpid=mpid)
    
            
    !call TSFEM%init(femdomain=my_domain,density=2.50d0,&
    !    YoungModulus=dble(1.0e+7),PoissonRatio=0.30d0,DOF=3)
    
    !call TSFEM%DirichletBoundary(NodeList=[1],direction="X")
    !call TSFEM%AbsorbingBoundary(NodeList=[1],spring=100000.0d0,damper=1.0d0,direction="X")
    call TSFEM%NeumannBoundary(NodeList=[n],Force=dble(1.0e+3),direction="Z")
    


    call TSFEM%Time(dt=dble(1.0e-4),t=0.0d0,timestep=0)

    do i_i=1,1200
        if(i_i>50)then
            call TSFEM%NeumannBoundary(NodeList=[n],Force=0.0d0,direction="Z")
        endif
        
        print *, "step :: ",i_i
        call TSFEM%update()

        if(mod(i_i,10)==0 )then
            call TSFEM%save(name="result_sp"+zfill(mpid%myrank,4))
        endif    
    enddo
    
    !call TSFEM%movie(name="result"+zfill(mpid%myrank,4) )
    call mpid%finalize()

end program