36 SUBROUTINE inipar(coupling,ITID,ICAS,NNODES,INPUT,GOT_INPUT,NBTASK)
38 USE coupling_adapter_mod
39 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
40#include "implicit_f.inc"
50 INTEGER ITID(*),ICAS, NNODES,GOT_INPUT,NBTASK(*)
52 type(coupling_type),
intent(inout) :: coupling
60#include
"commandline.inc"
65 INTEGER STATUS(MPI_STATUS_SIZE),IERROR,ICODE
66 INTEGER MYRANK, JRANK, I, J, NTHREAD1, LOCAL, RLEN
67 CHARACTER (LEN=255) :: STR
68 CHARACTER (LEN=MPI_MAX_PROCESSOR_NAME) :: HSTNAM,HOST
69 character(len=MPI_MAX_PROCESSOR_NAME),
dimension(:),
allocatable :: hostname
70 integer,
dimension(:),
allocatable :: perm,host_numbers,buffer
74 INTEGER (kind=MPI_ADDRESS_KIND) :: COLOUR_ADDR
78 INTEGER OMP_GET_MAX_THREADS
86 IF(ir4r8==2) real = mpi_double_precision
95 CALL mpi_comm_get_attr(mpi_comm_world, mpi_appnum,
96 * colour_addr, valid, ierror)
98 IF (ierror == mpi_success)
THEN
99 colour = int(colour_addr)
103 call coupling_configure(coupling, trim(coupling%FILNAM))
107 * spmd_comm_world,ierror)
109 spmd_comm_world = coupling_get_communicator(coupling%adapter_ptr)
115 it_spmd(jrank) = jrank-1
126 CALL getenv('omp_num_threads
',STR)
130 READ(STR,'(i10)
',ERR=999)NTHREAD1
138 NTHREAD=NTHREAD0 ! defaut run precedent
140 IF (GOT_NTH == 1) THEN
141.AND..OR..AND.
IF (NTHREAD>1 (NTH/= NTHREAD (NTH==NTHREAD
142.AND..AND.
+ NTHREAD1>0NTHREAD0>1NTHREAD1/=NTHREAD0)))THEN
144 + '** warning : -nthread option used, default setting ignored
'
149.AND..AND.
IF(NTHREAD1>0NTHREAD0>1NTHREAD1/=NTHREAD0)THEN
151 + '** warning : omp_num_threads set, default setting ignored
'
155 IF(NTHREAD<=0) NTHREAD=1
156 IF(NTHREAD>NTHMAX) NTHREAD=NTHMAX
162 1 NSPMD,1,MPI_INTEGER,IT_SPMD(1),SPMD_COMM_WORLD,
166 1 NTHREAD,1,MPI_INTEGER,IT_SPMD(1),SPMD_COMM_WORLD,
169 IF (GOT_INPUT == 0)THEN
170 CALL MPI_BCAST(INPUT,100,MPI_CHARACTER,IT_SPMD(1),
171 . SPMD_COMM_WORLD,IERROR)
175 IF(MYRANK==IT_SPMD(J))THEN
183 CALL GETENV('omp_num_threads
',STR)
186 READ(STR,'(i10)
',ERR=1999)NTHREAD1
191.AND.
IF(NTHREAD1>0 NTHREAD1 /= NTHREAD)THEN
193 WRITE(ISTDO,'(a,i4,a,i4)
')
194 . '** warning: reset omp_num_threads to:
',
195 . NTHREAD,' for mpi process
',ISPMD+1
199 CALL MPI_GATHER(NTHREAD,1,MPI_INTEGER,NBTASK,1,MPI_INTEGER,
200 . IT_SPMD(1),SPMD_COMM_WORLD,IERROR)
203 ELSE IF(ICAS==3) THEN
209 IF (NSPMD /= NNODES) THEN
211 . 'the required number of mpi processes does not match mpirun
'
213 . 'please, run with
the proper number of mpi processes
'
215 . 'required(number of .rst files) nspmd =
',NSPMD
217 . 'available(-np argument of mpirun) =
',NNODES
220 . 'the required number of mpi processes does not match mpirun
'
222 . 'please, run with
the proper number of mpi processes
'
227 . ' e r r o r t e r m i n a t i o n
'
229 . ' total number of cycles :
', NCYCLE
231 . ' total number of cycles :
', NCYCLE
233 CALL MPI_ABORT(SPMD_COMM_WORLD,ICODE,ierror)
239 CALL MPI_BCAST(NSPMD,1,MPI_INTEGER,IT_SPMD(1),
240 . SPMD_COMM_WORLD,IERROR)
243 CALL MPI_BCAST(NTHREAD,1,MPI_INTEGER,IT_SPMD(1),
244 . SPMD_COMM_WORLD,IERROR)
246 IF (GOT_INPUT == 0)THEN
247 CALL MPI_BCAST(INPUT,100,MPI_CHARACTER,IT_SPMD(1),
248 . SPMD_COMM_WORLD,IERROR)
252 CALL MPI_GATHER(NTHREAD,1,MPI_INTEGER,NBTASK,1,MPI_INTEGER,
253 . IT_SPMD(1),SPMD_COMM_WORLD,IERROR)
257 NBTASK(NSPMD+1)=NBTASK(NSPMD+1)+NBTASK(I)
273 CALL OMP_SET_NUM_THREADS(NTHREAD)
275 CALL OMP_INIT_LOCK(LLOCK(1,I))
281 allocate(hostname(nspmd))
282 CALL MPI_GET_PROCESSOR_NAME(HSTNAM,RLEN,IERROR)
284 . HSTNAM,MPI_MAX_PROCESSOR_NAME,MPI_CHARACTER,
285 . HOSTNAME ,MPI_MAX_PROCESSOR_NAME,MPI_CHARACTER,
286 . IT_SPMD(1),SPMD_COMM_WORLD,IERROR)
288 allocate(perm(nspmd))
289 allocate(host_numbers(nspmd))
290 allocate(buffer(2*nspmd))
299 IF(HOSTNAME(I) > HOSTNAME(J))THEN
301 HOSTNAME(I) = HOSTNAME(J)
312 IF(HOST /= HOSTNAME(I))THEN
315 HOST_NUMBER = HOST_NUMBER + 1
319 L_SPMD(PERM(I))=LOCAL-1
320 HOST_NUMBERS(PERM(I))=HOST_NUMBER
324 BUFFER(1:NSPMD) = L_SPMD(1:NSPMD)
326 BUFFER(NSPMD+1:2*NSPMD) = HOST_NUMBERS(1:NSPMD)
330 CALL MPI_BCAST(BUFFER,NSPMDx2,MPI_INTEGER,IT_SPMD(1),
331 . SPMD_COMM_WORLD,IERROR)
333 L_SPMD(1:NSPMD) = BUFFER(1:NSPMD)
334 HOST_NUMBERS(1:NSPMD) = BUFFER(NSPMD+1:2*NSPMD)
339 IF(HOST_NUMBERS(I) == HOST_NUMBERS(ISPMD+1)) THEN
340 NSPMD_PER_NODE = NSPMD_PER_NODE + 1
345 deallocate(host_numbers)
348 ELSE IF(ICAS==2) THEN
350 CALL MPI_BARRIER(SPMD_COMM_WORLD,IERROR)
352 CALL MPI_FINALIZE(IERROR)
363!||====================================================================
364!|| inipar ../engine/source/mpi/init/inipar.F
365!||--- called by ------------------------------------------------------
366!|| radioss2 ../engine/source/engine/radioss2.F
367!||--- calls -----------------------------------------------------
368!|| arret ../engine/source/system/arret.F
369!|| omp_get_max_threads ../engine/source/engine/openmp_stub.F90
370!|| omp_set_num_threads ../engine/source/engine/openmp_stub.F90
371!||--- uses -----------------------------------------------------
372!|| coupling_adapter_mod ../engine/source/coupling/coupling_adapter.F90
373!|| spmd_comm_world_mod ../engine/source/mpi/spmd_comm_world.F90
374!||====================================================================
375 SUBROUTINE INIPAR(coupling, ITID,ICAS,NNODES,INPUT,GOT_INPUT,NBTASK)
377 USE SPMD_COMM_WORLD_MOD, ONLY : SPMD_COMM_WORLD
378 USE COUPLING_ADAPTER_MOD
379#include "implicit_f.inc"
380#include "comlock.inc"
385 INTEGER ITID(*),ICAS, NNODES,GOT_INPUT,NBTASK(*)
391#include "com01_c.inc"
393#include "scr05_c.inc"
394#include "units_c.inc"
395#include "commandline.inc"
399 type(coupling_type), intent(inout) :: coupling
400 INTEGER ICODE, I, NTHREAD1
402 INTEGER OMP_GET_MAX_THREADS
404 CHARACTER (LEN=255) :: STR
412 IF(IR4R8==2) REAL = 8
418 CALL GETENV('omp_num_threads
',STR)
421 READ(STR,'(i10)
',ERR=999)NTHREAD1
429 NTHREAD=NTHREAD0 ! defaut run precedent
431 IF (GOT_NTH == 1) THEN
432.AND..OR..AND.
IF (NTHREAD>1 (NTH/= NTHREAD (NTH==NTHREAD
433.AND..AND.
+ NTHREAD1>0NTHREAD0>1NTHREAD1/=NTHREAD0)))THEN
435 + '** warning : -nthread option used, default setting ignored
'
440.AND..AND.
IF(NTHREAD1>0NTHREAD0>1NTHREAD1/=NTHREAD0)THEN
442 + '** warning : omp_num_threads set, default setting ignored
'
446 IF(NTHREAD<=0) NTHREAD=1
447 IF(NTHREAD>NTHMAX) NTHREAD=NTHMAX
452 ELSE IF(ICAS==3) THEN
454 IF (NSPMD /= NNODES) THEN
456 . 'non hybrid executable only supports one spmd domain
'
458 . 'please, run
starter with -nspmd 1 or
USE hmpp executable
'
460 . 'required (number of .rst files) nspmd =
',NSPMD
462 . 'available =
',NNODES
465 . 'non hybrid executable
ONLY supports one spmd domain
'
467 . 'please, run
starter with -nspmd 1 or use hmpp executable
'
470 .
' E R R O R T E R M I N A T I O N'
472 .
' E R R O R T E R M I N A T I O N'
474 .
' TOTAL NUMBER OF CYCLES :', ncycle
476 .
' TOTAL NUMBER OF CYCLES :', ncycle
484 CALL omp_set_num_threads(nthread)
486 CALL omp_init_lock(llock(1,i))
489 ELSE IF(icas==2)
THEN
end diagonal values have been computed in the(sparse) matrix id.SOL
subroutine inipar(coupling, itid, icas, nnodes, input, got_input, nbtask)
subroutine mpi_comm_split(comm, color, key, comm2, ierr)
subroutine mpi_comm_size(comm, size, ierr)
subroutine mpi_init(ierr)
subroutine mpi_comm_rank(comm, rank, ierr)
subroutine mpi_initialized(flag, ierr)
for(i8=*sizetab-1;i8 >=0;i8--)