setup_omg_sdf Function

public function setup_omg_sdf() result(array)

setup OMG scene

Arguments

None

Return Value type(sdf), allocatable, (:)


Source Code

    function setup_omg_sdf() result(array)
    !! setup OMG scene

        use mat_class,        only : invert
        use opticalProperties
        use sdfHelpers,       only : translate, rotate_y
        use sdfModifiers,     only : SmoothUnion
        use sdfs,             only : sdf, cylinder, torus, box, model
        use vector_class,     only : vector

        type(sdf), allocatable :: array(:)
        type(sdf), allocatable, save :: cnta(:)
        
        type(opticalProp_t), save :: opt(2)
        type(vector)        :: a, b
        real(kind=wp)       :: t(4, 4), mus, mua, hgg, n
        integer             :: layer

        allocate(array(2), cnta(10))

        mus = 10._wp
        mua = 0.16_wp
        hgg = 0.0_wp
        n = 2.65_wp
        layer = 1

        opt(1) = mono(mus, mua, hgg, n)
        opt(2) = mono(0._wp, 0._wp, 0._wp, 1.0_wp)

        ! x
        ! |
        ! |
        ! |
        ! |
        ! |_____z

        !O letter
        a = vector(0._wp, 0._wp, -0.7_wp)
        t = invert(translate(a))
        cnta(1) = torus(.2_wp, 0.05_wp, opt(1), layer, transform=t)

        !M letter
        a = vector(-.25_wp, 0._wp, -.25_wp)
        b = vector(-.25_wp, 0._wp, .25_wp)
        t = invert(rotate_y(90._wp))
        cnta(2) = cylinder(a, b, .05_wp, opt(1), layer, transform=t)
        
        a = vector(-.25_wp, 0._wp, -.25_wp)
        b = vector(.25_wp, 0._wp, .0_wp)
        cnta(3) = cylinder(a, b, .05_wp, opt(1), layer)
        
        a = vector(.25_wp, 0._wp, .0_wp)
        b = vector(-.25_wp, 0._wp, .25_wp)
        cnta(4) = cylinder(a, b, .05_wp, opt(1), layer)

        a = vector(-.25_wp, 0._wp, .25_wp)
        b = vector(.25_wp, 0._wp, .25_wp)
        cnta(5) = cylinder(a, b, .05_wp, opt(1), layer)

        !G letter
        a = vector(-.25_wp, 0._wp, .5_wp)
        b = vector(.25_wp, 0._wp, .5_wp)
        cnta(6) = cylinder(a, b, .05_wp, opt(1), layer)

        a = vector(-.25_wp, 0._wp, .5_wp)
        b = vector(-.25_wp, 0._wp, .75_wp)
        cnta(7) = cylinder(a, b, .05_wp, opt(1), layer)

        a = vector(.25_wp, 0._wp, .5_wp)
        b = vector(.25_wp, 0._wp, .75_wp)
        cnta(8) = cylinder(a, b, .05_wp, opt(1), layer)

        a = vector(.25_wp, 0._wp, .75_wp)
        b = vector(0._wp, 0._wp, .75_wp)
        cnta(9) = cylinder(a, b, .05_wp, opt(1), layer)

        a = vector(0._wp, 0._wp, .625_wp)
        b = vector(0._wp, 0._wp, .75_wp)
        cnta(10) = cylinder(a, b, .05_wp, opt(1), layer)

        array(1) = model(cnta, smoothunion, 0.09_wp)
        array(2) = box(vector(2._wp, 2._wp, 2._wp), opt(2), 2)

    end function setup_omg_sdf