libsim  Versione8.0.0

◆ vol7d_set_attr_ind()

subroutine vol7d_class::vol7d_set_attr_ind ( type(vol7d), intent(inout)  this)

Metodo per creare gli indici che associano le variabili aventi attributo alle variabili nei relativi descrittori.

Ha senso chiamare questo metodo solo dopo che i descrittori delle variabili e degli attributi desiderati sono stati allocati ed รจ stato assegnato un valore ai relativi membri btable (vedi vol7d_var_class::vol7d_var), se i descrittori non sono stati allocati o assegnati, il metodo non fa niente.

Parametri
[in,out]thisoggetto in cui creare gli indici

Definizione alla linea 1518 del file vol7d_class.F90.

1518 
1519 END SUBROUTINE vol7d_set_attr_ind
1520 
1521 
1526 SUBROUTINE vol7d_merge(this, that, sort, bestdata, &
1527  ltimesimple, ltimerangesimple, llevelsimple, lanasimple)
1528 TYPE(vol7d),INTENT(INOUT) :: this
1529 TYPE(vol7d),INTENT(INOUT) :: that
1530 LOGICAL,INTENT(IN),OPTIONAL :: sort
1531 LOGICAL,INTENT(in),OPTIONAL :: bestdata
1532 LOGICAL,INTENT(IN),OPTIONAL :: ltimesimple, ltimerangesimple, llevelsimple, lanasimple ! experimental, please do not use outside the library now
1533 
1534 TYPE(vol7d) :: v7d_clean
1535 
1536 
1537 IF (.NOT.c_e(this)) THEN ! speedup
1538  this = that
1539  CALL init(v7d_clean)
1540  that = v7d_clean ! destroy that without deallocating
1541 ELSE ! Append that to this and destroy that
1542  CALL vol7d_append(this, that, sort, bestdata, &
1543  ltimesimple, ltimerangesimple, llevelsimple, lanasimple)
1544  CALL delete(that)
1545 ENDIF
1546 
1547 END SUBROUTINE vol7d_merge
1548 
1549 
1578 SUBROUTINE vol7d_append(this, that, sort, bestdata, &
1579  ltimesimple, ltimerangesimple, llevelsimple, lanasimple, lnetworksimple)
1580 TYPE(vol7d),INTENT(INOUT) :: this
1581 TYPE(vol7d),INTENT(IN) :: that
1582 LOGICAL,INTENT(IN),OPTIONAL :: sort
1583 ! experimental, please do not use outside the library now, they force the use
1584 ! of a simplified mapping algorithm which is valid only whene the dimension
1585 ! content is the same in both volumes , or when one of them is empty
1586 LOGICAL,INTENT(in),OPTIONAL :: bestdata
1587 LOGICAL,INTENT(IN),OPTIONAL :: ltimesimple, ltimerangesimple, llevelsimple, lanasimple, lnetworksimple
1588 
1589 
1590 TYPE(vol7d) :: v7dtmp
1591 LOGICAL :: lsort, lbestdata
1592 INTEGER,POINTER :: remapt1(:), remapt2(:), remaptr1(:), remaptr2(:), &
1593  remapl1(:), remapl2(:), remapa1(:), remapa2(:), remapn1(:), remapn2(:)
1594 
1595 IF (.NOT.c_e(that)) RETURN ! speedup, nothing to do
1596 IF (.NOT.vol7d_check_vol(that)) RETURN ! be safe
1597 IF (.NOT.c_e(this)) THEN ! this case is like a vol7d_copy, more efficient to copy?
1598  CALL vol7d_copy(that, this, sort=sort)
1599  RETURN
1600 ENDIF
1601 
1602 IF (this%time_definition /= that%time_definition) THEN
1603  CALL l4f_log(l4f_fatal, &
1604  'in vol7d_append, cannot append volumes with different &
1605  &time definition')
1606  CALL raise_fatal_error()
1607 ENDIF
1608 
1609 ! Completo l'allocazione per avere volumi a norma
1610 CALL vol7d_alloc_vol(this)
1611 
1612 CALL init(v7dtmp, time_definition=this%time_definition)
1613 CALL optio(sort, lsort)
1614 CALL optio(bestdata, lbestdata)
1615 
1616 ! Calcolo le mappature tra volumi vecchi e volume nuovo
1617 ! I puntatori remap* vengono tutti o allocati o nullificati
1618 IF (optio_log(ltimesimple)) THEN
1619  CALL vol7d_remap2simple_datetime(this%time, that%time, v7dtmp%time, &
1620  lsort, remapt1, remapt2)
1621 ELSE
1622  CALL vol7d_remap2_datetime(this%time, that%time, v7dtmp%time, &
1623  lsort, remapt1, remapt2)
1624 ENDIF
1625 IF (optio_log(ltimerangesimple)) THEN
1626  CALL vol7d_remap2simple_vol7d_timerange(this%timerange, that%timerange, &
1627  v7dtmp%timerange, lsort, remaptr1, remaptr2)
1628 ELSE
1629  CALL vol7d_remap2_vol7d_timerange(this%timerange, that%timerange, &
1630  v7dtmp%timerange, lsort, remaptr1, remaptr2)
1631 ENDIF
1632 IF (optio_log(llevelsimple)) THEN
1633  CALL vol7d_remap2simple_vol7d_level(this%level, that%level, v7dtmp%level, &
1634  lsort, remapl1, remapl2)
1635 ELSE
1636  CALL vol7d_remap2_vol7d_level(this%level, that%level, v7dtmp%level, &
1637  lsort, remapl1, remapl2)
1638 ENDIF
1639 IF (optio_log(lanasimple)) THEN
1640  CALL vol7d_remap2simple_vol7d_ana(this%ana, that%ana, v7dtmp%ana, &
1641  .false., remapa1, remapa2)
1642 ELSE
1643  CALL vol7d_remap2_vol7d_ana(this%ana, that%ana, v7dtmp%ana, &
1644  .false., remapa1, remapa2)
1645 ENDIF
1646 IF (optio_log(lnetworksimple)) THEN
1647  CALL vol7d_remap2simple_vol7d_network(this%network, that%network, v7dtmp%network, &
1648  .false., remapn1, remapn2)
1649 ELSE
1650  CALL vol7d_remap2_vol7d_network(this%network, that%network, v7dtmp%network, &
1651  .false., remapn1, remapn2)
1652 ENDIF
1653 
1654 ! Faccio la fusione fisica dei volumi
1655 CALL vol7d_merge_finalr(this, that, v7dtmp, &
1656  remapa1, remapa2, remapt1, remapt2, remapl1, remapl2, &
1657  remaptr1, remaptr2, remapn1, remapn2, lbestdata)
1658 CALL vol7d_merge_finald(this, that, v7dtmp, &
1659  remapa1, remapa2, remapt1, remapt2, remapl1, remapl2, &
1660  remaptr1, remaptr2, remapn1, remapn2, lbestdata)
1661 CALL vol7d_merge_finali(this, that, v7dtmp, &
1662  remapa1, remapa2, remapt1, remapt2, remapl1, remapl2, &
1663  remaptr1, remaptr2, remapn1, remapn2, lbestdata)
1664 CALL vol7d_merge_finalb(this, that, v7dtmp, &
1665  remapa1, remapa2, remapt1, remapt2, remapl1, remapl2, &
1666  remaptr1, remaptr2, remapn1, remapn2, lbestdata)
1667 CALL vol7d_merge_finalc(this, that, v7dtmp, &
1668  remapa1, remapa2, remapt1, remapt2, remapl1, remapl2, &
1669  remaptr1, remaptr2, remapn1, remapn2, lbestdata)
1670 
1671 ! Dealloco i vettori di rimappatura
1672 IF (ASSOCIATED(remapt1)) DEALLOCATE(remapt1)
1673 IF (ASSOCIATED(remapt2)) DEALLOCATE(remapt2)
1674 IF (ASSOCIATED(remaptr1)) DEALLOCATE(remaptr1)
1675 IF (ASSOCIATED(remaptr2)) DEALLOCATE(remaptr2)
1676 IF (ASSOCIATED(remapl1)) DEALLOCATE(remapl1)
1677 IF (ASSOCIATED(remapl2)) DEALLOCATE(remapl2)
1678 IF (ASSOCIATED(remapa1)) DEALLOCATE(remapa1)
1679 IF (ASSOCIATED(remapa2)) DEALLOCATE(remapa2)
1680 IF (ASSOCIATED(remapn1)) DEALLOCATE(remapn1)
1681 IF (ASSOCIATED(remapn2)) DEALLOCATE(remapn2)
1682 
1683 ! Distruggo il vecchio volume e assegno il nuovo a this
1684 CALL delete(this)
1685 this = v7dtmp
1686 ! Ricreo gli indici var-attr
1687 CALL vol7d_set_attr_ind(this)
1688 
1689 END SUBROUTINE vol7d_append
1690 
1691 

Generated with Doxygen.