test.f90 Source File


Contents

Source Code


Source Code

program main
    use MeshOperationClass
    use FEMDomainClass
    implicit none
    
    type(Mesh_)::obj1,obj2,obj3
    integer i,n,m


    ! import
    open(10,file="debug.inp",status="old")
    read(10,*) n,m
    allocate(obj1%ElemNod(n,m) )
    do i=1,n
        read(10,*) obj1%ElemNod(i,1:m)
        print *,   obj1%ElemNod(i,1:m)
    enddo
    allocate(obj1%NodCoord(6,2) )
    obj1%NodCoord(:,:)=0.0d0
    obj1%NodCoord(:,:)=0.0d0
    obj1%NodCoord(1,1)=0.0d0
    obj1%NodCoord(2,1)=1.0d0
    obj1%NodCoord(3,1)=1.0d0
    obj1%NodCoord(4,1)=0.0d0
    obj1%NodCoord(5,1)=2.0d0
    obj1%NodCoord(6,1)=2.0d0
    obj1%NodCoord(1,2)=0.0d0
    obj1%NodCoord(2,2)=0.0d0
    obj1%NodCoord(3,2)=1.0d0
    obj1%NodCoord(4,2)=1.0d0
    obj1%NodCoord(5,2)=0.0d0
    obj1%NodCoord(6,2)=1.0d0

    allocate(obj1%ElemMat(size(obj1%ElemNod,1)))
    obj1%ElemMat=1
    close(10)


    open(10,file="debug.inp",status="old")
    read(10,*) n,m
    allocate(obj2%ElemNod(n,m) )
    do i=1,n
        read(10,*) obj2%ElemNod(i,1:m)
        print *,   obj2%ElemNod(i,1:m)
    enddo
    allocate(obj2%NodCoord(6,2) )
    obj2%NodCoord(:,:)=0.0d0+4.0d0
    obj2%NodCoord(1,1)=0.0d0+4.0d0
    obj2%NodCoord(2,1)=1.0d0+4.0d0
    obj2%NodCoord(3,1)=1.0d0+4.0d0
    obj2%NodCoord(4,1)=0.0d0+4.0d0
    obj2%NodCoord(5,1)=2.0d0+4.0d0
    obj2%NodCoord(6,1)=2.0d0+4.0d0
    obj2%NodCoord(1,2)=0.0d0
    obj2%NodCoord(2,2)=0.0d0
    obj2%NodCoord(3,2)=1.0d0
    obj2%NodCoord(4,2)=1.0d0
    obj2%NodCoord(5,2)=0.0d0
    obj2%NodCoord(6,2)=1.0d0
    allocate(obj2%ElemMat(size(obj2%ElemNod,1)))
    obj2%ElemMat=2
    
    close(10)

    !get facet
    call GetSurface2D(obj1)
    call GetSurface2D(obj2)
    !Merge
    call MergeMesh(obj1,obj2,obj3)



    print *, "obj1"
    do i=1,size(obj1%SubMeshNodFromTo,1)
        print *, "Subdomain",obj1%SubMeshNodFromTo(i,1),&
        "starts from node ID : ",obj1%SubMeshNodFromTo(i,2),&
        "up to node ID : ",obj1%SubMeshNodFromTo(i,3)
    enddo
    
    do i=1,size(obj1%SubMeshNodFromTo,1)
        print *, "Subdomain",obj1%SubMeshElemFromTo(i,1),&
        "starts from Element ID : ",obj1%SubMeshElemFromTo(i,2),&
        "up to Element ID : ",obj1%SubMeshElemFromTo(i,3)
    enddo

    do i=1,size(obj1%SubMeshNodFromTo,1)
        print *, "Subdomain",obj1%SubMeshSurfFromTo(i,1),&
        "starts from Surface node ID : ",obj1%SubMeshSurfFromTo(i,2),&
        "up to Surface node ID : ",obj1%SubMeshSurfFromTo(i,3)
    enddo

    print *, "obj3"
    do i=1,size(obj3%SubMeshNodFromTo,1)
        print *, "Subdomain",obj3%SubMeshNodFromTo(i,1),&
        "starts from node ID : ",obj3%SubMeshNodFromTo(i,2),&
        "up to node ID : ",obj3%SubMeshNodFromTo(i,3)
    enddo
    
    do i=1,size(obj3%SubMeshNodFromTo,1)
        print *, "Subdomain",obj3%SubMeshElemFromTo(i,1),&
        "starts from Element ID : ",obj3%SubMeshElemFromTo(i,2),&
        "up to Element ID : ",obj3%SubMeshElemFromTo(i,3)
    enddo

    do i=1,size(obj3%SubMeshNodFromTo,1)
        print *, "Subdomain",obj3%SubMeshSurfFromTo(i,1),&
        "starts from Surface node ID : ",obj3%SubMeshSurfFromTo(i,2),&
        "up to Surface node ID : ",obj3%SubMeshSurfFromTo(i,3)
    enddo

    !do i=1,size(obj3%ElemNod,1)
    !    print *, obj3%ElemNod(i,:)
    !enddo

    !do i=1,size(obj3%SurfaceLine2D,1)
    !    print *, obj3%SurfaceLine2D(i)
    !enddo

    call DisplayMesh(obj3)

end program main