510
511
512
513
514 USE timer_mod
517 USE output_mod
518
519
520
521#include "implicit_f.inc"
522
523
524
525#include "com01_c.inc"
526#include "com04_c.inc"
527#include "scr05_c.inc"
528#include "sms_c.inc"
529#include "task_c.inc"
530#include "timerc_c.inc"
531#include "timeri_c.inc"
532
533#include "units_c.inc"
534#include "filescount_c.inc"
535 COMMON /iclock/clock0
536 INTEGER CLOCK0
537 COMMON /rclock/elapsed
538 DOUBLE PRECISION ELAPSED
539
540
541
542 TYPE(TIMER_), INTENT(INOUT) :: T
543 INTEGER ,INTENT(IN) :: ITHERM
544 TYPE(OUTPUT_), INTENT(INOUT) :: OUTPUT
545
546
547
548 INTEGER I, NPROC, MSGTAG, IRSIZE, J, IH, IM, IS
549 DOUBLE PRECISION SECS, TOTAL, CUMUL(MAX_NB_TIMER),
550 . AVERAGE(MAX_NB_TIMER), DEVIATION(MAX_NB_TIMER),
551 . DMIN(MAX_NB_TIMER), DMAX(MAX_NB_TIMER),CUMUL_MAT,CUMUL_ELEM,
552 . CUMUL_FAIL,ARRAY(NSPMD),X_MINVALUE,X_MAXVALUE,Y_MAXVALUE
553 INTEGER MEMUSE(NSPMD),MEM_L,MMIN,MMAX,MTOT,MAVR,
554 . OUTSIZE,RFILESIZE,NB_INTERV
555 INTEGER VMPEAK, VMSIZE,VMRSS,VMHWM, VMSTK,MEMSTAT(5,NSPMD),
556 . GOT_MEM_MAP
557 CHARACTER(LEN=9) TITLES(MAX_NB_TIMER)
558
559 REAL ZEROS
560 INTEGER :: LEN_RST_NAME
561 CHARACTER*8 DATE
562 CHARACTER*10 TIME
563 LOGICAL :: BOOL_FILE
564 INTEGER :: CURRENT_RUN,OFFSET
565 INTEGER, DIMENSION(2148) :: RST_NAME
566 INTEGER :: LEN_TMP_NAME
567 CHARACTER(len=4096) :: TMP_NAME
568 INTEGER :: INDICE
569 INTEGER, PARAMETER :: INTSIZE = 4
570 REAL, DIMENSION(:,:), ALLOCATABLE :: CPUTIME
571 REAL, DIMENSION(:,:), ALLOCATABLE :: SYSTIME
572 REAL, DIMENSION(:,:), ALLOCATABLE :: REALTIME
573
574
575 titles(macro_timer_resol ) = "RESOL"
576 titles(macro_timer_contsort ) = "CONTSORT"
577 titles(macro_timer_contfor ) = "CONTFOR"
578 titles(macro_timer_element ) = "ELEMENT"
579 titles(macro_timer_kin ) = "KINCOND"
580 titles(macro_timer_integ ) = "INTEG"
581 titles(macro_timer_p0 ) = "T0"
582 titles(macro_timer_io ) = "IO"
583 titles(macro_timer_asm ) = "ASM"
584 titles(macro_timer_ams ) = "SMS"
585
586
587 titles(macro_timer_alemain ) = "ALEMAIN"
588 titles(macro_timer_ifsub0 ) = "IFSUB0"
589 titles(macro_timer_multifvm ) = "multifvm"
590 TITLES(MACRO_TIMER_SPMDCFD ) = "spmdcfd"
591 TITLES(MACRO_TIMER_MUSCL ) = "muscl"
592
593
594 TITLES(31) = '[K]SETUP'
595 TITLES(32) = '[M]SETUP'
596 TITLES(33) = 'IMP_SOLV'
597 TITLES(34) = 'IMP_TOT'
598 TITLES(36) = 'CRITER'
599 TITLES(37) = 'FOR'
600 TITLES(38) = 'VEL'
601
602 ZEROS=ZERO
603 IF (ICRAY==1) THEN
604 IRSIZE = 8
605 ELSE
606 IRSIZE = 4
607 ENDIF
608
609 VMPEAK=-1
610 VMSIZE=-1
611 VMRSS=-1
612 VMHWM=-1
613 VMSTK=-1
614 CALL MAP_MEMORY(VMPEAK, VMSIZE,VMRSS,VMHWM, VMSTK)
615 NPROC = NSPMD
616
617
618
619
620 ALLOCATE(CPUTIME(MAX_NB_TIMER,NSPMD))
621 ALLOCATE(SYSTIME(MAX_NB_TIMER,NSPMD))
622 ALLOCATE(REALTIME(MAX_NB_TIMER,NSPMD))
623
624 DO I = 1, MAX_NB_TIMER
625 ! copy local timers
626 CPUTIME(I,1) = T%CPUTIME(I)
627 SYSTIME(I,1) = T%SYSTIME(I)
628 REALTIME(I,1) = T%REALTIME(I)
629 ENDDO
630
631 MEMUSE(ISPMD+1)=VMPEAK
632 MEMSTAT(1,ISPMD+1) = VMPEAK
633 MEMSTAT(2,ISPMD+1) = VMSIZE
634 MEMSTAT(3,ISPMD+1) = VMRSS
635 MEMSTAT(4,ISPMD+1) = VMHWM
636 MEMSTAT(5,ISPMD+1) = VMSTK
637
638
639
640 IF (NSPMD > 1) THEN
641
642 MSGTAG = 1000
643 IF (ISPMD/=0) THEN
644 CALL RAD_SPMD_SEND(T%CPUTIME,MAX_NB_TIMER*IRSIZE,0,IT_SPMD,
645 . MSGTAG+ISPMD+1,INTSIZE)
646 CALL RAD_SPMD_SEND(T%SYSTIME,MAX_NB_TIMER*IRSIZE,0,IT_SPMD,
647 . MSGTAG+ISPMD+1,INTSIZE)
648 CALL RAD_SPMD_SEND(T%REALTIME,MAX_NB_TIMER*IRSIZE,0,IT_SPMD,
649 . MSGTAG+ISPMD+1,INTSIZE)
650 ELSE
651 DO I = 2, NSPMD
652 CALL RAD_SPMD_RECV(CPUTIME(1,I),MAX_NB_TIMER*IRSIZE,I-1,IT_SPMD,
653 . MSGTAG+I,INTSIZE)
654 CALL RAD_SPMD_RECV(SYSTIME(1,I),MAX_NB_TIMER*IRSIZE,I-1,IT_SPMD,
655 . MSGTAG+I,INTSIZE)
656 CALL RAD_SPMD_RECV(REALTIME(1,I),MAX_NB_TIMER*IRSIZE,I-1,IT_SPMD,
657 . MSGTAG+I,INTSIZE)
658 ENDDO
659 ENDIF
660
661
662 MSGTAG = 1100
663 MEMUSE=0
664 MEM_L=0
665
666
667
668
669
670
671
672
673 IF (ISPMD/=0) THEN
674 CALL RAD_SPMD_SEND( MEMUSE(ISPMD+1),1*IRSIZE,0,IT_SPMD,
675 . MSGTAG+ISPMD+1,INTSIZE)
676 CALL RAD_SPMD_SEND( VMSIZE,1*IRSIZE,0,IT_SPMD,
677 . MSGTAG+ISPMD+1,INTSIZE)
678 CALL RAD_SPMD_SEND( VMRSS,1*IRSIZE,0,IT_SPMD,
679 . MSGTAG+ISPMD+1,INTSIZE)
680 CALL RAD_SPMD_SEND( VMHWM,1*IRSIZE,0,IT_SPMD,
681 . MSGTAG+ISPMD+1,INTSIZE)
682 CALL RAD_SPMD_SEND( VMSTK,1*IRSIZE,0,IT_SPMD,
683 . MSGTAG+ISPMD+1,INTSIZE)
684 ELSE
685 DO I = 2, NSPMD
686 CALL RAD_SPMD_RECV(MEMUSE(I),1*IRSIZE,I-1,IT_SPMD,
687 . MSGTAG+I,INTSIZE)
688 MEMSTAT(1,I) = MEMUSE(I)
689 CALL RAD_SPMD_RECV(MEMSTAT(2,I),1*IRSIZE,I-1,IT_SPMD,
690 . MSGTAG+I,INTSIZE)
691 CALL RAD_SPMD_RECV(MEMSTAT(3,I),1*IRSIZE,I-1,IT_SPMD,
692 . MSGTAG+I,INTSIZE)
693 CALL RAD_SPMD_RECV(MEMSTAT(4,I),1*IRSIZE,I-1,IT_SPMD,
694 . MSGTAG+I,INTSIZE)
695 CALL RAD_SPMD_RECV(MEMSTAT(5,I),1*IRSIZE,I-1,IT_SPMD,
696 . MSGTAG+I,INTSIZE)
697
698 ENDDO
699
700 INDICE = 1
701 IF(MEMSTAT(4,1)/=-1) THEN
702 INDICE = 4
703 ELSEIF(MEMSTAT(1,1)/=-1) THEN
704 INDICE = 1
705 ELSEIF(MEMSTAT(2,1)/=-1) THEN
706 INDICE = 2
707 ELSEIF(MEMSTAT(3,1)/=-1) THEN
708 INDICE = 3
709 ENDIF
710 MMIN = MEMSTAT(INDICE,1)
711 MMAX = MEMSTAT(INDICE,1)
712 MTOT = MEMSTAT(INDICE,1)
713 DO I=2,NSPMD
714 IF (MMIN > MEMSTAT(INDICE,I) ) THEN
715 MMIN = MEMSTAT(INDICE,I)
716 ENDIF
717 IF (MMAX < MEMSTAT(INDICE,I) ) THEN
718 MMAX = MEMUSE(I)
719 ENDIF
720 MTOT = MTOT+ MEMSTAT(INDICE,I)
721 ENDDO
722 MAVR=MTOT/NSPMD
723 ENDIF
724 ELSE
725
726
727 IF(VMHWM/=-1) THEN
728 MEM_L = VMHWM
729 ELSEIF(VMPEAK/=-1) THEN
730 MEM_L = VMPEAK
731 ELSEIF(VMSIZE/=-1) THEN
732 MEM_L = VMSIZE
733 ELSE
734 MEM_L = -1
735 ENDIF
736 MMIN = MEM_L
737 MMAX = MEM_L
738 MTOT = MEM_L
739 MAVR = MEM_L
740 ENDIF
741
742
743 IF(NSPMD > 1)CALL SPMD_GLOB_ISUM9(RESTARTFILESIZE,1)
744
745 IF(NSPMD > 1)CALL SPMD_GLOB_ISUM9(MULTIRESTS,26)
746
747
748
749
750 IF (ISPMD/=0) RETURN
751
752 WRITE(ISTDO,*)' '
753 WRITE(ISTDO,*)' ** CPU USER TIME **'
754 WRITE(ISTDO,*)' '
755
756 CALL PRINT_SUMMARY(1,MAX_NB_TIMER,CPUTIME,TITLES,ISTDO,ITHERM)
757
758 WRITE(IOUT,*)' '
759 WRITE(IOUT,*)' ** CPU USER TIME **'
760 WRITE(IOUT,*)' '
761
762
763 CALL PRINT_SUMMARY(1,MAX_NB_TIMER,CPUTIME,TITLES,IOUT,ITHERM)
764
765
766
767
768
769
770 IF(IMON_MAT==1)THEN
771 CUMUL_MAT=ZERO
772 CUMUL_ELEM=ZERO
773 CUMUL_FAIL=ZERO
774 DO I = 1, NPROC
775 CUMUL_MAT = CUMUL_MAT +CPUTIME(35,I)
776 CUMUL_ELEM= CUMUL_ELEM+CPUTIME(3,I)
777 CUMUL_FAIL= CUMUL_FAIL+CPUTIME(121,I)
778 ENDDO
779
780 WRITE(IOUT,*)' '
781 WRITE(IOUT,*)' ** MATERIAL LAWS COST **'
782 WRITE(IOUT,*)' '
783 WRITE(ISTDO,*)' '
784 WRITE(ISTDO,*)' ** MATERIAL LAWS COST **'
785 WRITE(ISTDO,*)' '
786 WRITE(IOUT, '(A)')' #PROC ELEM COST MAT COST FAIL COST'
787 WRITE(ISTDO,'(A)')' #PROC ELEM COST MAT COST FAIL COST'
788 DO I = 1, NPROC
789 WRITE(IOUT, '(I4,3x,E9.4,3x,E9.4,3x,E9.4)') I,CPUTIME(3,I),CPUTIME(35,I),CPUTIME(121,I)
790 WRITE(ISTDO,'(I4,3x,E9.4,3x,E9.4,3x,E9.4)') I,CPUTIME(3,I),CPUTIME(35,I),CPUTIME(121,I)
791 ENDDO
792 WRITE(IOUT,*)' '
793 WRITE(ISTDO,*)' '
794 WRITE(IOUT,'(A,E9.4)') ' TOTAL ELEMENT COST..............: ',CUMUL_ELEM
795 WRITE(IOUT,'(A,E9.4)') ' TOTAL MATERIAL COST.............: ',CUMUL_MAT
796 WRITE(IOUT,'(A,E9.4)') ' TOTAL FAIL COST.................: ',CUMUL_FAIL
797
798 WRITE(ISTDO,'(A,E9.4)') ' TOTAL ELEMENT COST..............: ',CUMUL_ELEM
799 WRITE(ISTDO,'(A,E9.4)') ' TOTAL MATERIAL COST.............: ',CUMUL_MAT
800 WRITE(ISTDO,'(A,E9.4)') ' TOTAL FAIL COST.................: ',CUMUL_FAIL
801 WRITE(IOUT,*)' '
802 WRITE(ISTDO,*)' '
803 ENDIF
804
805 WRITE(IOUT,*)' '
806
807
808
809 DO I = 1, MAX_NB_TIMER
810 CUMUL(I) = ZERO
811 END DO
812 DO I = 1,NPROC
813 DO J = 1, MAX_NB_TIMER
814 CUMUL(J) = CUMUL(J) + CPUTIME(J,I)
815 ENDDO
816 ENDDO
817.AND. IF(IDTMINS==0IDTMINS_INT==0)THEN
818 TOTAL = CUMUL(1)-CUMUL(2)-CUMUL(8)-CUMUL(3)-CUMUL(4)-CUMUL(5)
819 - -CUMUL(9)-CUMUL(MACRO_TIMER_ALEMAIN)
820 ELSE
821 TOTAL = CUMUL(1)-CUMUL(2)-CUMUL(8)-CUMUL(3)-CUMUL(4)-CUMUL(5)
822 - -CUMUL(9)-CUMUL(39)-CUMUL(MACRO_TIMER_ALEMAIN)
823 END IF
824 IF(CUMUL(1)<=ZERO)CUMUL(1)=EM10
825
826
827 WRITE(ISTDO,*) ''
828
829 WRITE(ISTDO,*)
830 . ' ** CUMULATIVE CPU TIME SUMMARY **'
831 WRITE(ISTDO,*)' '
832 WRITE(ISTDO,'(A,E9.4,3x,F6.2,A)')' CONTACT SORTING.............: ',
833 + CUMUL(2),100*CUMUL(2)/CUMUL(1),' % '
834 WRITE(ISTDO,'(A,E9.4,3x,F6.2,A)')' CONTACT FORCES..............: ',
835 + CUMUL(8),100*CUMUL(8)/CUMUL(1),' % '
836 IF(NINTER25/=0)
837 * WRITE(ISTDO,'(A,E9.4,3x,F6.2,A)')' ..INCLUDING CONTACT NORMALS: ',
838 * CUMUL(106),100*CUMUL(106)/CUMUL(1),' % '
839 WRITE(ISTDO,'(A,E9.4,3x,F6.2,A)')' ELEMENT FORCES..............: ',
840 + CUMUL(3),100*CUMUL(3)/CUMUL(1),' % '
841 WRITE(ISTDO,'(A,E9.4,3x,F6.2,A)')' KINEMATIC COND..............: ',
842 + CUMUL(4),100*CUMUL(4)/CUMUL(1),' % '
843 WRITE(ISTDO,'(A,E9.4,3x,F6.2,A)')' INTEGRATION.................: ',
844 + CUMUL(5),100*CUMUL(5)/CUMUL(1),' % '
845 WRITE(ISTDO,'(A,E9.4,3x,F6.2,A)')' ASSEMBLING..................: ',
846 + CUMUL(9),100*CUMUL(9)/CUMUL(1),' % '
847.OR. IF(IDTMINS/=0IDTMINS_INT/=0)THEN
848 WRITE(ISTDO,'(A,E9.4,3x,F6.2,A)')' AMS.........................: ',
849 + CUMUL(39),100*CUMUL(39)/CUMUL(1),' % '
850 END IF
851 IF(IALE+IEULER+ITHERM/=0) THEN
852 WRITE(ISTDO,'(A,E9.4,3x,F6.2,A)')' ALE.........................: ',
853 + CUMUL(MACRO_TIMER_ALEMAIN),
854 + 100*CUMUL(MACRO_TIMER_ALEMAIN)/CUMUL(1),' % '
855 ENDIF
856
857 WRITE(ISTDO,'(A,E9.4,3x,F6.2,A)')' OTHERS (including I/O)......: ',
858 + TOTAL,100*TOTAL/CUMUL(1),' % '
859 WRITE(ISTDO,'(A,E9.4,3x,F6.2,A)')' TOTAL.......................: ',
860 + CUMUL(1),100*CUMUL(1)/CUMUL(1),' % '
861
862
863
864
865
866
867
868
869 WRITE(ISTDO,*)' '
870
871 WRITE(IOUT,*) ''
872 WRITE(IOUT,*)
873 . ' ** CUMULATIVE CPU TIME SUMMARY **'
874 WRITE(IOUT,*)' '
875 WRITE(IOUT,'(A,E9.4,3x,F6.2,A)')' CONTACT SORTING.............: ',
876 + CUMUL(2),100*CUMUL(2)/CUMUL(1),' % '
877 WRITE(IOUT,'(A,E9.4,3x,F6.2,A)')' CONTACT FORCES..............: ',
878 + CUMUL(8),100*CUMUL(8)/CUMUL(1),' % '
879 IF(NINTER25/=0)
880 * WRITE(IOUT,'(A,E9.4,3x,F6.2,A)')' .. INCLUDING CONTACT NORMALS: ',
881 * CUMUL(106),100*CUMUL(106)/CUMUL(1),' % '
882 WRITE(IOUT,'(A,E9.4,3x,F6.2,A)')' ELEMENT FORCES..............: ',
883 + CUMUL(3),100*CUMUL(3)/CUMUL(1),' % '
884 WRITE(IOUT,'(A,E9.4,3x,F6.2,A)')' KINEMATIC COND..............: ',
885 + CUMUL(4),100*CUMUL(4)/CUMUL(1),' % '
886 WRITE(IOUT,'(A,E9.4,3x,F6.2,A)')' INTEGRATION.................: ',
887 + CUMUL(5),100*CUMUL(5)/CUMUL(1),' % '
888 WRITE(IOUT,'(A,E9.4,3x,F6.2,A)')' ASSEMBLING..................: ',
889 + CUMUL(9),100*CUMUL(9)/CUMUL(1),' % '
890.OR. IF(IDTMINS/=0IDTMINS_INT/=0)THEN
891 WRITE(IOUT,'(A,E9.4,3x,F6.2,A)')' AMS.........................: ',
892 + CUMUL(39),100*CUMUL(39)/CUMUL(1),' % '
893 END IF
894 IF(IALE+IEULER+ITHERM/=0) THEN
895 WRITE(IOUT,'(A,E9.4,3x,F6.2,A)')' ALE.........................: ',
896 + CUMUL(MACRO_TIMER_ALEMAIN)
897 + ,100*CUMUL(MACRO_TIMER_ALEMAIN)/CUMUL(1),' % '
898 ENDIF
899 WRITE(IOUT,'(A,E9.4,3x,F6.2,A)')' OTHERS (including I/O)......: ',
900 + TOTAL,100*TOTAL/CUMUL(1),' % '
901 WRITE(IOUT,'(A,E9.4,3x,F6.2,A)')' TOTAL.......................: ',
902 + CUMUL(1),100*CUMUL(1)/CUMUL(1),' % '
903 WRITE(IOUT,*)' '
904
905
906
907
908 WRITE(IOUT,*)' '
909 WRITE(IOUT,*)' ** ELAPSED TIME **'
910 WRITE(IOUT,*)' '
911
912 CALL PRINT_SUMMARY(2,MAX_NB_TIMER,REALTIME,TITLES,IOUT,ITHERM)
913
914 IF(.FALSE.)THEN
915 WRITE(IOUT,*)' '
916 WRITE(IOUT,*)' ** ADDITIONAL DEBUG TIMERS (2) **'
917 WRITE(IOUT,*)' '
918 DO I = 1, NPROC
919 WRITE(IOUT,5550)I,
920 . REALTIME(96,I),REALTIME(97,I),REALTIME(98,I),REALTIME(99,I),
921 . REALTIME(100,I),REALTIME(101,I),REALTIME(102,I)
922 ENDDO
923 END IF
924
925 WRITE(IOUT,*)' '
926
927 WRITE(ISTDO,*)
928 . ' ** MEMORY USAGE STATISTICS **'
929 WRITE(ISTDO,*)' '
930 WRITE(ISTDO,'(A,A,I8,A)')' TOTAL MEMORY USED ',
931 + '.........................: ',MTOT,' MB'
932 WRITE(ISTDO,'(A,A,I8,A)')' MAXIMUM MEMORY PER PROCESSOR' ,
933 * '...............: ', MMAX,' MB'
934 WRITE(ISTDO,'(A,A,I8,A)')' MINIMUM MEMORY PER PROCESSOR',
935 * '...............: ',MMIN,' MB'
936 WRITE(ISTDO,'(A,A,I8,A)')' AVERAGE MEMORY PER PROCESSOR',
937 * '...............: ', MAVR,' MB'
938 WRITE(ISTDO,*)' '
939
940 IF (IMONM > 0)THEN
941 WRITE(ISTDO,'(A)') ' #PROC MEMORY USED'
942 DO I = 1, NPROC
943 WRITE(ISTDO,'(I4,A,I8,A)') I,' ',MEMUSE(I),' MB'
944 ENDDO
945 WRITE(ISTDO,*)' '
946 ENDIF
947
948
949
950 WRITE(IOUT,*)
951 . ' ** MEMORY USAGE STATISTICS **'
952 WRITE(IOUT,*)' '
953 WRITE(IOUT,'(A,A,I8,A)')' TOTAL MEMORY USED ',
954 + '.........................: ',MTOT,' MB'
955 WRITE(IOUT,'(A,A,I8,A)')' MAXIMUM MEMORY PER PROCESSOR' ,
956 * '...............: ', MMAX,' MB'
957 WRITE(IOUT,'(A,A,I8,A)')' MINIMUM MEMORY PER PROCESSOR',
958 * '...............: ',MMIN,' MB'
959 WRITE(IOUT,'(A,A,I8,A)')' AVERAGE MEMORY PER PROCESSOR',
960 * '...............: ', MAVR,' MB'
961 WRITE(IOUT,*)' '
962
963
964
965
966
967
968
969
970
971
972 CALL GET_MEM_MAP_VAR(GOT_MEM_MAP)
973.OR. IF(GOT_MEM_MAP==1 IMONM > 0)THEN
974 WRITE(IOUT,'(A)') ' ** PROCESS MEMORY MAPPING'
975 WRITE(IOUT,*)' '
976 WRITE(IOUT,'(A)') ' #PROC VMPEAK VMSIZE VMRSS VMHWM VMSTK'
977 DO I = 1, NPROC
978 WRITE(IOUT,'(I4,A,I10,A,I10,A,I10,A,I10,A,I10)')
979 * I,' ',MEMSTAT(1,I),' ',MEMSTAT(2,I),' ',MEMSTAT(3,I),' ',
980 * MEMSTAT(4,I),' ',MEMSTAT(5,I)
981 ENDDO
982 WRITE(ISTDO,*)' '
983
984 ENDIF
985
986
987! ANIMTOTALSIZE : kb
988! THFILESIZE : kb
989! OUTPFILESIZE : kb
990! H3DTOTALSIZE : mb --> kb
991 H3DTOTALSIZE = H3DTOTALSIZE*1024
992 OUTSIZE=ANIMTOTALSIZE+THFILESIZE+OUTPFILESIZE+H3DTOTALSIZE
993 DO I=1,9
994 OUTSIZE = OUTSIZE+MULTITHFILESIZE(I)
995 ENDDO
996 RFILESIZE=RESTARTFILESIZE
997 DO I=1,26
998 RFILESIZE = RFILESIZE+MULTIRESTS(I)
999 ENDDO
1000 TOTALFILECOUNT = (OUTSIZE)+RFILESIZE+MUMPSFILESIZE+
1001 * BCSFILESIZE
1002 TOTALFILECOUNT = TOTALFILECOUNT/1024
1003 OUTSIZE = OUTSIZE / 1024
1004 RFILESIZE = RFILESIZE / 1024
1005 MUMPSFILESIZE = MUMPSFILESIZE / 1024
1006 BCSFILESIZE = BCSFILESIZE / 1024
1007 WRITE(ISTDO,*)
1008 . ' ** DISK USAGE STATISTICS **'
1009 WRITE(ISTDO,*)' '
1010 WRITE(ISTDO,'(A,A,I10,A)')' TOTAL DISK SPACE USED ',
1011 * '.....................: ',TOTALFILECOUNT,
1012 * ' MB'
1013 WRITE(ISTDO,'(A,A,I10,A)')' ANIMATION/H3D/TH/OUTP SIZE ',
1014 * '................: ',OUTSIZE,
1015 * ' MB'
1016 WRITE(ISTDO,'(A,A,I10,A)')' RESTART FILE SIZE ',
1017 * '.........................: ',
1018 * RFILESIZE,' MB'
1019 IF (MUMPSFILESIZE > 0)THEN
1020 WRITE(ISTDO,'(A,A,I10,A)')' MUMPS INTERNAL FILE USAGE ',
1021 * '.................: ',
1022 * MUMPSFILESIZE,' MB'
1023 ENDIF
1024 IF (BCSFILESIZE > 0) THEN
1025 WRITE(ISTDO,'(A,A,I10,A)')' BCS INTERNAL FILE USAGE ',
1026 * '...................: ',
1027 * BCSFILESIZE,' MB'
1028 ENDIF
1029
1030
1031 WRITE(ISTDO,*)' '
1032
1033
1034 WRITE(IOUT,*)
1035 . ' ** DISK USAGE STATISTICS **'
1036 WRITE(IOUT,*)' '
1037 WRITE(IOUT,'(A,A,I10,A)')' TOTAL DISK SPACE USED ',
1038 * '.....................: ',TOTALFILECOUNT,
1039 * ' MB'
1040 WRITE(IOUT,'(A,A,I10,A)')' ANIMATION/H3D/TH/OUTP SIZE ',
1041 * '................: ',OUTSIZE,
1042 * ' MB'
1043 WRITE(IOUT,'(A,A,I10,A)')' RESTART FILE SIZE ',
1044 * '.........................: ',
1045 * RFILESIZE,' MB'
1046 IF (MUMPSFILESIZE > 0)THEN
1047 WRITE(IOUT,'(A,A,I10,A)')' MUMPS INTERNAL FILE USAGE ',
1048 * '.................: ',
1049 * MUMPSFILESIZE/1024,' MB'
1050 ENDIF
1051 IF (BCSFILESIZE > 0) THEN
1052 WRITE(IOUT,'(A,A,I10,A)')' BCS INTERNAL FILE USAGE ',
1053 * '...................: ',
1054 * BCSFILESIZE/1024,' MB'
1055 ENDIF
1056
1057 WRITE(IOUT,*)' '
1058
1059
1060
1061
1062 CALL ELAPSTIME(T,SECS)
1063 CALL DATE_AND_TIME(DATE,TIME)
1064 OUTPUT%CHECKSUM%DATE = DATE
1065 OUTPUT%CHECKSUM%TIME = TIME
1066! ---------------------------
1067 IF(ISPMD==0) THEN
1068 CURRENT_RUN = GLOBAL_COMP_TIME%RUN_NBR
1069 GLOBAL_COMP_TIME%ENGINE_TIME(CURRENT_RUN) = SECS
1070 LEN_RST_NAME = LEN_TRIM(GLOBAL_COMP_TIME%RST_NAME)
1071 LEN_TMP_NAME = OUTFILE_NAME_LEN + LEN_RST_NAME
1072 TMP_NAME=OUTFILE_NAME(1:OUTFILE_NAME_LEN)//GLOBAL_COMP_TIME%RST_NAME(1:LEN_RST_NAME)
1073
1074 DO I = 1, LEN_TMP_NAME
1075 RST_NAME(I) = ICHAR(TMP_NAME(I:I))
1076 END DO
1077 BOOL_FILE=.FALSE.
1078 INQUIRE(FILE=TMP_NAME(1:LEN_TMP_NAME), EXIST=BOOL_FILE)
1079! check if *_0000.rst exists
1080 IF(BOOL_FILE) THEN
1081 CALL CUR_FIL_C(20)
1082 CALL OPEN_C(RST_NAME,LEN_TMP_NAME,2)
1083! write the starter + engine elapsed time
1084 OFFSET= - STORAGE_SIZE(GLOBAL_COMP_TIME%ENGINE_TIME(CURRENT_RUN))/8
1085 CALL FSEEK_END_C(OFFSET)
1086 CALL WRITE_DPDB(GLOBAL_COMP_TIME%ENGINE_TIME(CURRENT_RUN),1)
1087 CALL CLOSE_C
1088 ENDIF
1089 ENDIF
1090! ---------------------------
1091
1092
1093
1094
1095
1096
1097
1098
1099 IH=INT(SECS/3600.0D0)
1100 IM=INT((SECS-IH*3600.0D0)/60.0D0)
1101 IS=INT(SECS-IH*3600.0D0-IM*60.0D0)
1102
1103 WRITE(IOUT,*)
1104 . ' ** COMPUTE TIME INFORMATION **'
1105 WRITE(IOUT,*)
1106 . ' ** CURRENT ENGINE **'
1107 WRITE(IOUT,*)' '
1108
1109 WRITE(IOUT,6200)STARTDATE(1:4),STARTDATE(5:6),STARTDATE(7:8),
1110 . STARTTIME(1:2),STARTTIME(3:4),STARTTIME(5:6)
1111 WRITE(IOUT,6300)DATE(1:4),DATE(5:6),DATE(7:8),
1112 . TIME(1:2),TIME(3:4),TIME(5:6)
1113 WRITE(IOUT,*)' '
1114
1115 WRITE(ISTDO,6000)SECS
1116 WRITE(ISTDO,6100)IH,IM,IS
1117.AND. IF(NPROC>1SECS>ZERO)WRITE(ISTDO,8000)CUMUL(1)/SECS
1118 WRITE(ISTDO,*)' '
1119 WRITE(IOUT,6000)SECS
1120 WRITE(IOUT,6100)IH,IM,IS
1121.AND. IF(NPROC>1SECS>ZERO)WRITE(IOUT,8000)CUMUL(1)/SECS
1122
1123 1000 FORMAT(' ** PROCESSOR NUMBER **',16(I8,5x,"%",2x))
1124 2000 FORMAT(' #PROC ','CONT.SORT ','CONT. F ','ELEMENT ',
1125 . 'KIN.COND. ','INTEGR.',' I/O ','TASK0 ',
1126 . 'ASSEMB. ','RESOL ')
1127 3000 FORMAT(' #PROC ','FORCES ','RBY.FOR. ','RBY.VEL. ',
1128 . 'VELOCITIES',' TOTAL ','% CPU')
1129 5550 FORMAT(I4,3x,E9.4,1x,E9.4,1x,E9.4,1x,E9.4,1x,E9.4,1x,E9.4,1x,E9.4,
1130 + 1x,E9.4,1x,E9.4,1x,E9.4,1x,E9.4,1x,E9.4,1x,E9.4,1x,E9.4,
1131 + 1x,E9.4,1x,E9.4)
1132 6000 FORMAT(' ELAPSED TIME =',F14.2,' s')
1133 6100 FORMAT(' ',I8,':',I2.2,':',I2.2)
1134 6200 FORMAT(' EXECUTION STARTED .........................: ',
1135 . A4,'/',A2,'/',A2,' ',A2,':',A2,':',A2)
1136 6300 FORMAT(' EXECUTION COMPLETED .......................: ',
1137 . A4,'/',A2,'/',A2,' ',A2,':',A2,':',A2)
1138 8000 FORMAT(' ESTIMATED SPEEDUP=',F14.2)
1139
1140 RETURN