diff --git a/CMakeLists.txt b/CMakeLists.txt index c56070123..2b332bdb9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -140,9 +140,10 @@ SET_PROPERTY(SOURCE ${SCHEMES} ${CAPS} APPEND_STRING PROPERTY COMPILE_FLAGS " ${CMAKE_Fortran_FLAGS_PHYSICS} ${OpenMP_Fortran_FLAGS}") # Lower optimization for certain schemes when compiling with Intel in Release mode -if(CMAKE_BUILD_TYPE STREQUAL "Release" AND ${CMAKE_Fortran_COMPILER_ID} STREQUAL "Intel") +if(CMAKE_BUILD_TYPE STREQUAL "Release" AND (${CMAKE_Fortran_COMPILER_ID} STREQUAL "Intel" OR ${CMAKE_Fortran_COMPILER_ID} STREQUAL "IntelLLVM")) # Define a list of schemes that need lower optimization with Intel in Release mode - set(SCHEME_NAMES_LOWER_OPTIMIZATION module_sf_mynn.F90) + set(SCHEME_NAMES_LOWER_OPTIMIZATION module_sf_mynn.F90 + module_mp_nssl_2mom.F90) foreach(SCHEME_NAME IN LISTS SCHEME_NAMES_LOWER_OPTIMIZATION) set(SCHEMES_TMP ${SCHEMES}) # Need to determine the name of the scheme with its path @@ -154,7 +155,7 @@ if(CMAKE_BUILD_TYPE STREQUAL "Release" AND ${CMAKE_Fortran_COMPILER_ID} STREQUAL endif() # No optimization for certain schemes when compiling with Intel in Release mode -if(CMAKE_BUILD_TYPE STREQUAL "Release" AND ${CMAKE_Fortran_COMPILER_ID} STREQUAL "Intel") +if(CMAKE_BUILD_TYPE STREQUAL "Release" AND (${CMAKE_Fortran_COMPILER_ID} STREQUAL "Intel" OR ${CMAKE_Fortran_COMPILER_ID} STREQUAL "IntelLLVM")) # Define a list of schemes that can't be optimized with Intel in Release mode set(SCHEME_NAMES_NO_OPTIMIZATION GFS_typedefs.F90) foreach(SCHEME_NAME IN LISTS SCHEME_NAMES_NO_OPTIMIZATION) diff --git a/physics/MP/Morrison_Gettelman/aerinterp.F90 b/physics/MP/Morrison_Gettelman/aerinterp.F90 index 174a1a1a1..74ae4726c 100644 --- a/physics/MP/Morrison_Gettelman/aerinterp.F90 +++ b/physics/MP/Morrison_Gettelman/aerinterp.F90 @@ -282,7 +282,7 @@ SUBROUTINE aerinterpol( me,master,nthrds,npts,IDATE,FHOUR,iflip, jindx1,jindx2, character(*), intent(inout) :: errmsg integer, intent(in) :: iflip integer i1,i2, iday,j,j1,j2,l,npts,nc,n1,n2,lev,k,i,ii, klev - real(kind=kind_phys) fhour,temj, tx1, tx2,temi, tem + real(kind=kind_phys) fhour,temj, tx1, tx2,temi, tem, tem1, tem2 real(kind=kind_phys), dimension(npts) :: temij,temiy,temjx,ddxy ! @@ -363,10 +363,9 @@ SUBROUTINE aerinterpol( me,master,nthrds,npts,IDATE,FHOUR,iflip, jindx1,jindx2, !$OMP parallel num_threads(nthrds) default(none) & !$OMP shared(npts,ntrcaer,aerin,aer_pres,prsl) & !$OMP shared(ddx,ddy,jindx1,jindx2,iindx1,iindx2) & -!$OMP shared(aerpm,aerpres,aerout,lev,nthrds) & -!$OMP shared(temij,temiy,temjx,ddxy) & -!$OMP private(l,j,k,ii,i1,i2,j1,j2,tem) & -!$OMP copyin(tx1,tx2) firstprivate(tx1,tx2) +!$OMP shared(aerpm,aerpres,aerout,lev,nthrds) & +!$OMP shared(temij,temiy,temjx,ddxy,tx1,tx2) & +!$OMP private(l,j,k,ii,i1,i2,j1,j2,tem,tem1,tem2) !$OMP do #endif @@ -416,10 +415,10 @@ SUBROUTINE aerinterpol( me,master,nthrds,npts,IDATE,FHOUR,iflip, jindx1,jindx2, ENDIF ENDDO tem = 1.0 / (aerpres(j,i1) - aerpres(j,i2)) - tx1 = (prsl(j,L) - aerpres(j,i2)) * tem - tx2 = (aerpres(j,i1) - prsl(j,L)) * tem + tem1 = (prsl(j,L) - aerpres(j,i2)) * tem + tem2 = (aerpres(j,i1) - prsl(j,L)) * tem DO ii = 1, ntrcaer - aerout(j,L,ii) = aerpm(j,i1,ii)*tx1 + aerpm(j,i2,ii)*tx2 + aerout(j,L,ii) = aerpm(j,i1,ii)*tem1 + aerpm(j,i2,ii)*tem2 ENDDO endif ENDDO !L-loop