Skip to content

Commit 1e063ba

Browse files
authored
Merge pull request #13872 from mcgratta/master
FDS Source: Discussion #13860. Warn for empty SPATIAL_STATISTIC
2 parents be55876 + ecd6949 commit 1e063ba

File tree

3 files changed

+79
-63
lines changed

3 files changed

+79
-63
lines changed

Source/devc.f90

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ MODULE DEVICE_VARIABLES
4646
INTEGER :: I1=-1,I2=-1,J1=-1,J2=-1,K1=-1,K2=-1
4747
!> !\}
4848
INTEGER :: N_PATH=0 !< Number of grid cells along subdevice path for TRANSMISSION or PATH OBSCURATION
49+
INTEGER :: N_VALUES=0 !< Number of values for the subdevice used for computing spatial statistics
4950
!> !\{
5051
!> Grid index for a grid cell along subdevice path for TRANSMISSION or PATH OBSCURATION
5152
INTEGER, ALLOCATABLE, DIMENSION(:) :: I_PATH,J_PATH,K_PATH

Source/dump.f90

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6372,6 +6372,7 @@ SUBROUTINE UPDATE_DEVICES_1(T,DT,NM)
63726372
IF (DV%SUBDEVICE_INDEX(NM)==0) CYCLE DEVICE_LOOP
63736373

63746374
SDV => DV%SUBDEVICE(DV%SUBDEVICE_INDEX(NM))
6375+
SDV%N_VALUES = 0 ! Count the number of values for Device N in Mesh NM
63756376

63766377
! Check to see if the device is tied to an INIT line, in which case it is tied to a specific particle. Test to see if the
63776378
! particle is in the current mesh.
@@ -6407,11 +6408,13 @@ SUBROUTINE UPDATE_DEVICES_1(T,DT,NM)
64076408
IF (DV%NO_UPDATE_DEVC_INDEX>0) THEN
64086409
IF (DEVICE(DV%NO_UPDATE_DEVC_INDEX)%CURRENT_STATE) THEN
64096410
SDV%VALUE_1 = DV%SMOOTHED_VALUE
6411+
SDV%N_VALUES = SDV%N_VALUES + 1
64106412
CYCLE DEVICE_LOOP
64116413
ENDIF
64126414
ELSEIF (DV%NO_UPDATE_CTRL_INDEX>0) THEN
64136415
IF (CONTROL(DV%NO_UPDATE_CTRL_INDEX)%CURRENT_STATE) THEN
64146416
SDV%VALUE_1 = DV%SMOOTHED_VALUE
6417+
SDV%N_VALUES = SDV%N_VALUES + 1
64156418
CYCLE DEVICE_LOOP
64166419
ENDIF
64176420
ENDIF
@@ -6447,6 +6450,7 @@ SUBROUTINE UPDATE_DEVICES_1(T,DT,NM)
64476450
SDV%VALUE_1 = SOLID_PHASE_OUTPUT(ABS(DV%QUANTITY_INDEX(1)),DV%Y_INDEX,DV%Z_INDEX,DV%PART_CLASS_INDEX,&
64486451
OPT_CFACE_INDEX=DV%CFACE_INDEX,OPT_DEVC_INDEX=N)
64496452
ENDIF
6453+
SDV%N_VALUES = SDV%N_VALUES + 1
64506454

64516455
CASE DEFAULT SOLID_STATS_SELECT
64526456

@@ -6483,6 +6487,7 @@ SUBROUTINE UPDATE_DEVICES_1(T,DT,NM)
64836487
VALUE = SOLID_PHASE_OUTPUT(ABS(DV%QUANTITY_INDEX(1)),DV%Y_INDEX,DV%Z_INDEX,DV%PART_CLASS_INDEX,&
64846488
OPT_WALL_INDEX=IW,OPT_DEVC_INDEX=N,OPT_CUT_FACE_INDEX=WC%CUT_FACE_INDEX)
64856489
CALL SELECT_SPATIAL_STATISTIC(OPT_CUT_FACE_INDEX=WC%CUT_FACE_INDEX)
6490+
SDV%N_VALUES = SDV%N_VALUES + 1
64866491
ENDDO WALL_CELL_LOOP
64876492

64886493
CFACE_LOOP : DO ICF=INTERNAL_CFACE_CELLS_LB+1,INTERNAL_CFACE_CELLS_LB+N_INTERNAL_CFACE_CELLS
@@ -6499,6 +6504,7 @@ SUBROUTINE UPDATE_DEVICES_1(T,DT,NM)
64996504
VALUE = SOLID_PHASE_OUTPUT(ABS(DV%QUANTITY_INDEX(1)),DV%Y_INDEX,DV%Z_INDEX,DV%PART_CLASS_INDEX,&
65006505
OPT_CFACE_INDEX=ICF,OPT_DEVC_INDEX=N)
65016506
CALL SELECT_SPATIAL_STATISTIC
6507+
SDV%N_VALUES = SDV%N_VALUES + 1
65026508
ENDDO CFACE_LOOP
65036509

65046510
PARTICLE_LOOP: DO IP=1,NLP
@@ -6515,6 +6521,7 @@ SUBROUTINE UPDATE_DEVICES_1(T,DT,NM)
65156521
VALUE = SOLID_PHASE_OUTPUT(ABS(DV%QUANTITY_INDEX(1)),DV%Y_INDEX,DV%Z_INDEX,DV%PART_CLASS_INDEX,&
65166522
OPT_LP_INDEX=IP,OPT_DEVC_INDEX=N)
65176523
CALL SELECT_SPATIAL_STATISTIC(OPT_LP_INDEX=IP)
6524+
SDV%N_VALUES = SDV%N_VALUES + 1
65186525
ENDDO PARTICLE_LOOP
65196526

65206527
! If no WALL, CFACE, or PARTICLE is found, set the value of the device to 0
@@ -6534,6 +6541,7 @@ SUBROUTINE UPDATE_DEVICES_1(T,DT,NM)
65346541
K = MIN( KBP1, MAX(0, DV%K(1)) )
65356542
SDV%VALUE_1 = GAS_PHASE_OUTPUT(T,DT,NM,I,J,K,DV%QUANTITY_INDEX(1),0,DV%Y_INDEX,DV%Z_INDEX,DV%PART_CLASS_INDEX,&
65366543
DV%VELO_INDEX,DV%PIPE_INDEX,DV%PROP_INDEX,DV%REAC_INDEX,DV%MATL_INDEX)
6544+
SDV%N_VALUES = SDV%N_VALUES + 1
65376545

65386546
IF (DV%N_QUANTITY>1) &
65396547
SDV%VALUE_2 = GAS_PHASE_OUTPUT(T,DT,NM,DV%I(2),DV%J(2),DV%K(2),DV%QUANTITY_INDEX(2),0,DV%Y_INDEX,DV%Z_INDEX,&
@@ -6577,6 +6585,7 @@ SUBROUTINE UPDATE_DEVICES_1(T,DT,NM)
65776585

65786586
VALUE = GAS_PHASE_OUTPUT(T,DT,NM,I,J,K,DV%QUANTITY_INDEX(1),0,DV%Y_INDEX,DV%Z_INDEX,DV%PART_CLASS_INDEX,&
65796587
DV%VELO_INDEX,DV%PIPE_INDEX,DV%PROP_INDEX,DV%REAC_INDEX,DV%MATL_INDEX)
6588+
SDV%N_VALUES = SDV%N_VALUES + 1
65806589
STATISTICS_SELECT: SELECT CASE(DV%SPATIAL_STATISTIC)
65816590
CASE('MAX','MAXLOC X','MAXLOC Y','MAXLOC Z')
65826591
IF (VALUE>SDV%VALUE_1) THEN
@@ -6658,14 +6667,18 @@ SUBROUTINE UPDATE_DEVICES_1(T,DT,NM)
66586667
CASE(300:350) OUTPUT_INDEX_SELECT ! HVAC output
66596668

66606669
SDV%VALUE_1 = HVAC_OUTPUT(DV%QUANTITY_INDEX(1),DV%Y_INDEX,DV%Z_INDEX,DV%DUCT_INDEX,DV%NODE_INDEX,DV%DUCT_CELL_INDEX)
6670+
SDV%N_VALUES = SDV%N_VALUES + 1
66616671

66626672
CASE(400:454) OUTPUT_INDEX_SELECT ! Particle-specific output
66636673

66646674
SELECT CASE(DV%SPATIAL_STATISTIC)
66656675

66666676
CASE('null')
66676677

6668-
IF (LP_INDEX>0) SDV%VALUE_1 = PARTICLE_OUTPUT(T,ABS(DV%QUANTITY_INDEX(1)),LP_INDEX)
6678+
IF (LP_INDEX>0) THEN
6679+
SDV%VALUE_1 = PARTICLE_OUTPUT(T,ABS(DV%QUANTITY_INDEX(1)),LP_INDEX)
6680+
SDV%N_VALUES = SDV%N_VALUES + 1
6681+
ENDIF
66696682

66706683
CASE DEFAULT
66716684

@@ -6682,6 +6695,7 @@ SUBROUTINE UPDATE_DEVICES_1(T,DT,NM)
66826695
VALUE = PARTICLE_OUTPUT(T,ABS(DV%QUANTITY_INDEX(1)),IP)
66836696
B1 => BOUNDARY_PROP1(LP%B1_INDEX)
66846697
CALL SELECT_SPATIAL_STATISTIC(OPT_LP_INDEX=IP)
6698+
SDV%N_VALUES = SDV%N_VALUES + 1
66856699
ENDDO PARTICLE_LOOP2
66866700

66876701
! If no appropriate particles are found, set the value of the device to 0

Source/main.f90

Lines changed: 63 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,10 @@ PROGRAM FDS
5252
INTEGER :: LO10,NM,IZERO,ANG_INC_COUNTER
5353
REAL(EB) :: T,DT,TNOW
5454
REAL :: CPUTIME
55-
REAL(EB), ALLOCATABLE, DIMENSION(:) :: TC_GLB,TC_LOC,DT_NEW,TI_LOC,TI_GLB
56-
REAL(EB), ALLOCATABLE, DIMENSION(:,:) :: TC2_GLB,TC2_LOC
57-
LOGICAL, ALLOCATABLE, DIMENSION(:) :: STATE_GLB,STATE_LOC
55+
REAL(EB), ALLOCATABLE, DIMENSION(:) :: TC_ARRAY,DT_NEW
56+
INTEGER, ALLOCATABLE, DIMENSION(:) :: N_VALUES
57+
REAL(EB), ALLOCATABLE, DIMENSION(:,:) :: TC2_ARRAY
58+
LOGICAL, ALLOCATABLE, DIMENSION(:) :: STATE_ARRAY
5859
INTEGER :: ITER
5960
TYPE (MESH_TYPE), POINTER :: M,M4
6061
TYPE (OMESH_TYPE), POINTER :: M2,M3
@@ -1114,22 +1115,10 @@ SUBROUTINE MPI_INITIALIZATION_CHORES(TASK_NUMBER)
11141115

11151116
! Set up dummy arrays to hold various arrays that must be exchanged among meshes
11161117

1117-
ALLOCATE(TI_LOC(N_DEVC),STAT=IZERO)
1118-
CALL ChkMemErr('MAIN','TI_LOC',IZERO)
1119-
ALLOCATE(TI_GLB(N_DEVC),STAT=IZERO)
1120-
CALL ChkMemErr('MAIN','TI_GLB',IZERO)
1121-
ALLOCATE(STATE_GLB(2*N_DEVC),STAT=IZERO)
1122-
CALL ChkMemErr('MAIN','STATE_GLB',IZERO)
1123-
ALLOCATE(STATE_LOC(2*N_DEVC),STAT=IZERO)
1124-
CALL ChkMemErr('MAIN','STATE_LOC',IZERO)
1125-
ALLOCATE(TC_GLB(4*N_DEVC),STAT=IZERO)
1126-
CALL ChkMemErr('MAIN','TC_GLB',IZERO)
1127-
ALLOCATE(TC_LOC(4*N_DEVC),STAT=IZERO)
1128-
CALL ChkMemErr('MAIN','TC_LOC',IZERO)
1129-
ALLOCATE(TC2_GLB(2,N_DEVC),STAT=IZERO)
1130-
CALL ChkMemErr('MAIN','TC2_GLB',IZERO)
1131-
ALLOCATE(TC2_LOC(2,N_DEVC),STAT=IZERO)
1132-
CALL ChkMemErr('MAIN','TC2_LOC',IZERO)
1118+
ALLOCATE(STATE_ARRAY(2*N_DEVC),STAT=IZERO) ; CALL ChkMemErr('MAIN','STATE_ARRAY',IZERO)
1119+
ALLOCATE(TC_ARRAY(4*N_DEVC),STAT=IZERO) ; CALL ChkMemErr('MAIN','TC_ARRAY',IZERO)
1120+
ALLOCATE(TC2_ARRAY(2,N_DEVC),STAT=IZERO) ; CALL ChkMemErr('MAIN','TC2_ARRAY',IZERO)
1121+
ALLOCATE(N_VALUES(N_DEVC),STAT=IZERO) ; CALL ChkMemErr('MAIN','N_VALUES',IZERO)
11331122

11341123

11351124
CASE(3)
@@ -1701,7 +1690,7 @@ END SUBROUTINE STOP_CHECK
17011690

17021691
SUBROUTINE END_FDS
17031692

1704-
CHARACTER(255) :: MESSAGE
1693+
CHARACTER(MESSAGE_LENGTH) :: MESSAGE
17051694

17061695
IF (STOP_STATUS==NO_STOP .OR. STOP_STATUS==USER_STOP) CALL DUMP_TIMERS
17071696

@@ -3902,25 +3891,21 @@ SUBROUTINE EXCHANGE_GLOBAL_OUTPUTS
39023891

39033892
! Exchange the CURRENT_STATE and PRIOR_STATE of each DEViCe
39043893

3905-
STATE_LOC = .FALSE. ! _LOC is a temporary array that holds the STATE value for the devices on each node
3894+
STATE_ARRAY = .FALSE. ! Temporary array that holds the STATE value for the devices on each node
39063895
DO NM=LOWER_MESH_INDEX,UPPER_MESH_INDEX
39073896
DO N=1,N_DEVC
39083897
DV => DEVICE(N)
39093898
IF (DV%MESH==NM) THEN
3910-
STATE_LOC(N) = DV%CURRENT_STATE
3911-
STATE_LOC(N+N_DEVC) = DV%PRIOR_STATE
3899+
STATE_ARRAY(N) = DV%CURRENT_STATE
3900+
STATE_ARRAY(N+N_DEVC) = DV%PRIOR_STATE
39123901
ENDIF
39133902
ENDDO
39143903
ENDDO
3915-
IF (N_MPI_PROCESSES>1) THEN
3916-
CALL MPI_ALLREDUCE(STATE_LOC(1),STATE_GLB(1),2*N_DEVC,MPI_LOGICAL,MPI_LXOR,MPI_COMM_WORLD,IERR)
3917-
ELSE
3918-
STATE_GLB = STATE_LOC
3919-
ENDIF
3904+
IF (N_MPI_PROCESSES>1) CALL MPI_ALLREDUCE(MPI_IN_PLACE,STATE_ARRAY,2*N_DEVC,MPI_LOGICAL,MPI_LXOR,MPI_COMM_WORLD,IERR)
39203905
DO N=1,N_DEVC
39213906
DV => DEVICE(N)
3922-
DV%CURRENT_STATE = STATE_GLB(N)
3923-
DV%PRIOR_STATE = STATE_GLB(N+N_DEVC)
3907+
DV%CURRENT_STATE = STATE_ARRAY(N)
3908+
DV%PRIOR_STATE = STATE_ARRAY(N+N_DEVC)
39243909
ENDDO
39253910

39263911
! Dry pipe sprinkler logic
@@ -3943,70 +3928,84 @@ SUBROUTINE EXCHANGE_GLOBAL_OUTPUTS
39433928
! For OP_INDEX=2 and 3, we take the MIN or MAX of all the VALUEs, along with the MINLOC or MAXLOC.
39443929

39453930
OPERATION_LOOP: DO OP_INDEX=1,3
3931+
39463932
IF (OP_INDEX==2 .AND. .NOT.MIN_DEVICES_EXIST) CYCLE OPERATION_LOOP
39473933
IF (OP_INDEX==3 .AND. .NOT.MAX_DEVICES_EXIST) CYCLE OPERATION_LOOP
3934+
N_VALUES = 0
39483935
SELECT CASE(OP_INDEX)
3949-
CASE(1) ; TC_LOC = 0._EB ; MPI_OP_INDEX = MPI_SUM ; DIM_FAC = 4
3950-
CASE(2) ; TC2_LOC = 1.E10_EB ; MPI_OP_INDEX = MPI_MINLOC ; DIM_FAC = 1
3951-
CASE(3) ; TC2_LOC = -1.E10_EB ; MPI_OP_INDEX = MPI_MAXLOC ; DIM_FAC = 1
3936+
CASE(1) ; TC_ARRAY = 0._EB ; MPI_OP_INDEX = MPI_SUM ; DIM_FAC = 4
3937+
CASE(2) ; TC2_ARRAY = 1.E10_EB ; MPI_OP_INDEX = MPI_MINLOC ; DIM_FAC = 1
3938+
CASE(3) ; TC2_ARRAY = -1.E10_EB ; MPI_OP_INDEX = MPI_MAXLOC ; DIM_FAC = 1
39523939
END SELECT
3940+
39533941
DEVICE_LOOP_1: DO N=1,N_DEVC
39543942
DV => DEVICE(N)
3955-
IF (OP_INDEX==1 .AND. (DV%SPATIAL_STATISTIC(1:3)=='MIN' .OR. DV%SPATIAL_STATISTIC(1:3)=='MAX')) CYCLE
3956-
IF (OP_INDEX==2 .AND. DV%SPATIAL_STATISTIC(1:3)/='MIN') CYCLE
3957-
IF (OP_INDEX==3 .AND. DV%SPATIAL_STATISTIC(1:3)/='MAX') CYCLE
3943+
IF (OP_INDEX==1 .AND. (DV%SPATIAL_STATISTIC(1:3)=='MIN' .OR. DV%SPATIAL_STATISTIC(1:3)=='MAX')) CYCLE DEVICE_LOOP_1
3944+
IF (OP_INDEX==2 .AND. DV%SPATIAL_STATISTIC(1:3)/='MIN') CYCLE DEVICE_LOOP_1
3945+
IF (OP_INDEX==3 .AND. DV%SPATIAL_STATISTIC(1:3)/='MAX') CYCLE DEVICE_LOOP_1
39583946
DO NN=1,DV%N_SUBDEVICES
39593947
SDV => DV%SUBDEVICE(NN)
3948+
N_VALUES(N) = N_VALUES(N) + SDV%N_VALUES
39603949
SELECT CASE(OP_INDEX)
39613950
CASE(1)
3962-
TC_LOC(N) = TC_LOC(N) + SDV%VALUE_1
3963-
TC_LOC(N+N_DEVC) = TC_LOC(N+N_DEVC) + SDV%VALUE_2
3964-
TC_LOC(N+2*N_DEVC) = TC_LOC(N+2*N_DEVC) + SDV%VALUE_3
3965-
TC_LOC(N+3*N_DEVC) = TC_LOC(N+3*N_DEVC) + SDV%VALUE_4
3951+
TC_ARRAY(N) = TC_ARRAY(N) + SDV%VALUE_1
3952+
TC_ARRAY(N+N_DEVC) = TC_ARRAY(N+N_DEVC) + SDV%VALUE_2
3953+
TC_ARRAY(N+2*N_DEVC) = TC_ARRAY(N+2*N_DEVC) + SDV%VALUE_3
3954+
TC_ARRAY(N+3*N_DEVC) = TC_ARRAY(N+3*N_DEVC) + SDV%VALUE_4
39663955
CASE(2)
3967-
IF (SDV%VALUE_1<TC2_LOC(1,N)) THEN
3968-
TC2_LOC(1,N) = SDV%VALUE_1
3969-
TC2_LOC(2,N) = SDV%VALUE_2
3956+
IF (SDV%VALUE_1<TC2_ARRAY(1,N)) THEN
3957+
TC2_ARRAY(1,N) = SDV%VALUE_1
3958+
TC2_ARRAY(2,N) = SDV%VALUE_2
39703959
ENDIF
39713960
CASE(3)
3972-
IF (SDV%VALUE_1>TC2_LOC(1,N)) THEN
3973-
TC2_LOC(1,N) = SDV%VALUE_1
3974-
TC2_LOC(2,N) = SDV%VALUE_2
3961+
IF (SDV%VALUE_1>TC2_ARRAY(1,N)) THEN
3962+
TC2_ARRAY(1,N) = SDV%VALUE_1
3963+
TC2_ARRAY(2,N) = SDV%VALUE_2
39753964
ENDIF
39763965
END SELECT
39773966
ENDDO
39783967
ENDDO DEVICE_LOOP_1
3968+
3969+
! Perform MPI exchanges to sum or take max/min of device values collected on meshes controlled by different processes
3970+
39793971
IF (N_MPI_PROCESSES>1) THEN
3972+
CALL MPI_ALLREDUCE(MPI_IN_PLACE,N_VALUES,N_DEVC,MPI_INTEGER,MPI_SUM,MPI_COMM_WORLD,IERR)
39803973
SELECT CASE(OP_INDEX)
3981-
CASE(1) ; CALL MPI_ALLREDUCE(TC_LOC(1),TC_GLB(1),DIM_FAC*N_DEVC,MPI_DOUBLE_PRECISION,MPI_OP_INDEX,MPI_COMM_WORLD,IERR)
3982-
CASE(2:3) ; CALL MPI_ALLREDUCE(TC2_LOC(1,1),TC2_GLB(1,1),N_DEVC,MPI_2DOUBLE_PRECISION,MPI_OP_INDEX,MPI_COMM_WORLD,IERR)
3983-
END SELECT
3984-
ELSE
3985-
SELECT CASE(OP_INDEX)
3986-
CASE(1) ; TC_GLB = TC_LOC
3987-
CASE(2:3) ; TC2_GLB = TC2_LOC
3974+
CASE(1)
3975+
CALL MPI_ALLREDUCE(MPI_IN_PLACE,TC_ARRAY,DIM_FAC*N_DEVC,MPI_DOUBLE_PRECISION,MPI_OP_INDEX,MPI_COMM_WORLD,IERR)
3976+
CASE(2:3)
3977+
CALL MPI_ALLREDUCE(MPI_IN_PLACE,TC2_ARRAY,N_DEVC,MPI_2DOUBLE_PRECISION,MPI_OP_INDEX,MPI_COMM_WORLD,IERR)
39883978
END SELECT
39893979
ENDIF
3980+
3981+
! Put summed values from the subdevices (SDV) back into the controlling device (DV)
3982+
39903983
DEVICE_LOOP_2: DO N=1,N_DEVC
3984+
39913985
DV => DEVICE(N)
3992-
IF (OP_INDEX==1 .AND. (DV%SPATIAL_STATISTIC(1:3)=='MIN' .OR. DV%SPATIAL_STATISTIC(1:3)=='MAX')) CYCLE
3993-
IF (OP_INDEX==2 .AND. DV%SPATIAL_STATISTIC(1:3)/='MIN') CYCLE
3994-
IF (OP_INDEX==3 .AND. DV%SPATIAL_STATISTIC(1:3)/='MAX') CYCLE
3986+
IF (OP_INDEX==1 .AND. (DV%SPATIAL_STATISTIC(1:3)=='MIN' .OR. DV%SPATIAL_STATISTIC(1:3)=='MAX')) CYCLE DEVICE_LOOP_2
3987+
IF (OP_INDEX==2 .AND. DV%SPATIAL_STATISTIC(1:3)/='MIN') CYCLE DEVICE_LOOP_2
3988+
IF (OP_INDEX==3 .AND. DV%SPATIAL_STATISTIC(1:3)/='MAX') CYCLE DEVICE_LOOP_2
3989+
IF (MY_RANK==0 .AND. N_VALUES(N)==0 .AND. DV%SPATIAL_STATISTIC/='null') &
3990+
WRITE(LU_ERR,'(3A)') 'WARNING: DEVC ',TRIM(DV%ID),' has no values.'
39953991
IF (OP_INDEX==1) THEN
3996-
DV%VALUE_1 = TC_GLB(N)
3997-
DV%VALUE_2 = TC_GLB( N_DEVC+N)
3998-
DV%VALUE_3 = TC_GLB(2*N_DEVC+N)
3999-
DV%VALUE_4 = TC_GLB(3*N_DEVC+N)
3992+
DV%VALUE_1 = TC_ARRAY(N)
3993+
DV%VALUE_2 = TC_ARRAY( N_DEVC+N)
3994+
DV%VALUE_3 = TC_ARRAY(2*N_DEVC+N)
3995+
DV%VALUE_4 = TC_ARRAY(3*N_DEVC+N)
40003996
ENDIF
40013997
IF (OP_INDEX>1 .AND. (DV%SPATIAL_STATISTIC=='MIN'.OR.DV%SPATIAL_STATISTIC=='MAX')) THEN
4002-
DV%VALUE_1 = TC2_GLB(1,N)
3998+
DV%VALUE_1 = TC2_ARRAY(1,N)
40033999
ENDIF
4000+
4001+
! Special case for MINLOC or MAXLOC
4002+
40044003
IF (OP_INDEX>1 .AND. (DV%SPATIAL_STATISTIC(1:6)=='MINLOC'.OR.DV%SPATIAL_STATISTIC(1:6)=='MAXLOC')) THEN
40054004
NO_NEED_TO_RECV = .FALSE.
40064005
DO NN=1,DV%N_SUBDEVICES
40074006
SDV => DV%SUBDEVICE(NN)
40084007
IF (PROCESS(SDV%MESH)==MY_RANK) THEN
4009-
IF (SDV%MESH==NINT(TC2_GLB(2,N))) THEN
4008+
IF (SDV%MESH==NINT(TC2_ARRAY(2,N))) THEN
40104009
DV%VALUE_1 = SDV%VALUE_3
40114010
IF (MY_RANK>0) THEN
40124011
CALL MPI_SEND(DV%VALUE_1,1,MPI_DOUBLE_PRECISION,0,999,MPI_COMM_WORLD,IERR)
@@ -4021,7 +4020,9 @@ SUBROUTINE EXCHANGE_GLOBAL_OUTPUTS
40214020
CALL MPI_BARRIER(MPI_COMM_WORLD,IERR)
40224021
CALL MPI_BCAST(DV%VALUE_1,1,MPI_DOUBLE_PRECISION,0,MPI_COMM_WORLD,IERR)
40234022
ENDIF
4023+
40244024
ENDDO DEVICE_LOOP_2
4025+
40254026
ENDDO OPERATION_LOOP
40264027

40274028
ENDIF EXCHANGE_DEVICE

0 commit comments

Comments
 (0)