diff --git a/flexpart_code/fpmetbinary_mod.F90 b/flexpart_code/fpmetbinary_mod.F90 index 1d37c03303672aa833f88f2117dc834febe8d038..3b65810556ca579278d9e418b4407f2775558506 100644 --- a/flexpart_code/fpmetbinary_mod.F90 +++ b/flexpart_code/fpmetbinary_mod.F90 @@ -30,6 +30,7 @@ MODULE fpmetbinary_mod USE com_mod USE conv_mod + USE par_mod, ONLY : nxmax, nymax, nzmax, nuvzmax, nwzmax IMPLICIT NONE @@ -247,10 +248,21 @@ CONTAINS INTEGER, INTENT(IN) :: cm_index ! Index of last dimension in ! most com_mod variables. ! Should be 1 or 2 + + ! These are temporary variables, used in the LOAD option, for + ! comparing against the current values in FLEXPART of nxmax, nymax, ... + INTEGER :: temp_nxmax, temp_nymax, temp_nzmax, & +& temp_nuvzmax, temp_nwzmax + CHARACTER(LEN=128) :: errmesg if (op == 'DUMP') THEN + ! Write the compiled max dimensions from par_mod - these are + ! not meant to be reassigned during a LOAD, but used as "header" + ! information to provide the structure of arrays + WRITE (iounit) nxmax, nymax, nzmax, nuvzmax, nwzmax + ! Scalar values WRITE(iounit) nx, ny, nxmin1, nymin1, nxfield WRITE(iounit) nuvz, nwz, nz, nmixz, nlev_ec @@ -389,6 +401,33 @@ CONTAINS ELSE IF (op == 'LOAD') THEN + ! Read the compiled max dimensions that were dumped from par_mod + ! when creating the fp file, so that we can compare against + ! current FLEXPART dimensions - they need to be the same, or else + ! we abort. + READ (iounit) temp_nxmax, temp_nymax, temp_nzmax, & +& temp_nuvzmax, temp_nwzmax + + + IF ( (temp_nxmax == nxmax) .AND. (temp_nymax == nymax) .AND. & +& (temp_nzmax == nzmax) .AND. & +& (temp_nuvzmax == nuvzmax) .AND. & +& (temp_nwzmax == nwzmax) ) THEN + CONTINUE + ELSE + PRINT *, 'Incompatible dimensions between fp file and current FLEXPART!' + PRINT *, '' + PRINT *, ' FP file Compiled FP' + PRINT *, 'nxmax: ', temp_nxmax, ' ', nxmax + PRINT *, 'nymax: ', temp_nymax, ' ', nymax + PRINT *, 'nzmax: ', temp_nzmax, ' ', nzmax + PRINT *, 'nuvzmax: ', temp_nuvzmax, ' ', nuvzmax + PRINT *, 'nwzmax: ', temp_nwzmax, ' ', nwzmax + PRINT *, '' + STOP + END IF + + ! Scalar values READ(iounit) nx, ny, nxmin1, nymin1, nxfield READ(iounit) nuvz, nwz, nz, nmixz, nlev_ec diff --git a/flexpart_code/par_mod.F90 b/flexpart_code/par_mod.F90 index 5cb6bdf3d90da978b1397c3085f35ade7237c215..676e43acd51674c21c8b60bf445a9ddf83f23016 100644 --- a/flexpart_code/par_mod.F90 +++ b/flexpart_code/par_mod.F90 @@ -129,7 +129,7 @@ module par_mod !integer,parameter :: nxmax=361,nymax=181,nuvzmax=92,nwzmax=92,nzmax=92 !integer,parameter :: nxmax=361,nymax=181,nuvzmax=61,nwzmax=61,nzmax=61 - integer,parameter :: nxmax=721,nymax=361,nuvzmax=140,nwzmax=140,nzmax=140 + integer,parameter :: nxmax=721,nymax=361,nuvzmax=138,nwzmax=138,nzmax=138 !integer,parameter :: nxshift=359 ! for ECMWF integer,parameter :: nxshift=0 ! for GFS