Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
flexpart
flexpart
Commits
505a96e3
Commit
505a96e3
authored
May 22, 2018
by
Ignacio Pisso
Browse files
Pull: Merge branch 'dev' of
https://git.nilu.no/flexpart/flexpart
into dev
parents
3d048456
20963b15
Changes
12
Hide whitespace changes
Inline
Side-by-side
src/FLEXPART.f90
View file @
505a96e3
...
@@ -51,10 +51,14 @@ program flexpart
...
@@ -51,10 +51,14 @@ program flexpart
use
par_mod
use
par_mod
use
com_mod
use
com_mod
use
conv_mod
use
conv_mod
use
netcdf_output_mod
,
only
:
writeheader_netcdf
use
random_mod
,
only
:
gasdev1
use
random_mod
,
only
:
gasdev1
use
class_gribfile
use
class_gribfile
#ifdef USE_NCF
use
netcdf_output_mod
,
only
:
writeheader_netcdf
#endif
implicit
none
implicit
none
integer
::
i
,
j
,
ix
,
jy
,
inest
integer
::
i
,
j
,
ix
,
jy
,
inest
...
@@ -351,6 +355,7 @@ program flexpart
...
@@ -351,6 +355,7 @@ program flexpart
! and open files that are to be kept open throughout the simulation
! and open files that are to be kept open throughout the simulation
!******************************************************************
!******************************************************************
#ifdef USE_NCF
if
(
lnetcdfout
.eq.
1
)
then
if
(
lnetcdfout
.eq.
1
)
then
call
writeheader_netcdf
(
lnest
=
.false.
)
call
writeheader_netcdf
(
lnest
=
.false.
)
else
else
...
@@ -364,6 +369,7 @@ program flexpart
...
@@ -364,6 +369,7 @@ program flexpart
call
writeheader_nest
call
writeheader_nest
endif
endif
endif
endif
#endif
if
(
verbosity
.gt.
0
)
then
if
(
verbosity
.gt.
0
)
then
print
*
,
'call writeheader'
print
*
,
'call writeheader'
...
...
src/FLEXPART_MPI.f90
View file @
505a96e3
...
@@ -52,10 +52,13 @@ program flexpart
...
@@ -52,10 +52,13 @@ program flexpart
use
com_mod
use
com_mod
use
conv_mod
use
conv_mod
use
mpi_mod
use
mpi_mod
use
netcdf_output_mod
,
only
:
writeheader_netcdf
use
random_mod
,
only
:
gasdev1
use
random_mod
,
only
:
gasdev1
use
class_gribfile
use
class_gribfile
#ifdef USE_NCF
use
netcdf_output_mod
,
only
:
writeheader_netcdf
#endif
implicit
none
implicit
none
integer
::
i
,
j
,
ix
,
jy
,
inest
integer
::
i
,
j
,
ix
,
jy
,
inest
...
@@ -63,7 +66,8 @@ program flexpart
...
@@ -63,7 +66,8 @@ program flexpart
character
(
len
=
256
)
::
inline_options
!pathfile, flexversion, arg2
character
(
len
=
256
)
::
inline_options
!pathfile, flexversion, arg2
integer
::
metdata_format
=
GRIBFILE_CENTRE_UNKNOWN
integer
::
metdata_format
=
GRIBFILE_CENTRE_UNKNOWN
integer
::
detectformat
integer
::
detectformat
integer
(
selected_int_kind
(
16
)),
dimension
(
maxspec
)
::
tot_b
=
0
,
&
&
tot_i
=
0
! Initialize mpi
! Initialize mpi
...
@@ -202,11 +206,11 @@ program flexpart
...
@@ -202,11 +206,11 @@ program flexpart
metdata_format
=
detectformat
()
metdata_format
=
detectformat
()
if
(
metdata_format
.eq.
GRIBFILE_CENTRE_ECMWF
)
then
if
(
metdata_format
.eq.
GRIBFILE_CENTRE_ECMWF
)
then
print
*
,
'ECMWF metdata detected'
if
(
lroot
)
print
*
,
'ECMWF metdata detected'
elseif
(
metdata_format
.eq.
GRIBFILE_CENTRE_NCEP
)
then
elseif
(
metdata_format
.eq.
GRIBFILE_CENTRE_NCEP
)
then
print
*
,
'NCEP metdata detected'
if
(
lroot
)
print
*
,
'NCEP metdata detected'
else
else
print
*
,
'Unknown metdata format'
if
(
lroot
)
print
*
,
'Unknown metdata format'
stop
stop
endif
endif
...
@@ -377,23 +381,24 @@ program flexpart
...
@@ -377,23 +381,24 @@ program flexpart
!******************************************************************
!******************************************************************
if
(
mp_measure_time
)
call
mpif_mtime
(
'iotime'
,
0
)
if
(
mp_measure_time
)
call
mpif_mtime
(
'iotime'
,
0
)
if
(
lroot
)
then
! MPI: this part root process only
if
(
lnetcdfout
.eq.
1
)
then
if
(
lroot
)
then
! MPI: this part root process only
call
writeheader_netcdf
(
lnest
=
.false.
)
#ifdef USE_NCF
else
if
(
lnetcdfout
.eq.
1
)
then
call
writeheader
call
writeheader_netcdf
(
lnest
=
.false.
)
end
if
else
call
writeheader
if
(
nested_output
.eq.
1
)
then
end
if
if
(
lnetcdfout
.eq.
1
)
then
call
writeheader_netcdf
(
lnest
=
.true.
)
if
(
nested_output
.eq.
1
)
then
else
if
(
lnetcdfout
.eq.
1
)
then
call
writeheader_nest
call
writeheader_netcdf
(
lnest
=
.true.
)
else
call
writeheader_nest
endif
endif
endif
endif
#
endif
!
if
(
verbosity
.gt.
0
)
then
if
(
verbosity
.gt.
0
)
then
print
*
,
'call writeheader'
print
*
,
'call writeheader'
endif
endif
...
@@ -401,7 +406,7 @@ program flexpart
...
@@ -401,7 +406,7 @@ program flexpart
call
writeheader
call
writeheader
! FLEXPART 9.2 ticket ?? write header in ASCII format
! FLEXPART 9.2 ticket ?? write header in ASCII format
call
writeheader_txt
call
writeheader_txt
!if (nested_output.eq.1) call writeheader_nest
if
(
nested_output
.eq.
1.
and
.
surf_only
.ne.
1
)
call
writeheader_nest
if
(
nested_output
.eq.
1.
and
.
surf_only
.ne.
1
)
call
writeheader_nest
if
(
nested_output
.eq.
1.
and
.
surf_only
.eq.
1
)
call
writeheader_nest_surf
if
(
nested_output
.eq.
1.
and
.
surf_only
.eq.
1
)
call
writeheader_nest_surf
if
(
nested_output
.ne.
1.
and
.
surf_only
.eq.
1
)
call
writeheader_surf
if
(
nested_output
.ne.
1.
and
.
surf_only
.eq.
1
)
call
writeheader_surf
...
@@ -409,8 +414,6 @@ program flexpart
...
@@ -409,8 +414,6 @@ program flexpart
if
(
mp_measure_time
)
call
mpif_mtime
(
'iotime'
,
0
)
if
(
mp_measure_time
)
call
mpif_mtime
(
'iotime'
,
0
)
!open(unitdates,file=path(2)(1:length(2))//'dates')
if
(
verbosity
.gt.
0
.and.
lroot
)
then
if
(
verbosity
.gt.
0
.and.
lroot
)
then
print
*
,
'call openreceptors'
print
*
,
'call openreceptors'
endif
endif
...
@@ -480,28 +483,24 @@ program flexpart
...
@@ -480,28 +483,24 @@ program flexpart
! NIK 16.02.2005
! NIK 16.02.2005
if
(
lroot
)
then
if
(
mp_partgroup_pid
.ge.
0
)
then
! Skip for readwind process
call
MPI_Reduce
(
MPI_IN_PLACE
,
tot_blc_count
,
nspec
,
MPI_INTEGER8
,
MPI_SUM
,
id_root
,
&
call
MPI_Reduce
(
tot_blc_count
,
tot_b
,
nspec
,
MPI_INTEGER8
,
MPI_SUM
,
id_root
,
&
&
mp_comm_used
,
mp_ierr
)
&
mp_comm_used
,
mp_ierr
)
call
MPI_Reduce
(
MPI_IN_PLACE
,
tot_inc_count
,
nspec
,
MPI_INTEGER8
,
MPI_SUM
,
id_root
,
&
call
MPI_Reduce
(
tot_inc_count
,
tot_i
,
nspec
,
MPI_INTEGER8
,
MPI_SUM
,
id_root
,
&
&
mp_comm_used
,
mp_ierr
)
&
mp_comm_used
,
mp_ierr
)
else
if
(
mp_partgroup_pid
.ge.
0
)
then
! Skip for readwind process
call
MPI_Reduce
(
tot_blc_count
,
0
,
nspec
,
MPI_INTEGER8
,
MPI_SUM
,
id_root
,
&
&
mp_comm_used
,
mp_ierr
)
call
MPI_Reduce
(
tot_inc_count
,
0
,
nspec
,
MPI_INTEGER8
,
MPI_SUM
,
id_root
,
&
&
mp_comm_used
,
mp_ierr
)
end
if
end
if
end
if
if
(
lroot
)
then
if
(
lroot
)
then
do
i
=
1
,
nspec
do
i
=
1
,
nspec
write
(
*
,
*
)
'**********************************************'
write
(
*
,
*
)
'**********************************************'
write
(
*
,
*
)
'Scavenging statistics for species '
,
species
(
i
),
':'
write
(
*
,
*
)
'Scavenging statistics for species '
,
species
(
i
),
':'
write
(
*
,
*
)
'Total number of occurences of below-cloud scavenging'
,
&
write
(
*
,
*
)
'Total number of occurences of below-cloud scavenging'
,
&
&
tot_blc_count
(
i
)
&
tot_b
(
i
)
! & tot_blc_count(i)
write
(
*
,
*
)
'Total number of occurences of in-cloud scavenging'
,
&
write
(
*
,
*
)
'Total number of occurences of in-cloud scavenging'
,
&
&
tot_inc_count
(
i
)
&
tot_i
(
i
)
! & tot_inc_count(i)
write
(
*
,
*
)
'**********************************************'
write
(
*
,
*
)
'**********************************************'
end
do
end
do
...
...
src/concoutput.f90
View file @
505a96e3
...
@@ -139,6 +139,8 @@ subroutine concoutput(itime,outnum,gridtotalunc,wetgridtotalunc, &
...
@@ -139,6 +139,8 @@ subroutine concoutput(itime,outnum,gridtotalunc,wetgridtotalunc, &
write
(
unitdates
,
'(a)'
)
adate
//
atime
write
(
unitdates
,
'(a)'
)
adate
//
atime
close
(
unitdates
)
close
(
unitdates
)
! Overwrite existing dates file on first call, later append to it
! This fixes a bug where the dates file kept growing across multiple runs
IF
(
init
)
THEN
IF
(
init
)
THEN
file_stat
=
'OLD'
file_stat
=
'OLD'
init
=
.false.
init
=
.false.
...
@@ -312,7 +314,7 @@ subroutine concoutput(itime,outnum,gridtotalunc,wetgridtotalunc, &
...
@@ -312,7 +314,7 @@ subroutine concoutput(itime,outnum,gridtotalunc,wetgridtotalunc, &
drygridsigma
(
ix
,
jy
)
=
&
drygridsigma
(
ix
,
jy
)
=
&
drygridsigma
(
ix
,
jy
)
*
&
drygridsigma
(
ix
,
jy
)
*
&
sqrt
(
real
(
nclassunc
))
sqrt
(
real
(
nclassunc
))
125
drygridsigmatotal
=
drygridsigmatotal
+
&
drygridsigmatotal
=
drygridsigmatotal
+
&
drygridsigma
(
ix
,
jy
)
drygridsigma
(
ix
,
jy
)
endif
endif
...
...
src/concoutput_mpi.f90
View file @
505a96e3
...
@@ -103,7 +103,7 @@ subroutine concoutput(itime,outnum,gridtotalunc,wetgridtotalunc, &
...
@@ -103,7 +103,7 @@ subroutine concoutput(itime,outnum,gridtotalunc,wetgridtotalunc, &
real
,
parameter
::
smallnum
=
tiny
(
0.0
)
! smallest number that can be handled
real
,
parameter
::
smallnum
=
tiny
(
0.0
)
! smallest number that can be handled
real
,
parameter
::
weightair
=
28.97
real
,
parameter
::
weightair
=
28.97
logical
::
sp_zer
logical
::
sp_zer
LOGICAL
,
save
::
init
=
.true.
logical
,
save
::
init
=
.true.
character
::
adate
*
8
,
atime
*
6
character
::
adate
*
8
,
atime
*
6
character
(
len
=
3
)
::
anspec
character
(
len
=
3
)
::
anspec
integer
::
mind
integer
::
mind
...
@@ -112,7 +112,6 @@ subroutine concoutput(itime,outnum,gridtotalunc,wetgridtotalunc, &
...
@@ -112,7 +112,6 @@ subroutine concoutput(itime,outnum,gridtotalunc,wetgridtotalunc, &
logical
::
ldates_file
logical
::
ldates_file
integer
::
ierr
integer
::
ierr
character
(
LEN
=
100
)
::
dates_char
character
(
LEN
=
100
)
::
dates_char
! character :: dates_char
! Measure execution time
! Measure execution time
if
(
mp_measure_time
)
call
mpif_mtime
(
'rootonly'
,
0
)
if
(
mp_measure_time
)
call
mpif_mtime
(
'rootonly'
,
0
)
...
@@ -128,7 +127,7 @@ subroutine concoutput(itime,outnum,gridtotalunc,wetgridtotalunc, &
...
@@ -128,7 +127,7 @@ subroutine concoutput(itime,outnum,gridtotalunc,wetgridtotalunc, &
! Overwrite existing dates file on first call, later append to it
! Overwrite existing dates file on first call, later append to it
! This fixes a bug where the dates file kept growing across multiple runs
! This fixes a bug where the dates file kept growing across multiple runs
! If 'dates' file exists, make a backup
! If 'dates' file exists
in output directory
, make a backup
inquire
(
file
=
path
(
2
)(
1
:
length
(
2
))//
'dates'
,
exist
=
ldates_file
)
inquire
(
file
=
path
(
2
)(
1
:
length
(
2
))//
'dates'
,
exist
=
ldates_file
)
if
(
ldates_file
.and.
init
)
then
if
(
ldates_file
.and.
init
)
then
open
(
unit
=
unitdates
,
file
=
path
(
2
)(
1
:
length
(
2
))//
'dates'
,
form
=
'formatted'
,
&
open
(
unit
=
unitdates
,
file
=
path
(
2
)(
1
:
length
(
2
))//
'dates'
,
form
=
'formatted'
,
&
...
@@ -257,23 +256,34 @@ subroutine concoutput(itime,outnum,gridtotalunc,wetgridtotalunc, &
...
@@ -257,23 +256,34 @@ subroutine concoutput(itime,outnum,gridtotalunc,wetgridtotalunc, &
do
ks
=
1
,
nspec
do
ks
=
1
,
nspec
write
(
anspec
,
'(i3.3)'
)
ks
write
(
anspec
,
'(i3.3)'
)
ks
if
((
iout
.eq.
1
)
.or.
(
iout
.eq.
3
)
.or.
(
iout
.eq.
5
))
then
if
(
ldirect
.eq.
1
)
then
open
(
unitoutgrid
,
file
=
path
(
2
)(
1
:
length
(
2
))//
'grid_conc_'
//
adate
//
&
atime
//
'_'
//
anspec
,
form
=
'unformatted'
)
else
open
(
unitoutgrid
,
file
=
path
(
2
)(
1
:
length
(
2
))//
'grid_time_'
//
adate
//
&
atime
//
'_'
//
anspec
,
form
=
'unformatted'
)
endif
write
(
unitoutgrid
)
itime
endif
if
((
iout
.eq.
2
)
.or.
(
iout
.eq.
3
))
then
! mixing ratio
if
(
DRYBKDEP
.or.
WETBKDEP
)
then
!scavdep output
open
(
unitoutgridppt
,
file
=
path
(
2
)(
1
:
length
(
2
))//
'grid_pptv_'
//
adate
//
&
if
(
DRYBKDEP
)
&
open
(
unitoutgrid
,
file
=
path
(
2
)(
1
:
length
(
2
))//
'grid_drydep_'
//
adate
//
&
atime
//
'_'
//
anspec
,
form
=
'unformatted'
)
if
(
WETBKDEP
)
&
open
(
unitoutgrid
,
file
=
path
(
2
)(
1
:
length
(
2
))//
'grid_wetdep_'
//
adate
//
&
atime
//
'_'
//
anspec
,
form
=
'unformatted'
)
atime
//
'_'
//
anspec
,
form
=
'unformatted'
)
write
(
unitoutgrid
)
itime
else
if
((
iout
.eq.
1
)
.or.
(
iout
.eq.
3
)
.or.
(
iout
.eq.
5
))
then
if
(
ldirect
.eq.
1
)
then
open
(
unitoutgrid
,
file
=
path
(
2
)(
1
:
length
(
2
))//
'grid_conc_'
//
adate
//
&
atime
//
'_'
//
anspec
,
form
=
'unformatted'
)
else
open
(
unitoutgrid
,
file
=
path
(
2
)(
1
:
length
(
2
))//
'grid_time_'
//
adate
//
&
atime
//
'_'
//
anspec
,
form
=
'unformatted'
)
endif
write
(
unitoutgrid
)
itime
endif
write
(
unitoutgridppt
)
itime
if
((
iout
.eq.
2
)
.or.
(
iout
.eq.
3
))
then
! mixing ratio
endif
open
(
unitoutgridppt
,
file
=
path
(
2
)(
1
:
length
(
2
))//
'grid_pptv_'
//
adate
//
&
atime
//
'_'
//
anspec
,
form
=
'unformatted'
)
write
(
unitoutgridppt
)
itime
endif
endif
! if deposition output
do
kp
=
1
,
maxpointspec_act
do
kp
=
1
,
maxpointspec_act
do
nage
=
1
,
nageclass
do
nage
=
1
,
nageclass
...
@@ -353,7 +363,7 @@ subroutine concoutput(itime,outnum,gridtotalunc,wetgridtotalunc, &
...
@@ -353,7 +363,7 @@ subroutine concoutput(itime,outnum,gridtotalunc,wetgridtotalunc, &
! Concentration output
! Concentration output
!*********************
!*********************
if
((
iout
.eq.
1
)
.or.
(
iout
.eq.
3
)
.or.
(
iout
.eq.
5
))
then
if
((
iout
.eq.
1
)
.or.
(
iout
.eq.
3
)
.or.
(
iout
.eq.
5
)
.or.
(
iout
.eq.
6
)
)
then
! Wet deposition
! Wet deposition
sp_count_i
=
0
sp_count_i
=
0
...
@@ -448,10 +458,18 @@ subroutine concoutput(itime,outnum,gridtotalunc,wetgridtotalunc, &
...
@@ -448,10 +458,18 @@ subroutine concoutput(itime,outnum,gridtotalunc,wetgridtotalunc, &
sp_fact
=
sp_fact
*
(
-1.
)
sp_fact
=
sp_fact
*
(
-1.
)
endif
endif
sp_count_r
=
sp_count_r
+1
sp_count_r
=
sp_count_r
+1
if
(
lparticlecountoutput
)
then
sparse_dump_r
(
sp_count_r
)
=
&
sp_fact
*
&
grid
(
ix
,
jy
,
kz
)
else
sparse_dump_r
(
sp_count_r
)
=
&
sparse_dump_r
(
sp_count_r
)
=
&
sp_fact
*
&
sp_fact
*
&
grid
(
ix
,
jy
,
kz
)
*
&
grid
(
ix
,
jy
,
kz
)
*
&
factor3d
(
ix
,
jy
,
kz
)/
tot_mu
(
ks
,
kp
)
factor3d
(
ix
,
jy
,
kz
)/
tot_mu
(
ks
,
kp
)
end
if
! if ((factor(ix,jy,kz)/tot_mu(ks,kp)).eq.0)
! if ((factor(ix,jy,kz)/tot_mu(ks,kp)).eq.0)
! + write (*,*) factor(ix,jy,kz),tot_mu(ks,kp),ks,kp
! + write (*,*) factor(ix,jy,kz),tot_mu(ks,kp),ks,kp
! sparse_dump_u(sp_count_r)=
! sparse_dump_u(sp_count_r)=
...
@@ -637,24 +655,8 @@ subroutine concoutput(itime,outnum,gridtotalunc,wetgridtotalunc, &
...
@@ -637,24 +655,8 @@ subroutine concoutput(itime,outnum,gridtotalunc,wetgridtotalunc, &
! Reinitialization of grid
! Reinitialization of grid
!*************************
!*************************
do
ks
=
1
,
nspec
creceptor
(:,:)
=
0.
do
kp
=
1
,
maxpointspec_act
gridunc
(:,:,:,:,:,:,:)
=
0.
do
i
=
1
,
numreceptor
creceptor
(
i
,
ks
)
=
0.
end
do
do
jy
=
0
,
numygrid
-1
do
ix
=
0
,
numxgrid
-1
do
l
=
1
,
nclassunc
do
nage
=
1
,
nageclass
do
kz
=
1
,
numzgrid
gridunc
(
ix
,
jy
,
kz
,
ks
,
kp
,
l
,
nage
)
=
0.
end
do
end
do
end
do
end
do
end
do
end
do
end
do
if
(
mp_measure_time
)
call
mpif_mtime
(
'rootonly'
,
1
)
if
(
mp_measure_time
)
call
mpif_mtime
(
'rootonly'
,
1
)
...
...
src/getfields_mpi.f90
View file @
505a96e3
...
@@ -232,6 +232,10 @@ subroutine getfields(itime,nstop,memstat,metdata_format)
...
@@ -232,6 +232,10 @@ subroutine getfields(itime,nstop,memstat,metdata_format)
end
do
end
do
40
indmin
=
indj
40
indmin
=
indj
if
(
WETBKDEP
.and.
(
lmpreader
.or.
(
.not.
lmp_use_reader
.and.
lroot
)))
then
call
writeprecip
(
itime
,
memind
(
1
))
endif
else
else
! No wind fields, which can be used, are currently in memory
! No wind fields, which can be used, are currently in memory
...
@@ -286,7 +290,10 @@ subroutine getfields(itime,nstop,memstat,metdata_format)
...
@@ -286,7 +290,10 @@ subroutine getfields(itime,nstop,memstat,metdata_format)
end
do
end
do
60
indmin
=
indj
60
indmin
=
indj
mind3
=
memstat
! if (WETBKDEP.and.lroot) then
if
(
WETBKDEP
.and.
(
lmpreader
.or.
(
.not.
lmp_use_reader
.and.
lroot
)))
then
call
writeprecip
(
itime
,
memind
(
1
))
endif
endif
endif
...
...
src/makefile
View file @
505a96e3
...
@@ -30,6 +30,10 @@ SHELL = /bin/bash
...
@@ -30,6 +30,10 @@ SHELL = /bin/bash
# Compile for debugging parallel FLEXPART
# Compile for debugging parallel FLEXPART
# make [-j] mpi-dbg
# make [-j] mpi-dbg
#
#
# NETCDF OUTPUT
# To add support for output in netCDF format, append `ncf=yes` to the
# `make` command
#
################################################################################
################################################################################
## PROGRAMS
## PROGRAMS
...
@@ -56,8 +60,7 @@ ifeq ($(gcc), 4.9)
...
@@ -56,8 +60,7 @@ ifeq ($(gcc), 4.9)
INCPATH1
=
${ROOT_DIR}
/gcc-4.9.1/include
INCPATH1
=
${ROOT_DIR}
/gcc-4.9.1/include
INCPATH2
=
${ROOT_DIR}
/include
INCPATH2
=
${ROOT_DIR}
/include
LIBPATH1
=
${ROOT_DIR}
/lib
LIBPATH1
=
${ROOT_DIR}
/lib
else
else
#ifeq ($(gcc), 5.4)
# Compiled libraries under user ~flexpart, gfortran v5.4
# Compiled libraries under user ~flexpart, gfortran v5.4
ROOT_DIR
=
/homevip/flexpart/
ROOT_DIR
=
/homevip/flexpart/
...
@@ -67,18 +70,18 @@ else #ifeq ($(gcc), 5.4)
...
@@ -67,18 +70,18 @@ else #ifeq ($(gcc), 5.4)
INCPATH1
=
${ROOT_DIR}
/gcc-5.4.0/include
INCPATH1
=
${ROOT_DIR}
/gcc-5.4.0/include
INCPATH2
=
/usr/include
INCPATH2
=
/usr/include
LIBPATH1
=
${ROOT_DIR}
/gcc-5.4.0/lib
LIBPATH1
=
${ROOT_DIR}
/gcc-5.4.0/lib
endif
#else
# Default: System libraries at NILU, gfortran v4.6
# F90 = /usr/bin/gfortran
# MPIF90 = /usr/bin/mpif90.openmpi
# INCPATH1 = /xnilu_wrk/projects/FLEXPART/flex_wrk/bin64/grib_api/include
### Enable netCDF output?
# INCPATH2 = /usr/include
ifeq
($(ncf), yes)
# LIBPATH1 = /xnilu_wrk/projects/FLEXPART/flex_wrk/bin64/grib_api/lib
NCOPT
=
-DUSE_NCF
-lnetcdff
else
NCOPT
=
-UUSE_NCF
endif
endif
# path to gributils used to detect meteodata format
# path to gributils used to detect meteodata format
VPATH
=
gributils/
VPATH
=
gributils/
...
@@ -88,11 +91,12 @@ O_LEV = 2 # [0,1,2,3,g,s,fast]
...
@@ -88,11 +91,12 @@ O_LEV = 2 # [0,1,2,3,g,s,fast]
O_LEV_DBG
=
g
# [0,g]
O_LEV_DBG
=
g
# [0,g]
## LIBRARIES
## LIBRARIES
LIBS
=
-lgrib_api_f90
-lgrib_api
-lm
-ljasper
-lnetcdff
# -fopenmp
#LIBS = -lgrib_api_f90 -lgrib_api -lm -ljasper -lnetcdff
LIBS
=
-lgrib_api_f90
-lgrib_api
-lm
-ljasper
$(NCOPT)
FFLAGS
=
-I
$(INCPATH1)
-I
$(INCPATH2)
-O
$(O_LEV)
-g
-cpp
-m64
-mcmodel
=
medium
-fconvert
=
little-endian
-frecord-marker
=
4
-fmessage-length
=
0
-flto
=
jobserver
-O
$(O_LEV)
$(FUSER)
#-Warray-bounds -fcheck=all # -march=native
FFLAGS
=
-I
$(INCPATH1)
-I
$(INCPATH2)
-O
$(O_LEV)
-g
-cpp
-m64
-mcmodel
=
medium
-fconvert
=
little-endian
-frecord-marker
=
4
-fmessage-length
=
0
-flto
=
jobserver
-O
$(O_LEV)
$(NCOPT)
$(FUSER)
#-Warray-bounds -fcheck=all # -march=native
DBGFLAGS
=
-I
$(INCPATH1)
-I
$(INCPATH2)
-O
$(O_LEV_DBG)
-g3
-ggdb3
-cpp
-m64
-mcmodel
=
medium
-fconvert
=
little-endian
-frecord-marker
=
4
-fmessage-length
=
0
-flto
=
jobserver
-O
$(O_LEV_DBG)
-fbacktrace
-Wall
-fdump-core
$(FUSER)
# -ffpe-trap=invalid,overflow,denormal,underflow,zero -Warray-bounds -fcheck=all
DBGFLAGS
=
-I
$(INCPATH1)
-I
$(INCPATH2)
-O
$(O_LEV_DBG)
-g3
-ggdb3
-cpp
-m64
-mcmodel
=
medium
-fconvert
=
little-endian
-frecord-marker
=
4
-fmessage-length
=
0
-flto
=
jobserver
-O
$(O_LEV_DBG)
$(NCOPT)
-fbacktrace
-Wall
-fdump-core
$(FUSER)
# -ffpe-trap=invalid,overflow,denormal,underflow,zero -Warray-bounds -fcheck=all
LDFLAGS
=
$(FFLAGS)
-L
$(LIBPATH1)
-Wl
,-rpath,
$(LIBPATH1)
$(LIBS)
#-L
$(LIBPATH2)
LDFLAGS
=
$(FFLAGS)
-L
$(LIBPATH1)
-Wl
,-rpath,
$(LIBPATH1)
$(LIBS)
#-L
$(LIBPATH2)
LDDEBUG
=
$(DBGFLAGS)
-L
$(LIBPATH1)
$(LIBS)
#-L
$(LIBPATH2)
LDDEBUG
=
$(DBGFLAGS)
-L
$(LIBPATH1)
$(LIBS)
#-L
$(LIBPATH2)
...
@@ -139,6 +143,8 @@ OBJECTS_MPI = releaseparticles_mpi.o partoutput_mpi.o \
...
@@ -139,6 +143,8 @@ OBJECTS_MPI = releaseparticles_mpi.o partoutput_mpi.o \
getfields_mpi.o
\
getfields_mpi.o
\
readwind_ecmwf_mpi.o
readwind_ecmwf_mpi.o
OBJECTS_NCF
=
netcdf_output_mod.o
OBJECTS
=
\
OBJECTS
=
\
advance.o initialize.o
\
advance.o initialize.o
\
writeheader.o writeheader_txt.o
\
writeheader.o writeheader_txt.o
\
...
@@ -195,7 +201,11 @@ ohreaction.o getvdep_nests.o \
...
@@ -195,7 +201,11 @@ ohreaction.o getvdep_nests.o \
initial_cond_calc.o initial_cond_output.o
\
initial_cond_calc.o initial_cond_output.o
\
dynamic_viscosity.o get_settling.o
\
dynamic_viscosity.o get_settling.o
\
initialize_cbl_vel.o re_initialize_particle.o
\
initialize_cbl_vel.o re_initialize_particle.o
\
cbl.o netcdf_output_mod.o
cbl.o
ifeq
($(ncf), yes)
OBJECTS
:=
$(OBJECTS)
$(OBJECTS_NCF)
endif
%.o
:
%.mod
%.o
:
%.mod
...
...
src/readOHfield.f90
View file @
505a96e3
...
@@ -21,25 +21,27 @@
...
@@ -21,25 +21,27 @@
subroutine
readOHfield
subroutine
readOHfield
!*****************************************************************************
!*****************************************************************************
! *
! *
! Reads the OH field into memory *
! Reads the OH field into memory *
! *
! *
! AUTHOR: R.L. Thompson, Nov 2014 *
! AUTHOR: R.L. Thompson, Nov 2014 *
! *
! *
!*****************************************************************************
! UPDATES: *
! *
! 03/2018 SEC: Converted original netCDF files to binary format *
! Variables: *
!*****************************************************************************
! *
! *
! path(numpath) contains the path names *
! Variables: *
! lonOH(nxOH) longitude of OH fields *
! *
! latOH(nyOH) latitude of OH fields *
! path(numpath) contains the path names *
! altOH(nzOH) altitude of OH fields *
! lonOH(nxOH) longitude of OH fields *
! etaOH(nzOH) eta-levels of OH fields *
! latOH(nyOH) latitude of OH fields *
! OH_field(nxOH,nyOH,nzOH,m) OH concentration (molecules/cm3) *
! altOH(nzOH) altitude of OH fields *
! *
! etaOH(nzOH) eta-levels of OH fields *
! *
! OH_field(nxOH,nyOH,nzOH,m) OH concentration (molecules/cm3) *
!*****************************************************************************
! *
! *
!*****************************************************************************