libsim Versione 7.2.6
|
◆ qcspainit()
Init del controllo di qualità spaziale. Effettua la lettura dei file e altre operazioni di inizializzazione.
Definizione alla linea 345 del file modqcspa.F90. 351 latin1_l = 60.d0
352 latin2_l = 30.d0
353 projection_center_flag_l=1
354end if
355
356geoproj = geo_proj_new(proj_type_l, lov_l, zone, xoff, yoff, &
357 longitude_south_pole, latitude_south_pole, angle_rotation, &
358 longitude_stretch_pole, latitude_stretch_pole, stretch_factor, &
359 latin1_l, latin2_l, lad, projection_center_flag_l, &
360 ellips_smaj_axis, ellips_flatt, ellips_type)
361
362call getval(qcspa%v7d%ana%coord, lon, lat)
363
364!print*,"size",size(lon),size(lat)
365!print*,lat,lon
366call proj(geoproj,lon,lat,qcspa%co%x,qcspa%co%y)
367!print*,"size x y ",size(qcspa%x),size(qcspa%y)
368!print*,qcspa%x,qcspa%y
369
370!triangulate
371status = triangles_compute(qcspa%co,qcspa%tri)
372
373!qcspa%nt,qcspa%ipt,qcspa%nl,qcspa%ipl)
374
375if (status /= 0) then
376 call l4f_category_log(qcspa%category,l4f_error,"contng error status="//t2c(status))
377 !call raise_error()
378end if
379
380end subroutine qcspatri
381
382
383!>\brief Allocazioni di memoria
384subroutine qcspaalloc(qcspa)
385 ! pseudo costruttore con distruttore automatico
386
387type(qcspatype),intent(in out) :: qcspa !< Oggetto per il controllo climatico
388
389integer :: istatt
390integer :: sh(5)
391
392! se ti sei dimenticato di deallocare ci penso io
393call qcspadealloc(qcspa)
394
395
396!!$if (associated (qcspa%v7d%dativar%r )) then
397!!$ nv=size(qcspa%v7d%dativar%r)
398!!$
399!!$ allocate(qcspa%valminr(nv),stat=istat)
400!!$ istatt=istatt+istat
401!!$ allocate(qcspa%valmaxr(nv),stat=istat)
402!!$ istatt=istatt+istat
403!!$
404!!$ if (istatt /= 0) ier=1
405!!$
406!!$end if
407
408if (associated(qcspa%data_id_in))then
409 sh=shape(qcspa%data_id_in)
410 allocate (qcspa%data_id_out(sh(1),sh(2),sh(3),sh(4),sh(5)),stat=istatt)
411 if (istatt /= 0)then
412 call l4f_category_log(qcspa%category,l4f_error,"allocate error")
413 call raise_error("allocate error")
414 else
415 qcspa%data_id_out=imiss
416 end if
417end if
418
419if (associated(qcspa%v7d%ana))then
420 qcspa%ndp=size(qcspa%v7d%ana)
421 qcspa%tri = triangles_new(qcspa%ndp)
422 allocate(qcspa%co(qcspa%ndp))
423end if
424
425end subroutine qcspaalloc
426
427
428!>\brief Deallocazione della memoria
429subroutine qcspadealloc(qcspa)
430 ! pseudo distruttore
431
432type(qcspatype),intent(in out) :: qcspa !< Oggetto per l controllo climatico
433
434!!$if ( associated ( qcspa%valminr)) then
435!!$ deallocate(qcspa%valminr)
436!!$end if
437!!$
438!!$if ( associated ( qcspa%valmaxr)) then
439!!$ deallocate(qcspa%valmaxr)
440!!$end if
441
442if (associated(qcspa%data_id_out)) then
443 deallocate (qcspa%data_id_out)
444 nullify (qcspa%data_id_out)
445end if
446call delete(qcspa%tri)
447if (associated(qcspa%co)) deallocate(qcspa%co)
448
449end subroutine qcspadealloc
450
451
452!>\brief Cancellazione
453
454
455subroutine qcspadelete(qcspa)
456 ! decostruttore a mezzo
457type(qcspatype),intent(in out) :: qcspa !< Oggetto per il controllo climatico
458
459call qcspadealloc(qcspa)
460
461call delete(qcspa%qccli)
462
463qcspa%ndp=imiss
464
465!delete logger
466call l4f_category_delete(qcspa%category)
467
468return
469end subroutine qcspadelete
470
471
472!>\brief Controllo di Qualità spaziale.
473!!Questo è il vero e proprio controllo di qualità spaziale.
474
475SUBROUTINE quaconspa (qcspa,timetollerance,noborder,battrinv,battrcli,battrout,&
476 anamask,timemask,levelmask,timerangemask,varmask,networkmask)
477
478
479type(qcspatype),intent(in out) :: qcspa !< Oggetto per il controllo di qualità
480type(timedelta),intent(in) :: timetollerance !< time tollerance to compare nearest stations
481logical,intent(in),optional :: noborder !< Exclude border from QC
482character (len=10) ,intent(in),optional :: battrinv !< attributo invalidated in input
483character (len=10) ,intent(in),optional :: battrcli !< attributo con la confidenza climatologica in input
484character (len=10) ,intent(in),optional :: battrout !< attributo con la confidenza spaziale in output
485logical ,intent(in),optional :: anamask(:) !< Filtro sulle anagrafiche
486logical ,intent(in),optional :: timemask(:) !< Filtro sul tempo
487logical ,intent(in),optional :: levelmask(:) !< Filtro sui livelli
488logical ,intent(in),optional :: timerangemask(:) !< filtro sui timerange
489logical ,intent(in),optional :: varmask(:) !< Filtro sulle variabili
490logical ,intent(in),optional :: networkmask(:) !< Filtro sui network
491
|