libsim  Versione 7.1.6

◆ dbasession_ingest_metaanddata()

subroutine dballe_class::dbasession_ingest_metaanddata ( class(dbasession), intent(inout)  session,
type(dbametaanddata), intent(inout), optional  metaanddata,
logical, intent(in), optional  noattr,
type(dbafilter), intent(in), optional  filter 
)
private

get data from DSN

Parametri
[in,out]metaanddataingested data
[in]noattrset to .true. to get data only (no attribute)
[in]filteruse this to filter wanted data

Definizione alla linea 3378 del file dballe_class.F03.

3379  allocate (metaanddata%dataattrv%dataattr(1)%attrv%dcv(j)%dat,source=starvars%dcv(j)%dat)
3380  end do
3381 
3382  if (c_e(session%count) .and. session%count > 0) then
3383 
3384  ier = idba_voglioancora(session%sehandle, acount)
3385  do k =1,acount
3386  ier = idba_ancora(session%sehandle, btable)
3387  ier = idba_enq(session%sehandle, btable,value)
3388 
3389  do j=1,size(metaanddata%dataattrv%dataattr(1)%attrv%dcv)
3390 
3391  if (metaanddata%dataattrv%dataattr(1)%attrv%dcv(j)%dat%btable == btable) then
3392 
3393  select type ( dat => metaanddata%dataattrv%dataattr(1)%attrv%dcv(j)%dat )
3394  type is (dbadatai)
3395  ier = idba_enq(session%sehandle, btable,dat%value)
3396  type is (dbadatar)
3397  ier = idba_enq(session%sehandle, btable,dat%value)
3398  type is (dbadatad)
3399  ier = idba_enq(session%sehandle, btable,dat%value)
3400  type is (dbadatab)
3401  ier = idba_enq(session%sehandle, btable,dat%value)
3402  type is (dbadatac)
3403  ier = idba_enq(session%sehandle, btable,dat%value)
3404  end select
3405 
3406  end if
3407  end do
3408  end do
3409  end if
3410  else
3411  if (c_e(session%count) .and. session%count > 0) then
3412  ier = idba_voglioancora(session%sehandle, acount)
3413 
3414  allocate (metaanddata%dataattrv%dataattr(1)%attrv%dcv(acount))
3415  do j =1,acount
3416  ier = idba_ancora(session%sehandle, btable)
3417  ier = idba_enq(session%sehandle, btable,value)
3418  allocate (metaanddata%dataattrv%dataattr(1)%attrv%dcv(j)%dat,source=dbadatac(btable,value))
3419  end do
3420  else
3421  allocate (metaanddata%dataattrv%dataattr(1)%attrv%dcv(0))
3422  end if
3423  end if
3424  end if
3425 
3426  if (c_e(session%count)) then
3427  session%count=session%count-1
3428 
3429  if (session%count > 0 ) then
3430  ier = idba_dammelo(session%sehandle, btable)
3431  end if
3432  end if
3433  end if
3434 !!$ SOLVED by https://github.com/ARPA-SIMC/dballe/issues/73
3435 !!$ !reading from file get some variable not in filter so we can have some attrv%dcv not allocated
3436  do i=1,size(metaanddata%dataattrv%dataattr)
3437  if (.not.allocated(metaanddata%dataattrv%dataattr(i)%attrv%dcv)) then
3438  allocate (metaanddata%dataattrv%dataattr(i)%attrv%dcv(0))
3439  endif
3440  end do
3441 
3442 end if
3443 
3444 end subroutine dbasession_ingest_metaanddata
3445 
3446 
3448 subroutine dbasession_ingest_metaanddatav(session,metaanddatav,noattr,filter)
3449 class(dbasession), intent(inout) :: session
3450 type(dbametaanddata), intent(inout),allocatable :: metaanddatav(:)
3451 logical, intent(in),optional :: noattr
3452 type(dbafilter),intent(in),optional :: filter
3453 
3454 type(dbametaanddata),allocatable :: metaanddatavbuf(:)
3455 integer :: i
3456 
3457 !todo aggiungere anche altrove dove passato filter
3458 if (present(filter)) then
3459  call filter%dbaset(session)
3460 else
3461  call session%unsetall()
3462 endif
3463 
3464 call session%ingest()
3465 !print*," count: ",session%count
3466 
3467 if (c_e(session%count)) then
3468  ! allocate to max dimension
3469  allocate(metaanddatavbuf(session%count))
3470  i=0
3471  do while (session%count >0)
3472  i=i+1
3473  call session%ingest(metaanddatavbuf(i),noattr=noattr,filter=filter)
3474  end do
3475 
3476 ! compact data to real dimension
3477  IF (SIZE(metaanddatavbuf) == i) THEN
3478 ! space/time optimization in common case of no filter
3479  CALL move_alloc(metaanddatavbuf, metaanddatav)
3480  ELSE
3481 ! allocate (metaanddatav(i))
3482  metaanddatav=metaanddatavbuf(:i)
3483  DEALLOCATE(metaanddatavbuf)
3484  ENDIF
3485 
3486 else
3487  if (allocated(metaanddatav)) deallocate(metaanddatav)
3488  allocate(metaanddatav(0))
3489 end if
3490 
3491 
3492 end subroutine dbasession_ingest_metaanddatav
3493 
3494 
3496 subroutine dbasession_ingest_metaanddatal(session,metaanddatal,noattr,filter)
3497 class(dbasession), intent(inout) :: session
3498 type(dbametaanddatalist), intent(out) :: metaanddatal
3499 logical, intent(in),optional :: noattr
3500 type(dbafilter),intent(in),optional :: filter
3501 
3502 type(dbametaanddata),allocatable :: metaanddatavbuf(:)
3503 integer :: i
3504 
3505 if (session%memdb .and. .not. session%loadfile)then
3506 
3507  do while (session%messages_read_next())
3508  call session%set(filter=filter)
3509  call session%ingest()
3510  call session%ingest(metaanddatavbuf,noattr=noattr,filter=filter)
3511  do i=1,size(metaanddatavbuf)
3512  call metaanddatal%append(metaanddatavbuf(i))
3513  end do
3514 
3515  call session%remove_all()
3516  deallocate (metaanddatavbuf)
3517  end do
3518 
3519 else
3520 
3521  call session%ingest()
3522 
3523  do while (c_e(session%count) .and. session%count >0)
3524  call session%ingest(metaanddatavbuf,noattr=noattr,filter=filter)
3525  do i=1,size(metaanddatavbuf)
3526  if (present(filter)) then
3527  ! exclude contextana data from file
3528  if (filter%contextana) then
3529  if (datetime_new() /= metaanddatavbuf(i)%metadata%datetime%datetime) cycle
3530  end if
3531  end if
3532  call metaanddatal%append(metaanddatavbuf(i))
3533  end do
3534  if (session%file) call session%ingest()
3535  deallocate (metaanddatavbuf)
3536  end do
3537 end if
3538 
3539 end subroutine dbasession_ingest_metaanddatal
3540 
3542 subroutine dbasession_ingest_metaanddatai(session,metaanddata)
3543 class(dbasession), intent(inout) :: session
3544 type(dbametaanddatai), intent(inout),optional :: metaanddata
3545 
3546 integer :: ier
3547 character(len=9) :: btable
3548 integer :: value
3549 
3550 if (.not. present(metaanddata)) then
3551  ier = idba_voglioquesto(session%sehandle, session%count)
3552 else
3553  ier = idba_dammelo(session%sehandle, btable)
3554  ier = idba_enq(session%sehandle, btable,value)
3555  metaanddata%dbadatai=dbadatai(btable,value)
3556  call metaanddata%metadata%dbaenq(session)
3557  session%count=session%count-1
3558 end if
3559 end subroutine dbasession_ingest_metaanddatai
3560 
3561 
3563 subroutine dbasession_ingest_metaanddataiv(session,metaanddatav)
3564 class(dbasession), intent(inout) :: session
3565 type(dbametaanddatai), intent(inout),allocatable :: metaanddatav(:)
3566 
3567 integer :: i
3568 
3569 call session%ingest_metaanddatai()
3570 if (c_e(session%count)) then
3571  allocate(metaanddatav(session%count))
3572  i=0
3573  do while (session%count >0)
3574  i=i+1
3575  call session%ingest_metaanddatai(metaanddatav(i))
3576  end do
3577 else
3578  allocate(metaanddatav(0))
3579 end if
3580 
3581 end subroutine dbasession_ingest_metaanddataiv
3582 
3583 
3585 subroutine dbasession_ingest_metaanddatab(session,metaanddata)
3586 class(dbasession), intent(inout) :: session
3587 type(dbametaanddatab), intent(inout),optional :: metaanddata
3588 
3589 integer :: ier
3590 character(len=9) :: btable
3591 integer(kind=int_b) :: value
3592 
3593 if (.not. present(metaanddata)) then
3594  ier = idba_voglioquesto(session%sehandle, session%count)
3595 else
3596  ier = idba_dammelo(session%sehandle, btable)
3597  ier = idba_enq(session%sehandle, btable,value)
3598  metaanddata%dbadatab=dbadatab(btable,value)
3599  call metaanddata%metadata%dbaenq(session)
3600  session%count=session%count-1
3601 end if
3602 end subroutine dbasession_ingest_metaanddatab
3603 
3604 
3606 subroutine dbasession_ingest_metaanddatabv(session,metaanddatav)
3607 class(dbasession), intent(inout) :: session
3608 type(dbametaanddatab), intent(inout),allocatable :: metaanddatav(:)
3609 
3610 integer :: i
3611 
3612 call session%ingest_metaanddatab()
3613 if (c_e(session%count)) then
3614  allocate(metaanddatav(session%count))
3615  i=0
3616  do while (session%count >0)
3617  i=i+1
3618  call session%ingest_metaanddatab(metaanddatav(i))
3619  end do
3620 else
3621  allocate(metaanddatav(0))
3622 end if
3623 
3624 end subroutine dbasession_ingest_metaanddatabv
3625 
3626 
3628 subroutine dbasession_ingest_metaanddatad(session,metaanddata)
3629 class(dbasession), intent(inout) :: session
3630 type(dbametaanddatad), intent(inout),optional :: metaanddata
3631 
3632 integer :: ier
3633 character(len=9) :: btable
3634 doubleprecision :: value
3635 
3636 if (.not. present(metaanddata)) then
3637  ier = idba_voglioquesto(session%sehandle, session%count)

Generated with Doxygen.