OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
mumps_ddll Module Reference

Data Types

type  ddll_node_t
type  ddll_t

Functions/Subroutines

integer function ddll_create (dll)
integer function ddll_destroy (dll)
integer function ddll_push_front (dll, elmt)
integer function ddll_pop_front (dll, elmt)
integer function ddll_push_back (dll, elmt)
integer function ddll_pop_back (dll, elmt)
integer function ddll_insert (dll, pos, elmt)
integer function ddll_insert_before (dll, node_after, elmt)
integer function ddll_insert_after (dll, node_before, elmt)
integer function ddll_lookup (dll, pos, elmt)
integer function ddll_remove_pos (dll, pos, elmt)
integer function ddll_remove_elmt (dll, elmt, pos)
integer function ddll_length (dll)
integer function ddll_iterator_begin (dll, ptr)
integer function ddll_iterator_end (dll, ptr)
logical function ddll_is_empty (dll)
integer function ddll_2_array (dll, array, length)

Function/Subroutine Documentation

◆ ddll_2_array()

integer function mumps_ddll::ddll_2_array ( type ( ddll_t ), pointer dll,
double precision, dimension(:), pointer array,
integer, intent(out) length )

Definition at line 1009 of file double_linked_list.F.

1010 INTEGER :: DDLL_2_ARRAY
1011#if defined(MUMPS_F2003)
1012 TYPE ( DDLL_T ), POINTER, INTENT ( IN ) :: DLL
1013 DOUBLE PRECISION, POINTER, DIMENSION(:), INTENT(OUT) :: ARRAY
1014#else
1015 TYPE ( DDLL_T ), POINTER :: DLL
1016 DOUBLE PRECISION, POINTER, DIMENSION(:) :: ARRAY
1017#endif
1018 INTEGER, INTENT ( OUT ) :: LENGTH
1019 TYPE ( DDLL_NODE_T ), POINTER :: AUX
1020 INTEGER :: I, IERR
1021 IF ( .NOT. associated ( dll ) ) THEN
1022 ddll_2_array = -1
1023 RETURN
1024 END IF
1025 length = ddll_length(dll)
1026 ALLOCATE ( array( max(1,length) ), stat=ierr )
1027 IF ( ierr .NE. 0 ) THEN
1028 ddll_2_array = -2
1029 RETURN
1030 END IF
1031 i = 1
1032 aux => dll%FRONT
1033 DO WHILE ( associated ( aux ) )
1034 array( i ) = aux%ELMT
1035 i = i + 1
1036 aux => aux%NEXT
1037 END DO
1038 ddll_2_array = 0
#define max(a, b)
Definition macros.h:21

◆ ddll_create()

integer function mumps_ddll::ddll_create ( type ( ddll_t ), pointer dll)

Definition at line 537 of file double_linked_list.F.

538 INTEGER :: DDLL_CREATE
539#if defined(MUMPS_F2003)
540 TYPE ( DDLL_T ), POINTER, INTENT ( OUT ) :: DLL
541#else
542 TYPE ( DDLL_T ), POINTER :: DLL
543#endif
544 INTEGER IERR
545 ALLOCATE ( dll, stat=ierr )
546 IF ( ierr .NE. 0 ) THEN
547 ddll_create = -2
548 RETURN
549 END IF
550 NULLIFY ( dll%FRONT )
551 NULLIFY ( dll%BACK )
552 ddll_create = 0
553 RETURN

◆ ddll_destroy()

integer function mumps_ddll::ddll_destroy ( type ( ddll_t ), pointer dll)

Definition at line 555 of file double_linked_list.F.

556 INTEGER :: DDLL_DESTROY
557#if defined(MUMPS_F2003)
558 TYPE ( DDLL_T ), POINTER, INTENT ( INOUT ) :: DLL
559#else
560 TYPE ( DDLL_T ), POINTER :: DLL
561#endif
562 TYPE ( DDLL_NODE_T ), POINTER :: AUX
563 IF ( .NOT. associated ( dll ) ) THEN
564 ddll_destroy = -1
565 RETURN
566 END IF
567 DO WHILE ( associated ( dll%FRONT ) )
568 aux => dll%FRONT
569 dll%FRONT => dll%FRONT%NEXT
570 DEALLOCATE( aux )
571 END DO
572 DEALLOCATE( dll )
573 ddll_destroy = 0

◆ ddll_insert()

integer function mumps_ddll::ddll_insert ( type ( ddll_t ), pointer dll,
integer, intent(in) pos,
double precision, intent(in) elmt )

Definition at line 695 of file double_linked_list.F.

696 INTEGER :: DDLL_INSERT
697#if defined(MUMPS_F2003)
698 TYPE ( DDLL_T ), POINTER, INTENT ( INOUT ) :: DLL
699#else
700 TYPE ( DDLL_T ), POINTER :: DLL
701#endif
702 INTEGER, INTENT ( IN ) :: POS
703 DOUBLE PRECISION , INTENT ( IN ) :: ELMT
704 TYPE ( DDLL_NODE_T ), POINTER :: NODE
705 TYPE ( DDLL_NODE_T ), POINTER :: NEW_PTR, OLD_PTR
706 INTEGER :: IERR, CPT
707 IF ( .NOT. associated ( dll ) ) THEN
708 ddll_insert = -1
709 RETURN
710 END IF
711 IF ( pos .LE. 0 ) THEN
712 ddll_insert = -4
713 RETURN
714 END IF
715 cpt = 1
716 new_ptr => dll%FRONT
717 NULLIFY ( old_ptr )
718 DO WHILE ( ( cpt .LT. pos ) .AND.
719 & ( associated ( new_ptr ) ) )
720 old_ptr => new_ptr
721 new_ptr => new_ptr%NEXT
722 cpt = cpt + 1
723 END DO
724 ALLOCATE ( node, stat=ierr )
725 IF ( ierr .NE. 0 ) THEN
726 ddll_insert = -2
727 RETURN
728 END IF
729 node%ELMT = elmt
730 IF ( .NOT. associated ( old_ptr ) ) THEN
731 IF ( .NOT. associated ( new_ptr ) ) THEN
732 NULLIFY ( node%PREV )
733 NULLIFY ( node%NEXT )
734 dll%FRONT => node
735 dll%BACK => node
736 ELSE
737 NULLIFY ( node%PREV )
738 node%NEXT => new_ptr
739 new_ptr%PREV => node
740 dll%FRONT => node
741 END IF
742 ELSE
743 IF ( .NOT. associated ( new_ptr ) ) THEN
744 node%PREV => old_ptr
745 NULLIFY ( node%NEXT )
746 old_ptr%NEXT => node
747 dll%BACK => node
748 ELSE
749 node%PREV => old_ptr
750 node%NEXT => new_ptr
751 old_ptr%NEXT => node
752 new_ptr%PREV => node
753 END IF
754 END IF
755 ddll_insert = 0

◆ ddll_insert_after()

integer function mumps_ddll::ddll_insert_after ( type ( ddll_t ), pointer dll,
type ( ddll_node_t ), pointer node_before,
double precision, intent(in) elmt )

Definition at line 788 of file double_linked_list.F.

789 INTEGER :: DDLL_INSERT_AFTER
790#if defined(MUMPS_F2003)
791 TYPE ( DDLL_T ), POINTER, INTENT ( INOUT ) :: DLL
792 TYPE ( DDLL_NODE_T ), POINTER, INTENT ( IN ) :: NODE_BEFORE
793#else
794 TYPE ( DDLL_T ), POINTER :: DLL
795 TYPE ( DDLL_NODE_T ), POINTER :: NODE_BEFORE
796#endif
797 DOUBLE PRECISION, INTENT ( IN ) :: ELMT
798 TYPE ( DDLL_NODE_T ), POINTER :: NODE_AFTER
799 INTEGER :: IERR
800 ALLOCATE ( node_after, stat=ierr )
801 IF ( ierr .NE. 0 ) THEN
802 ddll_insert_after = -2
803 RETURN
804 END IF
805 node_after%ELMT = elmt
806 IF ( .NOT. associated ( node_before%NEXT ) ) THEN
807 node_before%NEXT => node_after
808 node_after%PREV => node_before
809 NULLIFY ( node_after%NEXT )
810 dll%BACK => node_after
811 ELSE
812 node_after%PREV => node_before
813 node_after%NEXT => node_before%NEXT
814 node_before%NEXT => node_after
815 node_after%NEXT%PREV => node_after
816 END IF
817 ddll_insert_after = 0

◆ ddll_insert_before()

integer function mumps_ddll::ddll_insert_before ( type ( ddll_t ), pointer dll,
type ( ddll_node_t ), pointer node_after,
double precision, intent(in) elmt )

Definition at line 757 of file double_linked_list.F.

758 INTEGER :: DDLL_INSERT_BEFORE
759#if defined(MUMPS_F2003)
760 TYPE ( DDLL_T ), POINTER, INTENT ( INOUT ) :: DLL
761 TYPE ( DDLL_NODE_T ), POINTER, INTENT ( IN ) :: NODE_AFTER
762#else
763 TYPE ( DDLL_T ), POINTER :: DLL
764 TYPE ( DDLL_NODE_T ), POINTER :: NODE_AFTER
765#endif
766 DOUBLE PRECISION, INTENT ( IN ) :: ELMT
767 TYPE ( DDLL_NODE_T ), POINTER :: NODE_BEFORE
768 INTEGER :: IERR
769 ALLOCATE ( node_before, stat=ierr )
770 IF ( ierr .NE. 0 ) THEN
771 ddll_insert_before = -2
772 RETURN
773 END IF
774 node_before%ELMT = elmt
775 IF ( .NOT. associated ( node_after%PREV ) ) THEN
776 node_after%PREV => node_before
777 node_before%NEXT => node_after
778 NULLIFY ( node_before%PREV )
779 dll%FRONT => node_before
780 ELSE
781 node_before%NEXT => node_after
782 node_before%PREV => node_after%PREV
783 node_after%PREV => node_before
784 node_before%PREV%NEXT => node_before
785 END IF
786 ddll_insert_before = 0

◆ ddll_is_empty()

logical function mumps_ddll::ddll_is_empty ( type ( ddll_t ), pointer dll)

Definition at line 1000 of file double_linked_list.F.

1001 LOGICAL :: DDLL_IS_EMPTY
1002#if defined(MUMPS_F2003)
1003 TYPE ( DDLL_T ), POINTER, INTENT ( IN ) :: DLL
1004#else
1005 TYPE ( DDLL_T ), POINTER :: DLL
1006#endif
1007 ddll_is_empty = ( associated ( dll%FRONT ) )

◆ ddll_iterator_begin()

integer function mumps_ddll::ddll_iterator_begin ( type ( ddll_t ), pointer dll,
type ( ddll_node_t ), pointer ptr )

Definition at line 968 of file double_linked_list.F.

969 INTEGER :: DDLL_ITERATOR_BEGIN
970#if defined(MUMPS_F2003)
971 TYPE ( DDLL_T ), POINTER, INTENT ( IN ) :: DLL
972 TYPE ( DDLL_NODE_T ), POINTER, INTENT ( OUT ) :: PTR
973#else
974 TYPE ( DDLL_T ), POINTER :: DLL
975 TYPE ( DDLL_NODE_T ), POINTER :: PTR
976#endif
977 IF ( .NOT. associated ( dll ) ) THEN
978 ddll_iterator_begin = -1
979 RETURN
980 END IF
981 ptr => dll%FRONT
982 ddll_iterator_begin = 0

◆ ddll_iterator_end()

integer function mumps_ddll::ddll_iterator_end ( type ( ddll_t ), pointer dll,
type ( ddll_node_t ), pointer ptr )

Definition at line 984 of file double_linked_list.F.

985 INTEGER :: DDLL_ITERATOR_END
986#if defined(MUMPS_F2003)
987 TYPE ( DDLL_T ), POINTER, INTENT ( IN ) :: DLL
988 TYPE ( DDLL_NODE_T ), POINTER, INTENT ( OUT ) :: PTR
989#else
990 TYPE ( DDLL_T ), POINTER :: DLL
991 TYPE ( DDLL_NODE_T ), POINTER :: PTR
992#endif
993 IF ( .NOT. associated ( dll ) ) THEN
994 ddll_iterator_end = -1
995 RETURN
996 END IF
997 ptr => dll%BACK
998 ddll_iterator_end = 0

◆ ddll_length()

integer function mumps_ddll::ddll_length ( type ( ddll_t ), pointer dll)

Definition at line 947 of file double_linked_list.F.

948 INTEGER :: DDLL_LENGTH
949#if defined(MUMPS_F2003)
950 TYPE ( DDLL_T ), POINTER, INTENT ( IN ) :: DLL
951#else
952 TYPE ( DDLL_T ), POINTER :: DLL
953#endif
954 INTEGER :: LENGTH
955 TYPE ( DDLL_NODE_T ), POINTER :: AUX
956 IF ( .NOT. associated ( dll ) ) THEN
957 ddll_length = -1
958 RETURN
959 END IF
960 length = 0
961 aux => dll%FRONT
962 DO WHILE ( associated ( aux ) )
963 length = length + 1
964 aux => aux%NEXT
965 END DO
966 ddll_length = length

◆ ddll_lookup()

integer function mumps_ddll::ddll_lookup ( type ( ddll_t ), pointer dll,
integer, intent(in) pos,
double precision, intent(out) elmt )

Definition at line 819 of file double_linked_list.F.

820 INTEGER :: DDLL_LOOKUP
821#if defined(MUMPS_F2003)
822 TYPE ( DDLL_T ), POINTER, INTENT ( INOUT ) :: DLL
823#else
824 TYPE ( DDLL_T ), POINTER :: DLL
825#endif
826 INTEGER, INTENT ( IN ) :: POS
827 DOUBLE PRECISION, INTENT ( OUT ) :: ELMT
828 TYPE ( DDLL_NODE_T ), POINTER :: AUX
829 INTEGER :: CPT
830 IF ( .NOT. associated ( dll ) ) THEN
831 ddll_lookup = -1
832 RETURN
833 END IF
834 IF ( pos .LE. 0 ) THEN
835 ddll_lookup = -4
836 RETURN
837 END IF
838 cpt = 1
839 aux => dll%FRONT
840 DO WHILE ( ( cpt .LT. pos ) .AND. ( associated ( aux ) ) )
841 cpt = cpt + 1
842 aux => aux%NEXT
843 END DO
844 IF ( .NOT. associated ( aux ) ) THEN
845 ddll_lookup = -3
846 RETURN
847 END IF
848 elmt = aux%ELMT
849 ddll_lookup = 0

◆ ddll_pop_back()

integer function mumps_ddll::ddll_pop_back ( type ( ddll_t ), pointer dll,
double precision, intent(out) elmt )

Definition at line 666 of file double_linked_list.F.

667 INTEGER :: DDLL_POP_BACK
668#if defined(MUMPS_F2003)
669 TYPE ( DDLL_T ), POINTER, INTENT ( INOUT ) :: DLL
670#else
671 TYPE ( DDLL_T ), POINTER :: DLL
672#endif
673 DOUBLE PRECISION, INTENT ( OUT ) :: ELMT
674 TYPE ( DDLL_NODE_T ), POINTER :: AUX
675 IF ( .NOT. associated ( dll ) ) THEN
676 ddll_pop_back = -1
677 RETURN
678 END IF
679 IF ( .NOT. associated ( dll%BACK ) ) THEN
680 ddll_pop_back = -3
681 RETURN
682 END IF
683 elmt = dll%BACK%ELMT
684 aux => dll%BACK
685 dll%BACK => dll%BACK%PREV
686 IF ( associated ( dll%BACK ) ) THEN
687 NULLIFY ( dll%BACK%NEXT )
688 END IF
689 IF ( associated ( dll%FRONT, aux ) ) THEN
690 NULLIFY ( dll%FRONT )
691 END IF
692 DEALLOCATE ( aux )
693 ddll_pop_back = 0

◆ ddll_pop_front()

integer function mumps_ddll::ddll_pop_front ( type ( ddll_t ), pointer dll,
double precision, intent(out) elmt )

Definition at line 606 of file double_linked_list.F.

607 INTEGER :: DDLL_POP_FRONT
608#if defined(MUMPS_F2003)
609 TYPE ( DDLL_T ), POINTER, INTENT ( INOUT ) :: DLL
610#else
611 TYPE ( DDLL_T ), POINTER :: DLL
612#endif
613 DOUBLE PRECISION, INTENT ( OUT ) :: ELMT
614 TYPE ( DDLL_NODE_T ), POINTER :: AUX
615 IF ( .NOT. associated ( dll ) ) THEN
616 ddll_pop_front = -1
617 RETURN
618 END IF
619 IF ( .NOT. associated ( dll%FRONT ) ) THEN
620 ddll_pop_front = -3
621 RETURN
622 END IF
623 elmt = dll%FRONT%ELMT
624 aux => dll%FRONT
625 dll%FRONT => dll%FRONT%NEXT
626 IF ( associated ( dll%FRONT ) ) THEN
627 NULLIFY ( dll%FRONT%PREV )
628 END IF
629 IF ( associated ( dll%BACK, aux ) ) THEN
630 NULLIFY ( dll%BACK )
631 END IF
632 DEALLOCATE ( aux )
633 ddll_pop_front = 0

◆ ddll_push_back()

integer function mumps_ddll::ddll_push_back ( type ( ddll_t ), pointer dll,
double precision, intent(in) elmt )

Definition at line 635 of file double_linked_list.F.

636 INTEGER :: DDLL_PUSH_BACK
637#if defined(MUMPS_F2003)
638 TYPE ( DDLL_T ), POINTER, INTENT ( INOUT ) :: DLL
639#else
640 TYPE ( DDLL_T ), POINTER :: DLL
641#endif
642 DOUBLE PRECISION, INTENT ( IN ) :: ELMT
643 TYPE ( DDLL_NODE_T ), POINTER :: NODE
644 INTEGER IERR
645 IF ( .NOT. associated ( dll ) ) THEN
646 ddll_push_back = -1
647 RETURN
648 END IF
649 ALLOCATE( node, stat=ierr )
650 IF ( ierr .NE. 0 ) THEN
651 ddll_push_back = -2
652 RETURN
653 END IF
654 node%ELMT = elmt
655 NULLIFY ( node%NEXT )
656 node%PREV => dll%BACK
657 IF ( associated ( dll%BACK ) ) THEN
658 dll%BACK%NEXT => node
659 END IF
660 dll%BACK => node
661 IF ( .NOT. associated ( dll%FRONT ) ) THEN
662 dll%FRONT => node
663 END IF
664 ddll_push_back = 0

◆ ddll_push_front()

integer function mumps_ddll::ddll_push_front ( type ( ddll_t ), pointer dll,
double precision, intent(in) elmt )

Definition at line 575 of file double_linked_list.F.

576 INTEGER :: DDLL_PUSH_FRONT
577#if defined(MUMPS_F2003)
578 TYPE ( DDLL_T ), POINTER, INTENT ( INOUT ) :: DLL
579#else
580 TYPE ( DDLL_T ), POINTER :: DLL
581#endif
582 DOUBLE PRECISION, INTENT ( IN ) :: ELMT
583 TYPE ( DDLL_NODE_T ), POINTER :: NODE
584 INTEGER IERR
585 IF ( .NOT. associated ( dll ) ) THEN
586 ddll_push_front = -1
587 RETURN
588 END IF
589 ALLOCATE( node, stat=ierr )
590 IF ( ierr .NE. 0 ) THEN
591 ddll_push_front = -2
592 RETURN
593 END IF
594 node%ELMT = elmt
595 node%NEXT => dll%FRONT
596 NULLIFY ( node%PREV )
597 IF ( associated ( dll%FRONT ) ) THEN
598 dll%FRONT%PREV => node
599 END IF
600 dll%FRONT => node
601 IF ( .NOT. associated ( dll%BACK ) ) THEN
602 dll%BACK => node
603 END IF
604 ddll_push_front = 0

◆ ddll_remove_elmt()

integer function mumps_ddll::ddll_remove_elmt ( type ( ddll_t ), pointer dll,
double precision, intent(in) elmt,
integer, intent(out) pos )

Definition at line 899 of file double_linked_list.F.

900 INTEGER :: DDLL_REMOVE_ELMT
901#if defined(MUMPS_F2003)
902 TYPE ( DDLL_T ), POINTER, INTENT ( INOUT ) :: DLL
903#else
904 TYPE ( DDLL_T ), POINTER :: DLL
905#endif
906 DOUBLE PRECISION, INTENT ( IN ) :: ELMT
907 INTEGER, INTENT ( OUT ) :: POS
908 TYPE ( DDLL_NODE_T ), POINTER :: AUX
909 INTEGER :: CPT
910 IF ( .NOT. associated ( dll ) ) THEN
911 ddll_remove_elmt = -1
912 RETURN
913 END IF
914 cpt = 1
915 aux => dll%FRONT
916 DO WHILE ( ( associated ( aux ) ) .AND.
917 & ( aux%ELMT .NE. elmt ) )
918 cpt = cpt + 1
919 aux => aux%NEXT
920 END DO
921 IF ( associated ( aux ) ) THEN
922 IF ( .NOT. associated ( aux%PREV ) ) THEN
923 IF ( .NOT. associated ( aux%NEXT ) ) THEN
924 NULLIFY ( dll%FRONT )
925 NULLIFY ( dll%BACK )
926 ELSE
927 NULLIFY ( aux%NEXT%PREV )
928 dll%FRONT => aux%NEXT
929 END IF
930 ELSE
931 IF ( .NOT. associated ( aux%NEXT ) ) THEN
932 NULLIFY ( aux%PREV%NEXT )
933 dll%BACK => aux%PREV
934 ELSE
935 aux%PREV%NEXT => aux%NEXT
936 aux%NEXT%PREV => aux%PREV
937 END IF
938 END IF
939 pos = cpt
940 DEALLOCATE ( aux )
941 ELSE
942 ddll_remove_elmt = -3
943 RETURN
944 END IF
945 ddll_remove_elmt = 0

◆ ddll_remove_pos()

integer function mumps_ddll::ddll_remove_pos ( type ( ddll_t ), pointer dll,
integer, intent(in) pos,
double precision, intent(out) elmt )

Definition at line 851 of file double_linked_list.F.

852 INTEGER :: DDLL_REMOVE_POS
853#if defined(MUMPS_F2003)
854 TYPE ( DDLL_T ), POINTER, INTENT ( INOUT ) :: DLL
855#else
856 TYPE ( DDLL_T ), POINTER :: DLL
857#endif
858 INTEGER, INTENT ( IN ) :: POS
859 DOUBLE PRECISION, INTENT ( OUT ) :: ELMT
860 TYPE ( DDLL_NODE_T ), POINTER :: AUX
861 INTEGER :: CPT
862 IF ( .NOT. associated ( dll ) ) THEN
863 ddll_remove_pos = -1
864 RETURN
865 END IF
866 cpt = 1
867 aux => dll%FRONT
868 DO WHILE ( ( associated ( aux ) ) .AND.
869 & ( cpt .LT. pos ) )
870 cpt = cpt + 1
871 aux => aux%NEXT
872 END DO
873 IF ( associated ( aux ) ) THEN
874 IF ( .NOT. associated ( aux%PREV ) ) THEN
875 IF ( .NOT. associated ( aux%NEXT ) ) THEN
876 NULLIFY ( dll%FRONT )
877 NULLIFY ( dll%BACK )
878 ELSE
879 NULLIFY ( aux%NEXT%PREV )
880 dll%FRONT => aux%NEXT
881 END IF
882 ELSE
883 IF ( .NOT. associated ( aux%NEXT ) ) THEN
884 NULLIFY ( aux%PREV%NEXT )
885 dll%BACK => aux%PREV
886 ELSE
887 aux%PREV%NEXT => aux%NEXT
888 aux%NEXT%PREV => aux%PREV
889 END IF
890 END IF
891 elmt = aux%ELMT
892 DEALLOCATE ( aux )
893 ELSE
894 ddll_remove_pos = -3
895 RETURN
896 END IF
897 ddll_remove_pos = 0