From 5bcbde66dc35b51e816df38f54f42dd4ed533eab Mon Sep 17 00:00:00 2001 From: GeorgeGayno-NOAA <52789452+GeorgeGayno-NOAA@users.noreply.github.com> Date: Tue, 4 Apr 2023 08:25:35 -0400 Subject: [PATCH] Fix Debug compilation (#800) Update (and simplify) the Intel "Debug" compile flags to match those required by NCO. Minor updates to the regional_esg_grid code so it can be compiled in "Debug" mode on WCOSS2. Fixes #735. --- CMakeLists.txt | 6 ++---- sorc/grid_tools.fd/regional_esg_grid.fd/pesg.f90 | 5 +++-- sorc/grid_tools.fd/regional_esg_grid.fd/psym2.f90 | 11 +++++++---- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 190573745..29aa7b012 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -64,7 +64,7 @@ endif() if(CMAKE_Fortran_COMPILER_ID MATCHES "^(Intel)$") set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -g -traceback") set(CMAKE_Fortran_FLAGS_RELEASE "-O3 -fp-model precise") - set(CMAKE_Fortran_FLAGS_DEBUG "-O0 -check -check noarg_temp_created -check nopointer -fp-stack-check -fstack-protector-all -fpe0 -debug -ftrapuv") + set(CMAKE_Fortran_FLAGS_DEBUG "-O0 -check all -ftrapuv") if(APPLE) # The linker on macOS does not include `common symbols` by default. # Passing the -c flag includes them and fixes an error with undefined symbols. @@ -77,9 +77,7 @@ elseif(CMAKE_Fortran_COMPILER_ID MATCHES "^(GNU)$") set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fallow-argument-mismatch -fallow-invalid-boz") endif() set(CMAKE_Fortran_FLAGS_RELEASE "-O3") -# set(CMAKE_Fortran_FLAGS_DEBUG "-ggdb -Wall") - set(CMAKE_Fortran_FLAGS_DEBUG "-O1 -ggdb -Wall -fno-unsafe-math-optimizations -frounding-math -fsignaling-nans -ffpe-trap=invalid,zero,overflow -fbounds-check -fno-omit-frame-pointer -fno-optimize-sibling-calls") -# set(CMAKE_Fortran_FLAGS_DEBUG "-ggdb -Wall -fno-unsafe-math-optimizations -frounding-math -fsignaling-nans -ffpe-trap=invalid,zero,overflow -fbounds-check -fno-omit-frame-pointer -fno-optimize-sibling-calls") + set(CMAKE_Fortran_FLAGS_DEBUG "-O0 -ggdb -Wall -fcheck=all") endif() if(CMAKE_C_COMPILER_ID MATCHES "^(Intel)$") diff --git a/sorc/grid_tools.fd/regional_esg_grid.fd/pesg.f90 b/sorc/grid_tools.fd/regional_esg_grid.fd/pesg.f90 index 8ecd69189..af98016de 100644 --- a/sorc/grid_tools.fd/regional_esg_grid.fd/pesg.f90 +++ b/sorc/grid_tools.fd/regional_esg_grid.fd/pesg.f90 @@ -406,13 +406,14 @@ subroutine xmtoxc_vak1(ak,xm,xc,xcd,xc1,xcd1,ff)! [xmtoxc_ak] logical, intent(out):: ff real(dp),dimension(3,2,2):: xcdd real(dp),dimension(2,2,2):: xsd1,xsdd -real(dp),dimension(2,2) :: xtd,xsd,xs1,xtd1,xsdk +real(dp),dimension(2,2) :: xtd,xsd,xs1,xtd1,xsdk,mat22 real(dp),dimension(2) :: xt,xt1,xs,xsk integer(spi) :: i call xmtoxt1(ak(1),xm,xt,xtd,xt1,xtd1,ff); if(ff)return call xttoxs1(ak(2),xt,xs,xsd,xsdd,xsk,xsdk,ff); if(ff)return xs1(:,2)=xsk; xs1(:,1)=matmul(xsd,xt1) -xsd1(:,:,1)=matmul(xsd,xtd1)+matmul(xsdd(:,:,1)*xt1(1)+xsdd(:,:,2)*xt1(2),xtd) +mat22=xsdd(:,:,1)*xt1(1)+xsdd(:,:,2)*xt1(2) +xsd1(:,:,1)=matmul(xsd,xtd1)+matmul(mat22,xtd) xsd1(:,:,2)=matmul(xsdk,xtd) xsd=matmul(xsd,xtd) call xstoxc(xs,xc,xcd,xcdd) diff --git a/sorc/grid_tools.fd/regional_esg_grid.fd/psym2.f90 b/sorc/grid_tools.fd/regional_esg_grid.fd/psym2.f90 index e57c4163c..506eff87c 100644 --- a/sorc/grid_tools.fd/regional_esg_grid.fd/psym2.f90 +++ b/sorc/grid_tools.fd/regional_esg_grid.fd/psym2.f90 @@ -411,7 +411,7 @@ subroutine logsym2d(x,z,zd)! [logsym2] real(dp),dimension(2,2), intent(in ):: x real(dp),dimension(2,2), intent(out):: z real(dp),dimension(2,2,2,2),intent(out):: zd -real(dp),dimension(2,2):: vv,oo,d11,d12,d22,pqr +real(dp),dimension(2,2):: vv,oo,d11,d12,d22,pqr,d11pqr,d12pqr,d22pqr real(dp) :: c,s,cc,cs,ss,c2h,p,q,r,lp,lq,L integer(spi) :: i call eigensym2(x,vv,oo) @@ -424,9 +424,12 @@ subroutine logsym2d(x,z,zd)! [logsym2] d12(1,:)=(/-cs,c2h/); d12(2,:)=(/c2h,cs/) d22(1,:)=(/ ss,-cs/); d22(2,:)=(/-cs,cc/) pqr(1,:)=(/p,r/) ; pqr(2,:)=(/r,q/) -zd(:,:,1,1)=matmul(vv,matmul(d11*pqr,transpose(vv))) -zd(:,:,1,2)=matmul(vv,matmul(d12*pqr,transpose(vv))) -zd(:,:,2,2)=matmul(vv,matmul(d22*pqr,transpose(vv))) +d11pqr=d11*pqr +d12pqr=d12*pqr +d22pqr=d22*pqr +zd(:,:,1,1)=matmul(vv,matmul(d11pqr,transpose(vv))) +zd(:,:,1,2)=matmul(vv,matmul(d12pqr,transpose(vv))) +zd(:,:,2,2)=matmul(vv,matmul(d22pqr,transpose(vv))) zd(:,:,2,1)=zd(:,:,1,2) end subroutine logsym2d