Skip to content

Commit 43e0087

Browse files
committed
Communicate CASA output variables from worker to master
Some CASA variables required in the output file are not being communicated back to the master process from the workers. This change communicates the required variables from worker to master and is required to restore bitwise reproducibility in the CASA netcdf output file between serial and MPI runs.
1 parent e2adb75 commit 43e0087

File tree

3 files changed

+65
-1
lines changed

3 files changed

+65
-1
lines changed

src/offline/cable_mpicommon.F90

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ MODULE cable_mpicommon
9999
! MPI: number of final casa result matrices and vectors to receive
100100
! by the master for casa_poolout and casa_fluxout
101101
INTEGER, PARAMETER :: ncasa_mat = 37 ! add three more wood product variables
102-
INTEGER, PARAMETER :: ncasa_vec = 58 ! vh changed on 5-feb-2016 for adding sapwood area and frac_sapwood
102+
INTEGER, PARAMETER :: ncasa_vec = 66
103103
! MPI: number of fields included in restart_t type for data
104104
! that is returned only for creating a restart file at the end of the run
105105
! MPI: gol124: canopy%rwater removed when Bernard ported to CABLE_r491

src/offline/cable_mpimaster.F90

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6656,6 +6656,38 @@ SUBROUTINE master_casa_types (comm, casapool, casaflux, &
66566656
CALL MPI_Get_address (casaflux%Cplant_turnover_resource_limitation(off), displs(bidx), ierr)
66576657
blocks(bidx) = r2len
66586658

6659+
bidx = bidx + 1
6660+
CALL MPI_Get_address (casaflux%Pupland(off), displs(bidx), ierr)
6661+
blocks(bidx) = r2len
6662+
6663+
bidx = bidx + 1
6664+
CALL MPI_Get_address (casaflux%Plittermin(off), displs(bidx), ierr)
6665+
blocks(bidx) = r2len
6666+
6667+
bidx = bidx + 1
6668+
CALL MPI_Get_address (casaflux%Psmin(off), displs(bidx), ierr)
6669+
blocks(bidx) = r2len
6670+
6671+
bidx = bidx + 1
6672+
CALL MPI_Get_address (casaflux%Psimm(off), displs(bidx), ierr)
6673+
blocks(bidx) = r2len
6674+
6675+
bidx = bidx + 1
6676+
CALL MPI_Get_address (casaflux%kplab(off), displs(bidx), ierr)
6677+
blocks(bidx) = r2len
6678+
6679+
bidx = bidx + 1
6680+
CALL MPI_Get_address (casaflux%kpsorb(off), displs(bidx), ierr)
6681+
blocks(bidx) = r2len
6682+
6683+
bidx = bidx + 1
6684+
CALL MPI_Get_address (casaflux%kpocc(off), displs(bidx), ierr)
6685+
blocks(bidx) = r2len
6686+
6687+
bidx = bidx + 1
6688+
CALL MPI_Get_address (casaflux%FluxCtoco2(off), displs(bidx), ierr)
6689+
blocks(bidx) = r2len
6690+
66596691
types(last2d+1:bidx) = MPI_BYTE
66606692

66616693
! MPI: sanity check

src/offline/cable_mpiworker.F90

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6055,6 +6055,38 @@ SUBROUTINE worker_casa_type (comm, casapool,casaflux, &
60556055
CALL MPI_Get_address (casaflux%Cplant_turnover_resource_limitation(off), displs(bidx), ierr)
60566056
blocks(bidx) = r2len
60576057

6058+
bidx = bidx + 1
6059+
CALL MPI_Get_address (casaflux%Pupland(off), displs(bidx), ierr)
6060+
blocks(bidx) = r2len
6061+
6062+
bidx = bidx + 1
6063+
CALL MPI_Get_address (casaflux%Plittermin(off), displs(bidx), ierr)
6064+
blocks(bidx) = r2len
6065+
6066+
bidx = bidx + 1
6067+
CALL MPI_Get_address (casaflux%Psmin(off), displs(bidx), ierr)
6068+
blocks(bidx) = r2len
6069+
6070+
bidx = bidx + 1
6071+
CALL MPI_Get_address (casaflux%Psimm(off), displs(bidx), ierr)
6072+
blocks(bidx) = r2len
6073+
6074+
bidx = bidx + 1
6075+
CALL MPI_Get_address (casaflux%kplab(off), displs(bidx), ierr)
6076+
blocks(bidx) = r2len
6077+
6078+
bidx = bidx + 1
6079+
CALL MPI_Get_address (casaflux%kpsorb(off), displs(bidx), ierr)
6080+
blocks(bidx) = r2len
6081+
6082+
bidx = bidx + 1
6083+
CALL MPI_Get_address (casaflux%kpocc(off), displs(bidx), ierr)
6084+
blocks(bidx) = r2len
6085+
6086+
bidx = bidx + 1
6087+
CALL MPI_Get_address (casaflux%FluxCtoco2(off), displs(bidx), ierr)
6088+
blocks(bidx) = r2len
6089+
60586090
! MPI: sanity check
60596091
IF (bidx /= ntyp) THEN
60606092
WRITE (*,*) 'worker: invalid number of casa fields, fix it!'

0 commit comments

Comments
 (0)