From 332f192a04e795f1ebe3a681202c085a00fd580d Mon Sep 17 00:00:00 2001 From: LSchueler Date: Thu, 6 Jun 2019 10:19:06 +0200 Subject: [PATCH 1/7] Added PDAF dependencies --- pdaf_base/src/CMakeLists.txt | 4 ++++ pdaf_user/CMakeLists.txt | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/pdaf_base/src/CMakeLists.txt b/pdaf_base/src/CMakeLists.txt index be480d6..e922675 100644 --- a/pdaf_base/src/CMakeLists.txt +++ b/pdaf_base/src/CMakeLists.txt @@ -1,5 +1,9 @@ file(GLOB PDAF_BASE_SOURCES *.F90) +find_package(LAPACK REQUIRED) +find_package(BLAS REQUIRED) + add_library(PDAF_base STATIC ${PDAF_BASE_SOURCES}) target_include_directories(PDAF_base PRIVATE dummympi) +target_link_libraries(PDAF_base PRIVATE ${LAPACK_LIBRARIES} ${BLAS_LIBRARIES}) target_compile_options(PDAF_base PRIVATE "-fdefault-real-8") diff --git a/pdaf_user/CMakeLists.txt b/pdaf_user/CMakeLists.txt index c12d444..4908941 100644 --- a/pdaf_user/CMakeLists.txt +++ b/pdaf_user/CMakeLists.txt @@ -1,8 +1,15 @@ file(GLOB PDAF_USER_SOURCES *.F90) +set(CMAKE_Fortran_COMPILER "mpifort") + +find_package(MPI REQUIRED) +find_package(LAPACK REQUIRED) +find_package(BLAS REQUIRED) + add_library(pdaf ${PDAF_USER_SOURCES}) target_include_directories(pdaf PRIVATE dummympi) target_link_libraries(pdaf PRIVATE PDAF_base) +target_link_libraries(pdaf PRIVATE ${MPI_LIBRARIES} ${LAPACK_LIBRARIES} ${BLAS_LIBRARIES}) if(APPLE AND BUILD_SHARED_LIBS) target_link_libraries(pdaf PUBLIC "-framework Accelerate") From c967741b2a5359f3d938ca19f9b375028e54aab2 Mon Sep 17 00:00:00 2001 From: LSchueler Date: Thu, 6 Jun 2019 13:09:02 +0200 Subject: [PATCH 2/7] Removed the hardcoded MPI Fortran compiler from cmake --- pdaf_user/CMakeLists.txt | 2 -- 1 file changed, 2 deletions(-) diff --git a/pdaf_user/CMakeLists.txt b/pdaf_user/CMakeLists.txt index 4908941..7dffd7f 100644 --- a/pdaf_user/CMakeLists.txt +++ b/pdaf_user/CMakeLists.txt @@ -1,7 +1,5 @@ file(GLOB PDAF_USER_SOURCES *.F90) -set(CMAKE_Fortran_COMPILER "mpifort") - find_package(MPI REQUIRED) find_package(LAPACK REQUIRED) find_package(BLAS REQUIRED) From 367ad8ebfef7f960d6ff39e8e80d6fce09784b50 Mon Sep 17 00:00:00 2001 From: LSchueler Date: Fri, 7 Jun 2019 12:11:10 +0200 Subject: [PATCH 3/7] Fixed a deallocation bug, which can appear if no assimilation was done --- pdaf_base/src/PDAF-D_deallocate.F90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pdaf_base/src/PDAF-D_deallocate.F90 b/pdaf_base/src/PDAF-D_deallocate.F90 index fa28872..c66f4bf 100644 --- a/pdaf_base/src/PDAF-D_deallocate.F90 +++ b/pdaf_base/src/PDAF-D_deallocate.F90 @@ -76,14 +76,14 @@ SUBROUTINE PDAF_deallocate() IF (dim_bias_p > 0) THEN DEALLOCATE(bias) ENDIF - + ELSE on_filterpe ! Model-PEs that are not Filter-PEs only need an array for the local ensemble ! if they participate in the coupling communication ! Allocate partial ensemble on model-only PEs that do coupling communication IF (COMM_couple /= MPI_COMM_NULL) THEN - DEALLOCATE(eofV) + IF (ALLOCATED(eofV)) DEALLOCATE(eofV) END IF END IF on_filterpe From 7143baa160a203cfc944594d7aa8cb2fe041ff8d Mon Sep 17 00:00:00 2001 From: LSchueler Date: Fri, 28 Jun 2019 13:58:59 +0200 Subject: [PATCH 4/7] Removed dummpy MPI headers, which are messing PDAF up --- pdaf_base/nullmpi/nullmpi.F90 | 294 ---------------------------------- pdaf_base/src/dummympi/mpif.h | 20 --- pdaf_user/dummympi/mpif.h | 20 --- pdaf_user/nullmpi.F90 | 275 ------------------------------- 4 files changed, 609 deletions(-) delete mode 100644 pdaf_base/nullmpi/nullmpi.F90 delete mode 100644 pdaf_base/src/dummympi/mpif.h delete mode 100644 pdaf_user/dummympi/mpif.h delete mode 100644 pdaf_user/nullmpi.F90 diff --git a/pdaf_base/nullmpi/nullmpi.F90 b/pdaf_base/nullmpi/nullmpi.F90 deleted file mode 100644 index 10102d5..0000000 --- a/pdaf_base/nullmpi/nullmpi.F90 +++ /dev/null @@ -1,294 +0,0 @@ -!$Id: nullmpi.F90 1565 2015-02-28 17:04:41Z lnerger $ -!BOP -! -! !ROUTINE: mpi_init() --- Pseudo-implementation of MPI_init -! -! !INTERFACE: -SUBROUTINE mpi_init(i) - -! !DESCRIPTION: -! This routine simulates MPI functionality for -! a program running on a single processor. Its -! purpose is to avoid the need of a real MPI -! library when running serial jobs. -! -! !REVISION HISTORY: -! 2004-10 - Lars Nerger - Initial code -! Later revisions - see svn log -!EOP - - IMPLICIT NONE - - INTEGER :: i - - i = 0 - -END SUBROUTINE mpi_init - -! ------------------------------------------------------------------------------ -SUBROUTINE mpi_finalize(i) - - IMPLICIT NONE - - INTEGER :: i - - i=0 - -END SUBROUTINE mpi_finalize - -! ------------------------------------------------------------------------------ -SUBROUTINE mpi_abort(i,j,k) - - IMPLICIT NONE - - INTEGER :: i, j, k - - k=0 - STOP - -END SUBROUTINE mpi_abort - -! ------------------------------------------------------------------------------ -SUBROUTINE MPI_Comm_Size(comm, npes_world, i) - - IMPLICIT NONE - - INTEGER :: comm - INTEGER :: npes_world - INTEGER :: i - - npes_world = 1 - i = 0 - -END SUBROUTINE MPI_Comm_Size - -! ------------------------------------------------------------------------------ -SUBROUTINE MPI_Comm_Rank(comm, mype_world, i) - - IMPLICIT NONE - - INTEGER :: comm - INTEGER :: mype_world - INTEGER :: i - - mype_world = 0 - i = 0 - -END SUBROUTINE MPI_Comm_Rank - -! ------------------------------------------------------------------------------ -SUBROUTINE MPI_Comm_split(comm_a, my_comm, mype_a, comm_b, mpierr) - - IMPLICIT NONE - - INTEGER :: comm_a - INTEGER :: my_comm - INTEGER :: mype_a - INTEGER :: comm_b - INTEGER :: MPIerr - - comm_b = 1 - my_comm = 1 - mype_a = 0 - mpierr = 0 - -END SUBROUTINE MPI_Comm_split - -! ------------------------------------------------------------------------------ -SUBROUTINE MPI_Barrier(comm, mpierr) - - IMPLICIT NONE - - INTEGER :: comm - INTEGER :: mpierr - - mpierr = 0 - -END SUBROUTINE MPI_Barrier - -! ------------------------------------------------------------------------------ -SUBROUTINE MPI_Send(field, dim, datatype, pe_source, pe_target, & - comm, mpierr) - - IMPLICIT NONE - - INTEGER :: dim - INTEGER :: field(dim) - INTEGER :: datatype - INTEGER :: pe_source - INTEGER :: pe_target - INTEGER :: comm - INTEGER :: mpierr - - mpierr = 0 - -END SUBROUTINE MPI_Send - -! ------------------------------------------------------------------------------ -SUBROUTINE MPI_Isend(field, dim, datatype, pe_source, pe_target, & - comm, reqs, mpierr) - - IMPLICIT NONE - - INTEGER :: dim - INTEGER :: field(dim) - INTEGER :: datatype - INTEGER :: pe_source - INTEGER :: pe_target - INTEGER :: comm - INTEGER :: reqs(dim) - INTEGER :: mpierr - - mpierr = 0 - -END SUBROUTINE MPI_Isend - -! ------------------------------------------------------------------------------ -SUBROUTINE MPI_Recv(field, dim, datatype, pe_source, pe_target, & - comm, flag, mpierr) - - IMPLICIT NONE - - INTEGER :: dim - INTEGER :: field(dim) - INTEGER :: datatype - INTEGER :: pe_source - INTEGER :: pe_target - INTEGER :: comm - INTEGER :: flag - INTEGER :: mpierr - - mpierr = 0 - -END SUBROUTINE MPI_Recv - -! ------------------------------------------------------------------------------ -SUBROUTINE MPI_IRecv(field, dim, datatype, pe_source, pe_target, & - comm, reqs, mpierr) - - IMPLICIT NONE - - INTEGER :: dim - INTEGER :: field(dim) - INTEGER :: datatype - INTEGER :: pe_source - INTEGER :: pe_target - INTEGER :: comm - INTEGER :: reqs(dim) - INTEGER :: mpierr - - mpierr = 0 - -END SUBROUTINE MPI_IRecv - -! ------------------------------------------------------------------------------ -SUBROUTINE MPI_BCast(field, dim, datatype, pe_source, comm, mpierr) - - IMPLICIT NONE - - INTEGER :: dim - INTEGER :: field(dim) - INTEGER :: datatype - INTEGER :: pe_source - INTEGER :: comm - INTEGER :: mpierr - - mpierr = 0 - -END SUBROUTINE MPI_BCast - -! ------------------------------------------------------------------------------ -SUBROUTINE MPI_Allreduce(field_in, field_out, dim, fieldtype, operation, & - comm, mpierr) - - IMPLICIT NONE - - INTEGER :: dim - REAL :: field_in(dim) - REAL :: field_out(dim) - INTEGER :: fieldtype - INTEGER :: operation - INTEGER :: comm - INTEGER :: mpierr - - field_out = field_in - mpierr = 0 - -END SUBROUTINE MPI_Allreduce - -! ------------------------------------------------------------------------------ -SUBROUTINE MPI_Reduce(field_in, field_out, dim, fieldtype, operation, & - pe_root, comm, mpierr) - - IMPLICIT NONE - - INTEGER :: dim - REAL :: field_in(dim) - REAL :: field_out(dim) - INTEGER :: fieldtype - INTEGER :: operation - INTEGER :: pe_root - INTEGER :: comm - INTEGER :: mpierr - - field_out = field_in - mpierr = 0 - -END SUBROUTINE MPI_REDUCE - -! ------------------------------------------------------------------------------ -SUBROUTINE MPI_Allgather(field_in, dim_in, type_in, field_out, dim_out, & - type_out, comm, mpierr) - - IMPLICIT NONE - - INTEGER :: dim_in - REAL :: field_in(dim_in) - INTEGER :: type_in - INTEGER :: dim_out - REAL :: field_out(dim_out) - INTEGER :: dis - INTEGER :: type_out - INTEGER :: comm - INTEGER :: mpierr - - field_out = field_in - mpierr = 0 - -END SUBROUTINE MPI_ALLGATHER - -! ------------------------------------------------------------------------------ -SUBROUTINE MPI_AllGatherV(field_in, dim_in, type_in, field_out, dim_out, & - dis, type_out, comm, mpierr) - - IMPLICIT NONE - - INTEGER :: dim_in - REAL :: field_in(dim_in) - INTEGER :: type_in - INTEGER :: dim_out - REAL :: field_out(dim_out) - INTEGER :: dis - INTEGER :: type_out - INTEGER :: comm - INTEGER :: mpierr - - field_out = field_in - mpierr = 0 - -END SUBROUTINE MPI_AllGatherV - - -! ------------------------------------------------------------------------------ -SUBROUTINE MPI_Waitall(nreqs, reqs, stats, mpierr) - - IMPLICIT NONE - - INTEGER :: nreqs - INTEGER :: reqs(nreqs) - INTEGER :: stats(nreqs) - INTEGER :: mpierr - - mpierr = 0 - -END SUBROUTINE MPI_Waitall diff --git a/pdaf_base/src/dummympi/mpif.h b/pdaf_base/src/dummympi/mpif.h deleted file mode 100644 index 5505116..0000000 --- a/pdaf_base/src/dummympi/mpif.h +++ /dev/null @@ -1,20 +0,0 @@ -! This is a strongly reduced header file for those -! MPI variables used in PDAF MPI calls. This is only -! intended for compilation without a real MPI library. - - INTEGER MPI_STATUS_SIZE - PARAMETER (MPI_STATUS_SIZE=4) - - INTEGER MPI_INTEGER, MPI_REAL, MPI_DOUBLE_PRECISION, MPI_REAL8 - PARAMETER (MPI_REAL=26,MPI_DOUBLE_PRECISION=27,MPI_INTEGER=28,MPI_REAL8=27) - - INTEGER MPI_LOGICAL, MPI_UNDEFINED - PARAMETER (MPI_LOGICAL=29,MPI_UNDEFINED=30) - - INTEGER MPI_COMM_WORLD - PARAMETER (MPI_COMM_WORLD=91) - - INTEGER MPI_COMM_NULL - PARAMETER (MPI_COMM_NULL=92) - - INTEGER MPI_SUM, MPI_MAX, MPI_MIN diff --git a/pdaf_user/dummympi/mpif.h b/pdaf_user/dummympi/mpif.h deleted file mode 100644 index 0c74a3d..0000000 --- a/pdaf_user/dummympi/mpif.h +++ /dev/null @@ -1,20 +0,0 @@ -! This is a strongly reduced header file for those -! MPI variables used in PDAF MPI calls. This is only -! intended for compilation without a real MPI library. - - INTEGER MPI_STATUS_SIZE - PARAMETER (MPI_STATUS_SIZE=4) - - INTEGER MPI_INTEGER, MPI_REAL, MPI_DOUBLE_PRECISION, MPI_REAL8 - PARAMETER (MPI_REAL=26,MPI_DOUBLE_PRECISION=27,MPI_INTEGER=28,MPI_REAL8=27) - - INTEGER MPI_LOGICAL, MPI_UNDEFINED - PARAMETER (MPI_LOGICAL=29,MPI_UNDEFINED=30) - - INTEGER MPI_COMM_WORLD - PARAMETER (MPI_COMM_WORLD=91) - - INTEGER MPI_COMM_NULL - PARAMETER (MPI_COMM_NULL=92) - - INTEGER MPI_SUM, MPI_MAX diff --git a/pdaf_user/nullmpi.F90 b/pdaf_user/nullmpi.F90 deleted file mode 100644 index fbe5e33..0000000 --- a/pdaf_user/nullmpi.F90 +++ /dev/null @@ -1,275 +0,0 @@ -!$Id: nullmpi.F90 1552 2015-02-10 16:29:42Z lnerger $ -!BOP -! -! !ROUTINE: mpi_init() --- Pseudo-implementation of MPI_init -! -! !INTERFACE: -SUBROUTINE mpi_init(i) - -! !DESCRIPTION: -! This routine simulates MPI functionality for -! a program running on a single processor. Its -! purpose is to avoid the need of a real MPI -! library when running serial jobs. -! -! !REVISION HISTORY: -! 2004-10 - Lars Nerger - Initial code -! Later revisions - see svn log -!EOP - - IMPLICIT NONE - - INTEGER :: i - - i = 0 - -END SUBROUTINE mpi_init - -! ------------------------------------------------------------------------------ -SUBROUTINE mpi_finalize(i) - - IMPLICIT NONE - - INTEGER :: i - - i=0 - -END SUBROUTINE mpi_finalize - -! ------------------------------------------------------------------------------ -SUBROUTINE mpi_abort(i,j,k) - - IMPLICIT NONE - - INTEGER :: i, j, k - - k=0 - STOP - -END SUBROUTINE mpi_abort - -! ------------------------------------------------------------------------------ -SUBROUTINE MPI_Comm_Size(comm, npes_world, i) - - IMPLICIT NONE - - INTEGER :: comm - INTEGER :: npes_world - INTEGER :: i - - npes_world = 1 - i = 0 - -END SUBROUTINE MPI_Comm_Size - -! ------------------------------------------------------------------------------ -SUBROUTINE MPI_Comm_Rank(comm, mype_world, i) - - IMPLICIT NONE - - INTEGER :: comm - INTEGER :: mype_world - INTEGER :: i - - mype_world = 0 - i = 0 - -END SUBROUTINE MPI_Comm_Rank - -! ------------------------------------------------------------------------------ -SUBROUTINE MPI_Comm_split(comm_a, my_comm, mype_a, comm_b, mpierr) - - IMPLICIT NONE - - INTEGER :: comm_a - INTEGER :: my_comm - INTEGER :: mype_a - INTEGER :: comm_b - INTEGER :: MPIerr - - comm_b = 1 - my_comm = 1 - mype_a = 0 - mpierr = 0 - -END SUBROUTINE MPI_Comm_split - -! ------------------------------------------------------------------------------ -SUBROUTINE MPI_Barrier(comm, mpierr) - - IMPLICIT NONE - - INTEGER :: comm - INTEGER :: mpierr - - mpierr = 0 - -END SUBROUTINE MPI_Barrier - -! ------------------------------------------------------------------------------ -SUBROUTINE MPI_Send(field, dim, datatype, pe_source, pe_target, & - comm, mpierr) - - IMPLICIT NONE - - INTEGER :: dim - INTEGER :: field(dim) - INTEGER :: datatype - INTEGER :: pe_source - INTEGER :: pe_target - INTEGER :: comm - INTEGER :: mpierr - - mpierr = 0 - -END SUBROUTINE MPI_Send - -! ------------------------------------------------------------------------------ -SUBROUTINE MPI_Recv(field, dim, datatype, pe_source, pe_target, & - comm, flag, mpierr) - - IMPLICIT NONE - - INTEGER :: dim - INTEGER :: field(dim) - INTEGER :: datatype - INTEGER :: pe_source - INTEGER :: pe_target - INTEGER :: comm - INTEGER :: flag - INTEGER :: mpierr - - mpierr = 0 - -END SUBROUTINE MPI_Recv - -! ------------------------------------------------------------------------------ -SUBROUTINE MPI_Irecv(field, dim, datatype, pe_source, pe_target, & - comm, request, mpierr) - - IMPLICIT NONE - - INTEGER :: dim - INTEGER :: field(dim) - INTEGER :: datatype - INTEGER :: pe_source - INTEGER :: pe_target - INTEGER :: comm - INTEGER :: request - INTEGER :: mpierr - - mpierr = 0 - -END SUBROUTINE MPI_Irecv - -! ------------------------------------------------------------------------------ -SUBROUTINE MPI_BCast(field, dim, datatype, pe_source, comm, mpierr) - - IMPLICIT NONE - - INTEGER :: dim - INTEGER :: field(dim) - INTEGER :: datatype - INTEGER :: pe_source - INTEGER :: comm - INTEGER :: mpierr - - mpierr = 0 - -END SUBROUTINE MPI_BCast - -! ------------------------------------------------------------------------------ -SUBROUTINE MPI_Allreduce(field_in, field_out, dim, fieldtype, operation, & - comm, mpierr) - - IMPLICIT NONE - - INTEGER :: dim - REAL :: field_in(dim) - REAL :: field_out(dim) - INTEGER :: fieldtype - INTEGER :: operation - INTEGER :: comm - INTEGER :: mpierr - - field_out = field_in - mpierr = 0 - -END SUBROUTINE MPI_Allreduce - -! ------------------------------------------------------------------------------ -SUBROUTINE MPI_Reduce(field_in, field_out, dim, fieldtype, operation, & - pe_root, comm, mpierr) - - IMPLICIT NONE - - INTEGER :: dim - REAL :: field_in(dim) - REAL :: field_out(dim) - INTEGER :: fieldtype - INTEGER :: operation - INTEGER :: pe_root - INTEGER :: comm - INTEGER :: mpierr - - field_out = field_in - mpierr = 0 - -END SUBROUTINE MPI_REDUCE - -! ------------------------------------------------------------------------------ -SUBROUTINE MPI_Allgather(field_in, dim_in, type_in, field_out, dim_out, & - type_out, comm, mpierr) - - IMPLICIT NONE - - INTEGER :: dim_in - REAL :: field_in(dim_in) - INTEGER :: type_in - INTEGER :: dim_out - REAL :: field_out(dim_out) - INTEGER :: dis - INTEGER :: type_out - INTEGER :: comm - INTEGER :: mpierr - - field_out = field_in - mpierr = 0 - -END SUBROUTINE MPI_ALLGATHER - -! ------------------------------------------------------------------------------ -SUBROUTINE MPI_AllGatherV(field_in, dim_in, type_in, field_out, dim_out, & - dis, type_out, comm, mpierr) - - IMPLICIT NONE - - INTEGER :: dim_in - REAL :: field_in(dim_in) - INTEGER :: type_in - INTEGER :: dim_out - REAL :: field_out(dim_out) - INTEGER :: dis - INTEGER :: type_out - INTEGER :: comm - INTEGER :: mpierr - - field_out = field_in - mpierr = 0 - -END SUBROUTINE MPI_AllGatherV - -! ------------------------------------------------------------------------------ -SUBROUTINE MPI_Waitall(nrequests, requests, statuses, mpierr) - - IMPLICIT NONE - - INTEGER :: nrequests - INTEGER :: requests - INTEGER :: statuses - INTEGER :: mpierr - - mpierr = 0 - -END SUBROUTINE MPI_Waitall - From 3c94c48748ef4b69dbc609e248376115de01e145 Mon Sep 17 00:00:00 2001 From: LSchueler Date: Fri, 28 Jun 2019 13:59:42 +0200 Subject: [PATCH 5/7] Caught another potential deallocation of a deallocated array --- pdaf_base/src/PDAF-D_deallocate.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pdaf_base/src/PDAF-D_deallocate.F90 b/pdaf_base/src/PDAF-D_deallocate.F90 index c66f4bf..ad25b5e 100644 --- a/pdaf_base/src/PDAF-D_deallocate.F90 +++ b/pdaf_base/src/PDAF-D_deallocate.F90 @@ -66,7 +66,7 @@ SUBROUTINE PDAF_deallocate() DEALLOCATE(eofU) ! Allocate full ensemble on filter-PEs - DEALLOCATE(eofV) + if (allocated(eofv)) DEALLOCATE(eofV) ! Allocate array for past ensembles for smoothing on filter-PEs IF (dim_lag > 0) THEN From 814541eda334f2922850f95fdf0b655ad391e1c0 Mon Sep 17 00:00:00 2001 From: LSchueler Date: Fri, 28 Jun 2019 14:00:44 +0200 Subject: [PATCH 6/7] Fixed double precision settings for PDAF user code --- pdaf_user/CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pdaf_user/CMakeLists.txt b/pdaf_user/CMakeLists.txt index 7dffd7f..b3216ad 100644 --- a/pdaf_user/CMakeLists.txt +++ b/pdaf_user/CMakeLists.txt @@ -6,8 +6,9 @@ find_package(BLAS REQUIRED) add_library(pdaf ${PDAF_USER_SOURCES}) target_include_directories(pdaf PRIVATE dummympi) -target_link_libraries(pdaf PRIVATE PDAF_base) target_link_libraries(pdaf PRIVATE ${MPI_LIBRARIES} ${LAPACK_LIBRARIES} ${BLAS_LIBRARIES}) +target_link_libraries(pdaf PRIVATE PDAF_base) +target_compile_options(pdaf PRIVATE "-fdefault-real-8") if(APPLE AND BUILD_SHARED_LIBS) target_link_libraries(pdaf PUBLIC "-framework Accelerate") From 769d209b2816a5e492af2a6d334e31736f5809a5 Mon Sep 17 00:00:00 2001 From: LSchueler Date: Fri, 28 Jun 2019 14:00:59 +0200 Subject: [PATCH 7/7] Fixed MPI processes --- pdaf_user/init_pdaf.F90 | 1 + 1 file changed, 1 insertion(+) diff --git a/pdaf_user/init_pdaf.F90 b/pdaf_user/init_pdaf.F90 index ff9a13a..29ac719 100644 --- a/pdaf_user/init_pdaf.F90 +++ b/pdaf_user/init_pdaf.F90 @@ -161,6 +161,7 @@ SUBROUTINE init_pdaf(ens_no) !call init_pdaf_parse() dim_ens = ens_no + n_modeltasks = ens_no ! *** Initial Screen output *** ! *** This is optional ***