diff --git a/src/config.f90 b/src/config.f90 index 96dc7f36d..342ac6a1b 100644 --- a/src/config.f90 +++ b/src/config.f90 @@ -15,7 +15,6 @@ module config #include use petscsys #endif -!$ use OMP_LIB implicit none private @@ -28,8 +27,6 @@ module config integer, protected, public :: & worldrank = 0, & !< MPI worldrank (/=0 for MPI simulations only) worldsize = 1 !< MPI worldsize (/=1 for MPI simulations only) - integer(4), protected, public :: & - DAMASK_NumThreadsInt = 0 !< value stored in environment variable DAMASK_NUM_THREADS, set to zero if no OpenMP directive public :: & config_init, & @@ -80,24 +77,12 @@ subroutine parse_numerics logical :: fexist integer :: ierr -!$ integer :: gotDAMASK_NUM_THREADS = 1 -!$ character(len=6) DAMASK_NumThreadsString ! environment variable DAMASK_NUM_THREADS #ifdef PETSc call MPI_Comm_rank(PETSC_COMM_WORLD,worldrank,ierr);CHKERRQ(ierr) call MPI_Comm_size(PETSC_COMM_WORLD,worldsize,ierr);CHKERRQ(ierr) #endif -!$ call GET_ENVIRONMENT_VARIABLE(NAME='DAMASK_NUM_THREADS',VALUE=DAMASK_NumThreadsString,STATUS=gotDAMASK_NUM_THREADS) ! get environment variable DAMASK_NUM_THREADS... -!$ if(gotDAMASK_NUM_THREADS /= 0) then ! could not get number of threads, set it to 1 -!$ call IO_warning(35,ext_msg='BEGIN:'//DAMASK_NumThreadsString//':END') -!$ DAMASK_NumThreadsInt = 1_4 -!$ else -!$ read(DAMASK_NumThreadsString,'(i6)') DAMASK_NumThreadsInt ! read as integer -!$ if (DAMASK_NumThreadsInt < 1_4) DAMASK_NumThreadsInt = 1_4 ! in case of string conversion fails, set it to one -!$ endif -!$ call omp_set_num_threads(DAMASK_NumThreadsInt) ! set number of threads for parallel execution - numerics_root => emptyDict inquire(file='numerics.yaml', exist=fexist) if (fexist) then @@ -105,9 +90,6 @@ subroutine parse_numerics numerics_root => parse_flow(to_flow(IO_read('numerics.yaml'))) endif -!-------------------------------------------------------------------------------------------------- -! openMP parameter - !$ write(6,'(a24,1x,i8,/)') ' number of threads: ',DAMASK_NumThreadsInt end subroutine parse_numerics diff --git a/src/parallelization.f90 b/src/parallelization.f90 index 8e569dcb9..bb32baf77 100644 --- a/src/parallelization.f90 +++ b/src/parallelization.f90 @@ -24,7 +24,24 @@ contains !-------------------------------------------------------------------------------------------------- subroutine parallelization_init +!$ integer :: got_env, DAMASK_NUM_THREADS +!$ character(len=6) NumThreadsString + write(6,'(/,a)') ' <<<+- parallelization init -+>>>'; flush(6) + +!$ call get_environment_variable(name='DAMASK_NUM_THREADS',value=NumThreadsString,STATUS=got_env) ! get environment variable DAMASK_NUM_THREADS... +!$ if(got_env /= 0) then ! could not get number of threads, set it to 1 +!$ write(6,*) 'Could not determine value of $DAMASK_NUM_THREADS' +!$ DAMASK_NUM_THREADS = 1_pI32 +!$ else +!$ read(NumThreadsString,'(i6)') DAMASK_NUM_THREADS +!$ if (DAMASK_NUM_THREADS < 1_pI32) then +!$ write(6,*) 'Invalid DAMASK_NUM_THREADS: '//trim(NumThreadsString) +!$ DAMASK_NUM_THREADS = 1_pI32 +!$ endif +!$ endif +!$ write(6,'(a,i8,/)') ' DAMASK_NUM_THREADS: ',DAMASK_NUM_THREADS +!$ call omp_set_num_threads(DAMASK_NUM_THREADS) end subroutine parallelization_init