libsim Versione 7.2.6

◆ vol7d_smart_sort()

subroutine 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 2098 del file vol7d_class.F90.

2099IF (optio_log(anaconv)) THEN
2100 acp=fv
2101 acn=tv
2102ELSE
2103 acp=tv
2104 acn=fv
2105ENDIF
2106
2107! Volume con solo i dati reali e tutti gli attributi
2108! l'anagrafica e` copiata interamente se necessario
2109CALL 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
2114CALL 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
2123IF (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

Generated with Doxygen.