libsim Versione 8.0.0

◆ 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 2099 del file vol7d_class.F90.

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

Generated with Doxygen.