libsim  Versione 7.1.7

◆ vol7d_smart_sort()

subroutine vol7d_class::vol7d_smart_sort ( type(vol7d), intent(inout)  this,
logical, intent(in), optional  lsort_time,
logical, intent(in), optional  lsort_timerange,
logical, intent(in), optional  lsort_level 
)

Sorts the sortable dimensions in the volume this only when necessary.

Most of the times, the time, timerange and level dimensions in a vol7d object are correctly sorted; on the other side many methods strictly rely on this fact in order to work correctly. This method performs a quick check and sorts the required dimensions only if they are not sorted in ascending order yet, improving safety without impairing much performance.

Parametri
[in,out]thisobject to be sorted
[in]lsort_timeif present and .TRUE., sort time dimension if it is not sorted in ascending order
[in]lsort_timerangeif present and .TRUE., sort timerange dimension if it is not sorted in ascending order
[in]lsort_levelif present and .TRUE., sort vertical level dimension if it is not sorted in ascending order

Definizione alla linea 2104 del file vol7d_class.F90.

2105 ENDIF
2106 
2107 ! Volume con solo i dati reali e tutti gli attributi
2108 ! l'anagrafica e` copiata interamente se necessario
2109 CALL vol7d_copy(this, that, &
2110  lanavarr=tv, lanavard=acp, lanavari=acp, lanavarb=acp, lanavarc=acp, &
2111  ldativarr=tv, ldativard=fv, ldativari=fv, ldativarb=fv, ldativarc=fv)
2112 
2113 ! Volume solo di dati double
2114 CALL vol7d_copy(this, v7d_tmp, &
2115  lanavarr=fv, lanavard=acn, lanavari=fv, lanavarb=fv, lanavarc=fv, &
2116  lanaattrr=fv, lanaattrd=fv, lanaattri=fv, lanaattrb=fv, lanaattrc=fv, &
2117  lanavarattrr=fv, lanavarattrd=fv, lanavarattri=fv, lanavarattrb=fv, lanavarattrc=fv, &
2118  ldativarr=fv, ldativard=tv, ldativari=fv, ldativarb=fv, ldativarc=fv, &
2119  ldatiattrr=fv, ldatiattrd=fv, ldatiattri=fv, ldatiattrb=fv, ldatiattrc=fv, &
2120  ldativarattrr=fv, ldativarattrd=fv, ldativarattri=fv, ldativarattrb=fv, ldativarattrc=fv)
2121 
2122 ! converto a dati reali
2123 IF (ASSOCIATED(v7d_tmp%anavar%d) .OR. ASSOCIATED(v7d_tmp%dativar%d)) THEN
2124 
2125  IF (ASSOCIATED(v7d_tmp%anavar%d)) THEN
2126 ! alloco i dati reali e vi trasferisco i double
2127  ALLOCATE(v7d_tmp%volanar(SIZE(v7d_tmp%volanad, 1), SIZE(v7d_tmp%volanad, 2), &
2128  SIZE(v7d_tmp%volanad, 3)))
2129  DO i = 1, SIZE(v7d_tmp%anavar%d)
2130  v7d_tmp%volanar(:,i,:) = &
2131  realdat(v7d_tmp%volanad(:,i,:), v7d_tmp%anavar%d(i))
2132  ENDDO
2133  DEALLOCATE(v7d_tmp%volanad)
2134 ! trasferisco le variabili
2135  v7d_tmp%anavar%r => v7d_tmp%anavar%d
2136  NULLIFY(v7d_tmp%anavar%d)
2137  ENDIF
2138 
2139  IF (ASSOCIATED(v7d_tmp%dativar%d)) THEN
2140 ! alloco i dati reali e vi trasferisco i double
2141  ALLOCATE(v7d_tmp%voldatir(SIZE(v7d_tmp%voldatid, 1), SIZE(v7d_tmp%voldatid, 2), &
2142  SIZE(v7d_tmp%voldatid, 3), SIZE(v7d_tmp%voldatid, 4), SIZE(v7d_tmp%voldatid, 5), &
2143  SIZE(v7d_tmp%voldatid, 6)))

Generated with Doxygen.