| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(input_t), | intent(in) | :: | me | |||
| character(len=*), | intent(in) | :: | key | |||
| real(kind=dp), | intent(in), | optional | :: | default_value(:,:) |
default value in case of missing key |
function input_dbl2d(me,key,default_value) result(val) class(input_t), intent(in) :: me character(*), intent(in) :: key real(dp), optional, intent(in) :: default_value(:,:) !! default value in case of missing key real(dp), allocatable :: val(:,:) type(type_list), pointer :: element, element1 type(type_scalar), pointer :: element2 type(type_list_item), pointer :: item1, item2 integer :: i,j,dim1,dim2 logical :: ok type(input_t) :: tmp if(present(default_value)) val = default_value if(.not.me%has_key(key) .and. present(default_value)) return select type(node=>me%node(key));class is(type_list) ! Setting the first element and shaping matrix accordingly dim1 = node%size() item1 => node%first element => select_list(item1%node) dim2 = element%size() item2 => element%first if (allocated(val)) deallocate(val) allocate(val(dim1,dim2)) i = 1; j = 1 do while(associated(item1)) element1 => select_list(item1%node) if(element1%size()/=dim2) error stop & "2D array size is inconsistent for: "//element1%path j = 1 item2 => element1%first do while(associated(item2)) element2 => select_scalar(item2%node); val(i,j) = element2%to_real(0.0_dp,ok) call continue_if(element2,ok) item2 => item2%next j = j + 1 enddo item1 => item1%next i = i + 1 enddo return class is(type_dictionary) tmp%root => node if(get2d_hdf5(tmp,val)) return end select if(present(default_value)) return error stop 'Can not convert to 2d array of "double" for key: '//key end function input_dbl2d