Changeset 61e07ba in flexpart.git


Ignore:
Timestamp:
Aug 11, 2017, 12:01:12 PM (7 years ago)
Author:
Espen Sollum ATMOS <eso@…>
Branches:
master, 10.4.1_pesei, GFS_025, bugfixes+enhancements, dev, release-10, release-10.4.1, scaling-bug, univie
Children:
6ecb30a
Parents:
b5127f9
Message:

Adding files from CTBTO project wo_17

Location:
src
Files:
9 added
2 edited

Legend:

Unmodified
Added
Removed
  • src/makefile

    r6985a98 r61e07ba  
    1212#       'make -j ecmwf gcc=4.9',
    1313#    also set environment variable LD_LIBRARY_PATH to point to compiler libraries
     14#
     15#    Makefile was modified to produce unified executable for both ECMWF and GFS meteo data formats
     16#    gributils were included to detect format of meteo data
     17#
     18#    Cpp directives USE_MPIINPLACE were added to three source files. The effect of these directives
     19#    are to enable the MPI_IN_PLACE option only if compiled with a -DUSE_MPIINPLACE directive.
     20#    Otherwise, a safer option (which requires the allocation of another array) is used by default.
     21#    In makefile added the -x f95-cpp-input flag for compiling of cpp directives.
    1422#
    1523#  USAGE
    16 #    Compile serial FLEXPART (ECMWF)
    17 #      make [-j] ecmwf
    18 #
    19 #    Compile parallel FLEXPART (ECMWF)
    20 #      make [-j] ecmwf-mpi
     24#    Compile serial FLEXPART
     25#      make [-j] serial
     26#
     27#    Compile parallel FLEXPART
     28#      make [-j] mpi
    2129#     
    22 #    Compile for debugging parallel FLEXPART (ECMWF)
    23 #      make [-j] ecmwf-mpi-dbg
    24 #
    25 #    Compile serial FLEXPART (GFS)
    26 #      make [-j] gfs
    27 #
    28 #    Compile parallel FLEXPART (GFS)
    29 #      make [-j] gfs-mpi
     30#    Compile for debugging parallel FLEXPART
     31#      make [-j] mpi-dbg
    3032#
    3133################################################################################
    3234
    3335## PROGRAMS
    34 FLEXPART-ECMWF-MPI      = FP_ecmwf_MPI
    35 FLEXPART-ECMWF-MPI-DBG  = DBG_FP_ecmwf_MPI
    36 FLEXPART-ECMWF          = FP_ecmwf_gfortran
    37 FLEXPART-GFS            = FP_gfs_gfortran
    38 FLEXPART-GFS-MPI        = FP_gfs_MPI
     36# Unified executable names
     37# The same executable is used for both ECMWF and GFS metdata
     38
     39# Parallel processing executable
     40FLEXPART-MPI = FLEXPART_MPI
     41
     42# Parallel processing executable with debugging info
     43FLEXPART-MPI-DBG = DBG_FLEXPART_MPI
     44
     45# Serial processing executable
     46FLEXPART-SERIAL = FLEXPART
     47
    3948
    4049ifeq ($(gcc), 4.9)
     
    5968        LIBPATH1 = /xnilu_wrk/flex_wrk/bin64/grib_api/lib
    6069endif
     70
     71
     72# path to gributils used to detect meteodata format
     73VPATH = gributils/
    6174
    6275
     
    8295xmass_mod.o             flux_mod.o \
    8396point_mod.o             outg_mod.o \
    84 mean_mod.o              random_mod.o
     97mean_mod.o              random_mod.o \
     98class_gribfile_mod.o
    8599
    86100MPI_MODOBJS = \
     
    99113        redist.o                \
    100114        concoutput_surf.o       concoutput_surf_nest.o  \
    101         getfields.o
     115        getfields.o \
     116        readwind_ecmwf.o
    102117
    103118## For MPI version
     
    112127        redist_mpi.o            \
    113128        concoutput_surf_mpi.o   concoutput_surf_nest_mpi.o      \
    114         getfields_mpi.o
    115 
    116 ### WINDFIELDS
    117 ## For ECMWF (serial) version:
    118 OBJECTS_ECMWF = \
    119         calcpar.o          readwind.o \
    120         richardson.o       verttransform.o \
    121         obukhov.o          gridcheck.o  \
    122         convmix.o          calcmatrix.o \
    123         ecmwf_mod.o
    124 
    125 
    126 ## For ECMWF MPI version:
    127 OBJECTS_ECMWF_MPI = \
    128         gridcheck.o        readwind_mpi.o \
    129         calcpar.o          \
    130         richardson.o       verttransform.o \
    131         obukhov.o          \
    132         convmix.o          calcmatrix.o \
    133         ecmwf_mod.o
    134 
    135 ## For GFS (serial) version:
    136 OBJECTS_GFS = \
    137         calcpar_gfs.o          readwind_gfs.o \
    138         richardson_gfs.o       verttransform_gfs.o \
    139         obukhov_gfs.o          gridcheck_gfs.o  \
    140         convmix_gfs.o          calcmatrix_gfs.o \
    141         gfs_mod.o
     129        getfields_mpi.o \
     130        readwind_ecmwf_mpi.o
    142131
    143132OBJECTS = \
     
    201190%.o: %.mod
    202191
    203 ecmwf: $(FLEXPART-ECMWF)
    204 ecmwf: FC := $(F90)
    205 
    206 ecmwf-mpi: $(FLEXPART-ECMWF-MPI)
    207 ecmwf-mpi: FC := $(MPIF90)
    208 
    209 ecmwf-mpi-dbg: $(FLEXPART-ECMWF-MPI-DBG)
    210 ecmwf-mpi-dbg: FFLAGS := $(DBGFLAGS)
    211 ecmwf-mpi-dbg: LDFLAGS:= $(LDDEBUG)
    212 ecmwf-mpi-dbg: FC := $(MPIF90)
    213 
    214 gfs: $(FLEXPART-GFS)
    215 gfs: FC := $(F90)
    216 
    217 gfs-mpi: $(FLEXPART-GFS-MPI)
    218 gfs-mpi: FC := $(MPIF90)
    219 
    220 #all: $(FLEXPART-ECMWF)
    221 #all: $(FLEXPART-ECMWF-MPI)
    222 
    223 ## This allows for switching between ECMWF/GFS without editing source code.
    224 wind_mod = ecmwf_mod.o # default wind
    225 # ifeq ($(MAKECMDGOALS),ecmwf)
    226 # wind_mod = ecmwf_mod.o
    227 # endif
    228 # ifeq ($(MAKECMDGOALS),ecmwf-mpi)
    229 # wind_mod = ecmwf_mod.o
    230 # endif
    231 # ifeq ($(MAKECMDGOALS),ecmwf-mpi-dbg)
    232 # wind_mod = ecmwf_mod.o
    233 # endif
    234 
    235 ifeq ($(MAKECMDGOALS),gfs)
    236 wind_mod = gfs_mod.o
    237 endif
    238 ifeq ($(MAKECMDGOALS),gfs-mpi)
    239 wind_mod = gfs_mod.o
    240 endif
    241 
    242 $(FLEXPART-ECMWF): $(MODOBJS) $(OBJECTS) $(OBJECTS_SERIAL) $(OBJECTS_ECMWF)
    243         +$(FC) -o $@ $(MODOBJS) $(OBJECTS) $(OBJECTS_SERIAL) $(OBJECTS_ECMWF) $(LDFLAGS)
    244 
    245 $(FLEXPART-ECMWF-MPI): $(MODOBJS) $(MPI_MODOBJS) $(OBJECTS) $(OBJECTS_MPI) $(OBJECTS_ECMWF_MPI)
     192# serial executable
     193serial: $(FLEXPART-SERIAL)
     194serial: FC := $(F90)
     195
     196# parallel processing executable
     197mpi: $(FLEXPART-MPI)
     198mpi: FC := $(MPIF90)
     199
     200# parallel processing with debugging info
     201mpi-dbg: $(FLEXPART-MPI-DBG)
     202mpi-dbg: FFLAGS := $(DBGFLAGS)
     203mpi-dbg: LDFLAGS:= $(LDDEBUG)
     204mpi-dbg: FC := $(MPIF90)
     205
     206$(FLEXPART-SERIAL): $(MODOBJS) $(OBJECTS) $(OBJECTS_SERIAL)
     207        +$(FC) -o $@ $(MODOBJS) $(OBJECTS) $(OBJECTS_SERIAL) $(LDFLAGS)
     208
     209$(FLEXPART-MPI): $(MODOBJS) $(MPI_MODOBJS) $(OBJECTS) $(OBJECTS_MPI)
    246210        +$(FC) -o $@ $(MODOBJS) $(MPI_MODOBJS) $(OBJECTS) $(OBJECTS_MPI) \
    247         $(OBJECTS_ECMWF_MPI) $(LDFLAGS)
    248 #       +$(FC) -o $@ *.o $(LDFLAGS)
    249 
    250 $(FLEXPART-ECMWF-MPI-DBG): $(MODOBJS) $(MPI_MODOBJS) $(OBJECTS) $(OBJECTS_MPI) \
    251         $(OBJECTS_ECMWF_MPI)
     211        $(LDFLAGS)
     212
     213$(FLEXPART-MPI-DBG): $(MODOBJS) $(MPI_MODOBJS) $(OBJECTS) $(OBJECTS_MPI)
    252214        +$(FC) -o $@ $(MODOBJS) $(MPI_MODOBJS) $(OBJECTS) $(OBJECTS_MPI) \
    253         $(OBJECTS_ECMWF_MPI) $(LDFLAGS)
    254 
    255 $(FLEXPART-GFS): $(MODOBJS) $(OBJECTS) $(OBJECTS_SERIAL) $(OBJECTS_GFS)
    256         +$(FC) -o $@ $(MODOBJS) $(OBJECTS) $(OBJECTS_SERIAL) $(OBJECTS_GFS) $(LDFLAGS)
    257 
    258 $(FLEXPART-GFS-MPI): $(MODOBJS) $(MPI_MODOBJS) $(OBJECTS) $(OBJECTS_MPI) $(OBJECTS_GFS)
    259         +$(FC) -o $@ $(MODOBJS) $(MPI_MODOBJS) $(OBJECTS) $(OBJECTS_MPI) \
    260         $(OBJECTS_GFS) $(LDFLAGS)
     215        $(LDFLAGS)
    261216
    262217%.o: %.f90
     
    267222
    268223cleanall:
    269         \rm -f *.o *.mod $(FLEXPART-ECMWF-MPI) $(FLEXPART-ECMWF-MPI-DBG) $(FLEXPART-ECMWF) \
    270         $(FLEXPART-GFS-MPI) $(FLEXPART-GFS)
     224        \rm -f *.o *.mod $(FLEXPART-MPI) $(FLEXPART-MPI-DBG) $(FLEXPART-SERIAL)
     225
    271226
    272227.SUFFIXES = $(SUFFIXES) .f90
     
    282237        random_mod.o
    283238calcfluxes.o: com_mod.o flux_mod.o outg_mod.o par_mod.o
    284 calcmatrix.o: com_mod.o conv_mod.o par_mod.o
    285 calcmatrix_gfs.o: com_mod.o conv_mod.o par_mod.o
    286 calcpar.o: com_mod.o par_mod.o
    287 calcpar_gfs.o: com_mod.o par_mod.o
     239calcmatrix.o: com_mod.o conv_mod.o par_mod.o class_gribfile_mod.o
     240calcpar.o: com_mod.o par_mod.o class_gribfile_mod.o
    288241calcpar_nests.o: com_mod.o par_mod.o
    289242calcpv.o: com_mod.o par_mod.o
     
    311264conv_mod.o: par_mod.o
    312265convect43c.o: conv_mod.o par_mod.o
    313 convmix.o: com_mod.o conv_mod.o flux_mod.o par_mod.o
    314 convmix_gfs.o: com_mod.o conv_mod.o par_mod.o
     266convmix.o: com_mod.o conv_mod.o flux_mod.o par_mod.o class_gribfile_mod.o
    315267coordtrafo.o: com_mod.o par_mod.o point_mod.o
     268detectformat.o: com_mod.o par_mod.o class_gribfile_mod.o
    316269distance.o: par_mod.o
    317270distance2.o: par_mod.o
     
    319272drydepokernel_nest.o: com_mod.o par_mod.o unc_mod.o
    320273erf.o: par_mod.o
    321 FLEXPART.o: com_mod.o conv_mod.o par_mod.o point_mod.o random_mod.o netcdf_output_mod.o
     274FLEXPART.o: com_mod.o conv_mod.o par_mod.o point_mod.o random_mod.o netcdf_output_mod.o class_gribfile_mod.o
    322275FLEXPART_MPI.o: com_mod.o conv_mod.o mpi_mod.o par_mod.o point_mod.o \
    323         random_mod.o netcdf_output_mod.o
     276        random_mod.o netcdf_output_mod.o class_gribfile_mod.o
    324277fluxoutput.o: com_mod.o flux_mod.o outg_mod.o par_mod.o
    325278get_settling.o: com_mod.o par_mod.o
    326 getfields.o: com_mod.o par_mod.o
    327 getfields_mpi.o: com_mod.o par_mod.o mpi_mod.o
     279getfields.o: com_mod.o par_mod.o class_gribfile_mod.o
     280getfields_mpi.o: com_mod.o par_mod.o mpi_mod.o class_gribfile_mod.o
    328281gethourlyOH.o: com_mod.o oh_mod.o par_mod.o
    329282getrb.o: par_mod.o
     
    331284getvdep.o: com_mod.o par_mod.o
    332285getvdep_nests.o: com_mod.o par_mod.o
    333 gridcheck.o: cmapf_mod.o com_mod.o conv_mod.o par_mod.o
     286gridcheck_ecmwf.o: cmapf_mod.o com_mod.o conv_mod.o par_mod.o
    334287gridcheck_emos.o: com_mod.o conv_mod.o par_mod.o
    335288gridcheck_fnl.o: cmapf_mod.o com_mod.o conv_mod.o par_mod.o
     
    374327outgrid_init.o: com_mod.o flux_mod.o oh_mod.o outg_mod.o par_mod.o unc_mod.o
    375328outgrid_init_nest.o: com_mod.o outg_mod.o par_mod.o unc_mod.o
    376 par_mod.o : $(wind_mod)
     329par_mod.o :
    377330part0.o: par_mod.o
    378331partdep.o: par_mod.o
     
    402355readreleases.o: com_mod.o par_mod.o point_mod.o xmass_mod.o
    403356readspecies.o: com_mod.o par_mod.o
    404 readwind.o: com_mod.o par_mod.o
     357readwind_ecmwf.o: com_mod.o par_mod.o
    405358readwind_emos.o: com_mod.o par_mod.o
    406359readwind_gfs.o: com_mod.o par_mod.o
    407360readwind_gfs_emos.o: com_mod.o par_mod.o
    408 readwind_mpi.o: com_mod.o mpi_mod.o par_mod.o
     361readwind_ecmwf_mpi.o: com_mod.o mpi_mod.o par_mod.o
    409362readwind_nests.o: com_mod.o par_mod.o
    410363readwind_nests_emos.o: com_mod.o par_mod.o
     
    415368releaseparticles_mpi.o: com_mod.o mpi_mod.o par_mod.o point_mod.o \
    416369        random_mod.o xmass_mod.o
    417 richardson.o: par_mod.o
    418 richardson_gfs.o: par_mod.o
     370richardson.o: par_mod.o class_gribfile_mod.o
    419371scalev.o: par_mod.o
    420372shift_field.o: par_mod.o
     
    425377        par_mod.o point_mod.o unc_mod.o xmass_mod.o netcdf_output_mod.o
    426378unc_mod.o: par_mod.o
    427 verttransform.o: cmapf_mod.o com_mod.o par_mod.o
     379verttransform_ecmwf.o: cmapf_mod.o com_mod.o par_mod.o
    428380verttransform_gfs.o: cmapf_mod.o com_mod.o par_mod.o
    429381verttransform_nests.o: com_mod.o par_mod.o
  • src/par_mod.f90

    r6985a98 r61e07ba  
    3737
    3838module par_mod
    39 
    40 !************************************************************************
    41 ! wind_mod: is gfs_mod.f90 for target gfs, ecmwf_mod.f90 for target ecmwf
    42 !************************************************************************
    43   use wind_mod
    4439
    4540  implicit none
     
    146141  !*********************************************
    147142 
    148   ! Moved to ecmwf_mod.f90 (for ECMWF) / gfs_mod.f90 (for GFS)
     143!  integer,parameter :: nxmax=361,nymax=181,nuvzmax=92,nwzmax=92,nzmax=92 !ECMWF new
     144  integer,parameter :: nxmax=361,nymax=181,nuvzmax=138,nwzmax=138,nzmax=138 !ECMWF new
     145
     146!  INTEGER,PARAMETER :: nxmax=361,nymax=181,nuvzmax=138,nwzmax=138,nzmax=138 !NCEP data
     147
     148!  !integer,parameter :: nxshift=359  ! for ECMWF
     149!  integer,parameter :: nxshift=0     ! for GFS
     150!  integer,parameter :: nxmax=15,nymax=15,nuvzmax=140,nwzmax=140,nzmax=140
     151  integer,parameter :: nxshift=359  ! for ECMWF
     152!  integer,parameter :: nxshift=0     ! for GFS
     153
     154  !*********************************************
     155  ! Maximum dimensions of the nested input grids
     156  !*********************************************
     157
     158  integer,parameter :: maxnests=0,nxmaxn=451,nymaxn=226
     159
     160  ! nxmax,nymax        maximum dimension of wind fields in x and y
     161  !                    direction, respectively
     162  ! nuvzmax,nwzmax     maximum dimension of (u,v) and (w) wind fields in z
     163  !                    direction (for fields on eta levels)
     164  ! nzmax              maximum dimension of wind fields in z direction
     165  !                    for the transformed Cartesian coordinates
     166  ! nxshift            for global grids (in x), the grid can be shifted by
     167  !                    nxshift grid points, in order to accomodate nested
     168  !                    grids, and output grids overlapping the domain "boundary"
     169  !                    nxshift must not be negative; "normal" setting would be 0
     170
    149171 
    150172  integer,parameter :: nconvlevmax = nuvzmax-1
Note: See TracChangeset for help on using the changeset viewer.
hosted by ZAMG