libsim  Versione 7.1.6

◆ vol7d_fill_time()

subroutine vol7d_class_compute::vol7d_fill_time ( type(vol7d), intent(inout)  this,
type(vol7d), intent(inout)  that,
type(timedelta), intent(in)  step,
type(datetime), intent(in), optional  start,
type(datetime), intent(in), optional  stopp,
type(cyclicdatetime), intent(in), optional  cyclicdt 
)

Riempimento dei buchi temporali in un volume.

Questo metodo crea, a partire da un volume originale, un nuovo volume dati in cui la dimensione tempo contiene tutti gli istanti tra start e stopp (o tra il primo e l'ultimo livello temporale) ad intervalli step. Gli eventuali livelli mancanti vengono aggiunti riempiendo le corrispondenti posizioni dei volumi dati con valori mancanti. I livelli temporali che non sono ad intervalli step interi a partire dall'inizio, oppure quelli che giacciono fuori dall'intervallo start:stop non vengono toccati e quindi rimangono immutati nel volume finale (si veda anche la descrizione di vol7d_filter_time). Il volume originale non viene modificato e quindi dovrà essere distrutto da parte del programma chiamante se il suo contenuto non è più richiesto. Attenzione, se necessario la dimensione tempo (vettore thistime del volume this ) viene riordinata, come effetto collaterale della chiamata.

Parametri
[in]cyclicdtcyclic date and time

Definizione alla linea 1467 del file vol7d_class_compute.F90.

1468  this%voldatir(indana, indtime, indlevel, indtimerange, inddativarr, indnetwork) = &
1469  this%voldatir(indana, iindtime, indlevel, indtimerange, inddativarr, indnetwork)
1470  deltato=deltat
1471  end if
1472  end if
1473  end do
1474 
1475  do iindtime=indtime-1,1,-1 !check backward
1476 
1477  if (c_e(this%voldatir (indana, iindtime, indlevel, indtimerange, inddativarr, indnetwork )))then
1478  if (iindtime < indtime) then
1479  deltat=this%time(indtime)-this%time(iindtime)
1480  else if (iindtime > indtime) then
1481  deltat=this%time(iindtime)-this%time(indtime)
1482  else
1483  cycle
1484  end if
1485 
1486  if (deltat >= ltolerance) exit
1487 
1488  if (deltat < deltato) then
1489  this%voldatir(indana, indtime, indlevel, indtimerange, inddativarr, indnetwork) = &
1490  this%voldatir(indana, iindtime, indlevel, indtimerange, inddativarr, indnetwork)
1491  deltato=deltat
1492  end if
1493  end if
1494  end do
1495 
1496  end if
1497  end do
1498  end do
1499  end do
1500  end do
1501  end do
1502 end do
1503 
1504 END SUBROUTINE vol7d_fill_data
1505 
1506 
1507 ! private utility routine for checking interval and start-stop times
1508 ! in input missing start-stop values are treated as not present
1509 ! in output missing start-stop values mean "do nothing"
1510 SUBROUTINE safe_start_stop(this, lstart, lstop, start, stopp)
1511 TYPE(vol7d),INTENT(inout) :: this
1512 TYPE(datetime),INTENT(out) :: lstart
1513 TYPE(datetime),INTENT(out) :: lstop
1514 TYPE(datetime),INTENT(in),OPTIONAL :: start
1515 TYPE(datetime),INTENT(in),OPTIONAL :: stopp
1516 
1517 lstart = datetime_miss
1518 lstop = datetime_miss
1519 ! initial safety operation
1520 CALL vol7d_alloc_vol(this)
1521 IF (SIZE(this%time) == 0) RETURN ! avoid segmentation fault in case of empty volume
1522 CALL vol7d_smart_sort(this, lsort_time=.TRUE.)
1523 
1524 IF (PRESENT(start)) THEN
1525  IF (c_e(start)) THEN
1526  lstart = start
1527  ELSE
1528  lstart = this%time(1)
1529  ENDIF
1530 ELSE
1531  lstart = this%time(1)
1532 ENDIF
1533 IF (PRESENT(stopp)) THEN
1534  IF (c_e(stopp)) THEN
1535  lstop = stopp
1536  ELSE
1537  lstop = this%time(SIZE(this%time))
1538  ENDIF
1539 ELSE
1540  lstop = this%time(SIZE(this%time))
1541 ENDIF
1542 
1543 END SUBROUTINE safe_start_stop
1544 
1545 
1552 SUBROUTINE vol7d_normalize_vcoord(this,that,ana,time,timerange,network)
1553 TYPE(vol7d),INTENT(INOUT) :: this
1554 TYPE(vol7d),INTENT(OUT) :: that

Generated with Doxygen.