1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
|
!
! Copyright (C) 2021, MaX CoE
! Distributed under the MIT License
! (license terms are at http://opensource.org/licenses/MIT).
!
!--
!
!
! Utility functions to perform host data initializations
! using CUDA-Fortran
!
!==================================================================
!==================================================================
! *DO NOT EDIT*: automatically generated from devxlib_memset_host.jf90
!==================================================================
!==================================================================
!
#include<devxlib_macros.h>
#include<devxlib_defs.h>
!
!=======================================
!
! Note about dimensions:
! The lower bound of the assumed shape array passed to the subroutine is 1
! lbound and range instead refer to the indexing in the parent caller.
!
submodule (devxlib_memset) devxlib_memset_host
implicit none
contains
{%- for t in types %}
{%- for p in kinds[t] %}
{%- for d in range(1,dimensions+1) %}
module subroutine {{p.name}}_devxlib_memset_h_{{t[0]|lower}}{{d}}d(array_out, val, &{% for dd in range(d) %}
{{ "range%s"|format(dd+1) }}, {{ "lbound%s"|format(dd+1) }}{% if not loop.last %}, &
{%- endif %}{% endfor %} )
implicit none
!
{{t}}({{p.val}}), intent(inout) :: array_out({% for dd in range(d) %}:{% if not loop.last %}, {%- endif %}{% endfor %})
{{t}}({{p.val}}), intent(in) :: val
integer, optional, intent(in) :: {% for dd in range(d) %} {{ "range%s(2)"|format(dd+1) }}{% if not loop.last %}, {%- endif %}{% endfor %}
integer, optional, intent(in) :: {% for dd in range(d) %} {{ "lbound%s"|format(dd+1) }}{% if not loop.last %}, {%- endif %}{% endfor %}
!
{%- for dd in range(d) %}
integer :: i{{dd+1}}, d{{dd+1}}s, d{{dd+1}}e
integer :: lbound{{dd+1}}_, range{{dd+1}}_(2)
{%- endfor %}
!
{%- for dd in range(d) %}
lbound{{dd+1}}_=1
if (present(lbound{{dd+1}})) lbound{{dd+1}}_=lbound{{dd+1}}
range{{dd+1}}_=(/1,size(array_out, {{dd+1}})/)
if (present(range{{dd+1}})) range{{dd+1}}_=range{{dd+1}}
!
d{{dd+1}}s = range{{dd+1}}_(1) -lbound{{dd+1}}_ +1
d{{dd+1}}e = range{{dd+1}}_(2) -lbound{{dd+1}}_ +1
!
{%- endfor %}
!DEV_OMP parallel do
{%- for dd in range(d,0,-1) %}
do i{{dd}} = d{{dd}}s, d{{dd}}e
{%- endfor %}
array_out( {%- for dd in range(d) %}i{{dd+1}}{% if not loop.last %}, {%- endif %} {%- endfor %} ) = val
{%- for dd in range(d) %}
enddo
{%- endfor %}
!
end subroutine {{p.name}}_devxlib_memset_h_{{t[0]|lower}}{{d}}d
!
{%- endfor %}
{%- endfor %}
{%- endfor %}
endsubmodule devxlib_memset_host
|