My Project
Public Member Functions | List of all members
mod_ncll::insert_dim_link Interface Reference

Public Member Functions

subroutine insert_ncf_dimp_bydim (LIST, DIM, FOUND)
 
subroutine insert_var_dimp_bydim (LIST, DIM, FOUND)
 

Detailed Description

Definition at line 296 of file mod_ncll.f90.

Member Function/Subroutine Documentation

◆ insert_ncf_dimp_bydim()

subroutine mod_ncll::insert_dim_link::insert_ncf_dimp_bydim ( type(ncfile), intent(inout)  LIST,
type(ncdim), pointer  DIM,
logical, intent(out)  FOUND 
)

Definition at line 2554 of file mod_ncll.f90.

2554  ! IF FOUND DO NOT INSERT DUPLICATE, RETURN FOUND
2555  ! INSERT UNLIMDIM AT THE END OF THE LIST
2556  ! INSERT NONE UNLIMDIM IN THE ORDER ADDED
2557  IMPLICIT NONE
2558  TYPE(NCDIM), POINTER :: DIM
2559  LOGICAL, INTENT(OUT) :: FOUND
2560  TYPE(NCFILE), INTENT(INOUT):: LIST
2561  TYPE(NCDIMP),POINTER :: CURRENT, PREVIOUS
2562  INTEGER CNT
2563  IF(.NOT.ASSOCIATED(dim))&
2564  & CALL fatal_error("INSERT_NCF_DIMP_BYDIM: DIM NOT ASSOCIATED!")
2565 
2566  previous => list%DIMS
2567  current => previous%NEXT
2568  found = .false.
2569  cnt = 1
2570 
2571 !!$ IF (DIM%UNLIMITED) THEN ! ADD AT END OF LIST!
2572  ! DO NOT MAKE DUPLICATE ENTRIES IN THE LIST
2573  DO
2574  IF(.NOT. ASSOCIATED(current)) EXIT !END OF LIST, ADD DIM
2575 
2576  IF( dim%DIMNAME == current%DIM%DIMNAME) THEN
2577  ! PROTECT AGAINST USER ERROR - MISMATCHED DIMENSIONS!
2578  IF(dim%DIM .NE. current%DIM%DIM) &
2579  & CALL fatal_error("ATEMPTED TO ADD DIMENSION NAMED:"//trim(dim%DIMNAME),&
2580  & "BUT THAT DIMENSION NAME ALREADY EXISTS WITH A DIFFERENT SIZE")
2581 
2582  ! PROTECT AGAINST USER ERROR - MISMATCHED UNLIMITED DIMENSIONS!
2583  IF(dim%UNLIMITED .AND. .NOT. current%DIM%UNLIMITED)&
2584  & CALL fatal_error("ATEMPTED TO ADD DIMENSION NAMED:&
2585  &"//trim(dim%DIMNAME)//"; AS UNLIMITED",&
2586  & "BUT THAT DIMENSION NAME ALREADY EXISTS AS NOT UNLIMITED")
2587 
2588  IF(.NOT. dim%UNLIMITED .AND. current%DIM%UNLIMITED)&
2589  & CALL fatal_error("ATEMPTED TO ADD DIMENSION NAMED:&
2590  &"//trim(dim%DIMNAME)//"; AS NOT UNLIMITED",&
2591  & "BUT THAT DIMENSION NAME ALREADY EXISTS AS UNLIMITED")
2592 
2593  found = .true.
2594  RETURN ! DIMENSION ALREADY EXISTS
2595  ELSE IF(dim%UNLIMITED .AND. current%DIM%UNLIMITED) THEN
2596  CALL fatal_error("ATTEMPT TO PUT A SECOND UNLIMITED DIMENSIO&
2597  &N IN THE FILE OBJECT","DIMENSION NAME: "//trim(dim%DIMNAME))
2598  ELSE
2599  previous => previous%NEXT
2600  current => current%NEXT
2601  cnt = cnt +1
2602  END IF
2603  END DO
2604  ! NOT FOUND - ADD NEW DIM TO END OF LIST
2605 
2606  previous%NEXT => new_dimp()
2607  previous%NEXT%DIM => dim
2608  previous%NEXT%NEXT => current
2609 
2610  dim%DIMID = cnt ! SET THE DIMID OF THE NEW DIMENSION
2611 
2612  IF(dim%UNLIMITED) list%UNLIMDIMID = dim%DIMID
2613 
2614 !!$ ELSE ! NOT AN UNLIMITED DIMENSION - ADD BEFORE ANY UNLIMITED DIMENSION
2615 !!$ ! DO NOT MAKE DUPLICATE ENTRIES IN THE LIST
2616 !!$ DO
2617 !!$ IF(.NOT. ASSOCIATED(CURRENT)) EXIT !END OF LIST, ADD DIM TO END OF LIST
2618 !!$
2619 !!$ IF( DIM%DIMNAME == CURRENT%DIM%DIMNAME) THEN
2620 !!$ ! PROTECT AGAINST USER ERROR - MISMATCHED DIMENSIONS!
2621 !!$ IF(DIM%DIM .NE. CURRENT%DIM%DIM) &
2622 !!$ & CALL FATAL_ERROR("ATEMPTED TO ADD DIMENSION NAMED:"//TRIM(DIM%DIMNAME),&
2623 !!$ & "BUT THAT DIMENSION NAME ALREADY EXISTS WITH A DIFFERENT SIZE")
2624 !!$
2625 !!$ ! PROTECT AGAINST USER ERROR - MISMATCHED UNLIMITED DIMENSIONS!
2626 !!$ IF(CURRENT%DIM%UNLIMITED)&
2627 !!$ & CALL FATAL_ERROR("ATEMPTED TO ADD DIMENSION NAMED:&
2628 !!$ &"//TRIM(DIM%DIMNAME)//"; AS NOT UNLIMITED",&
2629 !!$ & "BUT THAT DIMENSION NAME ALREADY EXISTS AS UNLIMITED")
2630 !!$
2631 !!$ FOUND = .TRUE.
2632 !!$ RETURN ! DIMENSION ALREADY EXISTS
2633 !!$ ELSE IF(CURRENT%DIM%UNLIMITED) THEN ! FOUND THE UNLIMITED DIMENSION
2634 !!$ IF(ASSOCIATED(CURRENT%NEXT)) &
2635 !!$ & CALL FATAL_ERROR("FOUND EXTRA DIMENSION LINK AFTER&
2636 !!$ & THE UNLIMITED DIMENSION", "WHILE ADDING NEW DIMENSION: "&
2637 !!$ &//TRIM(DIM%DIMNAME) )
2638 !!$
2639 !!$ CURRENT%DIM%DIMID = CNT+1 ! INCRIMENT THE UNLIMITED DIMENSIONS DIMID
2640 !!$ EXIT ! Add the new dimension
2641 !!$
2642 !!$ ELSE
2643 !!$ PREVIOUS => PREVIOUS%NEXT
2644 !!$ CURRENT => CURRENT%NEXT
2645 !!$ CNT = CNT+1
2646 !!$ END IF
2647 !!$ END DO
2648 !!$ ! NOT FOUND - INSERT DIM INTO LIST
2649 !!$
2650 !!$ PREVIOUS%NEXT => NEW_DIMP()
2651 !!$ PREVIOUS%NEXT%DIM => DIM
2652 !!$ DIM%DIMID = CNT ! SET THE DIMID OF THE NEW DIMENSION
2653 !!$
2654 !!$ PREVIOUS%NEXT%NEXT => CURRENT
2655 !!$ END IF
2656 

◆ insert_var_dimp_bydim()

subroutine mod_ncll::insert_dim_link::insert_var_dimp_bydim ( type(ncvar), intent(inout)  LIST,
type(ncdim), pointer  DIM,
logical, intent(out)  FOUND 
)

Definition at line 2666 of file mod_ncll.f90.

2666  ! ALLOW NETCDF TO HAVE DUPLICATE DIMENSIONS IN A VARIABLE
2667  ! INSERT DIMS IN THE ORDER THEY ARE ADDED
2668  !
2669  ! DO NOT TOUCH DIMID - IT IS ONLY SET WHEN THE VARIABLE'S
2670  ! DIMENSIONS ARE POINTED TO THE FILES DIMENSIONS
2671 
2672  IMPLICIT NONE
2673  TYPE(NCDIM), POINTER :: DIM
2674  LOGICAL, INTENT(OUT) :: FOUND
2675  TYPE(NCVAR), INTENT(INOUT):: LIST
2676  TYPE(NCDIMP),POINTER :: CURRENT, PREVIOUS
2677 
2678  IF(.NOT.ASSOCIATED(dim))&
2679  & CALL fatal_error("INSERT_NCF_DIMP_BYDIM: DIM NOT ASSOCIATED!")
2680 
2681  previous => list%DIMS
2682  current => previous%NEXT
2683  found = .false.
2684 
2685  DO
2686  IF(.NOT. ASSOCIATED(current)) THEN
2687  EXIT !END OF LIST, ADD DIM
2688  ELSE
2689 
2690  IF( dim%DIMNAME == current%DIM%DIMNAME) found = .true.
2691 
2692  IF(dim%UNLIMITED .AND. current%DIM%UNLIMITED) &
2693  & CALL fatal_error("ATTEMPT TO PUT A SECOND UNLIMITED DIMENSIO&
2694  &N IN THE VARIALBE NAME:"//trim(list%VARNAME),&
2695  & "DIMENSION NAME: "//trim(dim%DIMNAME))
2696 
2697  ! MAKE AN EXCEPTION FOR CHARACTER DATA?!?!
2698  IF(current%DIM%UNLIMITED .AND. list%XTYPE .NE. nf90_char) &
2699  & CALL fatal_error("ATTEMPT TO PUT A DIMENSION AFTER THE UNLIMITED DIMENSIO&
2700  &N IN THE VARIALBE NAME:"//trim(list%VARNAME),&
2701  & "DIMENSION NAME: "//trim(dim%DIMNAME),"THE USER MUST &
2702  &ADD DIMENSION IN THE CORRECT ORDER! (UNLIMITEDS GO LAS&
2703  &T IN FORTRAN ORDER)")
2704 
2705 
2706  previous => previous%NEXT
2707  current => current%NEXT
2708  END IF
2709  END DO
2710  ! NOT FOUND - ADD NEW DIM TO END OF LIST, EVEN IF IT ALREADY
2711  ! EXISTS!
2712  previous%NEXT => new_dimp()
2713  previous%NEXT%DIM => dim
2714  previous%NEXT%NEXT => current
2715 

The documentation for this interface was generated from the following file: