507 IMPLICIT NONE
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535 TYPE(FDM_STRUC_T) :: FDM_STRUC
536 INTEGER,intent(IN)::unit,MYID
537 CHARACTER(len=*),intent(IN) :: mode
538 INTEGER,INTENT(OUT) :: Local_SIZE_GEST
539 INTEGER(8),intent(OUT) :: Local_SIZE_VARIABLES
540 INTEGER,intent(INOUT):: INFO(2)
541 INTEGER,intent(IN):: SIZE_INT
542 INTEGER(8),intent(IN) :: TOTAL_FILE_SIZE,TOTAL_STRUC_SIZE
543 INTEGER(8),intent(INOUT):: size_read,size_allocated,size_written
544 INTEGER :: NBVARIABLES_FDM_STRUC_T
545 parameter(nbvariables_fdm_struc_t = 3)
546 CHARACTER(len=30), dimension(NBVARIABLES_FDM_STRUC_T)::
547 & VARIABLES_FDM_STRUC_T
548 CHARACTER(len=30) :: TMP_STRING
549 INTEGER(8),dimension(NBVARIABLES_FDM_STRUC_T)::
550 & SIZE_VARIABLES_FDM_STRUC_T
551 INTEGER,dimension(NBVARIABLES_FDM_STRUC_T)::SIZE_GEST_FDM_STRUC_T
552 INTEGER,dimension(NBVARIABLES_FDM_STRUC_T)::NbRecords_FDM_STRUC_T
553 INTEGER:: size_array1,dummy,allocok
554 INTEGER:: err,i1,NbSubRecords,Local_NbRecords
555 INTEGER(4) :: I4
556 variables_fdm_struc_t(1)="NB_FREE_IDX"
557 variables_fdm_struc_t(2)="STACK_FREE_IDX"
558 variables_fdm_struc_t(3)="COUNT_ACCESS"
559 size_variables_fdm_struc_t(:)=0_8
560 size_gest_fdm_struc_t(:)=0
561 nbrecords_fdm_struc_t(:)=0
562
563
564
565 DO i1=1,nbvariables_fdm_struc_t
566 tmp_string = variables_fdm_struc_t(i1)
567 SELECT CASE(tmp_string)
568 CASE("NB_FREE_IDX")
569 nbrecords_fdm_struc_t(i1)=1
570 if(trim(mode).EQ."memory_save") then
571 size_variables_fdm_struc_t(i1)=size_int
572 elseif(trim(mode).EQ."save") then
573 size_variables_fdm_struc_t(i1)=size_int
574 write(unit,iostat=err) fdm_struc%NB_FREE_IDX
575 if(err.ne.0) then
576 info(1) = -72
578 & info(2))
579 endif
580 IF ( info(1) .LT. 0 ) GOTO 100
581 elseif(trim(mode).EQ."restore") then
582 size_variables_fdm_struc_t(i1)=size_int
583 read(unit,iostat=err) fdm_struc%NB_FREE_IDX
584 if(err.ne.0) THEN
585 info(1) = -75
587 & ,info(2))
588 endif
589 IF ( info(1) .LT. 0 ) GOTO 100
590 endif
591 CASE("STACK_FREE_IDX")
592 nbrecords_fdm_struc_t(i1)=2
593 if(trim(mode).EQ."memory_save") then
594 IF(associated(fdm_struc%STACK_FREE_IDX)) THEN
595 size_gest_fdm_struc_t(i1)=size_int
596 size_variables_fdm_struc_t(i1)=
597 & size(fdm_struc%STACK_FREE_IDX,1)*size_int
598 ELSE
599 size_gest_fdm_struc_t(i1)=size_int*2
600 size_variables_fdm_struc_t(i1)=0_8
601 ENDIF
602 elseif(trim(mode).EQ."save") then
603 IF(associated(fdm_struc%STACK_FREE_IDX)) THEN
604 size_gest_fdm_struc_t(i1)=size_int
605 size_variables_fdm_struc_t(i1)=
606 & size(fdm_struc%STACK_FREE_IDX,1)*size_int
607 write(unit,iostat=err)
608 & size(fdm_struc%STACK_FREE_IDX,1)
609 if(err.ne.0) then
610 info(1) = -72
612 & info(2))
613 endif
614 IF ( info(1) .LT. 0 ) GOTO 100
615 write(unit,iostat=err) fdm_struc%STACK_FREE_IDX
616 ELSE
617 size_gest_fdm_struc_t(i1)=size_int*2
618 size_variables_fdm_struc_t(i1)=0_8
619 write(unit,iostat=err) -999
620 if(err.ne.0) then
621 info(1) = -72
623 & info(2))
624 endif
625 IF ( info(1) .LT. 0 ) GOTO 100
626 write(unit,iostat=err) -999
627 ENDIF
628 if(err.ne.0) then
629 info(1) = -72
631 & info(2))
632 endif
633 IF ( info(1) .LT. 0 ) GOTO 100
634 elseif(trim(mode).EQ."restore") then
635 nullify(fdm_struc%STACK_FREE_IDX)
636 read(unit,iostat=err) size_array1
637 if(err.ne.0) THEN
638 info(1) = -75
640 & ,info(2))
641 endif
642 IF ( info(1) .LT. 0 ) GOTO 100
643 if(size_array1.EQ.-999) then
644 size_gest_fdm_struc_t(i1)=size_int*2
645 size_variables_fdm_struc_t(i1)=0_8
646 read(unit,iostat=err) dummy
647 else
648 size_gest_fdm_struc_t(i1)=size_int
649 size_variables_fdm_struc_t(i1)=size_array1*size_int
650 allocate(fdm_struc%STACK_FREE_IDX(size_array1),
651 & stat=allocok)
652 if (allocok .GT. 0) THEN
653 info(1) = -78
655 & total_struc_size-size_allocated
656 & ,info(2))
657 endif
658 read(unit,iostat=err) fdm_struc%STACK_FREE_IDX
659 endif
660 IF ( info(1) .LT. 0 ) GOTO 100
661 if(err.ne.0) THEN
662 info(1) = -75
664 & ,info(2))
665 endif
666 IF ( info(1) .LT. 0 ) GOTO 100
667 endif
668 CASE("COUNT_ACCESS")
669 nbrecords_fdm_struc_t(i1)=2
670 if(trim(mode).EQ."memory_save") then
671 IF(associated(fdm_struc%COUNT_ACCESS)) THEN
672 size_gest_fdm_struc_t(i1)=size_int
673 size_variables_fdm_struc_t(i1)=
674 & size(fdm_struc%COUNT_ACCESS,1)*size_int
675 ELSE
676 size_gest_fdm_struc_t(i1)=size_int*2
677 size_variables_fdm_struc_t(i1)=0_8
678 ENDIF
679 elseif(trim(mode).EQ."save") then
680 IF(associated(fdm_struc%COUNT_ACCESS)) THEN
681 size_gest_fdm_struc_t(i1)=size_int
682 size_variables_fdm_struc_t(i1)=
683 & size(fdm_struc%COUNT_ACCESS,1)*size_int
684 write(unit,iostat=err)
685 & size(fdm_struc%COUNT_ACCESS,1)
686 if(err.ne.0) then
687 info(1) = -72
689 & info(2))
690 endif
691 IF ( info(1) .LT. 0 ) GOTO 100
692 write(unit,iostat=err) fdm_struc%COUNT_ACCESS
693 ELSE
694 size_gest_fdm_struc_t(i1)=size_int*2
695 size_variables_fdm_struc_t(i1)=0_8
696 write(unit,iostat=err) -999
697 if(err.ne.0) then
698 info(1) = -72
700 & info(2))
701 endif
702 IF ( info(1) .LT. 0 ) GOTO 100
703 write(unit,iostat=err) -999
704 ENDIF
705 if(err.ne.0) then
706 info(1) = -72
708 & info(2))
709 endif
710 IF ( info(1) .LT. 0 ) GOTO 100
711 elseif(trim(mode).EQ."restore") then
712 nullify(fdm_struc%COUNT_ACCESS)
713 read(unit,iostat=err) size_array1
714 if(err.ne.0) THEN
715 info(1) = -75
717 & ,info(2))
718 endif
719 IF ( info(1) .LT. 0 ) GOTO 100
720 if(size_array1.EQ.-999) then
721 size_gest_fdm_struc_t(i1)=size_int*2
722 size_variables_fdm_struc_t(i1)=0_8
723 read(unit,iostat=err) dummy
724 else
725 size_gest_fdm_struc_t(i1)=size_int
726 size_variables_fdm_struc_t(i1)=size_array1*size_int
727 allocate(fdm_struc%COUNT_ACCESS(size_array1),
728 & stat=allocok)
729 if (allocok .GT. 0) THEN
730 info(1) = -78
732 & total_struc_size-size_allocated
733 & ,info(2))
734 endif
735 read(unit,iostat=err) fdm_struc%COUNT_ACCESS
736 endif
737 IF ( info(1) .LT. 0 ) GOTO 100
738 if(err.ne.0) THEN
739 info(1) = -75
741 & ,info(2))
742 endif
743 IF ( info(1) .LT. 0 ) GOTO 100
744 endif
745 CASE DEFAULT
746 END SELECT
747 if(trim(mode).EQ."memory_save") then
748
749
750
751 nbsubrecords=int(size_variables_fdm_struc_t(i1)/huge(i4))
752 IF(nbsubrecords.GT.0) then
753 nbrecords_fdm_struc_t(i1)=nbrecords_fdm_struc_t(i1)
754 & +nbsubrecords
755 ENDIF
756 elseif(trim(mode).EQ."save") then
757 size_written=size_written+size_variables_fdm_struc_t(i1)
758 & +int(size_gest_fdm_struc_t(i1),kind=8)
759#if !defined(MUMPS_F2003)
760 size_written=size_written
761 & +int(2*size_int*nbrecords_fdm_struc_t(i1),kind=8)
762#endif
763 elseif(trim(mode).EQ."restore") then
764 size_allocated=size_allocated+
765 & size_variables_fdm_struc_t(i1)
766 size_read=size_read+size_variables_fdm_struc_t(i1)
767 & +int(size_gest_fdm_struc_t(i1),kind=8)
768#if !defined(MUMPS_F2003)
769 size_read=size_read
770 & +int(2*size_int*nbrecords_fdm_struc_t(i1),kind=8)
771#endif
772 endif
773 ENDDO
774 if(trim(mode).EQ."memory_save") then
775 local_size_variables=sum(size_variables_fdm_struc_t)
776 local_size_gest=sum(size_gest_fdm_struc_t)
777#if !defined(MUMPS_F2003)
778 local_nbrecords=sum(nbrecords_fdm_struc_t)
779 local_size_gest=local_size_gest+2*size_int*local_nbrecords
780#endif
781 endif
782 100 continue
783 RETURN