libsim Versione 7.2.0

◆ vol7d_convr()

subroutine vol7d_convr ( type(vol7d), intent(in)  this,
type(vol7d), intent(inout)  that,
logical, intent(in), optional  anaconv 
)

Metodo per convertire i volumi di dati di un oggetto vol7d in dati reali dove possibile.

L'oggetto convertito è una copia completa dell'originale che può essere quindi distrutto dopo la chiamata. Per i dati di anagrafica, al momento sono convertiti solo i dati CHARACTER se è passato anaconv=.TRUE. Gli attributi non sono toccati.

Parametri
[in]thisoggetto origine
[in,out]thatoggetto convertito
[in]anaconvconverti anche anagrafica

Definizione alla linea 2270 del file vol7d_class.F90.

2271 ALLOCATE(v7d_tmp%volanar(SIZE(v7d_tmp%volanac, 1), SIZE(v7d_tmp%volanac, 2), &
2272 SIZE(v7d_tmp%volanac, 3)))
2273 DO i = 1, SIZE(v7d_tmp%anavar%c)
2274 v7d_tmp%volanar(:,i,:) = &
2275 realdat(v7d_tmp%volanac(:,i,:), v7d_tmp%anavar%c(i))
2276 ENDDO
2277 DEALLOCATE(v7d_tmp%volanac)
2278! trasferisco le variabili
2279 v7d_tmp%anavar%r => v7d_tmp%anavar%c
2280 NULLIFY(v7d_tmp%anavar%c)
2281 ENDIF
2282
2283 IF (ASSOCIATED(v7d_tmp%dativar%c)) THEN
2284! alloco i dati reali e vi trasferisco i character
2285 ALLOCATE(v7d_tmp%voldatir(SIZE(v7d_tmp%voldatic, 1), SIZE(v7d_tmp%voldatic, 2), &
2286 SIZE(v7d_tmp%voldatic, 3), SIZE(v7d_tmp%voldatic, 4), SIZE(v7d_tmp%voldatic, 5), &
2287 SIZE(v7d_tmp%voldatic, 6)))
2288 DO i = 1, SIZE(v7d_tmp%dativar%c)
2289 v7d_tmp%voldatir(:,:,:,:,i,:) = &
2290 realdat(v7d_tmp%voldatic(:,:,:,:,i,:), v7d_tmp%dativar%c(i))
2291 ENDDO
2292 DEALLOCATE(v7d_tmp%voldatic)
2293! trasferisco le variabili
2294 v7d_tmp%dativar%r => v7d_tmp%dativar%c
2295 NULLIFY(v7d_tmp%dativar%c)
2296 ENDIF
2297
2298! fondo con il volume definitivo
2299 CALL vol7d_merge(that, v7d_tmp)
2300ELSE
2301 CALL delete(v7d_tmp)
2302ENDIF
2303
2304END SUBROUTINE vol7d_convr
2305
2306
2310SUBROUTINE vol7d_diff_only (this, that, data_only,ana)
2311TYPE(vol7d),INTENT(IN) :: this
2312TYPE(vol7d),INTENT(OUT) :: that
2313logical , optional, intent(in) :: data_only
2314logical , optional, intent(in) :: ana
2315logical :: ldata_only,lana
2316
2317IF (PRESENT(data_only)) THEN
2318 ldata_only = data_only
2319ELSE
2320 ldata_only = .false.
2321ENDIF
2322
2323IF (PRESENT(ana)) THEN
2324 lana = ana
2325ELSE
2326 lana = .false.
2327ENDIF
2328
2329
2330#undef VOL7D_POLY_ARRAY
2331#define VOL7D_POLY_ARRAY voldati
2332#include "vol7d_class_diff.F90"
2333#undef VOL7D_POLY_ARRAY
2334#define VOL7D_POLY_ARRAY voldatiattr
2335#include "vol7d_class_diff.F90"
2336#undef VOL7D_POLY_ARRAY
2337
2338if ( .not. ldata_only) then
2339
2340#define VOL7D_POLY_ARRAY volana
2341#include "vol7d_class_diff.F90"
2342#undef VOL7D_POLY_ARRAY
2343#define VOL7D_POLY_ARRAY volanaattr
2344#include "vol7d_class_diff.F90"
2345#undef VOL7D_POLY_ARRAY
2346
2347 if(lana)then
2348 where ( this%ana == that%ana )
2349 that%ana = vol7d_ana_miss
2350 end where
2351 end if
2352
2353end if
2354
2355
2356
2357END SUBROUTINE vol7d_diff_only
2358
2359
2360
2361! Creo le routine da ripetere per i vari tipi di dati di v7d
2362! tramite un template e il preprocessore
2363#undef VOL7D_POLY_TYPE
2364#undef VOL7D_POLY_TYPES
2365#define VOL7D_POLY_TYPE REAL
2366#define VOL7D_POLY_TYPES r
2367#include "vol7d_class_type_templ.F90"
2368#undef VOL7D_POLY_TYPE
2369#undef VOL7D_POLY_TYPES
2370#define VOL7D_POLY_TYPE DOUBLE PRECISION
2371#define VOL7D_POLY_TYPES d
2372#include "vol7d_class_type_templ.F90"
2373#undef VOL7D_POLY_TYPE
2374#undef VOL7D_POLY_TYPES
2375#define VOL7D_POLY_TYPE INTEGER
2376#define VOL7D_POLY_TYPES i
2377#include "vol7d_class_type_templ.F90"
2378#undef VOL7D_POLY_TYPE
2379#undef VOL7D_POLY_TYPES
2380#define VOL7D_POLY_TYPE INTEGER(kind=int_b)
2381#define VOL7D_POLY_TYPES b
2382#include "vol7d_class_type_templ.F90"
2383#undef VOL7D_POLY_TYPE
2384#undef VOL7D_POLY_TYPES
2385#define VOL7D_POLY_TYPE CHARACTER(len=vol7d_cdatalen)
2386#define VOL7D_POLY_TYPES c
2387#include "vol7d_class_type_templ.F90"
2388
2389! Creo le routine da ripetere per i vari descrittori di dimensioni di v7d
2390! tramite un template e il preprocessore
2391#define VOL7D_SORT
2392#undef VOL7D_NO_ZERO_ALLOC
2393#undef VOL7D_POLY_TYPE
2394#define VOL7D_POLY_TYPE datetime
2395#include "vol7d_class_desc_templ.F90"
2396#undef VOL7D_POLY_TYPE
2397#define VOL7D_POLY_TYPE vol7d_timerange
2398#include "vol7d_class_desc_templ.F90"
2399#undef VOL7D_POLY_TYPE
2400#define VOL7D_POLY_TYPE vol7d_level
2401#include "vol7d_class_desc_templ.F90"
2402#undef VOL7D_SORT
2403#undef VOL7D_POLY_TYPE
2404#define VOL7D_POLY_TYPE vol7d_network
2405#include "vol7d_class_desc_templ.F90"
2406#undef VOL7D_POLY_TYPE
2407#define VOL7D_POLY_TYPE vol7d_ana
2408#include "vol7d_class_desc_templ.F90"
2409#define VOL7D_NO_ZERO_ALLOC
2410#undef VOL7D_POLY_TYPE
2411#define VOL7D_POLY_TYPE vol7d_var
2412#include "vol7d_class_desc_templ.F90"
2413
2423subroutine vol7d_write_on_file (this,unit,description,filename,filename_auto)
2424
2425TYPE(vol7d),INTENT(IN) :: this
2426integer,optional,intent(inout) :: unit
2427character(len=*),intent(in),optional :: filename
2428character(len=*),intent(out),optional :: filename_auto
2429character(len=*),INTENT(IN),optional :: description
2430
2431integer :: lunit
2432character(len=254) :: ldescription,arg,lfilename
2433integer :: nana, ntime, ntimerange, nlevel, nnetwork, &
2434 ndativarr, ndativari, ndativarb, ndativard, ndativarc,&
2435 ndatiattrr, ndatiattri, ndatiattrb, ndatiattrd, ndatiattrc,&
2436 ndativarattrr, ndativarattri, ndativarattrb, ndativarattrd, ndativarattrc,&
2437 nanavarr, nanavari, nanavarb, nanavard, nanavarc,&
2438 nanaattrr, nanaattri, nanaattrb, nanaattrd, nanaattrc,&
2439 nanavarattrr, nanavarattri, nanavarattrb, nanavarattrd, nanavarattrc
2440!integer :: im,id,iy
2441integer :: tarray(8)
2442logical :: opened,exist
2443
2444 nana=0
2445 ntime=0
2446 ntimerange=0
2447 nlevel=0
2448 nnetwork=0
2449 ndativarr=0
2450 ndativari=0
2451 ndativarb=0
2452 ndativard=0
2453 ndativarc=0
2454 ndatiattrr=0
2455 ndatiattri=0
2456 ndatiattrb=0
2457 ndatiattrd=0
2458 ndatiattrc=0
2459 ndativarattrr=0
2460 ndativarattri=0
2461 ndativarattrb=0
2462 ndativarattrd=0
2463 ndativarattrc=0
2464 nanavarr=0
2465 nanavari=0
2466 nanavarb=0
2467 nanavard=0
2468 nanavarc=0
2469 nanaattrr=0
2470 nanaattri=0
2471 nanaattrb=0
2472 nanaattrd=0
2473 nanaattrc=0
2474 nanavarattrr=0
2475 nanavarattri=0
2476 nanavarattrb=0
2477 nanavarattrd=0
2478 nanavarattrc=0
2479
2480
2481!call idate(im,id,iy)
2482call date_and_time(values=tarray)

Generated with Doxygen.