libsim  Versione8.0.0

◆ volgrid6d_alloc_vol()

subroutine, public volgrid6d_class::volgrid6d_alloc_vol ( type(volgrid6d), intent(inout)  this,
logical, intent(in), optional  ini,
logical, intent(in), optional  inivol,
logical, intent(in), optional  decode 
)

Allocate the data array of the volgrid6d object.

This method allocates the main 6-dimensional data array thisvoldati and the 4-dimensional grid_id array thisgaid with a shape dictated by the previous call(s) to vol7d_alloc(). if any descriptor (except horizontal grid) has not been allocated yet, it is allocated here with a size of 1. This method should be explicitly used only in rare cases, it is usually called implicitly through the import interface.

Parametri
[in,out]thisobject whose decriptors should be allocated
[in]iniif provided and .TRUE., for each dimension descriptor not yet allocated and allocated here the constructor is called without extra parameters, thus initializing the element as missing value
[in]inivolif provided and .FALSE., the allocated volumes will not be initialized to missing values
[in]decodeif provided and .TRUE., the thisvoldati volume is allocated, otherwise only thisgaid will be allocated

Definizione alla linea 531 del file volgrid6d_class.F90.

531 !! slice. In case \a this%voldati is already allocated, this is a
532 !! no-operation while in the other case this method encodes the field
533 !! provided into the grid_id object on file or in memory. Since this
534 !! method may be called many times by a program, it is optimized for
535 !! speed and it does not make any check about the matching size of the
536 !! field and the array or about the allocation status of \a this, so
537 !! it should be called only when everything has been checked to be in
538 !! good shape.
539 SUBROUTINE volgrid_set_vol_3d(this, itime, itimerange, ivar, voldati)
540 TYPE(volgrid6d),INTENT(inout) :: this
541 INTEGER,INTENT(in) :: itime
542 INTEGER,INTENT(in) :: itimerange
543 INTEGER,INTENT(in) :: ivar
544 REAL,INTENT(in) :: voldati(:,:,:)
545 
546 INTEGER :: ilevel
547 
548 IF (ASSOCIATED(this%voldati)) THEN
549  RETURN
550 ELSE
551 !$OMP PARALLEL DEFAULT(SHARED)
552 !$OMP MASTER
553  DO ilevel = 1, SIZE(this%level)
554 !$OMP TASK FIRSTPRIVATE(ilevel)
555  CALL grid_id_encode_data(this%gaid(ilevel,itime,itimerange,ivar), &
556  voldati(:,:,ilevel))
557 !$OMP END TASK
558  ENDDO
559 !$OMP END MASTER
560 !$OMP END PARALLEL
561 ENDIF
562 
563 END SUBROUTINE volgrid_set_vol_3d
564 
565 
569 SUBROUTINE volgrid6d_delete(this)
570 TYPE(volgrid6d),INTENT(inout) :: this
571 
572 INTEGER :: i, ii, iii, iiii
573 
574 #ifdef DEBUG
575 call l4f_category_log(this%category,l4f_debug,"delete")
576 #endif
577 
578 if (associated(this%gaid))then
579 
580  DO i=1 ,SIZE(this%gaid,1)
581  DO ii=1 ,SIZE(this%gaid,2)
582  DO iii=1 ,SIZE(this%gaid,3)
583  DO iiii=1 ,SIZE(this%gaid,4)
584  CALL delete(this%gaid(i,ii,iii,iiii))
585  ENDDO
586  ENDDO
587  ENDDO
588  ENDDO
589  DEALLOCATE(this%gaid)
590 
591 end if
592 
593 call delete(this%griddim)
594 
595 ! call delete(this%time)
596 ! call delete(this%timerange)
597 ! call delete(this%level)
598 ! call delete(this%var)
599 
600 if (associated( this%time )) deallocate(this%time)
601 if (associated( this%timerange )) deallocate(this%timerange)
602 if (associated( this%level )) deallocate(this%level)
603 if (associated( this%var )) deallocate(this%var)
604 
605 if (associated(this%voldati))deallocate(this%voldati)
606 
607 
608  !chiudo il logger
609 call l4f_category_delete(this%category)

Generated with Doxygen.