Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

xmgredit5 and PGI compiler support #10

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Add support for PGI compiler
miaocb committed Mar 3, 2020

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
commit a541eb9d1ecd83b0d02e7a80a668074b1f5db9de
95 changes: 95 additions & 0 deletions mk/Make.defs.pgi
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
################################################################################
# Parallel SCHISM Makefile
#
# User makes environment settings for particular OS / PLATFORM / COMPILER / MPI
# below as well as setting flags having to do with included algorithms (e.g. sediment)
# and the compiler configuration (debug, timing).
#
# The environment settings are based on the following options.
#
# Compiler name:
# FCS: Serial compiler (for utilities)
# FCP: Parallel compiler
# FLD: Linker (in general same as parallel compiler)
#
# Compilation flags
# FCSFLAGS: Flags for serial compilation
# FCPFLAGS: Flags for parallel compilation (including all pre-processing flags)
# FLDFLAGS: Flags for linker (e.g., -O2)
#
# Preprocessor flags:
# DEBUG: Enable debugging code
# ORDERED_SUM: Enable globally ordered sums & dot-products for bit reproducibility
# of state quantities independent of number of processors (note: this can
# significantly degrade performance);
# INCLUDE_TIMING: Enable wallclock timing of code (note: this can have slight
# effect on performance);
# MPI_VERSION = 1 or 2: Version of MPI (try 2 first, if compile fails due to mpi
# related errors then switch to version 1;
#
# Libraries (needed for parallel code)
# MTSLIBS: Flags for linking ParMeTiS/MeTiS libaries
################################################################################

################################################################################
## Sciclone/Bora (Broadwell)
################################################################################
ENV = pgi

################################################################################
# Alternate executable name if you do not want the default.
################################################################################
EXEC := pschism_$(ENV)

################################################################################
# Environment
################################################################################

FCP = mpif90
FCS = pgfortran
FLD = $(FCP)
# MPI vserion (1 or 2)
PPFLAGS := $(PPFLAGS) -DMPIVERSION=2 #-DUSE_WRAP

#Pure MPI
FCPFLAGS = $(PPFLAGS) -O -mcmodel=medium #-assume byterecl
FLDFLAGS = -O -mcmodel=medium #for final linking of object files

#Hybrid
#FCPFLAGS = $(PPFLAGS) -O2 -mcmodel=medium -assume byterecl -ipo -axCORE-AVX2 -xSSE4.2 -qopenmp
#FLDFLAGS = -O2 -mcmodel=medium -ipo -axCORE-AVX2 -xSSE4.2 -qopenmp
#EXEC := $(EXEC)_OMP

#####Libraries
##MTSLIBS = -L/share/apps/ParMetis-3.1-Sep2010/ -lparmetis -lmetis
MTSLIBS = -L./ParMetis-3.1-Sep2010/ -lparmetis -lmetis
CDFLIBS = -L$(NETCDF)/lib -lnetcdf -lnetcdff
CDFMOD = -I$(NETCDF)/include # modules for netcdf


################################################################################
# Algorithm preference flags.
# Comment out unwanted modules and flags.
################################################################################

# -DSCHISM is always on and is defined elsewhere

include ../mk/include_modules

# Don't comment out the follow ifdef
ifdef USE_GOTM
GTMMOD = -I/sciclone/home10/yinglong/SCHISM/svn/trunk/src/GOTM3.2.5/modules/IFORT/ #modules
GTMLIBS = -L/sciclone/home10/yinglong/SCHISM/svn/trunk/src/GOTM3.2.5/lib/IFORT/ -lturbulence_prod -lutil_prod
else
GTMMOD =
GTMLIBS =
endif


######### Specialty compiler flags and workarounds
# Add -DNO_TR_15581 like below for allocatable array problem in sflux_subs.F90
# PPFLAGS := $(PPFLAGS) -DNO_TR_15581

# Obsolete flags: use USE_WRAP flag to avoid problems in ParMetis lib (calling C from FORTRAN)
# PPFLAGS := $(PPFLAGS) -DUSE_WRAP

21 changes: 11 additions & 10 deletions src/Core/misc_modules.F90
Original file line number Diff line number Diff line change
@@ -65,11 +65,11 @@ subroutine get_param(fname,varname,vartype,ivarvalue,varvalue1,varvalue2,ndim1,i
real(rkind),intent(out) :: varvalue1
character(len=2),intent(out) :: varvalue2
integer,optional,intent(in) :: ndim1
integer,optional,intent(out) :: iarr1(10000)
real(rkind),optional,intent(out) :: arr1(10000)
integer,optional,intent(out) :: iarr1(:)
real(rkind),optional,intent(out) :: arr1(:)

character(len=300) :: line_str,str_tmp,str_tmp2
integer :: lstr_tmp,lstr_tmp2,line,len_str,loc,loc2
integer :: lstr_tmp,lstr_tmp2,line,len_str,loc,loc2,ndim

str_tmp2=adjustl(varname)
lstr_tmp2=len_trim(str_tmp2)
@@ -121,18 +121,19 @@ subroutine get_param(fname,varname,vartype,ivarvalue,varvalue1,varvalue2,ndim1,i
if(myrank==0) write(99,*)varname,' = ',real(varvalue1)
#endif
else !arrays
if(.not.present(ndim1)) call parallel_abort('get_param: ndim1 not found')
if(ndim1>10000) call parallel_abort('get_param: ndim1>10000')
!'
if(present(ndim1)) then
ndim = ndim1
else
ndim = 0
call parallel_abort('get_param: ndim1 not found')
endif

if(vartype==3) then !integer array
if(.not.present(iarr1)) call parallel_abort('get_param: iarr1 not found')
!'
read(str_tmp2,*)iarr1(1:ndim1)
read(str_tmp2,*)iarr1(1:ndim)
else if(vartype==4) then !double array
if(.not.present(arr1)) call parallel_abort('get_param: arr1 not found')
!'
read(str_tmp2,*)arr1(1:ndim1)
read(str_tmp2,*)arr1(1:ndim)
else
write(errmsg,*)'get_param: unknown type:',vartype
call parallel_abort(errmsg)