[cig-commits] r12510 - seismo/3D/SPECFEM3D_GLOBE/trunk/UTILS/estimate_best_values_runs
dkomati1 at geodynamics.org
dkomati1 at geodynamics.org
Sun Aug 3 04:54:29 PDT 2008
Author: dkomati1
Date: 2008-08-03 04:54:29 -0700 (Sun, 03 Aug 2008)
New Revision: 12510
Modified:
seismo/3D/SPECFEM3D_GLOBE/trunk/UTILS/estimate_best_values_runs/estimate_best_values_runs.f90
Log:
improved code to estimate best parameter values for large runs
Modified: seismo/3D/SPECFEM3D_GLOBE/trunk/UTILS/estimate_best_values_runs/estimate_best_values_runs.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/trunk/UTILS/estimate_best_values_runs/estimate_best_values_runs.f90 2008-08-01 21:44:21 UTC (rev 12509)
+++ seismo/3D/SPECFEM3D_GLOBE/trunk/UTILS/estimate_best_values_runs/estimate_best_values_runs.f90 2008-08-03 11:54:29 UTC (rev 12510)
@@ -40,8 +40,9 @@
! integer, parameter :: MAX_NUMBER_OF_PROCS = 100000
! integer, parameter :: MAX_NUMBER_OF_PROCS = 4000 ! current maximum on pangu at Caltech
! integer, parameter :: MAX_NUMBER_OF_PROCS = 10240 ! current maximum on MareNostrum in Barcelona
- integer, parameter :: MAX_NUMBER_OF_PROCS = 62976 ! current maximum on Ranger in Texas
+! integer, parameter :: MAX_NUMBER_OF_PROCS = 62976 ! current maximum on Ranger in Texas
! integer, parameter :: MAX_NUMBER_OF_PROCS = 212992 ! current maximum on BlueGene at LLNL
+ integer, parameter :: MAX_NUMBER_OF_PROCS = 12150 ! current maximum at CINES in France
! minimum total number of processors we want to see in the table
! integer, parameter :: MIN_NUMBER_OF_PROCS = 100
@@ -49,7 +50,8 @@
! amount of memory installed per processor core on the system (in gigabytes)
! double precision, parameter :: MAX_MEMORY_PER_CORE = 1.5d0 ! pangu at Caltech
- double precision, parameter :: MAX_MEMORY_PER_CORE = 2.0d0 ! Ranger in Texas, MareNostrum in Barcelona
+! double precision, parameter :: MAX_MEMORY_PER_CORE = 2.0d0 ! Ranger in Texas, MareNostrum in Barcelona
+ double precision, parameter :: MAX_MEMORY_PER_CORE = 4.0d0 ! CINES in France
! base value depends if we implement three or four doublings (default is three)
integer, parameter :: NB_DOUBLING = 3
@@ -73,13 +75,13 @@
logical TRANSVERSE_ISOTROPY,ANISOTROPIC_3D_MANTLE,ANISOTROPIC_INNER_CORE, &
CRUSTAL,ELLIPTICITY,GRAVITY,ONE_CRUST,ROTATION,ISOTROPIC_3D_MANTLE, &
- TOPOGRAPHY,OCEANS,MOVIE_SURFACE,MOVIE_VOLUME,MOVIE_VOLUME_COARSE,ATTENUATION_3D, &
+ TOPOGRAPHY,OCEANS,MOVIE_SURFACE,MOVIE_VOLUME,MOVIE_COARSE,ATTENUATION_3D, &
RECEIVERS_CAN_BE_BURIED,PRINT_SOURCE_TIME_FUNCTION, &
SAVE_MESH_FILES,ATTENUATION,CASE_3D, &
ABSORBING_CONDITIONS,INCLUDE_CENTRAL_CUBE,INFLATE_CENTRAL_CUBE,SAVE_FORWARD, &
OUTPUT_SEISMOS_ASCII_TEXT,OUTPUT_SEISMOS_SAC_ALPHANUM,OUTPUT_SEISMOS_SAC_BINARY, &
ROTATE_SEISMOGRAMS_RT,HONOR_1D_SPHERICAL_MOHO,WRITE_SEISMOGRAMS_BY_MASTER,&
- SAVE_ALL_SEISMOS_IN_ONE_FILE,USE_BINARY_FOR_LARGE_FILE,first_time
+ SAVE_ALL_SEISMOS_IN_ONE_FILE,USE_BINARY_FOR_LARGE_FILE,first_time,HETEROGEN_3D_MANTLE
character(len=150) LOCAL_PATH,MODEL
@@ -112,7 +114,7 @@
NSPEC_CRUST_MANTLE_STACEY,NSPEC_OUTER_CORE_STACEY, &
NGLOB_CRUST_MANTLE_OCEANS,NSPEC_OUTER_CORE_ROTATION
- logical :: CUT_SUPERBRICK_XI,CUT_SUPERBRICK_ETA,EMULATE_ONLY
+ logical :: CUT_SUPERBRICK_XI,CUT_SUPERBRICK_ETA,EMULATE_ONLY,already_printed
integer, dimension(NB_SQUARE_CORNERS,NB_CUT_CASE) :: DIFF_NSPEC1D_RADIAL
integer, dimension(NB_SQUARE_EDGES_ONEDIR,NB_CUT_CASE) :: DIFF_NSPEC2D_XI,DIFF_NSPEC2D_ETA
@@ -133,9 +135,6 @@
print *,'Number of GB of memory per core installed in the machine: ',MAX_MEMORY_PER_CORE
print *
- print *,'NPROC, % of the machine, NPROC_XI, NEX_XI, memory used per core, percentage:'
- print *
-
! make sure we do not start below the lower limit
if(6 * int(sqrt(MIN_NUMBER_OF_PROCS / 6.d0))**2 == MIN_NUMBER_OF_PROCS) then
offset = 0
@@ -148,6 +147,7 @@
counter = 1
c = 0
+ already_printed = .false.
do while (counter <= NB_COLUMNS_TABLE)
c = c + 1
@@ -158,38 +158,38 @@
counter = counter + 1
! read the parameter file and compute additional parameters
- EMULATE_ONLY = .true.
- call read_compute_parameters(MIN_ATTENUATION_PERIOD,MAX_ATTENUATION_PERIOD,NER_CRUST, &
- NER_80_MOHO,NER_220_80,NER_400_220,NER_600_400,NER_670_600,NER_771_670, &
- NER_TOPDDOUBLEPRIME_771,NER_CMB_TOPDDOUBLEPRIME,NER_OUTER_CORE, &
- NER_TOP_CENTRAL_CUBE_ICB,NEX_XI,NEX_ETA,RMOHO_FICTITIOUS_IN_MESHER, &
- NPROC_XI,NPROC_ETA,NTSTEP_BETWEEN_OUTPUT_SEISMOS, &
- NTSTEP_BETWEEN_READ_ADJSRC,NSTEP,NTSTEP_BETWEEN_FRAMES, &
- NTSTEP_BETWEEN_OUTPUT_INFO,NUMBER_OF_RUNS,NUMBER_OF_THIS_RUN,NCHUNKS,DT, &
- ANGULAR_WIDTH_XI_IN_DEGREES,ANGULAR_WIDTH_ETA_IN_DEGREES,CENTER_LONGITUDE_IN_DEGREES, &
- CENTER_LATITUDE_IN_DEGREES,GAMMA_ROTATION_AZIMUTH,ROCEAN,RMIDDLE_CRUST, &
- RMOHO,R80,R120,R220,R400,R600,R670,R771,RTOPDDOUBLEPRIME,RCMB,RICB, &
- R_CENTRAL_CUBE,RHO_TOP_OC,RHO_BOTTOM_OC,RHO_OCEANS,HDUR_MOVIE,MOVIE_VOLUME_TYPE, &
- MOVIE_TOP,MOVIE_BOTTOM,MOVIE_WEST,MOVIE_EAST,MOVIE_NORTH,MOVIE_SOUTH,MOVIE_START,MOVIE_STOP, &
- TRANSVERSE_ISOTROPY,ANISOTROPIC_3D_MANTLE, &
- ANISOTROPIC_INNER_CORE,CRUSTAL,ELLIPTICITY,GRAVITY,ONE_CRUST, &
- ROTATION,ISOTROPIC_3D_MANTLE,TOPOGRAPHY,OCEANS,MOVIE_SURFACE, &
- MOVIE_VOLUME,MOVIE_VOLUME_COARSE,ATTENUATION_3D,RECEIVERS_CAN_BE_BURIED, &
- PRINT_SOURCE_TIME_FUNCTION,SAVE_MESH_FILES, &
- ATTENUATION,REFERENCE_1D_MODEL,THREE_D_MODEL,ABSORBING_CONDITIONS, &
- INCLUDE_CENTRAL_CUBE,INFLATE_CENTRAL_CUBE,LOCAL_PATH,MODEL,SIMULATION_TYPE,SAVE_FORWARD, &
- NPROC,NPROCTOT,NEX_PER_PROC_XI,NEX_PER_PROC_ETA, &
- NSPEC, &
- NSPEC2D_XI, &
- NSPEC2D_ETA, &
- NSPEC2DMAX_XMIN_XMAX,NSPEC2DMAX_YMIN_YMAX,NSPEC2D_BOTTOM,NSPEC2D_TOP, &
- NSPEC1D_RADIAL,NGLOB1D_RADIAL, &
- NGLOB2DMAX_XMIN_XMAX,NGLOB2DMAX_YMIN_YMAX,NGLOB, &
- ratio_sampling_array, ner, doubling_index,r_bottom,r_top,this_region_has_a_doubling,rmins,rmaxs,CASE_3D, &
- OUTPUT_SEISMOS_ASCII_TEXT,OUTPUT_SEISMOS_SAC_ALPHANUM,OUTPUT_SEISMOS_SAC_BINARY, &
- ROTATE_SEISMOGRAMS_RT,ratio_divide_central_cube,HONOR_1D_SPHERICAL_MOHO,CUT_SUPERBRICK_XI,CUT_SUPERBRICK_ETA,&
- DIFF_NSPEC1D_RADIAL,DIFF_NSPEC2D_XI,DIFF_NSPEC2D_ETA,&
- WRITE_SEISMOGRAMS_BY_MASTER,SAVE_ALL_SEISMOS_IN_ONE_FILE,USE_BINARY_FOR_LARGE_FILE,EMULATE_ONLY)
+ EMULATE_ONLY = .true.
+ call read_compute_parameters(MIN_ATTENUATION_PERIOD,MAX_ATTENUATION_PERIOD,NER_CRUST, &
+ NER_80_MOHO,NER_220_80,NER_400_220,NER_600_400,NER_670_600,NER_771_670, &
+ NER_TOPDDOUBLEPRIME_771,NER_CMB_TOPDDOUBLEPRIME,NER_OUTER_CORE, &
+ NER_TOP_CENTRAL_CUBE_ICB,NEX_XI,NEX_ETA,RMOHO_FICTITIOUS_IN_MESHER, &
+ NPROC_XI,NPROC_ETA,NTSTEP_BETWEEN_OUTPUT_SEISMOS, &
+ NTSTEP_BETWEEN_READ_ADJSRC,NSTEP,NTSTEP_BETWEEN_FRAMES, &
+ NTSTEP_BETWEEN_OUTPUT_INFO,NUMBER_OF_RUNS,NUMBER_OF_THIS_RUN,NCHUNKS,DT, &
+ ANGULAR_WIDTH_XI_IN_DEGREES,ANGULAR_WIDTH_ETA_IN_DEGREES,CENTER_LONGITUDE_IN_DEGREES, &
+ CENTER_LATITUDE_IN_DEGREES,GAMMA_ROTATION_AZIMUTH,ROCEAN,RMIDDLE_CRUST, &
+ RMOHO,R80,R120,R220,R400,R600,R670,R771,RTOPDDOUBLEPRIME,RCMB,RICB, &
+ R_CENTRAL_CUBE,RHO_TOP_OC,RHO_BOTTOM_OC,RHO_OCEANS,HDUR_MOVIE,MOVIE_VOLUME_TYPE, &
+ MOVIE_TOP,MOVIE_BOTTOM,MOVIE_WEST,MOVIE_EAST,MOVIE_NORTH,MOVIE_SOUTH,MOVIE_START,MOVIE_STOP, &
+ TRANSVERSE_ISOTROPY,ANISOTROPIC_3D_MANTLE, &
+ ANISOTROPIC_INNER_CORE,CRUSTAL,ELLIPTICITY,GRAVITY,ONE_CRUST, &
+ ROTATION,ISOTROPIC_3D_MANTLE,HETEROGEN_3D_MANTLE,TOPOGRAPHY,OCEANS,MOVIE_SURFACE, &
+ MOVIE_VOLUME,MOVIE_COARSE,ATTENUATION_3D,RECEIVERS_CAN_BE_BURIED, &
+ PRINT_SOURCE_TIME_FUNCTION,SAVE_MESH_FILES, &
+ ATTENUATION,REFERENCE_1D_MODEL,THREE_D_MODEL,ABSORBING_CONDITIONS, &
+ INCLUDE_CENTRAL_CUBE,INFLATE_CENTRAL_CUBE,LOCAL_PATH,MODEL,SIMULATION_TYPE,SAVE_FORWARD, &
+ NPROC,NPROCTOT,NEX_PER_PROC_XI,NEX_PER_PROC_ETA, &
+ NSPEC, &
+ NSPEC2D_XI, &
+ NSPEC2D_ETA, &
+ NSPEC2DMAX_XMIN_XMAX,NSPEC2DMAX_YMIN_YMAX,NSPEC2D_BOTTOM,NSPEC2D_TOP, &
+ NSPEC1D_RADIAL,NGLOB1D_RADIAL, &
+ NGLOB2DMAX_XMIN_XMAX,NGLOB2DMAX_YMIN_YMAX,NGLOB, &
+ ratio_sampling_array, ner, doubling_index,r_bottom,r_top,this_region_has_a_doubling,rmins,rmaxs,CASE_3D, &
+ OUTPUT_SEISMOS_ASCII_TEXT,OUTPUT_SEISMOS_SAC_ALPHANUM,OUTPUT_SEISMOS_SAC_BINARY, &
+ ROTATE_SEISMOGRAMS_RT,ratio_divide_central_cube,HONOR_1D_SPHERICAL_MOHO,CUT_SUPERBRICK_XI,CUT_SUPERBRICK_ETA,&
+ DIFF_NSPEC1D_RADIAL,DIFF_NSPEC2D_XI,DIFF_NSPEC2D_ETA,&
+ WRITE_SEISMOGRAMS_BY_MASTER,SAVE_ALL_SEISMOS_IN_ONE_FILE,USE_BINARY_FOR_LARGE_FILE,EMULATE_ONLY)
if(first_time) then
first_time = .false.
@@ -228,36 +228,50 @@
if(percent > 100.d0) goto 777
if(percent < 0.d0) then
-! write(*,"(' ',i5,' ',f6.2,'% ',i3,' ',i4,' ',f6.2,' ',f6.2,'% **mesher fails/temporary bug**')") &
-! 6*NPROC_XI**2,100.d0*6*NPROC_XI**2/dble(MAX_NUMBER_OF_PROCS),NPROC_XI,NEX_XI,mem_per_core,percent
+ if(.not. already_printed) print *,'NPROC, % of the machine, NPROC_XI, NEX_XI, GB used/core, % mem usage/core:'
+ already_printed = .true.
+ write(*,"(' ',i5,' ',f6.2,'% ',i3,' ',i4,' ',f6.2,' ',f6.2,'% **mesher fails/bug**')") &
+ 6*NPROC_XI**2,100.d0*6*NPROC_XI**2/dble(MAX_NUMBER_OF_PROCS),NPROC_XI,NEX_XI,mem_per_core,percent
goto 777
else if(percent >= 93.d0) then
+ if(.not. already_printed) print *,'NPROC, % of the machine, NPROC_XI, NEX_XI, GB used/core, % mem usage/core:'
+ already_printed = .true.
write(*,"(' ',i5,' ',f6.2,'% ',i3,' ',i4,' ',f6.2,' ',f6.2,'% **too high**')") &
6*NPROC_XI**2,100.d0*6*NPROC_XI**2/dble(MAX_NUMBER_OF_PROCS),NPROC_XI,NEX_XI,mem_per_core,percent
goto 777
else if(percent >= 85.d0) then
+ if(.not. already_printed) print *,'NPROC, % of the machine, NPROC_XI, NEX_XI, GB used/core, % mem usage/core:'
+ already_printed = .true.
write(*,"(' ',i5,' ',f6.2,'% ',i3,' ',i4,' ',f6.2,' ',f6.2,'% **excellent**')") &
6*NPROC_XI**2,100.d0*6*NPROC_XI**2/dble(MAX_NUMBER_OF_PROCS),NPROC_XI,NEX_XI,mem_per_core,percent
goto 777
else if(percent >= 80.d0) then
+ if(.not. already_printed) print *,'NPROC, % of the machine, NPROC_XI, NEX_XI, GB used/core, % mem usage/core:'
+ already_printed = .true.
write(*,"(' ',i5,' ',f6.2,'% ',i3,' ',i4,' ',f6.2,' ',f6.2,'% **very good**')") &
6*NPROC_XI**2,100.d0*6*NPROC_XI**2/dble(MAX_NUMBER_OF_PROCS),NPROC_XI,NEX_XI,mem_per_core,percent
goto 777
else if(percent >= 70.d0) then
+ if(.not. already_printed) print *,'NPROC, % of the machine, NPROC_XI, NEX_XI, GB used/core, % mem usage/core:'
+ already_printed = .true.
write(*,"(' ',i5,' ',f6.2,'% ',i3,' ',i4,' ',f6.2,' ',f6.2,'% **not bad**')") &
6*NPROC_XI**2,100.d0*6*NPROC_XI**2/dble(MAX_NUMBER_OF_PROCS),NPROC_XI,NEX_XI,mem_per_core,percent
goto 777
else if(percent >= 60.d0) then
+ if(.not. already_printed) print *,'NPROC, % of the machine, NPROC_XI, NEX_XI, GB used/core, % mem usage/core:'
+ already_printed = .true.
write(*,"(' ',i5,' ',f6.2,'% ',i3,' ',i4,' ',f6.2,' ',f6.2,'% **possible**')") &
6*NPROC_XI**2,100.d0*6*NPROC_XI**2/dble(MAX_NUMBER_OF_PROCS),NPROC_XI,NEX_XI,mem_per_core,percent
! uncomment line below to completely suppress cases that give an occupancy below 50%
else ! if(percent >= 50.d0) then
+ if(.not. already_printed) print *,'NPROC, % of the machine, NPROC_XI, NEX_XI, GB used/core, % mem usage/core:'
+ already_printed = .true.
write(*,"(' ',i5,' ',f6.2,'% ',i3,' ',i4,' ',f6.2,' ',f6.2,'%')") &
6*NPROC_XI**2,100.d0*6*NPROC_XI**2/dble(MAX_NUMBER_OF_PROCS),NPROC_XI,NEX_XI,mem_per_core,percent
endif
More information about the cig-commits
mailing list