libsim Versione 7.2.6
|
◆ dbafilter_init()
Constructor This is the filter we can use to limit results fron the ingest operation Without parameter it is initialized to missing.
Definizione alla linea 2212 del file dballe_class.F03. 2217 end do
2218
2219 dbafilter_init%varlist=""
2220 do i=1,size(vars%dcv)
2221 dbafilter_init%varlist=trim(dbafilter_init%varlist)//vars%dcv(i)%dat%btable
2222 if (i /= size(vars%dcv)) dbafilter_init%varlist=trim(dbafilter_init%varlist)//","
2223 end do
2224 endif
2225end if
2226
2227if (present(starvars)) then
2228 if (allocated(starvars%dcv)) then
2229 allocate(dbafilter_init%starvars%dcv(size(starvars%dcv)))
2230 do i =1,size(starvars%dcv)
2231 allocate(dbafilter_init%starvars%dcv(i)%dat,source=starvars%dcv(i)%dat)
2232 end do
2233
2234 dbafilter_init%starvarlist=""
2235 do i=1,size(starvars%dcv)
2236 dbafilter_init%starvarlist=trim(dbafilter_init%starvarlist)//starvars%dcv(i)%dat%btable
2237 if (i /= size(starvars%dcv)) dbafilter_init%starvarlist=trim(dbafilter_init%starvarlist)//","
2238 end do
2239 end if
2240end if
2241
2242
2243if (present(anavars)) then
2244 if (allocated(anavars%dcv)) then
2245 allocate(dbafilter_init%anavars%dcv(size(anavars%dcv)))
2246 do i =1,size(anavars%dcv)
2247 allocate(dbafilter_init%anavars%dcv(i)%dat,source=anavars%dcv(i)%dat)
2248 end do
2249
2250 dbafilter_init%anavarlist=""
2251 do i=1,size(anavars%dcv)
2252 dbafilter_init%anavarlist=trim(dbafilter_init%anavarlist)//anavars%dcv(i)%dat%btable
2253 if (i /= size(anavars%dcv)) dbafilter_init%anavarlist=trim(dbafilter_init%anavarlist)//","
2254 end do
2255 endif
2256end if
2257
2258if (present(anastarvars)) then
2259 if (allocated(anastarvars%dcv)) then
2260 allocate(dbafilter_init%anastarvars%dcv(size(anastarvars%dcv)))
2261 do i =1,size(anastarvars%dcv)
2262 allocate(dbafilter_init%anastarvars%dcv(i)%dat,source=anastarvars%dcv(i)%dat)
2263 end do
2264
2265 dbafilter_init%anastarvarlist=""
2266 do i=1,size(anastarvars%dcv)
2267 dbafilter_init%anastarvarlist=trim(dbafilter_init%anastarvarlist)//anastarvars%dcv(i)%dat%btable
2268 if (i /= size(anastarvars%dcv)) dbafilter_init%anastarvarlist=trim(dbafilter_init%anastarvarlist)//","
2269 end do
2270 end if
2271end if
2272
2273if (present(priority)) then
2274 dbafilter_init%priority=priority
2275else if (nopreserve) then
2276 dbafilter_init%priority=imiss
2277end if
2278
2279if (present(priomin)) then
2280 dbafilter_init%priomin=priomax
2281else if (nopreserve) then
2282 dbafilter_init%priomin=imiss
2283end if
2284
2285if (present(priomax)) then
2286 dbafilter_init%priomax=priomax
2287else if (nopreserve) then
2288 dbafilter_init%priomax=imiss
2289end if
2290
2291if (present(contextana)) then
2292 dbafilter_init%contextana=contextana
2293else if (nopreserve) then
2294 dbafilter_init%contextana=.false.
2295end if
2296
2297if (present(anaonly)) then
2298 dbafilter_init%anaonly=anaonly
2299else if (nopreserve) then
2300 dbafilter_init%anaonly=.false.
2301end if
2302if (present(dataonly)) then
2303 dbafilter_init%dataonly=dataonly
2304else if (nopreserve) then
2305 dbafilter_init%dataonly=.false.
2306end if
2307
2308if (present(query)) then
2309 dbafilter_init%query=query
2310else if (nopreserve) then
2311 dbafilter_init%query=cmiss
2312end if
2313
2314end function dbafilter_init
2315
2316!> print a summary of object content
2317subroutine dbafilter_display(filter)
2318class(dbafilter), intent(in) :: filter
2319
2320print *,"------------------ filter ---------------"
2321call filter%ana%display()
2322call filter%datetime%display()
2323call filter%level%display()
2324call filter%timerange%display()
2325call filter%network%display()
2326print *, " >>>> minimum:"
2327call filter%datetimemin%display()
2328call filter%coordmin%display()
2329print *, " >>>> maximum:"
2330call filter%datetimemax%display()
2331call filter%coordmax%display()
2332print *, " >>>> vars:"
2333call filter%vars%display()
2334print *, " >>>> starvars:"
2335call filter%starvars%display()
2336print *, " >>>> anavars:"
2337call filter%anavars%display()
2338print *, " >>>> anastarvars:"
2339call filter%anastarvars%display()
2340print *,"var=",filter%var
2341print *,"limit=",filter%limit
2342print *,"ana_filter=",trim(filter%ana_filter)
2343print *,"data_filter=",trim(filter%data_filter)
2344print *,"attr_filter=",trim(filter%attr_filter)
2345print *,"varlist=",trim(filter%varlist)
2346print *,"*varlist=",trim(filter%starvarlist)
2347print *,"anavarlist=",trim(filter%anavarlist)
2348print *,"ana*varlist=",trim(filter%anastarvarlist)
2349print *,"priority=",filter%priority
2350print *,"priomin=",filter%priomin
2351print *,"priomax=",filter%priomax
2352print *,"contextana=",filter%contextana
2353print *,"anaonly=",filter%anaonly
2354print *,"dataonly=",filter%dataonly
2355print *,"query=",trim(filter%query)
2356
2357print *,"-----------------------------------------"
2358
2359end subroutine dbafilter_display
2360
2361!> set parameters in dballe API
2362subroutine dbafilter_set(filter,session)
2363class(dbafilter), intent(in) :: filter
2364type(dbasession), intent(in) :: session
2365
2366integer :: ier,year,month,day,hour,minute,sec,msec
2367
2368call session%unsetall()
2369
2370call filter%ana%dbaset(session)
2371call filter%network%dbaset(session)
2372ier = idba_set(session%sehandle,"var",filter%var)
2373
2374ier = idba_set(session%sehandle,"limit",filter%limit)
2375ier = idba_set(session%sehandle,"priority",filter%priority)
2376ier = idba_set(session%sehandle,"priomin",filter%priomin)
2377ier = idba_set(session%sehandle,"priomax",filter%priomax)
2378
2379ier = idba_set(session%sehandle,"latmin",getilat(filter%coordmin%geo_coord))
2380ier = idba_set(session%sehandle,"lonmin",getilon(filter%coordmin%geo_coord))
2381ier = idba_set(session%sehandle,"latmax",getilat(filter%coordmax%geo_coord))
2382ier = idba_set(session%sehandle,"lonmax",getilon(filter%coordmax%geo_coord))
2383
2384ier = idba_set(session%sehandle,"ana_filter",filter%ana_filter)
2385ier = idba_set(session%sehandle,"data_filter",filter%data_filter)
2386ier = idba_set(session%sehandle,"attr_filter",filter%attr_filter)
2387
2388ier = idba_set(session%sehandle,"query",filter%query)
2389
2390if (filter%contextana) then
2391
2392 call session%setcontextana()
2393
2394 ier = idba_set(session%sehandle,"varlist",filter%anavarlist)
2395 ier = idba_set(session%sehandle,"*varlist",filter%anastarvarlist)
2396
2397else
2398
2399 if (c_e(filter%datetime%datetime)) call filter%datetime%dbaset(session)
2400 if (c_e(filter%level%vol7d_level)) call filter%level%dbaset(session)
2401 if (c_e(filter%timerange%vol7d_timerange)) call filter%timerange%dbaset(session)
2402
2403 CALL getval(filter%datetimemin%datetime, year=year, month=month, day=day, hour=hour, minute=minute,msec=msec)
2404 if (c_e(msec)) then
2405 sec=nint(float(msec)/1000.)
2406 else
2407 sec=imiss
2408 end if
2409
2410 ier = idba_set(session%sehandle,"yearmin",year)
2411 ier = idba_set(session%sehandle,"monthmin",month)
2412 ier = idba_set(session%sehandle,"daymin",day)
2413 ier = idba_set(session%sehandle,"hourmin",hour)
2414 ier = idba_set(session%sehandle,"minumin",minute)
2415 ier = idba_set(session%sehandle,"secmin",sec)
2416
2417 CALL getval(filter%datetimemax%datetime, year=year, month=month, day=day, hour=hour, minute=minute,msec=msec)
2418
2419 if (c_e(msec)) then
2420 sec=nint(float(msec)/1000.)
2421 else
2422 sec=imiss
2423 end if
2424
2425 ier = idba_set(session%sehandle,"yearmax",year)
2426 ier = idba_set(session%sehandle,"monthmax",month)
2427 ier = idba_set(session%sehandle,"daymax",day)
2428 ier = idba_set(session%sehandle,"hourmax",hour)
2429 ier = idba_set(session%sehandle,"minumax",minute)
2430 ier = idba_set(session%sehandle,"secmax",sec)
2431
2432
2433 ier = idba_set(session%sehandle,"varlist",filter%varlist)
2434 ier = idba_set(session%sehandle,"*varlist",filter%starvarlist)
2435end if
2436
2437end subroutine dbafilter_set
2438
2439
2440!> set dballe station data context for all metadata (in object, not dballe session)
2441type(dbametadata) function dbametadata_contextana(metadata)
2442class(dbametadata), intent(in) :: metadata
2443
2444type (dbadatetime) :: datetime
2445type (dbalevel) :: level
2446type (dbatimerange) :: timerange
2447
2448select type(metadata)
2449type is(dbametadata)
2450 dbametadata_contextana=metadata
2451end select
2452
2453dbametadata_contextana%datetime=datetime%dbacontextana()
2454dbametadata_contextana%level=level%dbacontextana()
2455dbametadata_contextana%timerange=timerange%dbacontextana()
2456
2457end function dbametadata_contextana
2458
2459
2460!> print a summary of object content
2461subroutine dbametaanddata_display(metaanddata)
2462class(dbametaanddata), intent(in) :: metaanddata
2463
2464call metaanddata%metadata%display()
2465call metaanddata%dataattrv%display()
2466
2467end subroutine dbametaanddata_display
2468
2469!> put data on DSN
2470subroutine dbametaanddata_extrude(metaanddata,session,noattr,filter,attronly,template)
2471class(dbametaanddata), intent(in) :: metaanddata
2472type(dbasession), intent(in) :: session !< dballe session
2473logical, intent(in),optional :: noattr !< set to .true. to get data only (no attribute)
2474type(dbafilter),intent(in),optional :: filter !< use this to filter wanted data
2475logical, intent(in),optional :: attronly !< set to .true. to export attr only (no data)
2476character(len=*),intent(in),optional :: template
2477
2478type(dbafilter) :: myfilter
2479
2480!print *,"------------------"
2481!call metaanddata%display()
2482!print *,"contextana false"
2483
2484myfilter=dbafilter(filter=filter,contextana=.false.)
2485call extrude(metaanddata,session,noattr,myfilter,attronly,template)
2486
2487!print *,"contextana true"
2488myfilter=dbafilter(filter=filter,contextana=.true.)
2489call extrude(metaanddata,session,noattr,myfilter,attronly,template)
2490
2491contains
2492
2493subroutine extrude(metaanddata,session,noattr,filter,attronly,template)
2494class(dbametaanddata), intent(in) :: metaanddata
2495type(dbasession), intent(in) :: session !< dballe session
2496logical, intent(in),optional :: noattr !< set to .true. to get data only (no attribute)
2497type(dbafilter),intent(in) :: filter !< use this to filter wanted data
2498logical, intent(in),optional :: attronly !< set to .true. to export attr only (no data)
2499character(len=*),intent(in),optional :: template
2500
2501if (.not. filter == metaanddata%metadata) return
|