diff --git a/cmake/compiler.cmake b/cmake/compiler.cmake
index 193ceb572de0aaa41d93d0bdb9672a66ecf3e2ad..875eb56cbd2931cdbaacd9f0e6c9394f8fe38f58 100644
--- a/cmake/compiler.cmake
+++ b/cmake/compiler.cmake
@@ -73,6 +73,9 @@ get_filename_component (Fortran_COMPILER_NAME ${CMAKE_Fortran_COMPILER} NAME)
if (Fortran_COMPILER_NAME MATCHES "gfortran.*")
set (gfortran_EXTRA_FLAGS "-fomit-frame-pointer -fno-automatic -fno-second-underscore -ffixed-line-length-none -fno-range-check")
+ if (${CMAKE_Fortran_COMPILER_VERSION} VERSION_GREATER 10.0.0)
+ set (gfortran_EXTRA_FLAGS "${gfortran_EXTRA_FLAGS} -fallow-argument-mismatch -fallow-invalid-boz")
+ endif()
set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${gfortran_EXTRA_FLAGS}")
set (CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE} ${gfortran_EXTRA_FLAGS}")
set (CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} ${gfortran_EXTRA_FLAGS}")
diff --git a/nanocernlib b/nanocernlib
index 13987d3179c837fd1e8a1c3e40848b8b31085fe5..cee0741e7008ac46bc4ce5ded570735894efa00a 160000
--- a/nanocernlib
+++ b/nanocernlib
@@ -1 +1 @@
-Subproject commit 13987d3179c837fd1e8a1c3e40848b8b31085fe5
+Subproject commit cee0741e7008ac46bc4ce5ded570735894efa00a
diff --git a/simc/compiler.cmake b/simc/compiler.cmake
index 65606517312bd3ff2f8cb4862db51878e32cb6af..50d6bded21a46fd3d49ae35cf3cf8eb24e536151 100644
--- a/simc/compiler.cmake
+++ b/simc/compiler.cmake
@@ -11,7 +11,8 @@ if (Fortran_COMPILER_NAME MATCHES "gfortran.*")
set (CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE} ${gfortran_EXTRA_FLAGS}")
set (CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} ${gfortran_EXTRA_FLAGS}")
set (CMAKE_Fortran_FLAGS_RELWITHDEBINFO "${CMAKE_Fortran_FLAGS_RELWITHDEBINFO} ${gfortran_EXTRA_FLAGS}")
-
+## gcc10 optimization
+ set (gfortran_EXTRA_FLAGS "${gfortran_EXTRA_FLAGS} -fallow-argument-mismatch -fallow-invalid-boz")
## g77
elseif (Fortran_COMPILER_NAME MATCHES "g77.*")
diff --git a/simc/constants.inc b/simc/constants.inc
index 4b358e2f6f42c02aa8a5419345bef3dc10e1ee46..bd4869930cc4cfd054242ce57dc224b18ade942b 100644
--- a/simc/constants.inc
+++ b/simc/constants.inc
@@ -9,12 +9,14 @@
! All roads lead to infinity
! ... some physical constants
- real*8 Me, Me2, Mp, Mp2, Mn, Mn2, Mpi, Mpi2, Mpi0, Mpi02
+ real*8 Me, Me2, Mmu, Mmu2, Mp, Mp2, Mn, Mn2, Mpi, Mpi2, Mpi0, Mpi02
real*8 Mk, Mk2, Mrho, Mrho2,Md, Md2
real*8 Mlambda, Msigma0, Msigma_minus
real*8 amu, hbarc, pi, twopi, alpha, alpi, degrad, euler
parameter (Me=0.51099906)
parameter (Me2=Me**2)
+ parameter (Mmu=113.4289257)
+ parameter (Mmu2=Mmu**2)
parameter (Mp=938.27231)
parameter (Mp2=Mp**2)
parameter (Mn=939.56563)
diff --git a/simc/dbase.f b/simc/dbase.f
index fd841127995a60a4da10a35d857ce08067ff9a27..b100a12f6ee04957be0576a1e875a6dd1342e203 100644
--- a/simc/dbase.f
+++ b/simc/dbase.f
@@ -193,6 +193,9 @@ C DJG:
else if (doing_positron) then
Mh = Me
doing_eep=.false.
+ else if (doing_muons) then
+ Mh = Mmu
+ doing_eep=.false.
else !doing_eep if nothing else set.
Mh=Mp
doing_eep = .true.
@@ -304,7 +307,7 @@ C DJG:
sign_hadron=-1.0
endif
- else if(doing_positron) then
+ else if(doing_positron.or.doing_muons) then
targ%Mtar_struck = Mp
targ%Mrec_struck = Mp
@@ -776,6 +779,8 @@ C DJG:
endif
else if (doing_positron) then
write(6,*) ' ****-------- Doing positron --------****'
+ else if (doing_muons) then
+ write(6,*) ' ****-------- Doing muon --------****'
else if (doing_phsp) then
write(6,*) ' ****-------- PHASE SPACE - NO physics, NO radiation --------****'
else
@@ -894,6 +899,7 @@ C DJG:
ierr = regparmint('doing_2pi',doing_2pi,0)
ierr = regparmint('doing_rho',doing_rho,0)
ierr = regparmint('doing_positron',doing_positron,0)
+ ierr = regparmint('doing_muons',doing_muons,0)
ierr = regparmint('doing_decay',doing_decay,0)
ierr = regparmdouble('ctau',ctau,0)
diff --git a/simc/simc.f b/simc/simc.f
index 08dbbb37806ba6d09784cc0c8545dab74519f401..371c81fc7d36735c4d4af2a45ec192095a117038 100644
--- a/simc/simc.f
+++ b/simc/simc.f
@@ -795,6 +795,8 @@ c write(7,*) 'BP thingie in/out ',shmsSTOP_BP_in,shmsSTOP_BP_out
write(iun,*) ' ****--- PHASE SPACE - NO physics, NO radiation (may not work)---****'
else if (doing_positron) then
write(iun,*) ' ****--- doing positron****'
+ else if (doing_muons) then
+ write(iun,*) ' ****--- doing muons****'
else
stop 'I don''t have ANY idea what we''re doing!!!'
endif
diff --git a/simc/simulate.inc b/simc/simulate.inc
index 87894005dc86430089d84426b16909fbfd869a40..169a0aa5ad9627893140009757253269a9dbc3fa 100644
--- a/simc/simulate.inc
+++ b/simc/simulate.inc
@@ -68,8 +68,8 @@
logical doing_hyd_elast, doing_deuterium, doing_heavy
logical doing_eep, doing_pion, doing_delta, doing_2pi, doing_kaon, doing_rho
logical doing_semi, doing_semipi, doing_semika, doing_hplus
- logical doing_positron
- integer*4 which_kaon, which_pion
+ logical doing_positron, doing_muons
+ integer*4 padding, which_kaon, which_pion
logical using_cit_generation, using_Coulomb, using_Eloss
logical correct_Eloss, correct_raster,do_fermi
logical using_tgt_field
@@ -92,10 +92,11 @@
> extra_dbase_file,tgt_field_file,using_E_arm_montecarlo,using_P_arm_montecarlo,
> doing_phsp, using_rad, hard_cuts, doing_hyd_elast, doing_deuterium, doing_heavy,
> doing_eep, doing_pion, doing_delta, doing_2pi, doing_kaon, doing_rho, doing_semi,doing_positron,
+ > doing_muons,
> doing_semipi, doing_semika, doing_hplus, which_kaon,
> which_pion, using_cit_generation, using_Coulomb, using_Eloss,
> correct_Eloss, correct_raster, do_fermi,using_tgt_field,
- > electron_arm, hadron_arm, use_first_cer,
+ > electron_arm, hadron_arm, use_first_cer, padding,
> transparency, use_benhar_sf, random_state_file, random_seed
! ........ note: make these first two parameters at least ONE BIGGER than the actual dimensions you want to read in