diff --git a/CMakeLists.txt b/CMakeLists.txt index 41df3fab..b41586a4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,9 +26,29 @@ elseif("$ENV{SYST}" STREQUAL "HYDRA") set(CMAKE_Fortran_FLAGS "-r8 -ftz -extend_source" CACHE STRING "") set(CMAKE_Fortran_FLAGS_RELEASE "-O3" CACHE STRING "") set(CMAKE_Fortran_FLAGS_DEBUG "-traceback -fpe1 -O0 -g -check all" CACHE STRING "") -else() +elseif("$ENV{SYST}" STREQUAL "FEDORA") + set(CMAKE_Fortran_COMPILER "mpif90") + set(CMAKE_Fortran_FLAGS "-finit-real=nan -fdefault-real-8 -ffree-line-length-none -I /usr/lib64/gfortran/modules/mpich/" CACHE STRING "") + set (CMAKE_Fortran_FLAGS_RELEASE "-funroll-all-loops -fno-f2c -O3" CACHE STRING "") + set (CMAKE_Fortran_FLAGS_DEBUG "-fbounds-check -fbacktrace -fno-f2c -O0 -g -ffpe-trap=invalid,zero,overflow" CACHE STRING "") +elseif("$ENV{SYST}" STREQUAL "ECMWF") + set(CMAKE_Fortran_COMPILER "ftn") + set(CMAKE_Fortran_FLAGS "-s real64" CACHE STRING "") + set(CMAKE_Fortran_FLAGS_RELEASE "-O3" CACHE STRING "") + set(CMAKE_Fortran_FLAGS_DEBUG "-g -R b -K trap=fp" CACHE STRING "") +elseif("$ENV{SYST}" STREQUAL "ECMWF-intel") + set(CMAKE_Fortran_COMPILER "ftn") + set(CMAKE_Fortran_FLAGS "-r8 -ftz -extend_source" CACHE STRING "") + set(CMAKE_Fortran_FLAGS_RELEASE "-g -traceback -O3 -xHost" CACHE STRING "") + set(CMAKE_Fortran_FLAGS_DEBUG "-traceback -fpe1 -O0 -g -check all" CACHE STRING "") +elseif("$ENV{SYST}" STREQUAL "gnu-fast") set(CMAKE_Fortran_COMPILER "mpif90") set(CMAKE_Fortran_FLAGS "-finit-real=nan -W -Wall -fdefault-real-8 -ffree-line-length-none" CACHE STRING "") + set (CMAKE_Fortran_FLAGS_RELEASE "-funroll-all-loops -fno-f2c -Ofast -march=native -g -fbacktrace" CACHE STRING "") + set (CMAKE_Fortran_FLAGS_DEBUG "-fbounds-check -fbacktrace -fno-f2c -O0 -g -ffpe-trap=invalid,zero,overflow" CACHE STRING "") +else() + set(CMAKE_Fortran_COMPILER "mpif90") + set(CMAKE_Fortran_FLAGS "-finit-real=nan -fdefault-real-8 -ffree-line-length-none " CACHE STRING "") set (CMAKE_Fortran_FLAGS_RELEASE "-funroll-all-loops -fno-f2c -O3" CACHE STRING "") set (CMAKE_Fortran_FLAGS_DEBUG "-fbounds-check -fbacktrace -fno-f2c -O0 -g -ffpe-trap=invalid,zero,overflow" CACHE STRING "") endif() @@ -37,7 +57,7 @@ endif() PROJECT(DALES Fortran) cmake_minimum_required(VERSION 2.6) set(VERSION_MAJOR "4") -set(VERSION_MINOR "1") +set(VERSION_MINOR "2") set(VERSION_PATCH "0") ### If necessary, resort to BASH-methods to find netcdf-directory diff --git a/cases/arm_brown/namoptions.001 b/cases/arm_brown/namoptions.001 index 400ad73a..d16ba4fb 100644 --- a/cases/arm_brown/namoptions.001 +++ b/cases/arm_brown/namoptions.001 @@ -1,7 +1,7 @@ &RUN iexpnr = 001 lwarmstart = .false. -startfile = 'initd00h01m000.001' +startfile = 'initd001h00mx000y000.001' runtime = 50400 trestart = 7200 dtmax = 10 @@ -54,14 +54,8 @@ iadv_thl = 2 iadv_qt = 2 iadv_sv = 2 / -&SUBGRID +&NAMSUBGRID ldelta = .false. -cm = 0.12 -cn = 0.76 -ch1 = 1. -ch2 = 2. -ce1 = 0.19 -ce2 = 0.51 / &NAMBUDGET lbudget = .true. diff --git a/cases/arm_unstable/namoptions.001 b/cases/arm_unstable/namoptions.001 index 400ad73a..d16ba4fb 100644 --- a/cases/arm_unstable/namoptions.001 +++ b/cases/arm_unstable/namoptions.001 @@ -1,7 +1,7 @@ &RUN iexpnr = 001 lwarmstart = .false. -startfile = 'initd00h01m000.001' +startfile = 'initd001h00mx000y000.001' runtime = 50400 trestart = 7200 dtmax = 10 @@ -54,14 +54,8 @@ iadv_thl = 2 iadv_qt = 2 iadv_sv = 2 / -&SUBGRID +&NAMSUBGRID ldelta = .false. -cm = 0.12 -cn = 0.76 -ch1 = 1. -ch2 = 2. -ce1 = 0.19 -ce2 = 0.51 / &NAMBUDGET lbudget = .true. diff --git a/cases/atex/namoptions.001 b/cases/atex/namoptions.001 index 8a17f0bc..bf2a8382 100644 --- a/cases/atex/namoptions.001 +++ b/cases/atex/namoptions.001 @@ -1,7 +1,7 @@ &RUN iexpnr = 001 lwarmstart = .false. -startfile = 'initd06h00m000.001' +startfile = 'initd001h00mx000y000.001' runtime = 28800.0 trestart = 3600 ladaptive = .true. diff --git a/cases/bomex/namoptions.001 b/cases/bomex/namoptions.001 index 80435485..7f78adbd 100644 --- a/cases/bomex/namoptions.001 +++ b/cases/bomex/namoptions.001 @@ -1,7 +1,7 @@ &RUN iexpnr = 001 lwarmstart = .false. -startfile = 'initd08h00m000.001' +startfile = 'initd001h00mx000y000.001' runtime = 28800 trestart = 3600 ladaptive = .true. @@ -53,14 +53,8 @@ iadv_thl = 2 iadv_qt = 2 iadv_sv = 2 / -&SUBGRID +&NAMSUBGRID ldelta = .false. -cm = 0.12 -cn = 0.76 -ch1 = 1. -ch2 = 2. -ce1 = 0.19 -ce2 = 0.51 / &NAMBUDGET lbudget = .true. diff --git a/cases/cblstrong/namoptions.001 b/cases/cblstrong/namoptions.001 index 8c2874bb..06bb0ba7 100644 --- a/cases/cblstrong/namoptions.001 +++ b/cases/cblstrong/namoptions.001 @@ -1,7 +1,7 @@ &RUN iexpnr = 001 lwarmstart = .false. -startfile = 'initd03h00m000.001' +startfile = 'initd001h00mx000y000.001' runtime = 14400 trestart = 3600 ladaptive = .true. diff --git a/cases/cblweak/namoptions.001 b/cases/cblweak/namoptions.001 index 75dd1054..85750116 100644 --- a/cases/cblweak/namoptions.001 +++ b/cases/cblweak/namoptions.001 @@ -1,7 +1,7 @@ &RUN iexpnr = 001 lwarmstart = .false. -startfile = 'initd03h00m000.001' +startfile = 'initd001h00mx000y000.001' runtime = 14400 trestart = 3600 ladaptive = .true. diff --git a/cases/dycoms_rf02/namoptions.001 b/cases/dycoms_rf02/namoptions.001 index c0bdacd0..03c00b20 100644 --- a/cases/dycoms_rf02/namoptions.001 +++ b/cases/dycoms_rf02/namoptions.001 @@ -1,7 +1,7 @@ &RUN iexpnr = 001 lwarmstart = .false. -startfile = 'initd01h00m002.999' +startfile = 'initd001h00mx000y000.001' runtime = 21600 trestart = 10800 ladaptive = .true. diff --git a/cases/example/input/namoptions.001 b/cases/example/input/namoptions.001 index 717f21fe..e4ae7fb7 100644 --- a/cases/example/input/namoptions.001 +++ b/cases/example/input/namoptions.001 @@ -1,7 +1,7 @@ &RUN iexpnr = 001 lwarmstart = .false. -startfile = 'initd00h01m000.001' +startfile = 'initd001h00mx000y000.001' runtime = 7200 trestart = 3600 ladaptive = .true. diff --git a/cases/example/input/namoptions.lsm b/cases/example/input/namoptions.lsm index 70afd02c..de7fcab3 100644 --- a/cases/example/input/namoptions.lsm +++ b/cases/example/input/namoptions.lsm @@ -1,7 +1,7 @@ &RUN iexpnr = 001 lwarmstart = .false. -startfile = 'initd00h01m000.001' +startfile = 'initd001h00mx000y000.001' runtime = 7200 trestart = 3600 ladaptive = .true. diff --git a/cases/example/input/namoptions.lsmrad b/cases/example/input/namoptions.lsmrad index a3343a5e..a92b809b 100644 --- a/cases/example/input/namoptions.lsmrad +++ b/cases/example/input/namoptions.lsmrad @@ -1,7 +1,7 @@ &RUN iexpnr = 001 lwarmstart = .false. -startfile = 'initd00h01m000.001' +startfile = 'initd001h00mx000y000.001' runtime = 7200 trestart = 3600 ladaptive = .true. diff --git a/cases/example/inputwindnoneq/namoptions.001 b/cases/example/inputwindnoneq/namoptions.001 index f87a082c..8ffeb62f 100644 --- a/cases/example/inputwindnoneq/namoptions.001 +++ b/cases/example/inputwindnoneq/namoptions.001 @@ -1,7 +1,7 @@ &RUN iexpnr = 001 lwarmstart = .false. -startfile = 'initd03h00m000.001' +startfile = 'initd001h00mx000y000.001' runtime = 260000 trestart = 3600 ladaptive = .true. diff --git a/cases/example/namoptions.001 b/cases/example/namoptions.001 index 717f21fe..e4ae7fb7 100644 --- a/cases/example/namoptions.001 +++ b/cases/example/namoptions.001 @@ -1,7 +1,7 @@ &RUN iexpnr = 001 lwarmstart = .false. -startfile = 'initd00h01m000.001' +startfile = 'initd001h00mx000y000.001' runtime = 7200 trestart = 3600 ladaptive = .true. diff --git a/cases/example/namoptions.lsm b/cases/example/namoptions.lsm index 70afd02c..de7fcab3 100644 --- a/cases/example/namoptions.lsm +++ b/cases/example/namoptions.lsm @@ -1,7 +1,7 @@ &RUN iexpnr = 001 lwarmstart = .false. -startfile = 'initd00h01m000.001' +startfile = 'initd001h00mx000y000.001' runtime = 7200 trestart = 3600 ladaptive = .true. diff --git a/cases/example/namoptions.lsmrad b/cases/example/namoptions.lsmrad index a3343a5e..a92b809b 100644 --- a/cases/example/namoptions.lsmrad +++ b/cases/example/namoptions.lsmrad @@ -1,7 +1,7 @@ &RUN iexpnr = 001 lwarmstart = .false. -startfile = 'initd00h01m000.001' +startfile = 'initd001h00mx000y000.001' runtime = 7200 trestart = 3600 ladaptive = .true. diff --git a/cases/fog/namoptions.001 b/cases/fog/namoptions.001 index 86cb9bc0..9900031f 100644 --- a/cases/fog/namoptions.001 +++ b/cases/fog/namoptions.001 @@ -1,7 +1,7 @@ &RUN iexpnr = 001 lwarmstart = .false. -startfile = 'initd00h01m000.001' +startfile = 'initd001h00mx000y000.001' runtime = 36000 trestart = 3600 ladaptive = .true. diff --git a/cases/gabls1/namoptions.001 b/cases/gabls1/namoptions.001 index fb2de06d..32ac391b 100644 --- a/cases/gabls1/namoptions.001 +++ b/cases/gabls1/namoptions.001 @@ -1,7 +1,7 @@ &RUN iexpnr = 001 lwarmstart = .false. -startfile = 'initd04h00m000.001' +startfile = 'initd001h00mx000y000.001' runtime = 32400 trestart = 3600 irandom = 43 diff --git a/cases/hireslapse/namoptions.001 b/cases/hireslapse/namoptions.001 index a169c8d7..fbec8c75 100644 --- a/cases/hireslapse/namoptions.001 +++ b/cases/hireslapse/namoptions.001 @@ -1,7 +1,7 @@ &RUN iexpnr = 001 lwarmstart = .false. -startfile = 'initdlatest000.001' +startfile = 'initd001h00mx000y000.001' runtime = 10800 trestart = 3600 ladaptive = .true. diff --git a/cases/neutral/namoptions.001 b/cases/neutral/namoptions.001 index e8a1a7b1..eac29230 100644 --- a/cases/neutral/namoptions.001 +++ b/cases/neutral/namoptions.001 @@ -1,7 +1,7 @@ &RUN iexpnr = 001 lwarmstart = .false. -startfile = 'initd40h00m000.001' +startfile = 'initd001h00mx000y000.001' runtime = 180000 trestart = 36000 ladaptive = .true. diff --git a/cases/rico/namoptions.001 b/cases/rico/namoptions.001 index e7a7eebd..524997d7 100644 --- a/cases/rico/namoptions.001 +++ b/cases/rico/namoptions.001 @@ -1,7 +1,7 @@ &RUN iexpnr = 001 lwarmstart = .false. -startfile = 'initd00h01m000.000' +startfile = 'initd001h00mx000y000.001' runtime = 86400 trestart = 3600 ladaptive = .true. diff --git a/cases/smoke/namoptions.001 b/cases/smoke/namoptions.001 index e0af0e0a..b862be0f 100644 --- a/cases/smoke/namoptions.001 +++ b/cases/smoke/namoptions.001 @@ -1,7 +1,7 @@ &RUN iexpnr = 001 lwarmstart = .false. -startfile = 'initd00h00m000.001' +startfile = 'initd001h00mx000y000.001' runtime = 10800 trestart = 3600 ladaptive = .true. diff --git a/src/addon/modbudget.f90 b/src/addon/modbudget.old similarity index 100% rename from src/addon/modbudget.f90 rename to src/addon/modbudget.old diff --git a/src/addon/modbulkmicro.f90 b/src/addon/modbulkmicro.old similarity index 100% rename from src/addon/modbulkmicro.f90 rename to src/addon/modbulkmicro.old diff --git a/src/addon/modbulkmicrostat.f90 b/src/addon/modbulkmicrostat.old similarity index 100% rename from src/addon/modbulkmicrostat.f90 rename to src/addon/modbulkmicrostat.old diff --git a/src/addon/modchecksim.f90 b/src/addon/modchecksim.old similarity index 100% rename from src/addon/modchecksim.f90 rename to src/addon/modchecksim.old diff --git a/src/addon/modchem.f90 b/src/addon/modchem.old similarity index 100% rename from src/addon/modchem.f90 rename to src/addon/modchem.old diff --git a/src/addon/modcloudfield.f90 b/src/addon/modcloudfield.old similarity index 100% rename from src/addon/modcloudfield.f90 rename to src/addon/modcloudfield.old diff --git a/src/addon/modcrosssection.f90 b/src/addon/modcrosssection.old similarity index 100% rename from src/addon/modcrosssection.f90 rename to src/addon/modcrosssection.old diff --git a/src/addon/modfielddump.f90 b/src/addon/modfielddump.old similarity index 100% rename from src/addon/modfielddump.f90 rename to src/addon/modfielddump.old diff --git a/src/addon/modgenstat.f90 b/src/addon/modgenstat.old similarity index 99% rename from src/addon/modgenstat.f90 rename to src/addon/modgenstat.old index 7068bea4..ad5191e8 100644 --- a/src/addon/modgenstat.f90 +++ b/src/addon/modgenstat.old @@ -667,7 +667,7 @@ subroutine do_genstat qls = 0.0 ! hj: no liquid water at the surface tsurf = thls*exnh(1)+(rlv/cp)*qls qsat = qts - qls - if (qls==0) then + if (qls < eps1) then !TH: Should always be the case at the surface c1 = 1.+(rv/rd-1)*qts c2 = (rv/rd-1) else diff --git a/src/addon/modheterostats.f90 b/src/addon/modheterostats.old similarity index 99% rename from src/addon/modheterostats.f90 rename to src/addon/modheterostats.old index 1ef9e31e..2e63a2f2 100644 --- a/src/addon/modheterostats.f90 +++ b/src/addon/modheterostats.old @@ -233,7 +233,7 @@ end subroutine initheterostats subroutine heterostats - use modglobal, only : rk3step,ntimee,dt_lim,timee + use modglobal, only : rk3step,dt_lim,timee implicit none if (.not. lheterostats) return diff --git a/src/addon/modmicrophysics.f90 b/src/addon/modmicrophysics.old similarity index 100% rename from src/addon/modmicrophysics.f90 rename to src/addon/modmicrophysics.old diff --git a/src/addon/modnetcdfstats.f90 b/src/addon/modnetcdfstats.f90 index a719be0d..42abbd3f 100644 --- a/src/addon/modnetcdfstats.f90 +++ b/src/addon/modnetcdfstats.f90 @@ -196,7 +196,7 @@ end subroutine initnetcdfstats subroutine netcdfstats - use modglobal, only : rk3step,ntimee + use modglobal, only : rk3step implicit none if (.not. lnetcdf) return diff --git a/src/addon/modnudge.f90 b/src/addon/modnudge.old similarity index 97% rename from src/addon/modnudge.f90 rename to src/addon/modnudge.old index 4a1c0d3b..22fde8fa 100644 --- a/src/addon/modnudge.f90 +++ b/src/addon/modnudge.old @@ -81,7 +81,7 @@ subroutine initnudge t = 0 open (ifinput,file='nudge.inp.'//cexpnr) - do while (timenudge(t) < tres*real(runtime+btime)) + do while (timenudge(t) < tres*real(runtime)) t = t + 1 chmess1 = "#" ierr = 1 ! not zero @@ -136,7 +136,7 @@ end subroutine initnudge !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! subroutine nudge - use modglobal, only : rtimee,i1,j1,k1,rk3step,kmax,rdt + use modglobal, only : timee,i1,j1,k1,rk3step,kmax,rdt use modfields, only : up,vp,wp,thlp, qtp,u0av,v0av,qt0av,thl0av use modmpi, only : myid implicit none @@ -146,13 +146,13 @@ subroutine nudge if (.not.(lnudge)) return ! if (rk3step/=3) return - if (rtimee==0) return + if (timee==0) return t=1 do while(rtimee>timenudge(t)) t=t+1 end do - if (rtimee/=timenudge(1)) then + if (rtimee>timenudge(1)) then t=t-1 end if diff --git a/src/addon/modparticles.f90 b/src/addon/modparticles.f90 index 5c7e014d..1b409959 100644 --- a/src/addon/modparticles.f90 +++ b/src/addon/modparticles.f90 @@ -87,7 +87,7 @@ module modparticles subroutine initparticles use modmpi, only : myid,my_real,mpierr,comm3d,mpi_integer,mpi_logical,nprocs use modglobal,only : ifnamopt,fname_options,ifinput,dtmax,cexpnr,& - dx,dy,dzf,zh,kmax,k1,iexpnr,runtime,timee,ysize,dt_lim,btime,rtimee,tres + dx,dy,dzf,zh,kmax,k1,iexpnr,timee,ysize,dt_lim,btime,rtimee,tres implicit none diff --git a/src/addon/modprojection.f90 b/src/addon/modprojection.old similarity index 100% rename from src/addon/modprojection.f90 rename to src/addon/modprojection.old diff --git a/src/addon/modradstat.f90 b/src/addon/modradstat.old similarity index 100% rename from src/addon/modradstat.f90 rename to src/addon/modradstat.old diff --git a/src/addon/modsampling.f90 b/src/addon/modsampling.old similarity index 100% rename from src/addon/modsampling.f90 rename to src/addon/modsampling.old diff --git a/src/addon/stat_nc_dummy.f90 b/src/addon/modstat_nc.dummy similarity index 100% rename from src/addon/stat_nc_dummy.f90 rename to src/addon/modstat_nc.dummy diff --git a/src/addon/modstat_nc.f90 b/src/addon/modstat_nc.old similarity index 100% rename from src/addon/modstat_nc.f90 rename to src/addon/modstat_nc.old diff --git a/src/addon/modstattend.f90 b/src/addon/modstattend.old similarity index 100% rename from src/addon/modstattend.f90 rename to src/addon/modstattend.old diff --git a/src/addon/modtimestat.f90 b/src/addon/modtimestat.old similarity index 98% rename from src/addon/modtimestat.f90 rename to src/addon/modtimestat.old index 93e2def9..3b0a2e11 100644 --- a/src/addon/modtimestat.f90 +++ b/src/addon/modtimestat.old @@ -77,8 +77,7 @@ subroutine inittimestat namelist/NAMTIMESTAT/ & !< namelist dtav,ltimestat,blh_thres,iblh_meth,iblh_var,blh_nsamp,blh_thres !! namelist contents -!!bla -!!dibla + dtav=dtav_glob if(myid==0)then @@ -217,7 +216,7 @@ end subroutine inittimestat !>Run timestat. Calculate and write the statistics subroutine timestat - use modglobal, only : i1,j1,kmax,zf,dzf,cu,cv,rv,rd,& + use modglobal, only : i1,j1,kmax,zf,dzf,cu,cv,rv,rd,eps1,& ijtot,timee,rtimee,dt_lim,rk3step,cexpnr,ifoutput ! use modfields, only : um,vm,wm,e12m,ql0,u0av,v0av,rhof @@ -498,13 +497,13 @@ subroutine timestat if (lnetcdf) then vars( 1) = rtimee vars( 2) = cc - if (vars(2)==0) vars(2) = nc_fillvalue + if (vars(2) Advection at cell center subroutine advecc_52(putin, putout) - use modglobal, only : i1,ih,j1,jh,k1,kmax,dxi,dyi,dzf + use modglobal, only : i1,ih,j1,jh,k1,kmax,dxi,dyi,dzf,dzh,leq use modfields, only : u0, v0, w0,rhobf implicit none real, dimension(2-ih:i1+ih,2-jh:j1+jh,k1), intent(in) :: putin !< Input: the cell centered field real, dimension(2-ih:i1+ih,2-jh:j1+jh,k1), intent(inout) :: putout !< Output: the tendency - real, dimension(2-ih:i1+ih,2-jh:j1+jh,k1) :: rhoputin + real :: inv2dzfk, rhobf_p, rhobf_m integer :: i,j,k - !if (leq) then + if (leq) then + + k = 1 + inv2dzfk = 1./(2. * dzf(k)) + rhobf_p = rhobf(k+1)/rhobf(k) + + do j=2,j1 + do i=2,i1 - do k=1,k1 - do j=2-jh,j1+jh - do i=2-ih,i1+ih - rhoputin(i,j,k)=rhobf(k)*putin(i,j,k) - end do - end do + putout(i,j,k) = putout(i,j,k)- ( & + ( & + u0(i+1,j,k)/60.& + *(37.*(putin(i+1,j,k)+putin(i,j,k))-8.*(putin(i+2,j,k)+putin(i-1,j,k))+(putin(i+3,j,k)+putin(i-2,j,k)))& + -abs(u0(i+1,j,k))/60.& + *(10.*(putin(i+1,j,k)-putin(i,j,k))-5.*(putin(i+2,j,k)-putin(i-1,j,k))+(putin(i+3,j,k)-putin(i-2,j,k)))& + -u0(i,j,k)/60.& + *(37.*(putin(i,j,k)+putin(i-1,j,k))-8.*(putin(i+1,j,k)+putin(i-2,j,k))+(putin(i+2,j,k)+putin(i-3,j,k)))& + +abs(u0(i,j,k))/60.& + *(10.*(putin(i,j,k)-putin(i-1,j,k))-5.*(putin(i+1,j,k)-putin(i-2,j,k))+(putin(i+2,j,k)-putin(i-3,j,k)))& + )*dxi& + +(& + v0(i,j+1,k)/60.& + *(37.*(putin(i,j+1,k)+putin(i,j,k))-8.*(putin(i,j+2,k)+putin(i,j-1,k))+(putin(i,j+3,k)+putin(i,j-2,k)))& + -abs(v0(i,j+1,k))/60.& + *(10.*(putin(i,j+1,k)-putin(i,j,k))-5.*(putin(i,j+2,k)-putin(i,j-1,k))+(putin(i,j+3,k)-putin(i,j-2,k)))& + -v0(i,j,k)/60.& + *(37.*(putin(i,j,k)+putin(i,j-1,k))-8.*(putin(i,j+1,k)+putin(i,j-2,k))+(putin(i,j+2,k)+putin(i,j-3,k)))& + +abs(v0(i,j,k))/60.& + *(10.*(putin(i,j,k)-putin(i,j-1,k))-5.*(putin(i,j+1,k)-putin(i,j-2,k))+(putin(i,j+2,k)-putin(i,j-3,k))) & + )* dyi & + + ( & + w0(i,j,k+1) * (rhobf_p * putin(i,j,k+1) + putin(i,j,k)) & + ) * inv2dzfk & + ) + end do end do - do k=1,kmax - do j=2,j1 - do i=2,i1 - - if(k==1) then + do k=2,kmax + inv2dzfk = 1./(2. * dzf(k)) + rhobf_p = rhobf(k+1)/rhobf(k) + rhobf_m = rhobf(k-1)/rhobf(k) + do j=2,j1 + do i=2,i1 - putout(i,j,k) = putout(i,j,k)- ( & - ( & - u0(i+1,j,k)/60.& - *(37.*(putin(i+1,j,k)+putin(i,j,k))-8.*(putin(i+2,j,k)+putin(i-1,j,k))+(putin(i+3,j,k)+putin(i-2,j,k)))& - -sign(1.,u0(i+1,j,k))*u0(i+1,j,k)/60.& - *(10.*(putin(i+1,j,k)-putin(i,j,k))-5.*(putin(i+2,j,k)-putin(i-1,j,k))+(putin(i+3,j,k)-putin(i-2,j,k)))& - -u0(i,j,k)/60.& - *(37.*(putin(i,j,k)+putin(i-1,j,k))-8.*(putin(i+1,j,k)+putin(i-2,j,k))+(putin(i+2,j,k)+putin(i-3,j,k)))& - +sign(1.,u0(i,j,k))*u0(i,j,k)/60.& - *(10.*(putin(i,j,k)-putin(i-1,j,k))-5.*(putin(i+1,j,k)-putin(i-2,j,k))+(putin(i+2,j,k)-putin(i-3,j,k)))& + putout(i,j,k) = putout(i,j,k)- ( & + ( & + u0(i+1,j,k)/60.& + *(37.*(putin(i+1,j,k)+putin(i,j,k))-8.*(putin(i+2,j,k)+putin(i-1,j,k))+(putin(i+3,j,k)+putin(i-2,j,k)))& + -abs(u0(i+1,j,k))/60.& + *(10.*(putin(i+1,j,k)-putin(i,j,k))-5.*(putin(i+2,j,k)-putin(i-1,j,k))+(putin(i+3,j,k)-putin(i-2,j,k)))& + -u0(i,j,k)/60.& + *(37.*(putin(i,j,k)+putin(i-1,j,k))-8.*(putin(i+1,j,k)+putin(i-2,j,k))+(putin(i+2,j,k)+putin(i-3,j,k)))& + +abs(u0(i,j,k))/60.& + *(10.*(putin(i,j,k)-putin(i-1,j,k))-5.*(putin(i+1,j,k)-putin(i-2,j,k))+(putin(i+2,j,k)-putin(i-3,j,k)))& )*dxi& +(& - v0(i,j+1,k)/60.& - *(37.*(putin(i,j+1,k)+putin(i,j,k))-8.*(putin(i,j+2,k)+putin(i,j-1,k))+(putin(i,j+3,k)+putin(i,j-2,k)))& - -sign(1.,v0(i,j+1,k))*v0(i,j+1,k)/60.& - *(10.*(putin(i,j+1,k)-putin(i,j,k))-5.*(putin(i,j+2,k)-putin(i,j-1,k))+(putin(i,j+3,k)-putin(i,j-2,k)))& - -v0(i,j,k)/60.& - *(37.*(putin(i,j,k)+putin(i,j-1,k))-8.*(putin(i,j+1,k)+putin(i,j-2,k))+(putin(i,j+2,k)+putin(i,j-3,k)))& - +sign(1.,v0(i,j,k))*v0(i,j,k)/60.& - *(10.*(putin(i,j,k)-putin(i,j-1,k))-5.*(putin(i,j+1,k)-putin(i,j-2,k))+(putin(i,j+2,k)-putin(i,j-3,k))) & + v0(i,j+1,k)/60.& + *(37.*(putin(i,j+1,k)+putin(i,j,k))-8.*(putin(i,j+2,k)+putin(i,j-1,k))+(putin(i,j+3,k)+putin(i,j-2,k)))& + -abs(v0(i,j+1,k))/60.& + *(10.*(putin(i,j+1,k)-putin(i,j,k))-5.*(putin(i,j+2,k)-putin(i,j-1,k))+(putin(i,j+3,k)-putin(i,j-2,k)))& + -v0(i,j,k)/60.& + *(37.*(putin(i,j,k)+putin(i,j-1,k))-8.*(putin(i,j+1,k)+putin(i,j-2,k))+(putin(i,j+2,k)+putin(i,j-3,k)))& + +abs(v0(i,j,k))/60.& + *(10.*(putin(i,j,k)-putin(i,j-1,k))-5.*(putin(i,j+1,k)-putin(i,j-2,k))+(putin(i,j+2,k)-putin(i,j-3,k)))& )* dyi & - +(1./rhobf(k))*( & - w0(i,j,k+1) * (rhoputin(i,j,k+1) + rhoputin(i,j,k)) & - ) / ( 2. * dzf(k) ) & - ) + + ( & + w0(i,j,k+1) * (rhobf_p * putin(i,j,k+1) + putin(i,j,k)) & + -w0(i,j,k) * (rhobf_m * putin(i,j,k-1) + putin(i,j,k)) & + ) * inv2dzfk & + ) + + + end do + end do + end do + + else ! non-equidistant grid + k = 1 + inv2dzfk = 1./(2. * dzf(k)) + rhobf_p = rhobf(k+1)/rhobf(k) + + do j=2,j1 + do i=2,i1 + + putout(i,j,k) = putout(i,j,k)- ( & + ( & + u0(i+1,j,k)/60.& + *(37.*(putin(i+1,j,k)+putin(i,j,k))-8.*(putin(i+2,j,k)+putin(i-1,j,k))+(putin(i+3,j,k)+putin(i-2,j,k)))& + -abs(u0(i+1,j,k))/60.& + *(10.*(putin(i+1,j,k)-putin(i,j,k))-5.*(putin(i+2,j,k)-putin(i-1,j,k))+(putin(i+3,j,k)-putin(i-2,j,k)))& + -u0(i,j,k)/60.& + *(37.*(putin(i,j,k)+putin(i-1,j,k))-8.*(putin(i+1,j,k)+putin(i-2,j,k))+(putin(i+2,j,k)+putin(i-3,j,k)))& + +abs(u0(i,j,k))/60.& + *(10.*(putin(i,j,k)-putin(i-1,j,k))-5.*(putin(i+1,j,k)-putin(i-2,j,k))+(putin(i+2,j,k)-putin(i-3,j,k)))& + )*dxi& + +(& + v0(i,j+1,k)/60.& + *(37.*(putin(i,j+1,k)+putin(i,j,k))-8.*(putin(i,j+2,k)+putin(i,j-1,k))+(putin(i,j+3,k)+putin(i,j-2,k)))& + -abs(v0(i,j+1,k))/60.& + *(10.*(putin(i,j+1,k)-putin(i,j,k))-5.*(putin(i,j+2,k)-putin(i,j-1,k))+(putin(i,j+3,k)-putin(i,j-2,k)))& + -v0(i,j,k)/60.& + *(37.*(putin(i,j,k)+putin(i,j-1,k))-8.*(putin(i,j+1,k)+putin(i,j-2,k))+(putin(i,j+2,k)+putin(i,j-3,k)))& + +abs(v0(i,j,k))/60.& + *(10.*(putin(i,j,k)-putin(i,j-1,k))-5.*(putin(i,j+1,k)-putin(i,j-2,k))+(putin(i,j+2,k)-putin(i,j-3,k))) & + )* dyi & + + ( & + w0(i,j,k+1) * (rhobf_p * putin(i,j,k+1) * dzf(k) + putin(i,j,k) * dzf(k+1) ) / dzh(k+1) & + ) * inv2dzfk & + ) + end do + end do + + do k=2,kmax + inv2dzfk = 1./(2. * dzf(k)) + rhobf_p = rhobf(k+1)/rhobf(k) + rhobf_m = rhobf(k-1)/rhobf(k) + do j=2,j1 + do i=2,i1 - else putout(i,j,k) = putout(i,j,k)- ( & ( & u0(i+1,j,k)/60.& *(37.*(putin(i+1,j,k)+putin(i,j,k))-8.*(putin(i+2,j,k)+putin(i-1,j,k))+(putin(i+3,j,k)+putin(i-2,j,k)))& - -sign(1.,u0(i+1,j,k))*u0(i+1,j,k)/60.& + -abs(u0(i+1,j,k))/60.& *(10.*(putin(i+1,j,k)-putin(i,j,k))-5.*(putin(i+2,j,k)-putin(i-1,j,k))+(putin(i+3,j,k)-putin(i-2,j,k)))& -u0(i,j,k)/60.& *(37.*(putin(i,j,k)+putin(i-1,j,k))-8.*(putin(i+1,j,k)+putin(i-2,j,k))+(putin(i+2,j,k)+putin(i-3,j,k)))& - +sign(1.,u0(i,j,k))*u0(i,j,k)/60.& + +abs(u0(i,j,k))/60.& *(10.*(putin(i,j,k)-putin(i-1,j,k))-5.*(putin(i+1,j,k)-putin(i-2,j,k))+(putin(i+2,j,k)-putin(i-3,j,k)))& )*dxi& +(& v0(i,j+1,k)/60.& *(37.*(putin(i,j+1,k)+putin(i,j,k))-8.*(putin(i,j+2,k)+putin(i,j-1,k))+(putin(i,j+3,k)+putin(i,j-2,k)))& - -sign(1.,v0(i,j+1,k))*v0(i,j+1,k)/60.& + -abs(v0(i,j+1,k))/60.& *(10.*(putin(i,j+1,k)-putin(i,j,k))-5.*(putin(i,j+2,k)-putin(i,j-1,k))+(putin(i,j+3,k)-putin(i,j-2,k)))& -v0(i,j,k)/60.& *(37.*(putin(i,j,k)+putin(i,j-1,k))-8.*(putin(i,j+1,k)+putin(i,j-2,k))+(putin(i,j+2,k)+putin(i,j-3,k)))& - +sign(1.,v0(i,j,k))*v0(i,j,k)/60.& + +abs(v0(i,j,k))/60.& *(10.*(putin(i,j,k)-putin(i,j-1,k))-5.*(putin(i,j+1,k)-putin(i,j-2,k))+(putin(i,j+2,k)-putin(i,j-3,k)))& )* dyi & - +(1./rhobf(k))*( & - w0(i,j,k+1) * (rhoputin(i,j,k+1)+rhoputin(i,j,k)) & - -w0(i,j,k) * (rhoputin(i,j,k-1)+rhoputin(i,j,k)) & - ) / ( 2. * dzf(k) ) & + + ( & + w0(i,j,k+1) * (rhobf_p * putin(i,j,k+1) * dzf(k) + putin(i,j,k) * dzf(k+1) ) / dzh(k+1) & + -w0(i,j,k ) * (rhobf_m * putin(i,j,k-1) * dzf(k) + putin(i,j,k) * dzf(k-1) ) / dzh(k) & + ) * inv2dzfk & ) - end if - end do end do - end do + end do + + end if end subroutine advecc_52 @@ -127,34 +203,54 @@ end subroutine advecc_52 !> Advection at the u point. subroutine advecu_52(putin,putout) - use modglobal, only : i1,ih,j1,jh,k1,kmax,dxi5,dyi5,dzf + use modglobal, only : i1,ih,j1,jh,k1,kmax,dxi5,dyi5,dzf,dzh,leq use modfields, only : u0, v0, w0,rhobf implicit none real, dimension(2-ih:i1+ih,2-jh:j1+jh,k1), intent(in) :: putin !< Input: the u field real, dimension(2-ih:i1+ih,2-jh:j1+jh,k1), intent(inout) :: putout !< Output: the tendency - real, dimension(2-ih:i1+ih,2-jh:j1+jh,k1) :: rhoputin integer :: i,j,k - !if (leq) then - - do k=1,k1 - do j=2-jh,j1+jh - do i=2-ih,i1+ih - rhoputin(i,j,k)=rhobf(k)*putin(i,j,k) - end do - end do +if (leq) then + k = 1 + do j=2,j1 + do i=2,i1 + + putout(i,j,k) = putout(i,j,k)- ( & + (& + (u0(i+1,j,k)+u0(i,j,k))/60.& + *(37.*(putin(i+1,j,k)+putin(i,j,k))-8.*(putin(i+2,j,k)+putin(i-1,j,k))+(putin(i+3,j,k)+putin(i-2,j,k)))& + -sign(1.,(u0(i+1,j,k)+u0(i,j,k)))*(u0(i+1,j,k)+u0(i,j,k))/60.& + *(10.*(putin(i+1,j,k)-putin(i,j,k))-5.*(putin(i+2,j,k)-putin(i-1,j,k))+(putin(i+3,j,k)-putin(i-2,j,k)))& + -(u0(i,j,k)+u0(i-1,j,k))/60.& + *(37.*(putin(i,j,k)+putin(i-1,j,k))-8.*(putin(i+1,j,k)+putin(i-2,j,k))+(putin(i+2,j,k)+putin(i-3,j,k)))& + +sign(1.,(u0(i,j,k)+u0(i-1,j,k)))*(u0(i,j,k)+u0(i-1,j,k))/60.& + *(10.*(putin(i,j,k)-putin(i-1,j,k))-5.*(putin(i+1,j,k)-putin(i-2,j,k))+(putin(i+2,j,k)-putin(i-3,j,k)))& + )*dxi5 & + +(& + (v0(i,j+1,k)+v0(i-1,j+1,k))/60.& + *(37.*(putin(i,j+1,k)+putin(i,j,k))-8.*(putin(i,j+2,k)+putin(i,j-1,k))+(putin(i,j+3,k)+putin(i,j-2,k)))& + -sign(1.,(v0(i,j+1,k)+v0(i-1,j+1,k)))*(v0(i,j+1,k)+v0(i-1,j+1,k))/60.& + *(10.*(putin(i,j+1,k)-putin(i,j,k))-5.*(putin(i,j+2,k)-putin(i,j-1,k))+(putin(i,j+3,k)-putin(i,j-2,k)))& + -(v0(i,j,k)+v0(i-1,j,k))/60.& + *(37.*(putin(i,j,k)+putin(i,j-1,k))-8.*(putin(i,j+1,k)+putin(i,j-2,k))+(putin(i,j+2,k)+putin(i,j-3,k)))& + +sign(1.,(v0(i,j,k)+v0(i-1,j,k)))*(v0(i,j,k)+v0(i-1,j,k))/60.& + *(10.*(putin(i,j,k)-putin(i,j-1,k))-5.*(putin(i,j+1,k)-putin(i,j-2,k))+(putin(i,j+2,k)-putin(i,j-3,k)))& + )* dyi5 & + +(1./rhobf(k))*( & + ( rhobf(k+1)*putin(i,j,k+1) + rhobf(k) * putin(i,j,k)) *(w0(i,j,k+1)+ w0(i-1,j,k+1)) & + ) / (4.*dzf(k)) & + ) + end do end do - - do k=1,kmax + + do k=2,kmax do j=2,j1 do i=2,i1 - if(k==1) then - putout(i,j,k) = putout(i,j,k)- ( & - (& + ( & (u0(i+1,j,k)+u0(i,j,k))/60.& *(37.*(putin(i+1,j,k)+putin(i,j,k))-8.*(putin(i+2,j,k)+putin(i-1,j,k))+(putin(i+3,j,k)+putin(i-2,j,k)))& -sign(1.,(u0(i+1,j,k)+u0(i,j,k)))*(u0(i+1,j,k)+u0(i,j,k))/60.& @@ -163,7 +259,7 @@ subroutine advecu_52(putin,putout) *(37.*(putin(i,j,k)+putin(i-1,j,k))-8.*(putin(i+1,j,k)+putin(i-2,j,k))+(putin(i+2,j,k)+putin(i-3,j,k)))& +sign(1.,(u0(i,j,k)+u0(i-1,j,k)))*(u0(i,j,k)+u0(i-1,j,k))/60.& *(10.*(putin(i,j,k)-putin(i-1,j,k))-5.*(putin(i+1,j,k)-putin(i-2,j,k))+(putin(i+2,j,k)-putin(i-3,j,k)))& - )*dxi5 & + )*dxi5& +(& (v0(i,j+1,k)+v0(i-1,j+1,k))/60.& *(37.*(putin(i,j+1,k)+putin(i,j,k))-8.*(putin(i,j+2,k)+putin(i,j-1,k))+(putin(i,j+3,k)+putin(i,j-2,k)))& @@ -175,11 +271,52 @@ subroutine advecu_52(putin,putout) *(10.*(putin(i,j,k)-putin(i,j-1,k))-5.*(putin(i,j+1,k)-putin(i,j-2,k))+(putin(i,j+2,k)-putin(i,j-3,k)))& )* dyi5 & +(1./rhobf(k))*( & - ( rhoputin(i,j,k+1) + rhoputin(i,j,k)) *(w0(i,j,k+1)+ w0(i-1,j,k+1)) & - ) / (4.*dzf(k)) & + (rhobf(k) * putin(i,j,k) + rhobf(k+1) * putin(i,j,k+1) )*(w0(i,j,k+1)+w0(i-1,j,k+1)) & + -(rhobf(k) * putin(i,j,k) + rhobf(k-1) * putin(i,j,k-1) )*(w0(i,j,k )+w0(i-1,j,k )) & + ) / (4. * dzf(k)) & ) - else + end do + end do + end do + +else ! non-equidistant grid + k = 1 + do j=2,j1 + do i=2,i1 + + putout(i,j,k) = putout(i,j,k)- ( & + (& + (u0(i+1,j,k)+u0(i,j,k))/60.& + *(37.*(putin(i+1,j,k)+putin(i,j,k))-8.*(putin(i+2,j,k)+putin(i-1,j,k))+(putin(i+3,j,k)+putin(i-2,j,k)))& + -sign(1.,(u0(i+1,j,k)+u0(i,j,k)))*(u0(i+1,j,k)+u0(i,j,k))/60.& + *(10.*(putin(i+1,j,k)-putin(i,j,k))-5.*(putin(i+2,j,k)-putin(i-1,j,k))+(putin(i+3,j,k)-putin(i-2,j,k)))& + -(u0(i,j,k)+u0(i-1,j,k))/60.& + *(37.*(putin(i,j,k)+putin(i-1,j,k))-8.*(putin(i+1,j,k)+putin(i-2,j,k))+(putin(i+2,j,k)+putin(i-3,j,k)))& + +sign(1.,(u0(i,j,k)+u0(i-1,j,k)))*(u0(i,j,k)+u0(i-1,j,k))/60.& + *(10.*(putin(i,j,k)-putin(i-1,j,k))-5.*(putin(i+1,j,k)-putin(i-2,j,k))+(putin(i+2,j,k)-putin(i-3,j,k)))& + )*dxi5 & + +(& + (v0(i,j+1,k)+v0(i-1,j+1,k))/60.& + *(37.*(putin(i,j+1,k)+putin(i,j,k))-8.*(putin(i,j+2,k)+putin(i,j-1,k))+(putin(i,j+3,k)+putin(i,j-2,k)))& + -sign(1.,(v0(i,j+1,k)+v0(i-1,j+1,k)))*(v0(i,j+1,k)+v0(i-1,j+1,k))/60.& + *(10.*(putin(i,j+1,k)-putin(i,j,k))-5.*(putin(i,j+2,k)-putin(i,j-1,k))+(putin(i,j+3,k)-putin(i,j-2,k)))& + -(v0(i,j,k)+v0(i-1,j,k))/60.& + *(37.*(putin(i,j,k)+putin(i,j-1,k))-8.*(putin(i,j+1,k)+putin(i,j-2,k))+(putin(i,j+2,k)+putin(i,j-3,k)))& + +sign(1.,(v0(i,j,k)+v0(i-1,j,k)))*(v0(i,j,k)+v0(i-1,j,k))/60.& + *(10.*(putin(i,j,k)-putin(i,j-1,k))-5.*(putin(i,j+1,k)-putin(i,j-2,k))+(putin(i,j+2,k)-putin(i,j-3,k)))& + )* dyi5 & + +(1./rhobf(k))*( & + ( rhobf(k+1) * putin(i,j,k+1)*dzf(k) + rhobf(k) * putin(i,j,k) *dzf(k+1) ) / dzh(k+1) *( w0(i,j,k+1)+ w0(i-1,j,k+1) ) & + ) / (4.*dzf(k)) & + ) + end do + end do + + do k=2,kmax + do j=2,j1 + do i=2,i1 + putout(i,j,k) = putout(i,j,k)- ( & ( & (u0(i+1,j,k)+u0(i,j,k))/60.& @@ -201,16 +338,15 @@ subroutine advecu_52(putin,putout) +sign(1.,(v0(i,j,k)+v0(i-1,j,k)))*(v0(i,j,k)+v0(i-1,j,k))/60.& *(10.*(putin(i,j,k)-putin(i,j-1,k))-5.*(putin(i,j+1,k)-putin(i,j-2,k))+(putin(i,j+2,k)-putin(i,j-3,k)))& )* dyi5 & - +(1./rhobf(k))*( & - (rhoputin(i,j,k)+rhoputin(i,j,k+1) )*(w0(i,j,k+1)+w0(i-1,j,k+1)) & - -(rhoputin(i,j,k)+rhoputin(i,j,k-1) )*(w0(i,j,k )+w0(i-1,j,k )) & + +(1./rhobf(k))*( & + ( rhobf(k+1) * putin(i,j,k+1)*dzf(k) + rhobf(k) * putin(i,j,k) *dzf(k+1) ) / dzh(k+1) *( w0(i,j,k+1)+ w0(i-1,j,k+1) ) & + -( rhobf(k) * putin(i,j,k) *dzf(k-1) + rhobf(k-1) * putin(i,j,k-1)*dzf(k) ) / dzh(k) *( w0(i,j,k) + w0(i-1,j,k) ) & ) / (4. * dzf(k)) & ) - end if - end do end do - end do + end do +end if end subroutine advecu_52 @@ -218,32 +354,50 @@ end subroutine advecu_52 !> Advection at the v point. subroutine advecv_52(putin, putout) - use modglobal, only : i1,ih,j1,jh,k1,kmax,dxi5,dyi5,dzf + use modglobal, only : i1,ih,j1,jh,k1,kmax,dxi5,dyi5,dzf,dzh,leq use modfields, only : u0, v0, w0,rhobf implicit none real, dimension(2-ih:i1+ih,2-jh:j1+jh,k1), intent(in) :: putin !< Input: the v field real, dimension(2-ih:i1+ih,2-jh:j1+jh,k1), intent(inout) :: putout !< Output: the tendency - real, dimension(2-ih:i1+ih,2-jh:j1+jh,k1) :: rhoputin - integer :: i,j,k - !if (leq) then + if (leq) then - do k=1,k1 - do j=2-jh,j1+jh - do i=2-ih,i1+ih - rhoputin(i,j,k)=rhobf(k)*putin(i,j,k) - end do - end do + k = 1 + do j=2,j1 + do i=2,i1 + putout(i,j,k) = putout(i,j,k)- ( & + ( & + (u0(i+1,j,k)+u0(i+1,j-1,k))/60.& + *(37.*(putin(i+1,j,k)+putin(i,j,k))-8.*(putin(i+2,j,k)+putin(i-1,j,k))+(putin(i+3,j,k)+putin(i-2,j,k)))& + -sign(1.,(u0(i+1,j,k)+u0(i+1,j-1,k)))*(u0(i+1,j,k)+u0(i+1,j-1,k))/60.& + *(10.*(putin(i+1,j,k)-putin(i,j,k))-5.*(putin(i+2,j,k)-putin(i-1,j,k))+(putin(i+3,j,k)-putin(i-2,j,k)))& + -(u0(i,j,k)+u0(i,j-1,k))/60.& + *(37.*(putin(i,j,k)+putin(i-1,j,k))-8.*(putin(i+1,j,k)+putin(i-2,j,k))+(putin(i+2,j,k)+putin(i-3,j,k)))& + +sign(1.,(u0(i,j,k)+u0(i,j-1,k)))*(u0(i,j,k)+u0(i,j-1,k))/60.& + *(10.*(putin(i,j,k)-putin(i-1,j,k))-5.*(putin(i+1,j,k)-putin(i-2,j,k))+(putin(i+2,j,k)-putin(i-3,j,k)))& + )*dxi5& + +(& + (v0(i,j+1,k)+v0(i,j,k))/60.& + *(37.*(putin(i,j+1,k)+putin(i,j,k))-8.*(putin(i,j+2,k)+putin(i,j-1,k))+(putin(i,j+3,k)+putin(i,j-2,k)))& + -sign(1.,(v0(i,j+1,k)+v0(i,j,k)))*(v0(i,j+1,k)+v0(i,j,k))/60.& + *(10.*(putin(i,j+1,k)-putin(i,j,k))-5.*(putin(i,j+2,k)-putin(i,j-1,k))+(putin(i,j+3,k)-putin(i,j-2,k)))& + -(v0(i,j,k)+v0(i,j-1,k))/60.& + *(37.*(putin(i,j,k)+putin(i,j-1,k))-8.*(putin(i,j+1,k)+putin(i,j-2,k))+(putin(i,j+2,k)+putin(i,j-3,k)))& + +sign(1.,(v0(i,j,k)+v0(i,j-1,k)))*(v0(i,j,k)+v0(i,j-1,k))/60.& + *(10.*(putin(i,j,k)-putin(i,j-1,k))-5.*(putin(i,j+1,k)-putin(i,j-2,k))+(putin(i,j+2,k)-putin(i,j-3,k)))& + )* dyi5 & + +(1./rhobf(k))*( & + (w0(i,j,k+1)+w0(i,j-1,k+1)) *(rhobf(k+1) * putin(i,j,k+1) + rhobf(k) * putin(i,j,k)) & + ) / (4. * dzf(k)) & + ) + end do end do - - do k=1,kmax + + do k=2,kmax do j=2,j1 - do i=2,i1 - - if(k==1) then - + do i=2,i1 putout(i,j,k) = putout(i,j,k)- ( & ( & (u0(i+1,j,k)+u0(i+1,j-1,k))/60.& @@ -266,11 +420,49 @@ subroutine advecv_52(putin, putout) *(10.*(putin(i,j,k)-putin(i,j-1,k))-5.*(putin(i,j+1,k)-putin(i,j-2,k))+(putin(i,j+2,k)-putin(i,j-3,k)))& )* dyi5 & +(1./rhobf(k))*( & - (w0(i,j,k+1)+w0(i,j-1,k+1)) *(rhoputin(i,j,k+1)+rhoputin(i,j,k)) & + (w0(i,j,k+1)+w0(i,j-1,k+1))*(rhobf(k+1) * putin(i,j,k+1) + rhobf(k) * putin(i,j,k)) & + -(w0(i,j,k) +w0(i,j-1,k)) *(rhobf(k-1) * putin(i,j,k-1) + rhobf(k) * putin(i,j,k)) & ) / (4. * dzf(k)) & ) - else + end do + end do + end do +else ! non-equidistant grid + k = 1 + do j=2,j1 + do i=2,i1 + putout(i,j,k) = putout(i,j,k)- ( & + ( & + (u0(i+1,j,k)+u0(i+1,j-1,k))/60.& + *(37.*(putin(i+1,j,k)+putin(i,j,k))-8.*(putin(i+2,j,k)+putin(i-1,j,k))+(putin(i+3,j,k)+putin(i-2,j,k)))& + -sign(1.,(u0(i+1,j,k)+u0(i+1,j-1,k)))*(u0(i+1,j,k)+u0(i+1,j-1,k))/60.& + *(10.*(putin(i+1,j,k)-putin(i,j,k))-5.*(putin(i+2,j,k)-putin(i-1,j,k))+(putin(i+3,j,k)-putin(i-2,j,k)))& + -(u0(i,j,k)+u0(i,j-1,k))/60.& + *(37.*(putin(i,j,k)+putin(i-1,j,k))-8.*(putin(i+1,j,k)+putin(i-2,j,k))+(putin(i+2,j,k)+putin(i-3,j,k)))& + +sign(1.,(u0(i,j,k)+u0(i,j-1,k)))*(u0(i,j,k)+u0(i,j-1,k))/60.& + *(10.*(putin(i,j,k)-putin(i-1,j,k))-5.*(putin(i+1,j,k)-putin(i-2,j,k))+(putin(i+2,j,k)-putin(i-3,j,k)))& + )*dxi5& + +(& + (v0(i,j+1,k)+v0(i,j,k))/60.& + *(37.*(putin(i,j+1,k)+putin(i,j,k))-8.*(putin(i,j+2,k)+putin(i,j-1,k))+(putin(i,j+3,k)+putin(i,j-2,k)))& + -sign(1.,(v0(i,j+1,k)+v0(i,j,k)))*(v0(i,j+1,k)+v0(i,j,k))/60.& + *(10.*(putin(i,j+1,k)-putin(i,j,k))-5.*(putin(i,j+2,k)-putin(i,j-1,k))+(putin(i,j+3,k)-putin(i,j-2,k)))& + -(v0(i,j,k)+v0(i,j-1,k))/60.& + *(37.*(putin(i,j,k)+putin(i,j-1,k))-8.*(putin(i,j+1,k)+putin(i,j-2,k))+(putin(i,j+2,k)+putin(i,j-3,k)))& + +sign(1.,(v0(i,j,k)+v0(i,j-1,k)))*(v0(i,j,k)+v0(i,j-1,k))/60.& + *(10.*(putin(i,j,k)-putin(i,j-1,k))-5.*(putin(i,j+1,k)-putin(i,j-2,k))+(putin(i,j+2,k)-putin(i,j-3,k)))& + )* dyi5 & + +(1./rhobf(k))*( & + (w0(i,j,k+1)+w0(i,j-1,k+1)) * (rhobf(k+1) * putin(i,j,k+1)*dzf(k) + rhobf(k) * putin(i,j,k)*dzf(k+1)) / dzh(k+1) & + ) / (4. * dzf(k)) & + ) + end do + end do + + do k=2,kmax + do j=2,j1 + do i=2,i1 putout(i,j,k) = putout(i,j,k)- ( & ( & (u0(i+1,j,k)+u0(i+1,j-1,k))/60.& @@ -293,15 +485,16 @@ subroutine advecv_52(putin, putout) *(10.*(putin(i,j,k)-putin(i,j-1,k))-5.*(putin(i,j+1,k)-putin(i,j-2,k))+(putin(i,j+2,k)-putin(i,j-3,k)))& )* dyi5 & +(1./rhobf(k))*( & - (w0(i,j,k+1)+w0(i,j-1,k+1))*(rhoputin(i,j,k+1)+rhoputin(i,j,k)) & - -(w0(i,j,k) +w0(i,j-1,k)) *(rhoputin(i,j,k-1)+rhoputin(i,j,k)) & - ) / (4. * dzf(k)) & - ) - end if - + (w0(i,j,k+1)+w0(i,j-1,k+1)) * (rhobf(k+1) * putin(i,j,k+1)*dzf(k) + rhobf(k) * putin(i,j,k)*dzf(k+1)) / dzh(k+1) & + -(w0(i,j,k) + w0(i,j-1,k)) * (rhobf(k-1) * putin(i,j,k-1)*dzf(k) + rhobf(k) * putin(i,j,k)*dzf(k-1)) / dzh(k) & + ) / (4. * dzf(k)) & + ) + ! note advec_2nd had rhobf(k) instead of rhobf(k+1) on top row, which seems wrong + ! fixed here end do end do end do +end if end subroutine advecv_52 @@ -309,26 +502,17 @@ end subroutine advecv_52 !> Advection at the w point. subroutine advecw_52(putin, putout) - use modglobal, only : i1,ih,j1,jh,k1,kmax,dxi5,dyi5,dzh + use modglobal, only : i1,ih,j1,jh,k1,kmax,dxi5,dyi5,dzh,dzh,leq use modfields, only : u0, v0, w0,rhobh implicit none real, dimension(2-ih:i1+ih,2-jh:j1+jh,k1), intent(in) :: putin !< Input: the w field real, dimension(2-ih:i1+ih,2-jh:j1+jh,k1), intent(inout) :: putout !< Output: the tendency - real, dimension(2-ih:i1+ih,2-jh:j1+jh,k1) :: rhoputin integer :: i,j,k - - !if (leq) then - - do k=1,k1 - do j=2-jh,j1+jh - do i=2-ih,i1+ih - rhoputin(i,j,k)=rhobh(k)*putin(i,j,k) - end do - end do - end do - + ! if (leq) then + ! FJ: judging from advec_2nd, equidistant and non-equidistant cases are similar + do k=2,kmax do j=2,j1 do i=2,i1 @@ -354,12 +538,14 @@ subroutine advecw_52(putin, putout) *(10.*(putin(i,j,k)-putin(i,j-1,k))-5.*(putin(i,j+1,k)-putin(i,j-2,k))+(putin(i,j+2,k)-putin(i,j-3,k)))& )* dyi5 & + (1./rhobh(k))*( & - (rhoputin(i,j,k)+rhoputin(i,j,k+1) )*(w0(i,j,k) + w0(i,j,k+1)) & - -(rhoputin(i,j,k)+rhoputin(i,j,k-1) )*(w0(i,j,k) + w0(i,j,k-1)) & + (rhobh(k) * putin(i,j,k) + rhobh(k+1) * putin(i,j,k+1) )*(w0(i,j,k) + w0(i,j,k+1)) & + -(rhobh(k) * putin(i,j,k) + rhobh(k-1) * putin(i,j,k-1) )*(w0(i,j,k) + w0(i,j,k-1)) & )/ (4. * dzh(k)) & ) end do end do end do + + end subroutine advecw_52 diff --git a/src/advec_5th.f90 b/src/advec_5th.f90 index 6eca32a5..4e861989 100644 --- a/src/advec_5th.f90 +++ b/src/advec_5th.f90 @@ -43,19 +43,9 @@ subroutine advecc_5th(putin, putout) real, dimension(2-ih:i1+ih,2-jh:j1+jh,k1), intent(in) :: putin !< Input: the cell centered field real, dimension(2-ih:i1+ih,2-jh:j1+jh,k1), intent(inout) :: putout !< Output: the tendency - real, dimension(2-ih:i1+ih,2-jh:j1+jh,k1) :: rhoputin integer :: i,j,k - !if (leq) then - - do k=1,k1 - do j=2-jh,j1+jh - do i=2-ih,i1+ih - rhoputin(i,j,k)=rhobf(k)*putin(i,j,k) - end do - end do - end do do k=1,kmax do j=2,j1 @@ -85,7 +75,7 @@ subroutine advecc_5th(putin, putout) *(10.*(putin(i,j,k)-putin(i,j-1,k))-5.*(putin(i,j+1,k)-putin(i,j-2,k))+(putin(i,j+2,k)-putin(i,j-3,k))) & )* dyi & +(1./rhobf(1))*( & - w0(i,j,k+1) * (rhoputin(i,j,k+1) + rhoputin(i,j,k)) & + w0(i,j,k+1) * (rhobf(k+1)*putin(i,j,k+1) + rhobf(k)*putin(i,j,k)) & ) / ( 2. * dzf(k) ) & ) @@ -114,8 +104,8 @@ subroutine advecc_5th(putin, putout) *(10.*(putin(i,j,k)-putin(i,j-1,k))-5.*(putin(i,j+1,k)-putin(i,j-2,k))+(putin(i,j+2,k)-putin(i,j-3,k)))& )* dyi & +(1./rhobf(k))*( & - w0(i,j,k+1) * (rhoputin(i,j,k+1)+rhoputin(i,j,k)) & - -w0(i,j,k) * (rhoputin(i,j,k-1)+rhoputin(i,j,k)) & + w0(i,j,k+1) * (rhobf(k+1)*putin(i,j,k+1)+rhobf(k)*putin(i,j,k)) & + -w0(i,j,k) * (rhobf(k-1)*putin(i,j,k-1)+rhobf(k)*putin(i,j,k)) & ) / ( 2. * dzf(k) ) & ) @@ -145,12 +135,12 @@ subroutine advecc_5th(putin, putout) )* dyi & +(1/rhobf(k))*( & w0(i,j,k+1)/60.& - *(37.*(rhoputin(i,j,k+1)+rhoputin(i,j,k))-8.*(rhoputin(i,j,k+2)+rhoputin(i,j,k-1))& - +(rhoputin(i,j,k+3)+rhoputin(i,j,k-2)))& + *(37.*(rhobf(k+1)*putin(i,j,k+1)+rhobf(k)*putin(i,j,k))-8.*(rhobf(k+2)*putin(i,j,k+2)+rhobf(k-1)*putin(i,j,k-1))& + +(rhobf(k+3)*putin(i,j,k+3)+rhobf(k-2)*putin(i,j,k-2)))& -sign(1.,w0(i,j,k+1))*w0(i,j,k+1)/60.& - *(10.*(rhoputin(i,j,k+1)-rhoputin(i,j,k))-5.*(rhoputin(i,j,k+2)-rhoputin(i,j,k-1))& - +(rhoputin(i,j,k+3)-rhoputin(i,j,k-2)))& - -w0(i,j,k) * (rhoputin(i,j,k-1)+rhoputin(i,j,k))/2. & + *(10.*(rhobf(k+1)*putin(i,j,k+1)-rhobf(k)*putin(i,j,k))-5.*(rhobf(k+2)*putin(i,j,k+2)-rhobf(k-1)*putin(i,j,k-1))& + +(rhobf(k+3)*putin(i,j,k+3)-rhobf(k-2)*putin(i,j,k-2)))& + -w0(i,j,k) * (rhobf(k-1)*putin(i,j,k-1)+rhobf(k)*putin(i,j,k))/2. & ) / ( dzf(k) ) & ) elseif(k==kmax-2) then @@ -177,13 +167,13 @@ subroutine advecc_5th(putin, putout) *(10.*(putin(i,j,k)-putin(i,j-1,k))-5.*(putin(i,j+1,k)-putin(i,j-2,k))+(putin(i,j+2,k)-putin(i,j-3,k)))& )* dyi & +(1./rhobf(k))*( & - w0(i,j,k+1) * (rhoputin(i,j,k+1)+rhoputin(i,j,k))/2. & + w0(i,j,k+1) * (rhobf(k+1)*putin(i,j,k+1)+rhobf(k)*putin(i,j,k))/2. & -w0(i,j,k)/60.& - *(37.*(rhoputin(i,j,k)+rhoputin(i,j,k-1))-8.*(rhoputin(i,j,k+1)+rhoputin(i,j,k-2))& - +(rhoputin(i,j,k+2)+rhoputin(i,j,k-3)))& + *(37.*(rhobf(k)*putin(i,j,k)+rhobf(k-1)*putin(i,j,k-1))-8.*(rhobf(k+1)*putin(i,j,k+1)+rhobf(k-2)*putin(i,j,k-2))& + +(rhobf(k+2)*putin(i,j,k+2)+rhobf(k-3)*putin(i,j,k-3)))& +sign(1.,w0(i,j,k))*w0(i,j,k)/60.& - *(10.*(rhoputin(i,j,k)-rhoputin(i,j,k-1))-5.*(rhoputin(i,j,k+1)-rhoputin(i,j,k-2))& - +(rhoputin(i,j,k+2)-rhoputin(i,j,k-3)))& + *(10.*(rhobf(k)*putin(i,j,k)-rhobf(k-1)*putin(i,j,k-1))-5.*(rhobf(k+1)*putin(i,j,k+1)-rhobf(k-2)*putin(i,j,k-2))& + +(rhobf(k+2)*putin(i,j,k+2)-rhobf(k-3)*putin(i,j,k-3)))& ) / dzf(k) & ) else @@ -211,17 +201,17 @@ subroutine advecc_5th(putin, putout) )* dyi & +(1./rhobf(k))*( & w0(i,j,k+1)/60.& - *(37.*(rhoputin(i,j,k+1)+rhoputin(i,j,k))-8.*(rhoputin(i,j,k+2)+rhoputin(i,j,k-1))& - +(rhoputin(i,j,k+3)+rhoputin(i,j,k-2)))& + *(37.*(rhobf(k+1)*putin(i,j,k+1)+rhobf(k)*putin(i,j,k))-8.*(rhobf(k+2)*putin(i,j,k+2)+rhobf(k-1)*putin(i,j,k-1))& + +(rhobf(k+3)*putin(i,j,k+3)+rhobf(k-2)*putin(i,j,k-2)))& -sign(1.,w0(i,j,k+1))*w0(i,j,k+1)/60.& - *(10.*(rhoputin(i,j,k+1)-rhoputin(i,j,k))-5.*(rhoputin(i,j,k+2)-rhoputin(i,j,k-1))& - +(rhoputin(i,j,k+3)-rhoputin(i,j,k-2)))& + *(10.*(rhobf(k+1)*putin(i,j,k+1)-rhobf(k)*putin(i,j,k))-5.*(rhobf(k+2)*putin(i,j,k+2)-rhobf(k-1)*putin(i,j,k-1))& + +(rhobf(k+3)*putin(i,j,k+3)-rhobf(k-2)*putin(i,j,k-2)))& -w0(i,j,k)/60.& - *(37.*(rhoputin(i,j,k)+rhoputin(i,j,k-1))-8.*(rhoputin(i,j,k+1)+rhoputin(i,j,k-2))& - +(rhoputin(i,j,k+2)+rhoputin(i,j,k-3)))& + *(37.*(rhobf(k)*putin(i,j,k)+rhobf(k-1)*putin(i,j,k-1))-8.*(rhobf(k+1)*putin(i,j,k+1)+rhobf(k-2)*putin(i,j,k-2))& + +(rhobf(k+2)*putin(i,j,k+2)+rhobf(k-3)*putin(i,j,k-3)))& +sign(1.,w0(i,j,k))*w0(i,j,k)/60.& - *(10.*(rhoputin(i,j,k)-rhoputin(i,j,k-1))-5.*(rhoputin(i,j,k+1)-rhoputin(i,j,k-2))& - +(rhoputin(i,j,k+2)-rhoputin(i,j,k-3)))& + *(10.*(rhobf(k)*putin(i,j,k)-rhobf(k-1)*putin(i,j,k-1))-5.*(rhobf(k+1)*putin(i,j,k+1)-rhobf(k-2)*putin(i,j,k-2))& + +(rhobf(k+2)*putin(i,j,k+2)-rhobf(k-3)*putin(i,j,k-3)))& ) / dzf(k) & ) @@ -244,18 +234,9 @@ subroutine advecu_5th(putin,putout) real, dimension(2-ih:i1+ih,2-jh:j1+jh,k1), intent(in) :: putin !< Input: the u field real, dimension(2-ih:i1+ih,2-jh:j1+jh,k1), intent(inout) :: putout !< Output: the tendency - real, dimension(2-ih:i1+ih,2-jh:j1+jh,k1) :: rhoputin integer :: i,j,k - do k=1,k1 - do j=2-jh,j1+jh - do i=2-ih,i1+ih - rhoputin(i,j,k)=rhobf(k)*putin(i,j,k) - end do - end do - end do - !if (leq) then do k=1,kmax @@ -286,7 +267,7 @@ subroutine advecu_5th(putin,putout) *(10.*(putin(i,j,k)-putin(i,j-1,k))-5.*(putin(i,j+1,k)-putin(i,j-2,k))+(putin(i,j+2,k)-putin(i,j-3,k)))& )* dyi5 & +(1./rhobf(1))*( & - ( rhoputin(i,j,k+1) + rhoputin(i,j,k)) *(w0(i,j,k+1)+ w0(i-1,j,k+1)) & + ( rhobf(k+1)*putin(i,j,k+1) + rhobf(k)*putin(i,j,k)) *(w0(i,j,k+1)+ w0(i-1,j,k+1)) & ) / (4.*dzf(k)) & ) @@ -314,8 +295,8 @@ subroutine advecu_5th(putin,putout) *(10.*(putin(i,j,k)-putin(i,j-1,k))-5.*(putin(i,j+1,k)-putin(i,j-2,k))+(putin(i,j+2,k)-putin(i,j-3,k)))& )* dyi5 & + (1./rhobf(k))*( & - (rhoputin(i,j,k)+rhoputin(i,j,k+1) )*(w0(i,j,k+1)+w0(i-1,j,k+1)) & - -(rhoputin(i,j,k)+rhoputin(i,j,k-1) )*(w0(i,j,k )+w0(i-1,j,k )) & + (rhobf(k)*putin(i,j,k)+rhobf(k+1)*putin(i,j,k+1) )*(w0(i,j,k+1)+w0(i-1,j,k+1)) & + -(rhobf(k)*putin(i,j,k)+rhobf(k-1)*putin(i,j,k-1) )*(w0(i,j,k )+w0(i-1,j,k )) & ) / (4. * dzf(k)) & ) @@ -344,12 +325,12 @@ subroutine advecu_5th(putin,putout) )* dyi5 & +(1/rhobf(k))*( & (w0(i,j,k+1)+w0(i-1,j,k+1))/60.& - *(37.*(rhoputin(i,j,k+1)+rhoputin(i,j,k))-8.*(rhoputin(i,j,k+2)+rhoputin(i,j,k-1))& - +(rhoputin(i,j,k+3)+rhoputin(i,j,k-2)))& + *(37.*(rhobf(k+1)*putin(i,j,k+1)+rhobf(k)*putin(i,j,k))-8.*(rhobf(k+2)*putin(i,j,k+2)+rhobf(k-1)*putin(i,j,k-1))& + +(rhobf(k+3)*putin(i,j,k+3)+rhobf(k-2)*putin(i,j,k-2)))& -sign(1.,(w0(i,j,k+1)+w0(i-1,j,k+1)))*(w0(i,j,k+1)+w0(i-1,j,k+1))/60.& - *(10.*(rhoputin(i,j,k+1)-rhoputin(i,j,k))-5.*(rhoputin(i,j,k+2)-rhoputin(i,j,k-1))& - +(rhoputin(i,j,k+3)-rhoputin(i,j,k-2)))& - -(rhoputin(i,j,k)+rhoputin(i,j,k-1) )*(w0(i,j,k )+w0(i-1,j,k ))/2. & + *(10.*(rhobf(k+1)*putin(i,j,k+1)-rhobf(k)*putin(i,j,k))-5.*(rhobf(k+2)*putin(i,j,k+2)-rhobf(k-1)*putin(i,j,k-1))& + +(rhobf(k+3)*putin(i,j,k+3)-rhobf(k-2)*putin(i,j,k-2)))& + -(rhobf(k)*putin(i,j,k)+rhobf(k-1)*putin(i,j,k-1) )*(w0(i,j,k )+w0(i-1,j,k ))/2. & ) / (2. * dzf(k)) & ) elseif(k==kmax-2) then @@ -375,13 +356,13 @@ subroutine advecu_5th(putin,putout) *(10.*(putin(i,j,k)-putin(i,j-1,k))-5.*(putin(i,j+1,k)-putin(i,j-2,k))+(putin(i,j+2,k)-putin(i,j-3,k)))& )*dyi5& + (1./rhobf(k))*(& - (rhoputin(i,j,k)+rhoputin(i,j,k+1) )*(w0(i,j,k+1)+w0(i-1,j,k+1))/2. & + (rhobf(k)*putin(i,j,k)+rhobf(k+1)*putin(i,j,k+1) )*(w0(i,j,k+1)+w0(i-1,j,k+1))/2. & -(w0(i,j,k)+w0(i-1,j,k))/60.& - *(37.*(rhoputin(i,j,k)+rhoputin(i,j,k-1))-8.*(rhoputin(i,j,k+1)+rhoputin(i,j,k-2))& - +(rhoputin(i,j,k+2)+rhoputin(i,j,k-3)))& + *(37.*(rhobf(k)*putin(i,j,k)+rhobf(k-1)*putin(i,j,k-1))-8.*(rhobf(k+1)*putin(i,j,k+1)+rhobf(k-2)*putin(i,j,k-2))& + +(rhobf(k+2)*putin(i,j,k+2)+rhobf(k-3)*putin(i,j,k-3)))& +sign(1.,(w0(i,j,k)+w0(i-1,j,k)))*(w0(i,j,k)+w0(i-1,j,k))/60.& - *(10.*(rhoputin(i,j,k)-rhoputin(i,j,k-1))-5.*(rhoputin(i,j,k+1)-rhoputin(i,j,k-2))& - +(rhoputin(i,j,k+2)-rhoputin(i,j,k-3)))& + *(10.*(rhobf(k)*putin(i,j,k)-rhobf(k-1)*putin(i,j,k-1))-5.*(rhobf(k+1)*putin(i,j,k+1)-rhobf(k-2)*putin(i,j,k-2))& + +(rhobf(k+2)*putin(i,j,k+2)-rhobf(k-3)*putin(i,j,k-3)))& ) / (2. * dzf(k)) & ) @@ -410,17 +391,17 @@ subroutine advecu_5th(putin,putout) )*dyi5& + (1./rhobf(k))*(& (w0(i,j,k+1)+w0(i-1,j,k+1))/60.& - *(37.*(rhoputin(i,j,k+1)+rhoputin(i,j,k))-8.*(rhoputin(i,j,k+2)+rhoputin(i,j,k-1))& - +(rhoputin(i,j,k+3)+rhoputin(i,j,k-2)))& + *(37.*(rhobf(k+1)*putin(i,j,k+1)+rhobf(k)*putin(i,j,k))-8.*(rhobf(k+2)*putin(i,j,k+2)+rhobf(k-1)*putin(i,j,k-1))& + +(rhobf(k+3)*putin(i,j,k+3)+rhobf(k-2)*putin(i,j,k-2)))& -sign(1.,(w0(i,j,k+1)+w0(i-1,j,k+1)))*(w0(i,j,k+1)+w0(i-1,j,k+1))/60.& - *(10.*(rhoputin(i,j,k+1)-rhoputin(i,j,k))-5.*(rhoputin(i,j,k+2)-rhoputin(i,j,k-1))& - +(rhoputin(i,j,k+3)-rhoputin(i,j,k-2)))& + *(10.*(rhobf(k+1)*putin(i,j,k+1)-rhobf(k)*putin(i,j,k))-5.*(rhobf(k+2)*putin(i,j,k+2)-rhobf(k-1)*putin(i,j,k-1))& + +(rhobf(k+3)*putin(i,j,k+3)-rhobf(k-2)*putin(i,j,k-2)))& -(w0(i,j,k)+w0(i-1,j,k))/60.& - *(37.*(rhoputin(i,j,k)+rhoputin(i,j,k-1))-8.*(rhoputin(i,j,k+1)+rhoputin(i,j,k-2))& - +(rhoputin(i,j,k+2)+rhoputin(i,j,k-3)))& + *(37.*(rhobf(k)*putin(i,j,k)+rhobf(k-1)*putin(i,j,k-1))-8.*(rhobf(k+1)*putin(i,j,k+1)+rhobf(k-2)*putin(i,j,k-2))& + +(rhobf(k+2)*putin(i,j,k+2)+rhobf(k-3)*putin(i,j,k-3)))& +sign(1.,(w0(i,j,k)+w0(i-1,j,k)))*(w0(i,j,k)+w0(i-1,j,k))/60.& - *(10.*(rhoputin(i,j,k)-rhoputin(i,j,k-1))-5.*(rhoputin(i,j,k+1)-rhoputin(i,j,k-2))& - +(rhoputin(i,j,k+2)-rhoputin(i,j,k-3)))& + *(10.*(rhobf(k)*putin(i,j,k)-rhobf(k-1)*putin(i,j,k-1))-5.*(rhobf(k+1)*putin(i,j,k+1)-rhobf(k-2)*putin(i,j,k-2))& + +(rhobf(k+2)*putin(i,j,k+2)-rhobf(k-3)*putin(i,j,k-3)))& ) / (2. * dzf(k)) & ) @@ -444,19 +425,10 @@ subroutine advecv_5th(putin, putout) real, dimension(2-ih:i1+ih,2-jh:j1+jh,k1), intent(in) :: putin !< Input: the v field real, dimension(2-ih:i1+ih,2-jh:j1+jh,k1), intent(inout) :: putout !< Output: the tendency - real, dimension(2-ih:i1+ih,2-jh:j1+jh,k1) :: rhoputin integer :: i,j,k - do k=1,k1 - do j=2-jh,j1+jh - do i=2-ih,i1+ih - rhoputin(i,j,k)=rhobf(k)*putin(i,j,k) - end do - end do - end do - !if (leq) then do k=1,kmax @@ -487,7 +459,7 @@ subroutine advecv_5th(putin, putout) *(10.*(putin(i,j,k)-putin(i,j-1,k))-5.*(putin(i,j+1,k)-putin(i,j-2,k))+(putin(i,j+2,k)-putin(i,j-3,k)))& )* dyi5 & +(1./rhobf(1))*( & - (w0(i,j,k+1)+w0(i,j-1,k+1)) *(rhoputin(i,j,k+1)+rhoputin(i,j,k)) & + (w0(i,j,k+1)+w0(i,j-1,k+1)) *(rhobf(k+1)*putin(i,j,k+1)+rhobf(k)*putin(i,j,k)) & ) / (4. * dzf(k)) & ) @@ -507,7 +479,7 @@ subroutine advecv_5th(putin, putout) +(& (v0(i,j+1,k)+v0(i,j,k))/60.& *(37.*(putin(i,j+1,k)+putin(i,j,k))-8.*(putin(i,j+2,k)+putin(i,j-1,k))+(putin(i,j+3,k)+putin(i,j-2,k)))& - -sign(1.,(v0(i,j+1,k)+v0(i,j,k)))*(v0(i,j+1,k)+v0(i,j+1,k))/60.& + -sign(1.,(v0(i,j+1,k)+v0(i,j,k)))*(v0(i,j+1,k)+v0(i,j,k))/60.& *(10.*(putin(i,j+1,k)-putin(i,j,k))-5.*(putin(i,j+2,k)-putin(i,j-1,k))+(putin(i,j+3,k)-putin(i,j-2,k)))& -(v0(i,j,k)+v0(i,j-1,k))/60.& *(37.*(putin(i,j,k)+putin(i,j-1,k))-8.*(putin(i,j+1,k)+putin(i,j-2,k))+(putin(i,j+2,k)+putin(i,j-3,k)))& @@ -515,8 +487,8 @@ subroutine advecv_5th(putin, putout) *(10.*(putin(i,j,k)-putin(i,j-1,k))-5.*(putin(i,j+1,k)-putin(i,j-2,k))+(putin(i,j+2,k)-putin(i,j-3,k)))& )* dyi5 & +(1./rhobf(k))*( & - (w0(i,j,k+1)+w0(i,j-1,k+1))*(rhoputin(i,j,k+1)+rhoputin(i,j,k)) & - -(w0(i,j,k) +w0(i,j-1,k)) *(rhoputin(i,j,k-1)+rhoputin(i,j,k)) & + (w0(i,j,k+1)+w0(i,j-1,k+1))*(rhobf(k+1)*putin(i,j,k+1)+rhobf(k)*putin(i,j,k)) & + -(w0(i,j,k) +w0(i,j-1,k)) *(rhobf(k-1)*putin(i,j,k-1)+rhobf(k)*putin(i,j,k)) & ) / (4. * dzf(k)) & ) elseif(k==kmax-2) then @@ -542,13 +514,13 @@ subroutine advecv_5th(putin, putout) *(10.*(putin(i,j,k)-putin(i,j-1,k))-5.*(putin(i,j+1,k)-putin(i,j-2,k))+(putin(i,j+2,k)-putin(i,j-3,k)))& )*dyi5& +(1./rhobf(k))*(& - (w0(i,j,k+1)+w0(i,j-1,k+1))*(rhoputin(i,j,k+1)+rhoputin(i,j,k))/2. & + (w0(i,j,k+1)+w0(i,j-1,k+1))*(rhobf(k+1)*putin(i,j,k+1)+rhobf(k)*putin(i,j,k))/2. & -(w0(i,j,k)+w0(i,j-1,k))/60.& - *(37.*(rhoputin(i,j,k)+rhoputin(i,j,k-1))-8.*(rhoputin(i,j,k+1)+rhoputin(i,j,k-2))& - +(rhoputin(i,j,k+2)+rhoputin(i,j,k-3)))& + *(37.*(rhobf(k)*putin(i,j,k)+rhobf(k-1)*putin(i,j,k-1))-8.*(rhobf(k+1)*putin(i,j,k+1)+rhobf(k-2)*putin(i,j,k-2))& + +(rhobf(k+2)*putin(i,j,k+2)+rhobf(k-3)*putin(i,j,k-3)))& +sign(1.,(w0(i,j,k)+w0(i,j-1,k)))*(w0(i,j,k)+w0(i,j-1,k))/60.& - *(10.*(rhoputin(i,j,k)-rhoputin(i,j,k-1))-5.*(rhoputin(i,j,k+1)-rhoputin(i,j,k-2))& - +(rhoputin(i,j,k+2)-rhoputin(i,j,k-3)))& + *(10.*(rhobf(k)*putin(i,j,k)-rhobf(k-1)*putin(i,j,k-1))-5.*(rhobf(k+1)*putin(i,j,k+1)-rhobf(k-2)*putin(i,j,k-2))& + +(rhobf(k+2)*putin(i,j,k+2)-rhobf(k-3)*putin(i,j,k-3)))& ) / (2. * dzf(k)) & ) elseif(k==3) then @@ -567,7 +539,7 @@ subroutine advecv_5th(putin, putout) +(& (v0(i,j+1,k)+v0(i,j,k))/60.& *(37.*(putin(i,j+1,k)+putin(i,j,k))-8.*(putin(i,j+2,k)+putin(i,j-1,k))+(putin(i,j+3,k)+putin(i,j-2,k)))& - -sign(1.,(v0(i,j+1,k)+v0(i,j,k)))*(v0(i,j+1,k)+v0(i,j+1,k))/60.& + -sign(1.,(v0(i,j+1,k)+v0(i,j,k)))*(v0(i,j+1,k)+v0(i,j,k))/60.& *(10.*(putin(i,j+1,k)-putin(i,j,k))-5.*(putin(i,j+2,k)-putin(i,j-1,k))+(putin(i,j+3,k)-putin(i,j-2,k)))& -(v0(i,j,k)+v0(i,j-1,k))/60.& *(37.*(putin(i,j,k)+putin(i,j-1,k))-8.*(putin(i,j+1,k)+putin(i,j-2,k))+(putin(i,j+2,k)+putin(i,j-3,k)))& @@ -576,12 +548,12 @@ subroutine advecv_5th(putin, putout) )* dyi5 & +(1/rhobf(k))*( & (w0(i,j,k+1)+w0(i,j-1,k+1))/60.& - *(37.*(rhoputin(i,j,k+1)+rhoputin(i,j,k))-8.*(rhoputin(i,j,k+2)+rhoputin(i,j,k-1))& - +(rhoputin(i,j,k+3)+rhoputin(i,j,k-2)))& + *(37.*(rhobf(k+1)*putin(i,j,k+1)+rhobf(k)*putin(i,j,k))-8.*(rhobf(k+2)*putin(i,j,k+2)+rhobf(k-1)*putin(i,j,k-1))& + +(rhobf(k+3)*putin(i,j,k+3)+rhobf(k-2)*putin(i,j,k-2)))& -sign(1.,(w0(i,j,k+1)+w0(i,j-1,k+1)))*(w0(i,j,k+1)+w0(i,j-1,k+1))/60.& - *(10.*(rhoputin(i,j,k+1)-rhoputin(i,j,k))-5.*(rhoputin(i,j,k+2)-rhoputin(i,j,k-1))& - +(rhoputin(i,j,k+3)-rhoputin(i,j,k-2)))& - -(w0(i,j,k) +w0(i,j-1,k)) *(rhoputin(i,j,k-1)+rhoputin(i,j,k))/2. & + *(10.*(rhobf(k+1)*putin(i,j,k+1)-rhobf(k)*putin(i,j,k))-5.*(rhobf(k+2)*putin(i,j,k+2)-rhobf(k-1)*putin(i,j,k-1))& + +(rhobf(k+3)*putin(i,j,k+3)-rhobf(k-2)*putin(i,j,k-2)))& + -(w0(i,j,k) +w0(i,j-1,k)) *(rhobf(k-1)*putin(i,j,k-1)+rhobf(k)*putin(i,j,k))/2. & ) / (2. * dzf(k)) & ) @@ -610,17 +582,17 @@ subroutine advecv_5th(putin, putout) )*dyi5& +(1./rhobf(k))*(& (w0(i,j,k+1)+w0(i,j-1,k+1))/60.& - *(37.*(rhoputin(i,j,k+1)+rhoputin(i,j,k))-8.*(rhoputin(i,j,k+2)+rhoputin(i,j,k-1))& - +(rhoputin(i,j,k+3)+rhoputin(i,j,k-2)))& + *(37.*(rhobf(k+1)*putin(i,j,k+1)+rhobf(k)*putin(i,j,k))-8.*(rhobf(k+2)*putin(i,j,k+2)+rhobf(k-1)*putin(i,j,k-1))& + +(rhobf(k+3)*putin(i,j,k+3)+rhobf(k-2)*putin(i,j,k-2)))& -sign(1.,(w0(i,j,k+1)+w0(i,j-1,k+1)))*(w0(i,j,k+1)+w0(i,j-1,k+1))/60.& - *(10.*(rhoputin(i,j,k+1)-rhoputin(i,j,k))-5.*(rhoputin(i,j,k+2)-rhoputin(i,j,k-1))& - +(rhoputin(i,j,k+3)-rhoputin(i,j,k-2)))& + *(10.*(rhobf(k+1)*putin(i,j,k+1)-rhobf(k)*putin(i,j,k))-5.*(rhobf(k+2)*putin(i,j,k+2)-rhobf(k-1)*putin(i,j,k-1))& + +(rhobf(k+3)*putin(i,j,k+3)-rhobf(k-2)*putin(i,j,k-2)))& -(w0(i,j,k)+w0(i,j-1,k))/60.& - *(37.*(rhoputin(i,j,k)+rhoputin(i,j,k-1))-8.*(rhoputin(i,j,k+1)+rhoputin(i,j,k-2))& - +(rhoputin(i,j,k+2)+rhoputin(i,j,k-3)))& + *(37.*(rhobf(k)*putin(i,j,k)+rhobf(k-1)*putin(i,j,k-1))-8.*(rhobf(k+1)*putin(i,j,k+1)+rhobf(k-2)*putin(i,j,k-2))& + +(rhobf(k+2)*putin(i,j,k+2)+rhobf(k-3)*putin(i,j,k-3)))& +sign(1.,(w0(i,j,k)+w0(i,j-1,k)))*(w0(i,j,k)+w0(i,j-1,k))/60.& - *(10.*(rhoputin(i,j,k)-rhoputin(i,j,k-1))-5.*(rhoputin(i,j,k+1)-rhoputin(i,j,k-2))& - +(rhoputin(i,j,k+2)-rhoputin(i,j,k-3)))& + *(10.*(rhobf(k)*putin(i,j,k)-rhobf(k-1)*putin(i,j,k-1))-5.*(rhobf(k+1)*putin(i,j,k+1)-rhobf(k-2)*putin(i,j,k-2))& + +(rhobf(k+2)*putin(i,j,k+2)-rhobf(k-3)*putin(i,j,k-3)))& ) / (2. * dzf(k)) & ) @@ -643,19 +615,9 @@ subroutine advecw_5th(putin, putout) real, dimension(2-ih:i1+ih,2-jh:j1+jh,k1), intent(in) :: putin !< Input: the w field real, dimension(2-ih:i1+ih,2-jh:j1+jh,k1), intent(inout) :: putout !< Output: the tendency - real, dimension(2-ih:i1+ih,2-jh:j1+jh,k1) :: rhoputin integer :: i,j,k - do k=1,k1 - do j=2-jh,j1+jh - do i=2-ih,i1+ih - rhoputin(i,j,k)=rhobh(k)*putin(i,j,k) - end do - end do - end do - - !if (leq) then do k=2,kmax do j=2,j1 @@ -684,8 +646,8 @@ subroutine advecw_5th(putin, putout) *(10.*(putin(i,j,k)-putin(i,j-1,k))-5.*(putin(i,j+1,k)-putin(i,j-2,k))+(putin(i,j+2,k)-putin(i,j-3,k)))& )* dyi5 & + (1./rhobh(k))*( & - (rhoputin(i,j,k)+rhoputin(i,j,k+1) )*(w0(i,j,k) + w0(i,j,k+1)) & - -(rhoputin(i,j,k)+rhoputin(i,j,k-1) )*(w0(i,j,k) + w0(i,j,k-1)) & + (rhobh(k)*putin(i,j,k)+rhobh(k+1)*putin(i,j,k+1) )*(w0(i,j,k) + w0(i,j,k+1)) & + -(rhobh(k)*putin(i,j,k)+rhobh(k-1)*putin(i,j,k-1) )*(w0(i,j,k) + w0(i,j,k-1)) & )/ (4. * dzh(k)) & ) @@ -713,12 +675,12 @@ subroutine advecw_5th(putin, putout) )* dyi5 & + (1/rhobh(k))*( & (w0(i,j,k)+w0(i,j,k+1))/60.& - *(37.*(rhoputin(i,j,k+1)+rhoputin(i,j,k))-8.*(rhoputin(i,j,k+2)+rhoputin(i,j,k-1))& - +(rhoputin(i,j,k+3)+rhoputin(i,j,k-2)))& + *(37.*(rhobh(k+1)*putin(i,j,k+1)+rhobh(k)*putin(i,j,k))-8.*(rhobh(k+2)*putin(i,j,k+2)+rhobh(k-1)*putin(i,j,k-1))& + +(rhobh(k+3)*putin(i,j,k+3)+rhobh(k-2)*putin(i,j,k-2)))& -sign(1.,(w0(i,j,k)+w0(i,j,k+1)))*(w0(i,j,k)+w0(i,j,k+1))/60.& - *(10.*(rhoputin(i,j,k+1)-rhoputin(i,j,k))-5.*(rhoputin(i,j,k+2)-rhoputin(i,j,k-1))& - +(rhoputin(i,j,k+3)-rhoputin(i,j,k-2)))& - -(rhoputin(i,j,k)+rhoputin(i,j,k-1) )*(w0(i,j,k) + w0(i,j,k-1))/2. & + *(10.*(rhobh(k+1)*putin(i,j,k+1)-rhobh(k)*putin(i,j,k))-5.*(rhobh(k+2)*putin(i,j,k+2)-rhobh(k-1)*putin(i,j,k-1))& + +(rhobh(k+3)*putin(i,j,k+3)-rhobh(k-2)*putin(i,j,k-2)))& + -(rhobh(k)*putin(i,j,k)+rhobh(k-1)*putin(i,j,k-1) )*(w0(i,j,k) + w0(i,j,k-1))/2. & )/ (2. * dzh(k)) & ) elseif(k==kmax-2) then @@ -744,13 +706,13 @@ subroutine advecw_5th(putin, putout) *(10.*(putin(i,j,k)-putin(i,j-1,k))-5.*(putin(i,j+1,k)-putin(i,j-2,k))+(putin(i,j+2,k)-putin(i,j-3,k)))& )*dyi5& + (1./rhobh(k))*(& - (rhoputin(i,j,k)+rhoputin(i,j,k+1) )*(w0(i,j,k) + w0(i,j,k+1))/2. & + (rhobh(k)*putin(i,j,k)+rhobh(k+1)*putin(i,j,k+1) )*(w0(i,j,k) + w0(i,j,k+1))/2. & -(w0(i,j,k)+w0(i,j,k-1))/60.& - *(37.*(rhoputin(i,j,k)+rhoputin(i,j,k-1))-8.*(rhoputin(i,j,k+1)+rhoputin(i,j,k-2))& - +(rhoputin(i,j,k+2)+rhoputin(i,j,k-3)))& + *(37.*(rhobh(k)*putin(i,j,k)+rhobh(k-1)*putin(i,j,k-1))-8.*(rhobh(k+1)*putin(i,j,k+1)+rhobh(k-2)*putin(i,j,k-2))& + +(rhobh(k+2)*putin(i,j,k+2)+rhobh(k-3)*putin(i,j,k-3)))& +sign(1.,(w0(i,j,k)+w0(i,j,k-1)))*(w0(i,j,k)+w0(i,j,k-1))/60.& - *(10.*(rhoputin(i,j,k)-rhoputin(i,j,k-1))-5.*(rhoputin(i,j,k+1)-rhoputin(i,j,k-2))& - +(rhoputin(i,j,k+2)-rhoputin(i,j,k-3)))& + *(10.*(rhobh(k)*putin(i,j,k)-rhobh(k-1)*putin(i,j,k-1))-5.*(rhobh(k+1)*putin(i,j,k+1)-rhobh(k-2)*putin(i,j,k-2))& + +(rhobh(k+2)*putin(i,j,k+2)-rhobh(k-3)*putin(i,j,k-3)))& ) / (2. * dzh(k)) & ) else @@ -778,17 +740,17 @@ subroutine advecw_5th(putin, putout) )*dyi5& + (1./rhobh(k))*(& (w0(i,j,k)+w0(i,j,k+1))/60.& - *(37.*(rhoputin(i,j,k+1)+rhoputin(i,j,k))-8.*(rhoputin(i,j,k+2)+rhoputin(i,j,k-1))& - +(rhoputin(i,j,k+3)+rhoputin(i,j,k-2)))& + *(37.*(rhobh(k+1)*putin(i,j,k+1)+rhobh(k)*putin(i,j,k))-8.*(rhobh(k+2)*putin(i,j,k+2)+rhobh(k-1)*putin(i,j,k-1))& + +(rhobh(k+3)*putin(i,j,k+3)+rhobh(k-2)*putin(i,j,k-2)))& -sign(1.,(w0(i,j,k)+w0(i,j,k+1)))*(w0(i,j,k)+w0(i,j,k+1))/60.& - *(10.*(rhoputin(i,j,k+1)-rhoputin(i,j,k))-5.*(rhoputin(i,j,k+2)-rhoputin(i,j,k-1))& - +(rhoputin(i,j,k+3)-rhoputin(i,j,k-2)))& + *(10.*(rhobh(k+1)*putin(i,j,k+1)-rhobh(k)*putin(i,j,k))-5.*(rhobh(k+2)*putin(i,j,k+2)-rhobh(k-1)*putin(i,j,k-1))& + +(rhobh(k+3)*putin(i,j,k+3)-rhobh(k-2)*putin(i,j,k-2)))& -(w0(i,j,k)+w0(i,j,k-1))/60.& - *(37.*(rhoputin(i,j,k)+rhoputin(i,j,k-1))-8.*(rhoputin(i,j,k+1)+rhoputin(i,j,k-2))& - +(rhoputin(i,j,k+2)+rhoputin(i,j,k-3)))& + *(37.*(rhobh(k)*putin(i,j,k)+rhobh(k-1)*putin(i,j,k-1))-8.*(rhobh(k+1)*putin(i,j,k+1)+rhobh(k-2)*putin(i,j,k-2))& + +(rhobh(k+2)*putin(i,j,k+2)+rhobh(k-3)*putin(i,j,k-3)))& +sign(1.,(w0(i,j,k)+w0(i,j,k-1)))*(w0(i,j,k)+w0(i,j,k-1))/60.& - *(10.*(rhoputin(i,j,k)-rhoputin(i,j,k-1))-5.*(rhoputin(i,j,k+1)-rhoputin(i,j,k-2))& - +(rhoputin(i,j,k+2)-rhoputin(i,j,k-3)))& + *(10.*(rhobh(k)*putin(i,j,k)-rhobh(k-1)*putin(i,j,k-1))-5.*(rhobh(k+1)*putin(i,j,k+1)-rhobh(k-2)*putin(i,j,k-2))& + +(rhobh(k+2)*putin(i,j,k+2)-rhobh(k-3)*putin(i,j,k-3)))& ) / (2. * dzh(k)) & ) diff --git a/src/advec_62.f90 b/src/advec_62.f90 index 47cd0f6c..929c8073 100644 --- a/src/advec_62.f90 +++ b/src/advec_62.f90 @@ -31,52 +31,111 @@ !> Advection at cell center subroutine advecc_62(putin, putout) - use modglobal, only : i1,ih,j1,jh,k1,kmax,dxi,dyi,dzf + use modglobal, only : i1,ih,j1,jh,k1,kmax,dxi,dyi,dzf,dzh,leq use modfields, only : u0, v0, w0,rhobf implicit none real, dimension(2-ih:i1+ih,2-jh:j1+jh,k1), intent(in) :: putin !< Input: the cell centered field real, dimension(2-ih:i1+ih,2-jh:j1+jh,k1), intent(inout) :: putout !< Output: the tendency - real, dimension(2-ih:i1+ih,2-jh:j1+jh,k1) :: rhoputin + real :: inv2dzfk, rhobf_p, rhobf_m integer :: i,j,k - !if (leq) then - - do k=1,k1 - do j=2-jh,j1+jh - do i=2-ih,i1+ih - rhoputin(i,j,k)=rhobf(k)*putin(i,j,k) - end do - end do + if (leq) then + + k = 1 + inv2dzfk = 1./(2. * dzf(k)) + rhobf_p = rhobf(k+1)/rhobf(k) + do j=2,j1 + do i=2,i1 + putout(i,j,k) = putout(i,j,k)- ( & + ( & + u0(i+1,j,k)/60. & + *(37.*(putin(i+1,j,k)+putin(i,j,k))-8.*(putin(i+2,j,k)+putin(i-1,j,k))+(putin(i+3,j,k)+putin(i-2,j,k)))& + -u0(i,j,k)/60. & + *(37.*(putin(i,j,k)+putin(i-1,j,k))-8.*(putin(i+1,j,k)+putin(i-2,j,k))+(putin(i+2,j,k)+putin(i-3,j,k)))& + )*dxi& + +(& + v0(i,j+1,k)/60. & + *(37.*(putin(i,j+1,k)+putin(i,j,k))-8.*(putin(i,j+2,k)+putin(i,j-1,k))+(putin(i,j+3,k)+putin(i,j-2,k)))& + -v0(i,j,k)/60. & + *(37.*(putin(i,j,k)+putin(i,j-1,k))-8.*(putin(i,j+1,k)+putin(i,j-2,k))+(putin(i,j+2,k)+putin(i,j-3,k)))& + )* dyi & + + ( & + w0(i,j,k+1) * (rhobf_p * putin(i,j,k+1) + putin(i,j,k)) & + ) * inv2dzfk & + ) + end do end do - do k=1,kmax + + do k=2,kmax + inv2dzfk = 1./(2. * dzf(k)) + rhobf_p = rhobf(k+1)/rhobf(k) + rhobf_m = rhobf(k-1)/rhobf(k) + do j=2,j1 do i=2,i1 - if(k==1) then - putout(i,j,k) = putout(i,j,k)- ( & - ( & - u0(i+1,j,k)/60. & - *(37.*(putin(i+1,j,k)+putin(i,j,k))-8.*(putin(i+2,j,k)+putin(i-1,j,k))+(putin(i+3,j,k)+putin(i-2,j,k)))& - -u0(i,j,k)/60. & - *(37.*(putin(i,j,k)+putin(i-1,j,k))-8.*(putin(i+1,j,k)+putin(i-2,j,k))+(putin(i+2,j,k)+putin(i-3,j,k)))& + putout(i,j,k) = putout(i,j,k)- ( & + ( & + u0(i+1,j,k)/60. & + *(37.*(putin(i+1,j,k)+putin(i,j,k))-8.*(putin(i+2,j,k)+putin(i-1,j,k))+(putin(i+3,j,k)+putin(i-2,j,k)))& + -u0(i,j,k)/60. & + *(37.*(putin(i,j,k)+putin(i-1,j,k))-8.*(putin(i+1,j,k)+putin(i-2,j,k))+(putin(i+2,j,k)+putin(i-3,j,k)))& )*dxi& +(& - v0(i,j+1,k)/60. & - *(37.*(putin(i,j+1,k)+putin(i,j,k))-8.*(putin(i,j+2,k)+putin(i,j-1,k))+(putin(i,j+3,k)+putin(i,j-2,k)))& - -v0(i,j,k)/60. & - *(37.*(putin(i,j,k)+putin(i,j-1,k))-8.*(putin(i,j+1,k)+putin(i,j-2,k))+(putin(i,j+2,k)+putin(i,j-3,k)))& + v0(i,j+1,k)/60. & + *(37.*(putin(i,j+1,k)+putin(i,j,k))-8.*(putin(i,j+2,k)+putin(i,j-1,k))+(putin(i,j+3,k)+putin(i,j-2,k)))& + -v0(i,j,k)/60. & + *(37.*(putin(i,j,k)+putin(i,j-1,k))-8.*(putin(i,j+1,k)+putin(i,j-2,k))+(putin(i,j+2,k)+putin(i,j-3,k)))& )* dyi & - + (1./rhobf(k))*( & - w0(i,j,k+1) * (rhoputin(i,j,k+1) + rhoputin(i,j,k)) & - ) /(2.*dzf(k)) & - ) + + ( & + w0(i,j,k+1) * (rhobf_p * putin(i,j,k+1) + putin(i,j,k)) & + -w0(i,j,k) * (rhobf_m * putin(i,j,k-1) + putin(i,j,k)) & + ) * inv2dzfk & + ) + + end do + end do + end do +else ! non-equidistant grid + k = 1 + inv2dzfk = 1./(2. * dzf(k)) + rhobf_p = rhobf(k+1)/rhobf(k) + do j=2,j1 + do i=2,i1 + putout(i,j,k) = putout(i,j,k)- ( & + ( & + u0(i+1,j,k)/60. & + *(37.*(putin(i+1,j,k)+putin(i,j,k))-8.*(putin(i+2,j,k)+putin(i-1,j,k))+(putin(i+3,j,k)+putin(i-2,j,k)))& + -u0(i,j,k)/60. & + *(37.*(putin(i,j,k)+putin(i-1,j,k))-8.*(putin(i+1,j,k)+putin(i-2,j,k))+(putin(i+2,j,k)+putin(i-3,j,k)))& + )*dxi& + +(& + v0(i,j+1,k)/60. & + *(37.*(putin(i,j+1,k)+putin(i,j,k))-8.*(putin(i,j+2,k)+putin(i,j-1,k))+(putin(i,j+3,k)+putin(i,j-2,k)))& + -v0(i,j,k)/60. & + *(37.*(putin(i,j,k)+putin(i,j-1,k))-8.*(putin(i,j+1,k)+putin(i,j-2,k))+(putin(i,j+2,k)+putin(i,j-3,k)))& + )* dyi & + + ( & + w0(i,j,k+1) * (rhobf_p * putin(i,j,k+1) * dzf(k) + putin(i,j,k) * dzf(k+1) ) / dzh(k+1) & + ) * inv2dzfk & + ) + end do + end do + + + do k=2,kmax + inv2dzfk = 1./(2. * dzf(k)) + rhobf_p = rhobf(k+1)/rhobf(k) + rhobf_m = rhobf(k-1)/rhobf(k) + + do j=2,j1 + do i=2,i1 - else putout(i,j,k) = putout(i,j,k)- ( & ( & @@ -91,54 +150,72 @@ subroutine advecc_62(putin, putout) -v0(i,j,k)/60. & *(37.*(putin(i,j,k)+putin(i,j-1,k))-8.*(putin(i,j+1,k)+putin(i,j-2,k))+(putin(i,j+2,k)+putin(i,j-3,k)))& )* dyi & - + (1./rhobf(k))*( & - w0(i,j,k+1) * (rhoputin(i,j,k+1)+rhoputin(i,j,k)) & - -w0(i,j,k) * (rhoputin(i,j,k-1)+rhoputin(i,j,k)) & - )/(2.*dzf(k)) & + + ( & + w0(i,j,k+1) * (rhobf_p * putin(i,j,k+1) * dzf(k) + putin(i,j,k) * dzf(k+1) ) / dzh(k+1) & + -w0(i,j,k ) * (rhobf_m * putin(i,j,k-1) * dzf(k) + putin(i,j,k) * dzf(k-1) ) / dzh(k) & + ) * inv2dzfk & ) - end if end do end do - end do - -! end if - + end do + end if end subroutine advecc_62 !> Advection at the u point. subroutine advecu_62(putin,putout) - use modglobal, only : i1,ih,j1,jh,k1,kmax,dxi5,dyi5,dzf + use modglobal, only : i1,ih,j1,jh,k1,kmax,dxi5,dyi5,dzf,dzh,leq use modfields, only : u0, v0, w0,rhobf implicit none real, dimension(2-ih:i1+ih,2-jh:j1+jh,k1), intent(in) :: putin !< Input: the u field real, dimension(2-ih:i1+ih,2-jh:j1+jh,k1), intent(inout) :: putout !< Output: the tendency - real, dimension(2-ih:i1+ih,2-jh:j1+jh,k1) :: rhoputin + real :: inv4dzfk, rhobf_p, rhobf_m integer :: i,j,k - !if (leq) then - - do k=1,k1 - do j=2-jh,j1+jh - do i=2-ih,i1+ih - rhoputin(i,j,k)=rhobf(k)*putin(i,j,k) - end do - end do + if (leq) then + + k = 1 + inv4dzfk = 1./(4. * dzf(k)) + rhobf_p = rhobf(k+1)/rhobf(k) + do j=2,j1 + do i=2,i1 + + putout(i,j,k) = putout(i,j,k)- ( & + ( & + (u0(i+1,j,k)+u0(i,j,k))/60. & + *(37.*(putin(i+1,j,k)+putin(i,j,k))-8.*(putin(i+2,j,k)+putin(i-1,j,k))+(putin(i+3,j,k)+putin(i-2,j,k)))& + -(u0(i,j,k)+u0(i-1,j,k))/60. & + *(37.*(putin(i,j,k)+putin(i-1,j,k))-8.*(putin(i+1,j,k)+putin(i-2,j,k))+(putin(i+2,j,k)+putin(i-3,j,k)))& + )*dxi5& + +(& + (v0(i,j+1,k)+v0(i-1,j+1,k))/60. & + *(37.*(putin(i,j+1,k)+putin(i,j,k))-8.*(putin(i,j+2,k)+putin(i,j-1,k))+(putin(i,j+3,k)+putin(i,j-2,k)))& + -(v0(i,j,k)+v0(i-1,j,k))/60. & + *(37.*(putin(i,j,k)+putin(i,j-1,k))-8.*(putin(i,j+1,k)+putin(i,j-2,k))+(putin(i,j+2,k)+putin(i,j-3,k)))& + )* dyi5 & + + ( & + (rhobf_p * putin(i,j,k+1) + putin(i,j,k)) *(w0(i,j,k+1)+ w0(i-1,j,k+1)) & + ) * inv4dzfk & + ) + end do end do - do k=1,kmax + + do k=2,kmax + inv4dzfk = 1./(4. * dzf(k)) + rhobf_p = rhobf(k+1)/rhobf(k) + rhobf_m = rhobf(k-1)/rhobf(k) + do j=2,j1 do i=2,i1 - if(k==1) then - putout(i,j,k) = putout(i,j,k)- ( & - ( & + (& (u0(i+1,j,k)+u0(i,j,k))/60. & *(37.*(putin(i+1,j,k)+putin(i,j,k))-8.*(putin(i+2,j,k)+putin(i-1,j,k))+(putin(i+3,j,k)+putin(i-2,j,k)))& -(u0(i,j,k)+u0(i-1,j,k))/60. & @@ -150,12 +227,50 @@ subroutine advecu_62(putin,putout) -(v0(i,j,k)+v0(i-1,j,k))/60. & *(37.*(putin(i,j,k)+putin(i,j-1,k))-8.*(putin(i,j+1,k)+putin(i,j-2,k))+(putin(i,j+2,k)+putin(i,j-3,k)))& )* dyi5 & - +(1./rhobf(k))*( & - (rhoputin(i,j,k+1) + rhoputin(i,j,k)) *(w0(i,j,k+1)+ w0(i-1,j,k+1)) & - )/(4.*dzf(k)) & + + ( & + (putin(i,j,k) + rhobf_p * putin(i,j,k+1) )*(w0(i,j,k+1)+w0(i-1,j,k+1)) & + -(putin(i,j,k) + rhobf_m * putin(i,j,k-1) )*(w0(i,j,k )+w0(i-1,j,k )) & + ) * inv4dzfk & ) - else + end do + end do + end do + else ! non-equidistant grid + k = 1 + inv4dzfk = 1./(4. * dzf(k)) + rhobf_p = rhobf(k+1)/rhobf(k) + do j=2,j1 + do i=2,i1 + + putout(i,j,k) = putout(i,j,k)- ( & + ( & + (u0(i+1,j,k)+u0(i,j,k))/60. & + *(37.*(putin(i+1,j,k)+putin(i,j,k))-8.*(putin(i+2,j,k)+putin(i-1,j,k))+(putin(i+3,j,k)+putin(i-2,j,k)))& + -(u0(i,j,k)+u0(i-1,j,k))/60. & + *(37.*(putin(i,j,k)+putin(i-1,j,k))-8.*(putin(i+1,j,k)+putin(i-2,j,k))+(putin(i+2,j,k)+putin(i-3,j,k)))& + )*dxi5& + +(& + (v0(i,j+1,k)+v0(i-1,j+1,k))/60. & + *(37.*(putin(i,j+1,k)+putin(i,j,k))-8.*(putin(i,j+2,k)+putin(i,j-1,k))+(putin(i,j+3,k)+putin(i,j-2,k)))& + -(v0(i,j,k)+v0(i-1,j,k))/60. & + *(37.*(putin(i,j,k)+putin(i,j-1,k))-8.*(putin(i,j+1,k)+putin(i,j-2,k))+(putin(i,j+2,k)+putin(i,j-3,k)))& + )* dyi5 & + + ( & + (putin(i,j,k) * dzf(k+1) + rhobf_p * putin(i,j,k+1)*dzf(k)) * (w0(i,j,k+1)+w0(i-1,j,k+1)) / dzh(k+1) & + ) * inv4dzfk & + ) + end do + end do + + + do k=2,kmax + inv4dzfk = 1./(4. * dzf(k)) + rhobf_p = rhobf(k+1)/rhobf(k) + rhobf_m = rhobf(k-1)/rhobf(k) + + do j=2,j1 + do i=2,i1 putout(i,j,k) = putout(i,j,k)- ( & (& @@ -170,18 +285,17 @@ subroutine advecu_62(putin,putout) -(v0(i,j,k)+v0(i-1,j,k))/60. & *(37.*(putin(i,j,k)+putin(i,j-1,k))-8.*(putin(i,j+1,k)+putin(i,j-2,k))+(putin(i,j+2,k)+putin(i,j-3,k)))& )* dyi5 & - +(1./rhobf(k))*( & - (rhoputin(i,j,k)+rhoputin(i,j,k+1) )*(w0(i,j,k+1)+w0(i-1,j,k+1)) & - -(rhoputin(i,j,k)+rhoputin(i,j,k-1) )*(w0(i,j,k )+w0(i-1,j,k )) & - )/(4.*dzf(k)) & + + ( & + (putin(i,j,k) * dzf(k+1) + rhobf_p * putin(i,j,k+1) *dzf(k)) * (w0(i,j,k+1)+w0(i-1,j,k+1)) / dzh(k+1) & + -(putin(i,j,k) * dzf(k-1) + rhobf_m * putin(i,j,k-1) *dzf(k)) * (w0(i,j,k )+w0(i-1,j,k )) / dzh(k) & + ) * inv4dzfk & ) - end if end do end do end do - -! end if + + end if end subroutine advecu_62 @@ -190,32 +304,53 @@ end subroutine advecu_62 !> Advection at the v point. subroutine advecv_62(putin, putout) - use modglobal, only : i1,ih,j1,jh,k1,kmax,dxi5,dyi5,dzf + use modglobal, only : i1,ih,j1,jh,k1,kmax,dxi5,dyi5,dzf,dzh,leq use modfields, only : u0, v0, w0,rhobf implicit none real, dimension(2-ih:i1+ih,2-jh:j1+jh,k1), intent(in) :: putin !< Input: the v field real, dimension(2-ih:i1+ih,2-jh:j1+jh,k1), intent(inout) :: putout !< Output: the tendency - real, dimension(2-ih:i1+ih,2-jh:j1+jh,k1) :: rhoputin + real :: inv4dzfk, rhobf_p, rhobf_m integer :: i,j,k - !if (leq) then + if (leq) then - do k=1,k1 - do j=2-jh,j1+jh - do i=2-ih,i1+ih - rhoputin(i,j,k)=rhobf(k)*putin(i,j,k) - end do - end do + k = 1 + inv4dzfk = 1./(4. * dzf(k)) + rhobf_p = rhobf(k+1)/rhobf(k) + + do j=2,j1 + do i=2,i1 + + putout(i,j,k) = putout(i,j,k)- ( & + ( & + (u0(i+1,j,k)+u0(i+1,j-1,k))/60. & + *(37.*(putin(i+1,j,k)+putin(i,j,k))-8.*(putin(i+2,j,k)+putin(i-1,j,k))+(putin(i+3,j,k)+putin(i-2,j,k)))& + -(u0(i,j,k)+u0(i,j-1,k))/60. & + *(37.*(putin(i,j,k)+putin(i-1,j,k))-8.*(putin(i+1,j,k)+putin(i-2,j,k))+(putin(i+2,j,k)+putin(i-3,j,k)))& + )*dxi5& + +(& + (v0(i,j+1,k)+v0(i,j,k))/60. & + *(37.*(putin(i,j+1,k)+putin(i,j,k))-8.*(putin(i,j+2,k)+putin(i,j-1,k))+(putin(i,j+3,k)+putin(i,j-2,k)))& + -(v0(i,j,k)+v0(i,j-1,k))/60. & + *(37.*(putin(i,j,k)+putin(i,j-1,k))-8.*(putin(i,j+1,k)+putin(i,j-2,k))+(putin(i,j+2,k)+putin(i,j-3,k)))& + )* dyi5 & + +( & + (w0(i,j,k+1)+w0(i,j-1,k+1)) *(rhobf_p * putin(i,j,k+1)+putin(i,j,k)) & + ) * inv4dzfk & + ) + end do end do + + do k=2,kmax + inv4dzfk = 1./(4. * dzf(k)) + rhobf_p = rhobf(k+1)/rhobf(k) + rhobf_m = rhobf(k-1)/rhobf(k) - do k=1,kmax do j=2,j1 do i=2,i1 - - if(k==1) then - + putout(i,j,k) = putout(i,j,k)- ( & ( & (u0(i+1,j,k)+u0(i+1,j-1,k))/60. & @@ -229,13 +364,50 @@ subroutine advecv_62(putin, putout) -(v0(i,j,k)+v0(i,j-1,k))/60. & *(37.*(putin(i,j,k)+putin(i,j-1,k))-8.*(putin(i,j+1,k)+putin(i,j-2,k))+(putin(i,j+2,k)+putin(i,j-3,k)))& )* dyi5 & - +(1./rhobf(k))*( & - (w0(i,j,k+1)+w0(i,j-1,k+1)) *(rhoputin(i,j,k+1)+rhoputin(i,j,k)) & - ) /(4.*dzf(k)) & + + ( & + (w0(i,j,k+1)+w0(i,j-1,k+1))*(rhobf_p * putin(i,j,k+1) + putin(i,j,k))& + -(w0(i,j,k) +w0(i,j-1,k)) *(rhobf_m * putin(i,j,k-1) + putin(i,j,k))& + ) * inv4dzfk & ) + end do + end do + end do + else ! non-equidistant grid + k = 1 + inv4dzfk = 1./(4. * dzf(k)) + rhobf_p = rhobf(k+1)/rhobf(k) - else + do j=2,j1 + do i=2,i1 + + putout(i,j,k) = putout(i,j,k)- ( & + ( & + (u0(i+1,j,k)+u0(i+1,j-1,k))/60. & + *(37.*(putin(i+1,j,k)+putin(i,j,k))-8.*(putin(i+2,j,k)+putin(i-1,j,k))+(putin(i+3,j,k)+putin(i-2,j,k)))& + -(u0(i,j,k)+u0(i,j-1,k))/60. & + *(37.*(putin(i,j,k)+putin(i-1,j,k))-8.*(putin(i+1,j,k)+putin(i-2,j,k))+(putin(i+2,j,k)+putin(i-3,j,k)))& + )*dxi5& + +(& + (v0(i,j+1,k)+v0(i,j,k))/60. & + *(37.*(putin(i,j+1,k)+putin(i,j,k))-8.*(putin(i,j+2,k)+putin(i,j-1,k))+(putin(i,j+3,k)+putin(i,j-2,k)))& + -(v0(i,j,k)+v0(i,j-1,k))/60. & + *(37.*(putin(i,j,k)+putin(i,j-1,k))-8.*(putin(i,j+1,k)+putin(i,j-2,k))+(putin(i,j+2,k)+putin(i,j-3,k)))& + )* dyi5 & + +( & + (w0(i,j,k+1)+w0(i,j-1,k+1)) * (rhobf_p * putin(i,j,k+1)*dzf(k) + putin(i,j,k)*dzf(k+1)) / dzh(k+1)& + ) * inv4dzfk & + ) + end do + end do + + do k=2,kmax + inv4dzfk = 1./(4. * dzf(k)) + rhobf_p = rhobf(k+1)/rhobf(k) + rhobf_m = rhobf(k-1)/rhobf(k) + do j=2,j1 + do i=2,i1 + putout(i,j,k) = putout(i,j,k)- ( & ( & (u0(i+1,j,k)+u0(i+1,j-1,k))/60. & @@ -249,18 +421,15 @@ subroutine advecv_62(putin, putout) -(v0(i,j,k)+v0(i,j-1,k))/60. & *(37.*(putin(i,j,k)+putin(i,j-1,k))-8.*(putin(i,j+1,k)+putin(i,j-2,k))+(putin(i,j+2,k)+putin(i,j-3,k)))& )* dyi5 & - +(1./rhobf(k))*( & - (w0(i,j,k+1)+w0(i,j-1,k+1))*(rhoputin(i,j,k+1)+rhoputin(i,j,k))& - -(w0(i,j,k) +w0(i,j-1,k)) *(rhoputin(i,j,k-1)+rhoputin(i,j,k))& - )/(4.*dzf(k)) & + + ( & + (w0(i,j,k+1)+w0(i,j-1,k+1)) * (rhobf_p * putin(i,j,k+1) * dzf(k) + putin(i,j,k) * dzf(k+1)) / dzh(k+1)& + -(w0(i,j,k) +w0(i,j-1,k)) * (rhobf_m * putin(i,j,k-1) * dzf(k) + putin(i,j,k) * dzf(k-1)) / dzh(k) & + ) * inv4dzfk & ) - end if - end do end do - end do - -! end if + end do +end if end subroutine advecv_62 @@ -275,21 +444,17 @@ subroutine advecw_62(putin, putout) real, dimension(2-ih:i1+ih,2-jh:j1+jh,k1), intent(in) :: putin !< Input: the w field real, dimension(2-ih:i1+ih,2-jh:j1+jh,k1), intent(inout) :: putout !< Output: the tendency - real, dimension(2-ih:i1+ih,2-jh:j1+jh,k1) :: rhoputin + real :: inv4dzhk, rhobh_p, rhobh_m integer :: i,j,k !if (leq) then - do k=1,k1 - do j=2-jh,j1+jh - do i=2-ih,i1+ih - rhoputin(i,j,k)=rhobh(k)*putin(i,j,k) - end do - end do - end do - do k=2,kmax + inv4dzhk = 1./(4. * dzh(k)) + rhobh_p = rhobh(k+1)/rhobh(k) + rhobh_m = rhobh(k-1)/rhobh(k) + do j=2,j1 do i=2,i1 @@ -306,10 +471,10 @@ subroutine advecw_62(putin, putout) -(v0(i,j,k)+v0(i,j,k-1))/60. & *(37.*(putin(i,j,k)+putin(i,j-1,k))-8.*(putin(i,j+1,k)+putin(i,j-2,k))+(putin(i,j+2,k)+putin(i,j-3,k)))& )* dyi5 & - + (1./rhobh(k))*( & - (rhoputin(i,j,k)+rhoputin(i,j,k+1) )*(w0(i,j,k) + w0(i,j,k+1)) & - -(rhoputin(i,j,k)+rhoputin(i,j,k-1))*(w0(i,j,k) + w0(i,j,k-1)) & - )/(4.*dzh(k)) & + + ( & + (putin(i,j,k)+rhobh_p * putin(i,j,k+1) )*(w0(i,j,k) + w0(i,j,k+1)) & + -(putin(i,j,k)+rhobh_m * putin(i,j,k-1) )*(w0(i,j,k) + w0(i,j,k-1)) & + )*inv4dzhk & ) end do end do diff --git a/src/advec_hybrid_f.f90 b/src/advec_hybrid_f.f90 new file mode 100644 index 00000000..7f46b78f --- /dev/null +++ b/src/advec_hybrid_f.f90 @@ -0,0 +1,267 @@ +!> \file advec_hybrid.f90 +! Does advection with the 5th order advection scheme that was already present in DALES, except +! around locations were discontinuities arise. There, the 5th order WENO scheme is used. +! Discontinuities should be preserved, while the damping of high wavenumber components of the flow, +! common in pure WENO solutions. +! The scheme is more or less equal to the scheme proposed by Hill and Pullin (2004) +! [https://doi.org/10.1016/j.jcp.2003.07.032] but using +! the fifth order advection scheme instead of their tuned one. +! +! JvdD (2011) +! +! This file is part of DALES. +! +! DALES is free software; you can redistribute it and/or modify +! it under the terms of the GNU General Public License as published by +! the Free Software Foundation; either version 3 of the License, or +! (at your option) any later version. +! +! DALES is distributed in the hope that it will be useful, +! but WITHOUT ANY WARRANTY; without even the implied warranty of +! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +! GNU General Public License for more details. +! +! You should have received a copy of the GNU General Public License +! along with this program. If not, see . +! +! Copyright 1993-2009 Delft University of Technology, Wageningen University, Utrecht University, KNMI +! +module advec_hybrid_f +implicit none +contains + +subroutine advecc_hybrid_f(pin, pout, phi_tilde_in) + use modglobal, only : ih,i1,jh,j1,kmax,k1,dxi,dyi,dzf,lambda_crit + use modfields, only : u0,v0,w0,rhobf + + implicit none + + real,dimension(2-ih:i1+ih,2-jh:j1+jh,k1),intent(in) :: pin !< Input: the cell centered field (qt,thetal,sv etc) + real,dimension(2-ih:i1+ih,2-jh:j1+jh,k1),intent(inout):: pout !< Output: the tendency for the input field (qtp,thetalp,svp etc) + real,optional,intent(in) :: phi_tilde_in !< Order of magnitude of the field, used in the smoothness criterion. Optional. + + real :: phi_tilde + logical :: lsmx,lsmy,lsmz ! smoothness flags + real,dimension(2:i1+1,2:j1+1,k1) :: pfacex,pfacey,pfacez ! face values, defined at the same interfaces as u0,v0 and w0 respectively + real,dimension(3) :: gam ! used for smoothness test + integer :: i,j,k + real :: eps_hybrid + real,dimension(-3:2) :: vin ! Subset of the field to be advected + real :: sgn ! 1 if velocity is positive, -1 if velocity is negative + real,parameter :: c1=13./12.,c2=1./4. ! Multiplication constants + integer,parameter :: pweno=1 ! Exponent used in WENO scheme + ! Values 1,2 or 3 should work + real,parameter :: epsWeno=1e-12 ! Small value set to keep from dividing by zero + real,dimension(3) :: wgtOpt=(/.1,.6,.3/) ! Optimal weights (see eg Hill and Pullin) + real,dimension(3) :: beta, & ! Smoothness measure + wgt, & ! Weighting factor + varFace ! Interpolated value at cell face + real :: wgtfac ! Normalization factor for the weights + + + ! phi_tilde is some kind of order-of-magnitude, used to calculate eps_hybrid + ! it's unclear to me if it's necessary for this scheme or just used to avoid dividing by 0 + ! but for now it's here, to give the same results as the original routine + ! If phi_tilde is passed as a function argument, use it, otherwise determine heuristically as in the original + ! e12 may be on either side of 1, + ! other fields like T, qt should always end up with the same phi_tilde. + if(.not. present(phi_tilde_in)) then + if (any(pin>=1.e5)) then ! probably number density + phi_tilde = 1.e3 + elseif (any(pin>=1.)) then ! probably (potential) temperature + phi_tilde = 1. + else ! probably qt + phi_tilde = 1.e-3 + end if + else + phi_tilde = phi_tilde_in + end if + eps_hybrid = 1.e-8*phi_tilde**2 + + do k=1,k1 + do j=2,j1+1 + do i=2,i1+1 + ! determine smoothness lsmx + if (u0(i,j,k).ge.0.) then + gam(:) = (pin(i-1:i+1,j,k)-pin(i-2:i,j,k))**2 + & + (pin(i-2:i,j,k)-pin(i-3:i-1,j,k))**2 + else + gam(:) = (pin(i:i+2,j,k)-pin(i-1:i+1,j,k))**2 + & + (pin(i-1:i+1,j,k)-pin(i-2:i,j,k))**2 + end if + !lsmx = maxval(gam)/(minval(gam)+eps_hybrid) < lambda_crit + lsmx = maxval(gam) < lambda_crit * (minval(gam)+eps_hybrid) + + ! determine smoothness lsmy + if (v0(i,j,k).ge.0.) then + gam(:) = (pin(i,j-1:j+1,k)-pin(i,j-2:j,k))**2 + & + (pin(i,j-2:j,k)-pin(i,j-3:j-1,k))**2 + else + gam(:) = (pin(i,j:j+2,k)-pin(i,j-1:j+1,k))**2 + & + (pin(i,j-1:j+1,k)-pin(i,j-2:j,k))**2 + end if + !lsmy = maxval(gam)/(minval(gam)+eps_hybrid) < lambda_crit + lsmy = maxval(gam) < lambda_crit * (minval(gam)+eps_hybrid) + + + ! advection in x + vin(-3:2) = pin(i-3:i+2,j,k) + if (lsmx) then ! field around this location is smooth -> use regular 5th order (upwind) + sgn = sign(1.0,u0(i,j,k)) ! set sgn, to account for different wind directions + pfacex(i,j,k) = (37.*(vin(0)+vin(-1))-8.*(vin(1)+vin(-2))+(vin(2)+vin(-3)) & + -sgn*(10.*(vin(0)-vin(-1))-5.*(vin(1)-vin(-2))+(vin(2)-vin(-3))))/60. + else ! field around this location is non-smooth -> use weno + if (u0(i,j,k) >= 0) then !Positive velocity at cell face + !compute smoothness indicators for each of the stencils + beta(1) = c1*(vin(-3)-2*vin(-2)+vin(-1))**2 + c2*(vin(-3)-4*vin(-2)+3*vin(-1))**2 + beta(2) = c1*(vin(-2)-2*vin(-1)+vin(0) )**2 + c2*(vin(-2)-vin(0))**2 + beta(3) = c1*(vin(-1)-2*vin(0) +vin(1) )**2 + c2*(3*vin(-1)-4*vin(0)+vin(1))**2 + + !interpolated values of the variable at the cell faces using each of the stencils + varFace(1) = (2*vin(-3)- 7*vin(-2)+ 11*vin(-1))/6 + varFace(2) = (- vin(-2)+ 5*vin(-1)+ 2*vin(0) )/6 + varFace(3) = (2*vin(-1)+ 5*vin(0) - vin(1) )/6 + else !Negative velocity at cell face + !compute smoothness indicators for each of the stencils + !the following is found by mirroring the equations for positive velocity + beta(1) = c1*(vin(0) -2*vin(1) +vin(2))**2 + c2*(3*vin(0)-4*vin(1)+vin(2))**2 + beta(2) = c1*(vin(-1)-2*vin(0) +vin(1))**2 + c2*(vin(-1)-vin(1))**2 + beta(3) = c1*(vin(-2)-2*vin(-1)+vin(0))**2 + c2*(vin(-2)-4*vin(-1)+3*vin(0))**2 + + !interpolated values of the variable at the cell faces using each of the stencils + varFace(1) = (11*vin(0) -7*vin(1) + 2*vin(2))/6 + varFace(2) = ( 2*vin(-1)+5*vin(0) - vin(1))/6 + varFace(3) = ( - vin(-2)+5*vin(-1)+ 2*vin(0))/6 + end if + + !compute weights + wgt = wgtOpt*(epsWeno+beta)**(-pweno) + wgtfac = sum(wgt)**(-1) + + ! compute interpolated value + pfacex(i,j,k) = sum(wgt(:)*varFace(:))*wgtfac + + end if + + ! advection in y + vin(-3:2) = pin(i,j-3:j+2,k) + if (lsmy) then ! field around this location is smooth -> use regular 5th order (upwind) + sgn = sign(1.0,v0(i,j,k)) ! set sgn, to account for different wind directions + pfacey(i,j,k) = (37.*(vin(0)+vin(-1))-8.*(vin(1)+vin(-2))+(vin(2)+vin(-3)) & + -sgn*(10.*(vin(0)-vin(-1))-5.*(vin(1)-vin(-2))+(vin(2)-vin(-3))))/60. + else ! field around this location is non-smooth -> use weno + if (v0(i,j,k) >= 0) then !Positive velocity at cell face + !compute smoothness indicators for each of the stencils + beta(1) = c1*(vin(-3)-2*vin(-2)+vin(-1))**2 + c2*(vin(-3)-4*vin(-2)+3*vin(-1))**2 + beta(2) = c1*(vin(-2)-2*vin(-1)+vin(0) )**2 + c2*(vin(-2)-vin(0))**2 + beta(3) = c1*(vin(-1)-2*vin(0) +vin(1) )**2 + c2*(3*vin(-1)-4*vin(0)+vin(1))**2 + + !interpolated values of the variable at the cell faces using each of the stencils + varFace(1) = (2*vin(-3)- 7*vin(-2)+ 11*vin(-1))/6 + varFace(2) = (- vin(-2)+ 5*vin(-1)+ 2*vin(0) )/6 + varFace(3) = (2*vin(-1)+ 5*vin(0) - vin(1) )/6 + else !Negative velocity at cell face + !compute smoothness indicators for each of the stencils + !the following is found by mirroring the equations for positive velocity + beta(1) = c1*(vin(0) -2*vin(1) +vin(2))**2 + c2*(3*vin(0)-4*vin(1)+vin(2))**2 + beta(2) = c1*(vin(-1)-2*vin(0) +vin(1))**2 + c2*(vin(-1)-vin(1))**2 + beta(3) = c1*(vin(-2)-2*vin(-1)+vin(0))**2 + c2*(vin(-2)-4*vin(-1)+3*vin(0))**2 + + !interpolated values of the variable at the cell faces using each of the stencils + varFace(1) = (11*vin(0) -7*vin(1) + 2*vin(2))/6 + varFace(2) = ( 2*vin(-1)+5*vin(0) - vin(1))/6 + varFace(3) = ( - vin(-2)+5*vin(-1)+ 2*vin(0))/6 + end if + !compute weights + wgt = wgtOpt*(epsWeno+beta)**(-pweno) + wgtfac = sum(wgt)**(-1) + + ! compute interpolated value + pfacey(i,j,k) = sum(wgt(:)*varFace(:))*wgtfac + end if + + ! advection in z + if (k < 4 .or. k >= kmax) then + ! special treatment of top and bottom layers + if (k == 1) then + pfacez(i,j,k) = 0 + else + pfacez(i,j,k) = ( rhobf(k)*pin(i,j,k) + rhobf(k-1)*pin(i,j,k-1) ) * .5 + end if + else + + lsmz = .true. + if (k < kmax-1) then ! the original scheme considers k=kmax-1 fully smooth + ! determine smoothness lsmz + if (w0(i,j,k).ge.0.) then + gam(:) = (pin(i,j,k-1:k+1)-pin(i,j,k-2:k))**2 + & + (pin(i,j,k-2:k)-pin(i,j,k-3:k-1))**2 + else + gam(:) = (pin(i,j,k:k+2)-pin(i,j,k-1:k+1))**2 + & + (pin(i,j,k-1:k+1)-pin(i,j,k-2:k))**2 + end if + ! lsmz = maxval(gam)/(minval(gam)+eps_hybrid) < lambda_crit + lsmz = maxval(gam) < lambda_crit * (minval(gam)+eps_hybrid) + end if + + vin(-3:2) = pin(i,j,k-3:k+2) * rhobf(k-3:k+2) + if (lsmz) then ! field around this location is smooth -> use regular 5th order (upwind) + sgn = sign(1.0,w0(i,j,k)) ! set sgn, to account for different wind directions + pfacez(i,j,k) = (37.*(vin(0)+vin(-1))-8.*(vin(1)+vin(-2))+(vin(2)+vin(-3)) & + -sgn*(10.*(vin(0)-vin(-1))-5.*(vin(1)-vin(-2))+(vin(2)-vin(-3))))/60. + else ! field around this location is non-smooth -> use weno + if (w0(i,j,k) >= 0) then !Positive velocity at cell face + !compute smoothness indicators for each of the stencils + beta(1) = c1*(vin(-3)-2*vin(-2)+vin(-1))**2 + c2*(vin(-3)-4*vin(-2)+3*vin(-1))**2 + beta(2) = c1*(vin(-2)-2*vin(-1)+vin(0) )**2 + c2*(vin(-2)-vin(0))**2 + beta(3) = c1*(vin(-1)-2*vin(0) +vin(1) )**2 + c2*(3*vin(-1)-4*vin(0)+vin(1))**2 + + !interpolated values of the variable at the cell faces using each of the stencils + varFace(1) = (2*vin(-3)- 7*vin(-2)+ 11*vin(-1))/6 + varFace(2) = (- vin(-2)+ 5*vin(-1)+ 2*vin(0) )/6 + varFace(3) = (2*vin(-1)+ 5*vin(0) - vin(1) )/6 + else !Negative velocity at cell face + !compute smoothness indicators for each of the stencils + !the following is found by mirroring the equations for positive velocity + beta(1) = c1*(vin(0) -2*vin(1) +vin(2))**2 + c2*(3*vin(0)-4*vin(1)+vin(2))**2 + beta(2) = c1*(vin(-1)-2*vin(0) +vin(1))**2 + c2*(vin(-1)-vin(1))**2 + beta(3) = c1*(vin(-2)-2*vin(-1)+vin(0))**2 + c2*(vin(-2)-4*vin(-1)+3*vin(0))**2 + + !interpolated values of the variable at the cell faces using each of the stencils + varFace(1) = (11*vin(0) -7*vin(1) + 2*vin(2))/6 + varFace(2) = ( 2*vin(-1)+5*vin(0) - vin(1))/6 + varFace(3) = ( - vin(-2)+5*vin(-1)+ 2*vin(0))/6 + end if + !compute weights + wgt = wgtOpt*(epsWeno+beta)**(-pweno) + wgtfac = sum(wgt)**(-1) + + ! compute interpolated value + pfacez(i,j,k) = sum(wgt(:)*varFace(:))*wgtfac + end if + end if + + !kp2=k+2;km3=k-3 + !pfacex(i,j,k) = ip_hybrid(pin(im3:ip2,j,k),u0(i,j,k)>=0.,lsmx(i,j,k)) + !pfacey(i,j,k) = ip_hybrid(pin(i,jm3:jp2,k),v0(i,j,k)>=0.,lsmy(i,j,k)) + !pfacez(i,j,k) = ip_hybrid(rhopin(i,j,km3:kp2),w0(i,j,k)>=0.,lsmz(i,j,k)) + end do + end do + end do !Loop over k + + ! Calculate actual tendencies by multiplying matrices, accept in the vertical, since dzf(k) + ! does not have the appropriate dimensions. + do k=1,kmax + pout(2:i1,2:j1,k) = pout(2:i1,2:j1,k) - ( & + (u0(3:i1+1,2:j1,k)*pfacex(3:i1+1,2:j1,k) - & + u0(2:i1,2:j1,k)*pfacex(2:i1,2:j1,k) )*dxi & + +(v0(2:i1,3:j1+1,k)*pfacey(2:i1,3:j1+1,k) - & + v0(2:i1,2:j1,k)*pfacey(2:i1,2:j1,k) )*dyi & + +(1./rhobf(k))*(w0(2:i1,2:j1,k+1)*pfacez(2:i1,2:j1,k+1) - & + w0(2:i1,2:j1,k)*pfacez(2:i1,2:j1,k) )/dzf(k) & + ) + end do +end subroutine advecc_hybrid_f + + +end module advec_hybrid_f diff --git a/src/advec_kappa.f90 b/src/advec_kappa.f90 index d2de83f6..5d624f05 100644 --- a/src/advec_kappa.f90 +++ b/src/advec_kappa.f90 @@ -42,19 +42,19 @@ subroutine advecc_kappa(putin,putout) real,external :: rlim real, dimension(2-ih:i1+ih,2-jh:j1+jh,k1), intent(in) :: putin real, dimension(2-ih:i1+ih,2-jh:j1+jh,k1), intent(inout) :: putout - real, dimension(2-ih:i1+ih,2-jh:j1+jh,k1) :: rhoputin +! real, dimension(2-ih:i1+ih,2-jh:j1+jh,k1) :: rhoputin real d1,d2,cf integer i,j,k - do k=1,k1 - do j=2-jh,j1+jh - do i=2-ih,i1+ih - rhoputin(i,j,k)=rhobf(k)*putin(i,j,k) - end do - end do - end do +! do k=1,k1 +! do j=2-jh,j1+jh +! do i=2-ih,i1+ih +! rhoputin(i,j,k)=rhobf(k)*putin(i,j,k) +! end do +! end do +! end do do k=1,kmax do j=2,j1 @@ -98,13 +98,13 @@ subroutine advecc_kappa(putin,putout) do j=2,j1 do i=2,i1 if (w0(i,j,k)>0) then - d1 = rhoputin(i,j,k-1)-rhoputin(i,j,k-2) - d2 = rhoputin(i,j,k )-rhoputin(i,j,k-1) - cf = rhoputin(i,j,k-1) + d1 = rhobf(k-1) * putin(i,j,k-1) - rhobf(k-2) * putin(i,j,k-2) + d2 = rhobf(k) * putin(i,j,k ) - rhobf(k-1) * putin(i,j,k-1) + cf = rhobf(k-1) * putin(i,j,k-1) else - d1 = rhoputin(i,j,k )-rhoputin(i,j,k+1) - d2 = rhoputin(i,j,k-1)-rhoputin(i,j,k ) - cf = rhoputin(i,j,k ) + d1 = rhobf(k) * putin(i,j,k ) - rhobf(k+1) * putin(i,j,k+1) + d2 = rhobf(k-1) * putin(i,j,k-1) - rhobf(k) * putin(i,j,k ) + cf = rhobf(k) * putin(i,j,k ) end if cf = cf + rlim(d1,d2) putout(i,j,k-1) = putout(i,j,k-1) - (1./rhobf(k-1))*cf * w0(i,j,k) * dzi @@ -117,12 +117,12 @@ subroutine advecc_kappa(putin,putout) do i=2,i1 if (w0(i,j,2)>0) then d1 = 0 - d2 = rhoputin(i,j,1)-rhoputin(i,j,2) - cf = rhoputin(i,j,1) + d2 = rhobf(1) * putin(i,j,1) - rhobf(2) * putin(i,j,2) + cf = rhobf(1) * putin(i,j,1) else - d1 = rhoputin(i,j,2)-rhoputin(i,j,3) - d2 = rhoputin(i-1,j,1)-rhoputin(i,j,2) - cf = rhoputin(i,j,2) + d1 = rhobf(2) * putin(i,j,2) - rhobf(3) * putin(i,j,3) + d2 = rhobf(1) * putin(i-1,j,1) - rhobf(2) * putin(i,j,2) + cf = rhobf(2) * putin(i,j,2) end if cf = cf + rlim(d1,d2) putout(i,j,1) = putout(i,j,1) - (1./rhobf(1))*cf * w0(i,j,2) * dzi @@ -142,30 +142,30 @@ subroutine halflev_kappa(putin,putout) real,external :: rlim real, dimension(2-ih:i1+ih,2-jh:j1+jh,k1), intent(in) :: putin real, dimension(2-ih:i1+ih,2-jh:j1+jh,k1), intent(inout) :: putout - real, dimension(2-ih:i1+ih,2-jh:j1+jh,k1) :: rhoputin + !real, dimension(2-ih:i1+ih,2-jh:j1+jh,k1) :: rhoputin real d1,d2,cf integer i,j,k - do k=1,k1 - do j=2-jh,j1+jh - do i=2-ih,i1+ih - rhoputin(i,j,k)=rhobf(k)*putin(i,j,k) - end do - end do - end do +! do k=1,k1 +! do j=2-jh,j1+jh +! do i=2-ih,i1+ih +! rhoputin(i,j,k)=rhobf(k)*putin(i,j,k) +! end do +! end do +! end do do k=3,k1 do j=2,j1 do i=2,i1 if (w0(i,j,k)>=0) then - d1 = rhoputin(i,j,k-1)-rhoputin(i,j,k-2) - d2 = rhoputin(i,j,k )-rhoputin(i,j,k-1) - cf = rhoputin(i,j,k-1) + d1 = rhobf(k-1) * putin(i,j,k-1) - rhobf(k-2) * putin(i,j,k-2) + d2 = rhobf(k) * putin(i,j,k ) - rhobf(k-1) * putin(i,j,k-1) + cf = rhobf(k-1) * putin(i,j,k-1) else - d1 = rhoputin(i,j,k )-rhoputin(i,j,k+1) - d2 = rhoputin(i,j,k-1)-rhoputin(i,j,k ) - cf = rhoputin(i,j,k ) + d1 = rhobf(k) * putin(i,j,k ) - rhobf(k+1) * putin(i,j,k+1) + d2 = rhobf(k-1) * putin(i,j,k-1) - rhobf(k) * putin(i,j,k ) + cf = rhobf(k) * putin(i,j,k ) end if putout(i,j,k) = (1./rhobh(k))*(cf + rlim(d1,d2)) end do @@ -176,12 +176,12 @@ subroutine halflev_kappa(putin,putout) do i=2,i1 if (w0(i,j,2)>=0) then d1 = 0 - d2 = rhoputin(i,j,2)-rhoputin(i,j,1) - cf = rhoputin(i,j,1) + d2 = rhobf(2) * putin(i,j,2) - rhobf(1) * putin(i,j,1) + cf = rhobf(1) * putin(i,j,1) else - d1 = rhoputin(i,j,2)-rhoputin(i,j,3) - d2 = rhoputin(i,j,1)-rhoputin(i,j,2) - cf = rhoputin(i,j,2) + d1 = rhobf(2) * putin(i,j,2) - rhobf(3) * putin(i,j,3) + d2 = rhobf(1) * putin(i,j,1) - rhobf(2) * putin(i,j,2) + cf = rhobf(2) * putin(i,j,2) end if putout(i,j,2) = (1./rhobh(2))*(cf + rlim(d1,d2)) end do diff --git a/src/advection.f90 b/src/advection.f90 index 5f8fc679..4cd1ab27 100644 --- a/src/advection.f90 +++ b/src/advection.f90 @@ -28,19 +28,24 @@ subroutine advection use modglobal, only : lmoist, nsv, iadv_mom,iadv_tke,iadv_thl,iadv_qt,iadv_sv, & - iadv_cd2,iadv_5th,iadv_52,iadv_cd6,iadv_62,iadv_kappa,iadv_upw,iadv_hybrid + iadv_cd2,iadv_5th,iadv_52,iadv_cd6,iadv_62,iadv_kappa,iadv_upw,iadv_hybrid,iadv_hybrid_f,iadv_null,leq use modfields, only : u0,up,v0,vp,w0,wp,e120,e12p,thl0,thlp,qt0,qtp,sv0,svp use modsubgrid, only : lsmagorinsky use advec_hybrid, only : advecc_hybrid + use advec_hybrid_f, only : advecc_hybrid_f implicit none integer :: n + ! leq = .false. ! for testing that the non-uniform advection routines agree with the uniform ones + ! when the grid is uniform + select case(iadv_mom) case(iadv_cd2) call advecu_2nd(u0,up) call advecv_2nd(v0,vp) call advecw_2nd(w0,wp) case(iadv_5th) + if (.not. leq) stop "advec_5th does not support a non-uniform vertical grid." call advecu_5th(u0,up) call advecv_5th(v0,vp) call advecw_5th(w0,wp) @@ -49,6 +54,7 @@ subroutine advection call advecv_52(v0,vp) call advecw_52(w0,wp) case(iadv_cd6) + if (.not. leq) stop "advec_6th does not support a non-uniform vertical grid." call advecu_6th(u0,up) call advecv_6th(v0,vp) call advecw_6th(w0,wp) @@ -57,9 +63,18 @@ subroutine advection call advecv_62(v0,vp) call advecw_62(w0,wp) case(iadv_hybrid) + if (.not. leq) stop "advec_5th does not support a non-uniform vertical grid." call advecu_5th(u0,up) call advecv_5th(v0,vp) call advecw_5th(w0,wp) + case(iadv_hybrid_f) + if (.not. leq) stop "advec_5th does not support a non-uniform vertical grid." + call advecu_5th(u0,up) + call advecv_5th(v0,vp) + call advecw_5th(w0,wp) + case(iadv_null) + ! null advection scheme + stop "Null advection scheme selected for iadv_mom - probably a bad idea." case default stop "Unknown advection scheme " end select @@ -69,17 +84,27 @@ subroutine advection case(iadv_cd2) call advecc_2nd(e120,e12p) case(iadv_5th) + if (.not. leq) stop "advec_5th does not support a non-uniform vertical grid." call advecc_5th(e120,e12p) case(iadv_52) call advecc_52(e120,e12p) case(iadv_cd6) + if (.not. leq) stop "advec_6th does not support a non-uniform vertical grid." call advecc_6th(e120,e12p) case(iadv_62) call advecc_62(e120,e12p) case(iadv_kappa) + if (.not. leq) stop "advec_kappa does not support a non-uniform vertical grid." call advecc_kappa(e120,e12p) case(iadv_hybrid) - call advecc_hybrid(e120,e12p) + if (.not. leq) stop "advec_hybrid does not support a non-uniform vertical grid." + call advecc_hybrid(e120,e12p) + case(iadv_hybrid_f) + if (.not. leq) stop "advec_hybrid_f does not support a non-uniform vertical grid." + call advecc_hybrid_f(e120,e12p) + case(iadv_null) + ! null advection scheme + stop "Null advection scheme selected for iadv_tke - probably a bad idea." case default stop "Unknown advection scheme " end select @@ -89,19 +114,30 @@ subroutine advection case(iadv_cd2) call advecc_2nd(thl0,thlp) case(iadv_5th) + if (.not. leq) stop "advec_5th does not support a non-uniform vertical grid." call advecc_5th(thl0,thlp) case(iadv_52) call advecc_52(thl0,thlp) case(iadv_cd6) + if (.not. leq) stop "advec_6th does not support a non-uniform vertical grid." call advecc_6th(thl0,thlp) case(iadv_62) call advecc_62(thl0,thlp) case(iadv_kappa) + if (.not. leq) stop "advec_kappa does not support a non-uniform vertical grid." call advecc_kappa(thl0,thlp) case(iadv_upw) + if (.not. leq) stop "advec_upw does not support a non-uniform vertical grid." call advecc_upw(thl0,thlp) case(iadv_hybrid) + if (.not. leq) stop "advec_hybrid does not support a non-uniform vertical grid." call advecc_hybrid(thl0,thlp) + case(iadv_hybrid_f) + if (.not. leq) stop "advec_hybrid_f does not support a non-uniform vertical grid." + call advecc_hybrid_f(thl0,thlp,1.0) + case(iadv_null) + ! null advection scheme + stop "Null advection scheme selected for iadv_thl - probably a bad idea." case default stop "Unknown advection scheme " end select @@ -110,19 +146,30 @@ subroutine advection case(iadv_cd2) call advecc_2nd(qt0,qtp) case(iadv_5th) + if (.not. leq) stop "advec_5th does not support a non-uniform vertical grid." call advecc_5th(qt0,qtp) case(iadv_52) call advecc_52(qt0,qtp) case(iadv_cd6) + if (.not. leq) stop "advec_6th does not support a non-uniform vertical grid." call advecc_6th(qt0,qtp) case(iadv_62) call advecc_62(qt0,qtp) case(iadv_kappa) + if (.not. leq) stop "advec_kappa does not support a non-uniform vertical grid." call advecc_kappa(qt0,qtp) case(iadv_upw) + if (.not. leq) stop "advec_upw does not support a non-uniform vertical grid." call advecc_upw(qt0,qtp) case(iadv_hybrid) + if (.not. leq) stop "advec_hybrid does not support a non-uniform vertical grid." call advecc_hybrid(qt0,qtp) + case(iadv_hybrid_f) + if (.not. leq) stop "advec_hybrid_f does not support a non-uniform vertical grid." + call advecc_hybrid_f(qt0,qtp,1e-3) + case(iadv_null) + ! null advection scheme + stop "Null advection scheme selected for iadv_qt - probably a bad idea." case default stop "Unknown advection scheme " end select @@ -132,19 +179,29 @@ subroutine advection case(iadv_cd2) call advecc_2nd(sv0(:,:,:,n),svp(:,:,:,n)) case(iadv_5th) + if (.not. leq) stop "advec_5th does not support a non-uniform vertical grid." call advecc_5th(sv0(:,:,:,n),svp(:,:,:,n)) case(iadv_52) call advecc_52(sv0(:,:,:,n),svp(:,:,:,n)) case(iadv_cd6) + if (.not. leq) stop "advec_6th does not support a non-uniform vertical grid." call advecc_6th(sv0(:,:,:,n),svp(:,:,:,n)) case(iadv_62) call advecc_62(sv0(:,:,:,n),svp(:,:,:,n)) case(iadv_kappa) + if (.not. leq) stop "advec_kappa does not support a non-uniform vertical grid." call advecc_kappa(sv0(:,:,:,n),svp(:,:,:,n)) case(iadv_upw) + if (.not. leq) stop "advec_upw does not support a non-uniform vertical grid." call advecc_upw(sv0(:,:,:,n),svp(:,:,:,n)) case(iadv_hybrid) + if (.not. leq) stop "advec_hybrid does not support a non-uniform vertical grid." call advecc_hybrid(sv0(:,:,:,n),svp(:,:,:,n)) + case(iadv_hybrid_f) + if (.not. leq) stop "advec_hybrid_f does not support a non-uniform vertical grid." + call advecc_hybrid_f(sv0(:,:,:,n),svp(:,:,:,n)) + case(iadv_null) + ! null advection scheme - do nothing case default stop "Unknown advection scheme " end select diff --git a/src/modAGScross.f90 b/src/modAGScross.f90 index 5f9ce53a..e2d6744a 100644 --- a/src/modAGScross.f90 +++ b/src/modAGScross.f90 @@ -36,11 +36,12 @@ module modAGScross PUBLIC :: initAGScross, AGScross,exitAGScross save !NetCDF variables - integer,parameter :: nvar = 31 + integer,parameter :: nvar = 35 !gc_CO2,PAR,Qnet,LE,H,G0 added, and swdir swdif conditionally integer :: ncidAGS = 123 integer :: nrecAGS = 0 + integer :: final_nvar = 0 character(80) :: fnameAGS = 'crossAGS.xxxxyxxx.xxx.nc' - character(80),dimension(nvar,4) :: ncnameAGS + character(80),allocatable,dimension(:,:) :: ncnameAGS !dimensions depend on number of variables character(80),dimension(1,4) :: tncnameAGS real :: dtav @@ -50,13 +51,15 @@ module modAGScross contains !> Initializing AGScross. Read out the namelist, initializing the variables subroutine initAGScross - use modmpi, only :myid,my_real,mpierr,comm3d,mpi_logical,mpi_integer,cmyid - use modglobal,only :imax,jmax,ifnamopt,fname_options,dtmax,rk3step, dtav_glob,ladaptive,j1,kmax,i1,dt_lim,cexpnr,tres,btime + use modmpi, only :myid,my_real,mpierr,comm3d,mpi_logical,cmyid + use modglobal,only :imax,jmax,ifnamopt,fname_options,dtmax, dtav_glob,ladaptive,dt_lim,cexpnr,tres,btime use modstat_nc,only : open_nc, define_nc,ncinfo,writestat_dims_nc - use modsurfdata, only : lrsAgs, ksoilmax + use modsurfdata, only : lrsAgs, ksoilmax,lsplitleaf + use modraddata,only : irad_par,irad_rrtmg,iradiation + implicit none - integer :: ierr,k + integer :: ierr namelist/NAMAGScross/ & lAGScross, dtav @@ -89,6 +92,15 @@ subroutine initAGScross if (ksoilmax /= 4) stop 'ksoilmax is not equal to 4... this can give problems with AGScross.f90... update this file as well' fnameAGS(10:17) = cmyid fnameAGS(19:21) = cexpnr + + ! we set the final number of variables in the output: + final_nvar = nvar + if (iradiation == irad_par .or. iradiation == irad_rrtmg) then + final_nvar = final_nvar+2 !swdir,swdif + if (lsplitleaf) final_nvar = final_nvar+2 !PARdir,PARdif + endif + allocate(ncnameAGS(final_nvar,4)) + call ncinfo(tncnameAGS(1,:),'time ','Time','s','time') call ncinfo(ncnameAGS( 1,:),'An ', 'xy AGScross of An ','mg/m2/s','tt0t') call ncinfo(ncnameAGS( 2,:),'Resp ', 'xy AGScross of Resp ','mg/m2/s','tt0t') @@ -119,19 +131,32 @@ subroutine initAGScross call ncinfo(ncnameAGS(27,:),'lwd ', 'xy AGScross of LW down rad.','W/m2 ','tt0t') call ncinfo(ncnameAGS(28,:),'lwu ', 'xy AGScross of LW up rad. ','W/m2 ','tt0t') call ncinfo(ncnameAGS(29,:),'ci ', 'xy AGScross of int CO2 conc','mg/m3 ','tt0t') - call ncinfo(ncnameAGS(30,:),'swdir ', 'xy AGScross of SW dir rad. ','W/m2 ','tt0t') - call ncinfo(ncnameAGS(31,:),'swdif ', 'xy AGScross of SW diff rad.','W/m2 ','tt0t') + call ncinfo(ncnameAGS(30,:),'gc_CO2', 'xy AGScross of gc_CO2 ','mm/s? ','tt0t') + call ncinfo(ncnameAGS(31,:),'PAR ', 'xy AGScross of PAR ','W/m2 ','tt0t') + call ncinfo(ncnameAGS(32,:),'Qnet ', 'xy AGScross of Qnet ','W/m2 ','tt0t') + call ncinfo(ncnameAGS(33,:),'LE ', 'xy AGScross of LE ','W/m2 ','tt0t') + call ncinfo(ncnameAGS(34,:),'H ', 'xy AGScross of H ','W/m2 ','tt0t') + call ncinfo(ncnameAGS(35,:),'G0 ', 'xy AGScross of G0 ','W/m2 ','tt0t') + if (iradiation == irad_par .or. iradiation == irad_rrtmg) then + call ncinfo(ncnameAGS(36,:),'swdir ', 'xy AGScross of SW dir rad. ','W/m2 ','tt0t') + call ncinfo(ncnameAGS(37,:),'swdif ', 'xy AGScross of SW diff rad.','W/m2 ','tt0t') + if (lsplitleaf) then + call ncinfo(ncnameAGS(38,:),'PARdir', 'xy AGScross of direct PAR ','W/m2 ','tt0t') + call ncinfo(ncnameAGS(39,:),'PARdif', 'xy AGScross of diffuse PAR ','W/m2 ','tt0t') + endif + endif + call open_nc(fnameAGS, ncidAGS,nrecAGS,n1=imax,n2=jmax) if (nrecAGS == 0) then call define_nc( ncidAGS, 1, tncnameAGS) call writestat_dims_nc(ncidAGS) end if - call define_nc( ncidAGS, NVar, ncnameAGS) + call define_nc( ncidAGS, final_nvar, ncnameAGS) end subroutine initAGScross !>Run AGScross. Mainly timekeeping subroutine AGScross - use modglobal, only : rk3step,timee,rtimee,dt_lim + use modglobal, only : rk3step,timee,dt_lim use modstat_nc, only : writestat_nc implicit none @@ -155,25 +180,29 @@ subroutine AGShorz use modglobal, only : imax,jmax,i1,j1,rtimee,dzf use modstat_nc, only : writestat_nc use modsurfdata, only : AnField, RespField, wco2Field,phiw,fstrField, rs, ra, rsco2Field, rsveg, rssoil, & - indCO2, tskin, tskinm, tsoil, thlflux, qtflux, tauField, ciField + indCO2, tskin, tskinm, tsoil, thlflux, qtflux, tauField, ciField, gcco2Field, & + PARField,Qnet,LE,H,G0,PARdirField,PARdifField,lsplitleaf use modfields, only : svm, rhof, ql0 - use modraddata,only : swd, swu, lwd, lwu,swdir,swdif + use modraddata,only : swd, swu, lwd, lwu,swdir,swdif,irad_par,iradiation,irad_rrtmg,lwc implicit none ! LOCAL - integer i,j,n - character(40) :: name + integer i,j real, allocatable :: vars(:,:,:) real :: lwp(2:i1,2:j1) do i = 2,i1 do j = 2,j1 - lwp(i,j) = sum(ql0(i,j,1:kmax)*rhof(1:kmax)*dzf(1:kmax)) + if (iradiation == irad_rrtmg) then + lwp(i,j) = sum(lwc(i,j,1:kmax))*1.e-3 ! we get the already calculated lwc from RRTMG + else + lwp(i,j) = sum(ql0(i,j,1:kmax)*rhof(1:kmax)*dzf(1:kmax)) + end if enddo enddo - allocate(vars(1:imax,1:jmax,nvar)) + allocate(vars(1:imax,1:jmax,final_nvar)) vars=0. vars(:,:, 1) = AnField (2:i1,2:j1) vars(:,:, 2) = RespField (2:i1,2:j1) @@ -204,10 +233,22 @@ subroutine AGShorz vars(:,:,27) = lwd (2:i1,2:j1,1) vars(:,:,28) = lwu (2:i1,2:j1,1) vars(:,:,29) = ciField (2:i1,2:j1) - vars(:,:,30) = swdir (2:i1,2:j1,1) - vars(:,:,31) = swdif (2:i1,2:j1,1) + vars(:,:,30) = gcco2Field(2:i1,2:j1) + vars(:,:,31) = PARField (2:i1,2:j1) + vars(:,:,32) = Qnet (2:i1,2:j1) + vars(:,:,33) = LE (2:i1,2:j1) + vars(:,:,34) = H (2:i1,2:j1) + vars(:,:,35) = G0 (2:i1,2:j1) + if (iradiation == irad_par .or. iradiation == irad_rrtmg) then + vars(:,:,36) = swdir (2:i1,2:j1,1) + vars(:,:,37) = swdif (2:i1,2:j1,1) + if (lsplitleaf) then + vars(:,:,38) = PARdirField(2:i1,2:j1) + vars(:,:,39) = PARdifField(2:i1,2:j1) + endif + endif call writestat_nc(ncidAGS,1,tncnameAGS,(/rtimee/),nrecAGS,.true.) - call writestat_nc(ncidAGS,nvar,ncnameAGS(1:nvar,:),vars,nrecAGS,imax,jmax) + call writestat_nc(ncidAGS,final_nvar,ncnameAGS,vars,nrecAGS,imax,jmax) deallocate(vars) end subroutine AGShorz @@ -220,6 +261,7 @@ subroutine exitAGScross if(lAGScross) then call exitstat_nc(ncidAGS) + deallocate(ncnameAGS) end if end subroutine exitAGScross diff --git a/src/modboundary.f90 b/src/modboundary.f90 index 74fa21d2..2f3581ad 100644 --- a/src/modboundary.f90 +++ b/src/modboundary.f90 @@ -92,10 +92,11 @@ end subroutine exitboundary !> Sets lateral periodic boundary conditions for the scalars subroutine cyclich - use modglobal, only : i1,i2,ih,j1,jh,k1,nsv + use modglobal, only : i1,ih,j1,jh,k1,nsv use modfields, only : thl0,thlm,qt0,qtm,sv0,svm use modmpi, only : excjs - integer n,m + + integer n call excjs( thl0 , 2,i1,2,j1,1,k1,ih,jh) call excjs( qt0 , 2,i1,2,j1,1,k1,ih,jh) @@ -113,12 +114,10 @@ end subroutine cyclich !>set lateral periodic boundary conditions for momentum subroutine cyclicm - use modglobal, only : i1,i2,ih,j1,jh,k1 + use modglobal, only : i1,ih,j1,jh,k1 use modfields, only : u0,um,v0,vm,w0,wm,e120,e12m use modmpi, only : excjs - integer m - call excjs( u0 , 2,i1,2,j1,1,k1,ih,jh) call excjs( v0 , 2,i1,2,j1,1,k1,ih,jh) call excjs( w0 , 2,i1,2,j1,1,k1,ih,jh) diff --git a/src/modbulkmicro.f90 b/src/modbulkmicro.f90 index 8b015732..b5b83282 100644 --- a/src/modbulkmicro.f90 +++ b/src/modbulkmicro.f90 @@ -149,7 +149,7 @@ subroutine bulkmicro delt = rdt/ (4. - dble(rk3step)) - if ( timee .eq. 0. .and. rk3step .eq. 1 .and. myid .eq. 0) then + if ( timee .eq. 0 .and. rk3step .eq. 1 .and. myid .eq. 0) then write(*,*) 'l_lognormal',l_lognormal write(*,*) 'rhof(1)', rhof(1),' rhof(10)', rhof(10) write(*,*) 'l_mur_cst',l_mur_cst,' mur_cst',mur_cst @@ -497,7 +497,7 @@ subroutine accretion end subroutine accretion -!> Sedimentation of cloud water +!> Sedimentation of cloud water ((Bretherton et al,GRL 2007)) !! !! The sedimentation of cloud droplets assumes a lognormal DSD in which the !! geometric std dev. is assumed to be fixed at 1.3. @@ -697,7 +697,7 @@ subroutine sedimentation_rain enddo enddo - if ( jn == 1. ) then + if ( jn == 1 ) then do j=2,j1 do i=2,i1 precep(i,j,k) = sed_qr(i,j,k)/rhof(k) ! kg kg-1 m s-1 diff --git a/src/modcanopy.f90 b/src/modcanopy.f90 index 641f484e..f0b00b80 100644 --- a/src/modcanopy.f90 +++ b/src/modcanopy.f90 @@ -56,7 +56,7 @@ module modcanopy !----------------------------------------------------------------------------------------- SUBROUTINE initcanopy use modmpi, only : myid, mpi_logical, mpi_integer, my_real, comm3d, mpierr - use modglobal, only : kmax,k1, ifnamopt, fname_options, ifinput, ifoutput, cexpnr, zh, dzh, dzf, nsv + use modglobal, only : kmax, ifnamopt, fname_options, ifinput, cexpnr, zh, dzh, dzf implicit none @@ -180,7 +180,7 @@ SUBROUTINE initcanopy end subroutine initcanopy subroutine canopy - use modfields, only : up,vp,wp,e12p,thlp,qtp,sv0,svp + use modfields, only : up,vp,wp,e12p,thlp,qtp,svp use modsurfdata, only : thlflux, qtflux, svflux use modglobal, only : nsv,i2,j2 @@ -237,7 +237,7 @@ subroutine exitcanopy end subroutine exitcanopy subroutine canopyu (putout) - use modglobal, only : i1, i2, ih, j1, j2, jh, k1, cu, cv, dzh, dzf, imax, jmax + use modglobal, only : i1, ih, j1, j2, jh, k1, cu, cv, dzh, imax, jmax use modfields, only : u0, v0, w0 implicit none @@ -264,7 +264,7 @@ subroutine canopyu (putout) end subroutine canopyu subroutine canopyv (putout) - use modglobal, only : i1, i2, ih, j1, j2, jh, k1, cu, cv, dzh, dzf, imax, jmax + use modglobal, only : i1, i2, ih, j1, jh, k1, cu, cv, dzh, imax, jmax use modfields, only : u0, v0, w0 implicit none @@ -318,7 +318,7 @@ subroutine canopyw (putout) end subroutine canopyw subroutine canopye (putout) - use modglobal, only : i1, i2, ih, j1, j2, jh, k1, cu, cv, dzh, dzf, imax, jmax + use modglobal, only : i1, i2, ih, j1, j2, jh, k1, cu, cv, dzh, imax, jmax use modfields, only : u0, v0, w0, e120 implicit none diff --git a/src/modchem.f90 b/src/modchem.f90 index b280594b..6cd75cf7 100644 --- a/src/modchem.f90 +++ b/src/modchem.f90 @@ -238,7 +238,7 @@ module modchem contains !----------------------------------------------------------------------------------------- SUBROUTINE initchem - use modglobal, only : i1,j1,i2,nsv, ifnamopt, fname_options, ifoutput, cexpnr,timeav_glob,btime,tres + use modglobal, only : i1,j1,nsv, ifnamopt, fname_options, ifoutput, cexpnr,timeav_glob,btime,tres use modmpi, only : myid, mpi_logical, mpi_integer, my_real, comm3d, mpierr use modsurfdata, only : lCHon implicit none @@ -1787,11 +1787,12 @@ subroutine ratech !----------------------------------------------------------------- ! - use modglobal, only : i1,j1,i2,kmax,pi,xtime,timee,rtimee,xday,xlat,xlon, & + use modglobal, only : i1,j1,kmax,pi,xtime,timee,rtimee,xday,xlat,xlon, & zf,dzf,ijtot,ifoutput,cexpnr use modfields, only : qt0, ql0 ,rhof use modmpi, only : myid, comm3d, mpierr, mpi_max, my_real, mpi_sum use modsurfdata,only: taufield, lrsAgs + use modraddata,only: iradiation, irad_par implicit none real sza @@ -1910,7 +1911,7 @@ subroutine ratech !for clouds the the max solar zenith angle is cutoff at 60 degrees coszenmax = min(60*pi/180,coszen) - if (lrsAgs) then + if (lrsAgs .and. (iradiation/=irad_par)) then !irad_par get tau with ql0 theshold tauField = 0.0 endif @@ -1937,7 +1938,7 @@ subroutine ratech !- Calculating transmission coefficient, cloud optical depth tau2 = (3./2.)*(qlint/(rhow*re)) - if (lrsAgs) then + if (lrsAgs .and. (iradiation/=irad_par)) then tauField(i,j) = tau2 endif diff --git a/src/modcrosssection.f90 b/src/modcrosssection.f90 index cb1ca49c..ff34ec3b 100644 --- a/src/modcrosssection.f90 +++ b/src/modcrosssection.f90 @@ -36,7 +36,7 @@ module modcrosssection PUBLIC :: initcrosssection, crosssection,exitcrosssection save !NetCDF variables - integer,parameter :: nvar = 11 + integer,parameter :: nvar = 12 integer :: ncid1 = 0 integer,allocatable :: ncid2(:) integer :: ncid3 = 1 @@ -67,7 +67,7 @@ module modcrosssection contains !> Initializing Crosssection. Read out the namelist, initializing the variables subroutine initcrosssection - use modmpi, only :myid,my_real,mpierr,comm3d,mpi_logical,mpi_integer,cmyid + use modmpi, only :myid,my_real,mpierr,comm3d,mpi_logical,mpi_integer,cmyid,myidx,myidy use modglobal,only :imax,jmax,ifnamopt,fname_options,dtmax,dtav_glob,ladaptive,j1,kmax,i1,dt_lim,cexpnr,tres,btime use modstat_nc,only : lnetcdf,open_nc, define_nc,ncinfo,writestat_dims_nc implicit none @@ -125,7 +125,7 @@ subroutine initcrosssection stop 'CROSSSECTION: dtav should be a integer multiple of dtmax' end if if (lnetcdf) then - if (myid==0) then + if (myidy==0) then fname1(9:16) = cmyid fname1(18:20) = cexpnr call ncinfo(tncname1(1,:),'time','Time','s','time') @@ -140,6 +140,7 @@ subroutine initcrosssection call ncinfo(ncname1( 9,:),'qrxz','xz crosssection of the Rain water specific humidity','kg/kg','t0tt') call ncinfo(ncname1( 10,:),'nrxz','xz crosssection of the Number concentration','-','t0tt') call ncinfo(ncname1( 11,:),'cloudnrxz','xz crosssection of the cloud number','-','t0tt') + call ncinfo(ncname1( 12,:),'e120xz','xz crosssection of sqrt(turbulent kinetic energy)','m^2/s^2','t0tt') call open_nc(fname1, ncid1,nrec1,n1=imax,n3=kmax) if (nrec1 == 0) then call define_nc( ncid1, 1, tncname1) @@ -164,13 +165,15 @@ subroutine initcrosssection call ncinfo(ncname2( 9,:),'qrxy','xy crosssection of the Rain water specific humidity','kg/kg','tt0t') call ncinfo(ncname2(10,:),'nrxy','xy crosssection of the rain droplet number concentration','-','tt0t') call ncinfo(ncname2(11,:),'cloudnrxy','xy crosssection of the cloud number','-','tt0t') + call ncinfo(ncname2(12,:),'e120xy','xy crosssection of sqrt(turbulent kinetic energy)','m^2/s^2','tt0t') call open_nc(fname2, ncid2(cross),nrec2(cross),n1=imax,n2=jmax) if (nrec2(cross)==0) then call define_nc( ncid2(cross), 1, tncname2) call writestat_dims_nc(ncid2(cross)) end if call define_nc( ncid2(cross), NVar, ncname2) - end do + end do + if (myidx==0) then fname3(9:16) = cmyid fname3(18:20) = cexpnr call ncinfo(tncname3(1,:),'time','Time','s','time') @@ -185,6 +188,7 @@ subroutine initcrosssection call ncinfo(ncname3( 9,:),'qryz','yz crosssection of the Rain water specific humidity','kg/kg','0ttt') call ncinfo(ncname3(10,:),'nryz','yz crosssection of the Number concentration','-','0ttt') call ncinfo(ncname3(11,:),'cloudnryz','yz crosssection of the cloud number','-','0ttt') + call ncinfo(ncname3(12,:),'e120yz','yz crosssection of sqrt(turbulent kinetic energy)','m^2/s^2','0ttt') call open_nc(fname3, ncid3,nrec3,n2=jmax,n3=kmax) if (nrec3==0) then call define_nc( ncid3, 1, tncname3) @@ -192,13 +196,14 @@ subroutine initcrosssection end if call define_nc( ncid3, NVar, ncname3) end if + end if end subroutine initcrosssection !>Run crosssection. Mainly timekeeping subroutine crosssection use modglobal, only : rk3step,timee,dt_lim - use modstat_nc, only : lnetcdf, writestat_nc + use modstat_nc, only : writestat_nc implicit none @@ -221,8 +226,8 @@ end subroutine crosssection !> Do the xz crosssections and dump them to file subroutine wrtvert use modglobal, only : imax,i1,kmax,nsv,rlv,cp,rv,rd,cu,cv,cexpnr,ifoutput,rtimee - use modfields, only : um,vm,wm,thlm,qtm,svm,thl0,qt0,ql0,exnf,thvf,cloudnr - use modmpi, only : myid + use modfields, only : um,vm,wm,thlm,qtm,svm,thl0,qt0,ql0,e120,exnf,thvf,cloudnr + use modmpi, only : myidy use modstat_nc, only : lnetcdf, writestat_nc implicit none @@ -231,7 +236,7 @@ subroutine wrtvert real, allocatable :: thv0(:,:),vars(:,:,:),buoy(:,:) - if( myid /= 0 ) return + if( myidy /= 0 ) return allocate(thv0(2:i1,1:kmax),buoy(2:i1,1:kmax)) @@ -304,6 +309,7 @@ subroutine wrtvert vars(:,:,10) = 0. end if vars(:,:,11) = cloudnr(2:i1,crossplane,1:kmax) + vars(:,:,12) = e120(2:i1,crossplane,1:kmax) call writestat_nc(ncid1,1,tncname1,(/rtimee/),nrec1,.true.) call writestat_nc(ncid1,nvar,ncname1(1:nvar,:),vars,nrec1,imax,kmax) deallocate(vars) @@ -315,7 +321,7 @@ end subroutine wrtvert !> Do the xy crosssections and dump them to file subroutine wrthorz use modglobal, only : imax,jmax,i1,j1,nsv,rlv,cp,rv,rd,cu,cv,cexpnr,ifoutput,rtimee - use modfields, only : um,vm,wm,thlm,qtm,svm,thl0,qt0,ql0,exnf,thvf,cloudnr + use modfields, only : um,vm,wm,thlm,qtm,svm,thl0,qt0,ql0,e120,exnf,thvf,cloudnr use modmpi, only : cmyid use modstat_nc, only : lnetcdf, writestat_nc use modmicrodata, only : iqr,inr @@ -408,6 +414,7 @@ subroutine wrthorz vars(:,:,10) = 0. end if vars(:,:,11) = cloudnr(2:i1,2:j1,crossheight(cross)) + vars(:,:,12) = e120(2:i1,2:j1,crossheight(cross)) call writestat_nc(ncid2(cross),1,tncname2,(/rtimee/),nrec2(cross),.true.) call writestat_nc(ncid2(cross),nvar,ncname2(1:nvar,:),vars,nrec2(cross),imax,jmax) deallocate(vars) @@ -418,20 +425,24 @@ subroutine wrthorz end subroutine wrthorz + ! yz cross section subroutine wrtorth use modglobal, only : jmax,kmax,j1,nsv,rlv,cp,rv,rd,cu,cv,cexpnr,ifoutput,rtimee - use modfields, only : um,vm,wm,thlm,qtm,svm,thl0,qt0,ql0,exnf,thvf,cloudnr - use modmpi, only : cmyid + use modfields, only : um,vm,wm,thlm,qtm,svm,thl0,qt0,ql0,e120,exnf,thvf,cloudnr + use modmpi, only : cmyid, myidx use modstat_nc, only : lnetcdf, writestat_nc implicit none ! LOCAL integer j,k,n - character(20) :: name + character(21) :: name real, allocatable :: thv0(:,:),vars(:,:,:),buoy(:,:) + if( myidx /= 0 ) return + + allocate(thv0(1:j1,1:kmax),buoy(1:j1,1:kmax)) do j=1,j1 @@ -506,6 +517,7 @@ subroutine wrtorth vars(:,:,10) = 0. end if vars(:,:,11) = cloudnr(crossortho,2:j1,1:kmax) + vars(:,:,12) = e120(crossortho,2:j1,1:kmax) call writestat_nc(ncid3,1,tncname3,(/rtimee/),nrec3,.true.) call writestat_nc(ncid3,nvar,ncname3(1:nvar,:),vars,nrec3,jmax,kmax) deallocate(vars) diff --git a/src/modfielddump.f90 b/src/modfielddump.f90 index a2d4c6a6..f08524a5 100644 --- a/src/modfielddump.f90 +++ b/src/modfielddump.f90 @@ -27,22 +27,22 @@ ! module modfielddump - use modglobal, only : longint + use modglobal, only : longint, nsv implicit none private PUBLIC :: initfielddump, fielddump,exitfielddump save !NetCDF variables - integer,parameter :: nvar = 8 + integer :: nvar = 7 integer :: ncid,nrec = 0 character(80) :: fname = 'fielddump.xxx.xxx.xxx.nc' - character(80),dimension(nvar,4) :: ncname + character(80),dimension(:,:), allocatable :: ncname character(80),dimension(1,4) :: tncname - real :: dtav - integer(kind=longint) :: idtav,tnext - integer :: klow,khigh + real :: dtav, tmin, tmax + integer(kind=longint) :: idtav,tnext,itmax,itmin + integer :: klow,khigh,ncoarse=-1 logical :: lfielddump= .false. !< switch to enable the fielddump (on/off) logical :: ldiracc = .false. !< switch for doing direct access writing (on/off) logical :: lbinary = .false. !< switch for doing direct access writing (on/off) @@ -54,15 +54,18 @@ subroutine initfielddump use modglobal,only :imax,jmax,kmax,cexpnr,ifnamopt,fname_options,dtmax,dtav_glob,kmax, ladaptive,dt_lim,btime,tres use modstat_nc,only : lnetcdf,open_nc, define_nc,ncinfo,writestat_dims_nc implicit none - integer :: ierr + integer :: ierr, n + character(3) :: csvname namelist/NAMFIELDDUMP/ & - dtav,lfielddump,ldiracc,lbinary,klow,khigh + dtav,lfielddump,ldiracc,lbinary,klow,khigh,ncoarse, tmin, tmax dtav=dtav_glob klow=1 khigh=kmax + tmin = 0. + tmax = 1e8 if(myid==0)then open(ifnamopt,file=fname_options,status='old',iostat=ierr) read (ifnamopt,NAMFIELDDUMP,iostat=ierr) @@ -74,13 +77,21 @@ subroutine initfielddump write(6 ,NAMFIELDDUMP) close(ifnamopt) end if + call MPI_BCAST(ncoarse ,1,MPI_INTEGER,0,comm3d,ierr) call MPI_BCAST(klow ,1,MPI_INTEGER,0,comm3d,ierr) call MPI_BCAST(khigh ,1,MPI_INTEGER,0,comm3d,ierr) call MPI_BCAST(dtav ,1,MY_REAL ,0,comm3d,ierr) + call MPI_BCAST(tmin ,1,MY_REAL ,0,comm3d,ierr) + call MPI_BCAST(tmax ,1,MY_REAL ,0,comm3d,ierr) call MPI_BCAST(lfielddump ,1,MPI_LOGICAL,0,comm3d,ierr) call MPI_BCAST(ldiracc ,1,MPI_LOGICAL,0,comm3d,ierr) call MPI_BCAST(lbinary ,1,MPI_LOGICAL,0,comm3d,ierr) + if (ncoarse==-1) then + ncoarse = 1 + end if idtav = dtav/tres + itmin = tmin/tres + itmax = tmax/tres tnext = idtav +btime if(.not.(lfielddump)) return @@ -89,9 +100,12 @@ subroutine initfielddump if (.not. ladaptive .and. abs(dtav/dtmax-nint(dtav/dtmax))>1e-4) then stop 'dtav should be a integer multiple of dtmax' end if + + nvar = nvar + nsv if (lnetcdf) then write(fname,'(A,i3.3,A,i3.3,A)') 'fielddump.', myidx, '.', myidy, '.xxx.nc' fname(19:21) = cexpnr + allocate(ncname(nvar,4)) call ncinfo(tncname(1,:),'time','Time','s','time') call ncinfo(ncname( 1,:),'u','West-East velocity','m/s','mttt') call ncinfo(ncname( 2,:),'v','South-North velocity','m/s','tmtt') @@ -99,12 +113,16 @@ subroutine initfielddump call ncinfo(ncname( 4,:),'qt','Total water specific humidity','1e-5kg/kg','tttt') call ncinfo(ncname( 5,:),'ql','Liquid water specific humidity','1e-5kg/kg','tttt') call ncinfo(ncname( 6,:),'thl','Liquid water potential temperature above 300K','K','tttt') - call ncinfo(ncname( 7,:),'qr','Rain water specific humidity','1e-5kg/kg','tttt') - call ncinfo(ncname( 8,:),'buoy','Buoyancy','K','tttt') - call open_nc(fname, ncid,nrec,n1=imax,n2=jmax,n3=khigh-klow+1) +! call ncinfo(ncname( 7,:),'qr','Rain water mixing ratio','1e-5kg/kg','tttt') + call ncinfo(ncname( 7,:),'buoy','Buoyancy','K','tttt') + do n=1,nsv + write (csvname(1:3),'(i3.3)') n + call ncinfo(ncname(7+n,:),'sv'//csvname,'Scalar '//csvname//' specific concentration','(kg/kg)','tttt') + end do + call open_nc(fname, ncid,nrec,n1=ceiling(1.0*imax/ncoarse),n2=ceiling(1.0*jmax/ncoarse),n3=khigh-klow+1) if (nrec==0) then call define_nc( ncid, 1, tncname) - call writestat_dims_nc(ncid) + call writestat_dims_nc(ncid, ncoarse) end if call define_nc( ncid, NVar, ncname) end if @@ -113,7 +131,7 @@ end subroutine initfielddump !> Do fielddump. Collect data to truncated (2 byte) integers, and write them to file subroutine fielddump - use modfields, only : um,vm,wm,thlm,qtm,ql0,svm,thv0h,thvh + use modfields, only : u0,v0,w0,thl0,qt0,ql0,sv0,thv0h,thvh use modsurfdata,only : thls,qts,thvs use modglobal, only : imax,i1,ih,jmax,j1,jh,k1,rk3step,& timee,dt_lim,cexpnr,ifoutput,rtimee @@ -122,7 +140,8 @@ subroutine fielddump use modmicrodata, only : iqr, imicro, imicro_none implicit none - integer(KIND=selected_int_kind(4)), allocatable :: field(:,:,:),vars(:,:,:,:) + integer(KIND=selected_int_kind(4)), allocatable :: field(:,:,:) + real, allocatable :: vars(:,:,:,:) integer i,j,k integer :: writecounter = 1 integer :: reclength @@ -140,84 +159,84 @@ subroutine fielddump dt_lim = minval((/dt_lim,tnext-timee/)) allocate(field(2-ih:i1+ih,2-jh:j1+jh,k1)) - allocate(vars(imax,jmax,khigh-klow+1,nvar)) + allocate(vars(ceiling(1.0*imax/ncoarse),ceiling(1.0*jmax/ncoarse),khigh-klow+1,nvar)) - reclength = imax*jmax*(khigh-klow+1)*2 + reclength = ceiling(1.0*imax/ncoarse)*ceiling(1.0*jmax/ncoarse)*(khigh-klow+1)*2 - field = NINT(1.0E3*um,2) - if (lnetcdf) vars(:,:,:,1) = field(2:i1,2:j1,klow:khigh) + field = NINT(1.0E3*u0,2) + if (lnetcdf) vars(:,:,:,1) = u0(2:i1:ncoarse,2:j1:ncoarse,klow:khigh) if (lbinary) then if (ldiracc) then open (ifoutput,file='wbuu.'//cmyidx//'.'//cmyidy//'.'//cexpnr,access='direct', form='unformatted', recl=reclength) - write (ifoutput, rec=writecounter) field(2:i1,2:j1,klow:khigh) + write (ifoutput, rec=writecounter) field(2:i1:ncoarse,2:j1:ncoarse,klow:khigh) else open (ifoutput,file='wbuu.'//cmyidx//'.'//cmyidy//'.'//cexpnr,form='unformatted',position='append') - write (ifoutput) (((field(i,j,k),i=2,i1),j=2,j1),k=klow,khigh) + write (ifoutput) (((field(i,j,k),i=2,i1, ncoarse),j=2,j1, ncoarse),k=klow,khigh) end if close (ifoutput) endif - field = NINT(1.0E3*vm,2) - if (lnetcdf) vars(:,:,:,2) = field(2:i1,2:j1,klow:khigh) + field = NINT(1.0E3*v0,2) + if (lnetcdf) vars(:,:,:,2) = v0(2:i1:ncoarse,2:j1:ncoarse,klow:khigh) if (lbinary) then if (ldiracc) then open (ifoutput,file='wbvv.'//cmyidx//'.'//cmyidy//'.'//cexpnr,access='direct', form='unformatted', recl=reclength) - write (ifoutput, rec=writecounter) field(2:i1,2:j1,klow:khigh) + write (ifoutput, rec=writecounter) field(2:i1:ncoarse,2:j1:ncoarse,klow:khigh) else open (ifoutput,file='wbvv.'//cmyidx//'.'//cmyidy//'.'//cexpnr,form='unformatted',position='append') - write (ifoutput) (((field(i,j,k),i=2,i1),j=2,j1),k=klow,khigh) + write (ifoutput) (((field(i,j,k),i=2,i1, ncoarse),j=2,j1, ncoarse),k=klow,khigh) end if close (ifoutput) endif - field = NINT(1.0E3*wm,2) - if (lnetcdf) vars(:,:,:,3) = field(2:i1,2:j1,klow:khigh) + field = NINT(1.0E3*w0,2) + if (lnetcdf) vars(:,:,:,3) = w0(2:i1:ncoarse,2:j1:ncoarse,klow:khigh) if (lbinary) then if (ldiracc) then open (ifoutput,file='wbww.'//cmyidx//'.'//cmyidy//'.'//cexpnr,access='direct', form='unformatted', recl=reclength) - write (ifoutput, rec=writecounter) field(2:i1,2:j1,klow:khigh) + write (ifoutput, rec=writecounter) field(2:i1:ncoarse,2:j1:ncoarse,klow:khigh) else open (ifoutput,file='wbww.'//cmyidx//'.'//cmyidy//'.'//cexpnr,form='unformatted',position='append') - write (ifoutput) (((field(i,j,k),i=2,i1),j=2,j1),k=klow,khigh) + write (ifoutput) (((field(i,j,k),i=2,i1, ncoarse),j=2,j1, ncoarse),k=klow,khigh) end if close (ifoutput) endif - field = NINT(1.0E5*qtm,2) - if (lnetcdf) vars(:,:,:,4) = field(2:i1,2:j1,klow:khigh) + field = NINT(1.0E5*qt0,2) + if (lnetcdf) vars(:,:,:,4) = qt0(2:i1:ncoarse,2:j1:ncoarse,klow:khigh) if (lbinary) then if (ldiracc) then open (ifoutput,file='wbqt.'//cmyidx//'.'//cmyidy//'.'//cexpnr,access='direct', form='unformatted', recl=reclength) - write (ifoutput, rec=writecounter) field(2:i1,2:j1,klow:khigh) + write (ifoutput, rec=writecounter) field(2:i1:ncoarse,2:j1:ncoarse,klow:khigh) else open (ifoutput,file='wbqt.'//cmyidx//'.'//cmyidy//'.'//cexpnr,form='unformatted',position='append') - write (ifoutput) (((field(i,j,k),i=2,i1),j=2,j1),k=klow,khigh) + write (ifoutput) (((field(i,j,k),i=2,i1, ncoarse),j=2,j1, ncoarse),k=klow,khigh) end if close (ifoutput) endif field = NINT(1.0E5*ql0,2) - if (lnetcdf) vars(:,:,:,5) = field(2:i1,2:j1,klow:khigh) + if (lnetcdf) vars(:,:,:,5) = ql0(2:i1:ncoarse,2:j1:ncoarse,klow:khigh) if (lbinary) then if (ldiracc) then open (ifoutput,file='wbql.'//cmyidx//'.'//cmyidy//'.'//cexpnr,access='direct', form='unformatted', recl=reclength) - write (ifoutput, rec=writecounter) field(2:i1,2:j1,klow:khigh) + write (ifoutput, rec=writecounter) field(2:i1:ncoarse,2:j1:ncoarse,klow:khigh) else open (ifoutput,file='wbql.'//cmyidx//'.'//cmyidy//'.'//cexpnr,form='unformatted',position='append') - write (ifoutput) (((field(i,j,k),i=2,i1),j=2,j1),k=klow,khigh) + write (ifoutput) (((field(i,j,k),i=2,i1, ncoarse),j=2,j1, ncoarse),k=klow,khigh) end if close (ifoutput) endif - field = NINT(1.0E2*(thlm-300),2) - if (lnetcdf) vars(:,:,:,6) = field(2:i1,2:j1,klow:khigh) + field = NINT(1.0E2*(thl0-300),2) + if (lnetcdf) vars(:,:,:,6) = thl0(2:i1:ncoarse,2:j1:ncoarse,klow:khigh) if (lbinary) then if (ldiracc) then open (ifoutput,file='wbthl.'//cmyidx//'.'//cmyidy//'.'//cexpnr,access='direct', form='unformatted', recl=reclength) - write (ifoutput, rec=writecounter) field(2:i1,2:j1,klow:khigh) + write (ifoutput, rec=writecounter) field(2:i1:ncoarse,2:j1:ncoarse,klow:khigh) else open (ifoutput,file='wbthl.'//cmyidx//'.'//cmyidy//'.'//cexpnr,form='unformatted',position='append') - write (ifoutput) (((field(i,j,k),i=2,i1),j=2,j1),k=klow,khigh) + write (ifoutput) (((field(i,j,k),i=2,i1, ncoarse),j=2,j1, ncoarse),k=klow,khigh) end if close (ifoutput) end if @@ -226,22 +245,20 @@ subroutine fielddump do i=2-ih,i1+ih do j=2-jh,j1+jh do k=1,k1 - field(i,j,k) = NINT(1.0E5*svm(i,j,k,iqr),2) + field(i,j,k) = NINT(1.0E5*sv0(i,j,k,iqr),2) enddo enddo enddo else field = 0. endif - - if (lnetcdf) vars(:,:,:,7) = field(2:i1,2:j1,klow:khigh) if (lbinary) then if (ldiracc) then open (ifoutput,file='wbqr.'//cmyidx//'.'//cmyidy//'.'//cexpnr,access='direct', form='unformatted', recl=reclength) - write (ifoutput, rec=writecounter) field(2:i1,2:j1,klow:khigh) + write (ifoutput, rec=writecounter) field(2:i1:ncoarse,2:j1:ncoarse,klow:khigh) else open (ifoutput,file='wbqr.'//cmyidx//'.'//cmyidy//'.'//cexpnr,form='unformatted',position='append') - write (ifoutput) (((field(i,j,k),i=2,i1),j=2,j1),k=klow,khigh) + write (ifoutput) (((field(i,j,k),i=2,i1, ncoarse),j=2,j1, ncoarse),k=klow,khigh) end if close (ifoutput) endif @@ -254,23 +271,37 @@ subroutine fielddump enddo enddo enddo - - if (lnetcdf) vars(:,:,:,8) = field(2:i1,2:j1,klow:khigh) + + if (lnetcdf) then + vars(:,:,:,7) = thv0h(2:i1:ncoarse,2:j1:ncoarse,klow:khigh) + do k=klow,khigh + vars(:,:,k,7) = vars(:,:,k,7) - thvh(k) + end do + end if + do i=2-ih,i1+ih, ncoarse + do j=2-jh,j1+jh, ncoarse + do k=2,k1 + field(i,j,k) = NINT(1.0E2*(thv0h(i,j,k)-thvh(k)),2) + enddo + enddo + enddo if (lbinary) then if (ldiracc) then open (ifoutput,file='wbthv.'//cmyidx//'.'//cmyidy//'.'//cexpnr,access='direct', form='unformatted', recl=reclength) - write (ifoutput, rec=writecounter) field(2:i1,2:j1,klow:khigh) + write (ifoutput, rec=writecounter) field(2:i1:ncoarse,2:j1:ncoarse,klow:khigh) else open (ifoutput,file='wbthv.'//cmyidx//'.'//cmyidy//'.'//cexpnr,form='unformatted',position='append') - write (ifoutput) (((field(i,j,k),i=2,i1),j=2,j1),k=klow,khigh) + write (ifoutput) (((field(i,j,k),i=2,i1, ncoarse),j=2,j1, ncoarse),k=klow,khigh) end if close (ifoutput) endif + if (lnetcdf) vars(:,:,:,8:nvar) = sv0(2:i1:ncoarse,2:j1:ncoarse,klow:khigh,:) + if(lnetcdf) then call writestat_nc(ncid,1,tncname,(/rtimee/),nrec,.true.) - call writestat_nc(ncid,nvar,ncname,vars,nrec,imax,jmax,khigh-klow+1) + call writestat_nc(ncid,nvar,ncname,vars,nrec,ceiling(1.0*imax/ncoarse),ceiling(1.0*jmax/ncoarse),khigh-klow+1) end if if(lbinary) then diff --git a/src/modfields.f90 b/src/modfields.f90 index 90cd0d82..d047d9e7 100644 --- a/src/modfields.f90 +++ b/src/modfields.f90 @@ -103,15 +103,21 @@ module modfields real, allocatable :: dthldxls(:) !< large scale x-gradient of th_liq real, allocatable :: dthldyls(:) !< large scale y-gradient of th_liq + real, allocatable :: dthldtls(:) !< large scale tendency of thl + real, allocatable :: dqtdxls(:) !< large scale x-gradient of q_tot real, allocatable :: dqtdyls(:) !< large scale y-gradient of q_tot - real, allocatable :: dqtdtls(:) !< large scale y-gradient of q_tot - real, allocatable :: dudxls(:) !< large scale x-gradient of u + real, allocatable :: dqtdtls(:) !< large scale tendency of q_tot + real, allocatable :: dudxls(:) !< large scale x-gradient of u real, allocatable :: dudyls(:) !< large scale y-gradient of u + real, allocatable :: dudtls(:) !< large scale tendency of u + real, allocatable :: dvdxls(:) !< large scale x-gradient of v real, allocatable :: dvdyls(:) !< large scale y-gradient of v - real, allocatable :: wfls (:) !< large scale y-gradient of v + real, allocatable :: dvdtls(:) !< large scale tendency of v + + real, allocatable :: wfls (:) !< large scale vertical velocity real, allocatable :: ql0h(:,:,:) real, allocatable :: dthvdz(:,:,:)!< theta_v at half level @@ -200,15 +206,23 @@ subroutine initfields allocate(vg(k1)) allocate(dpdxl(k1)) allocate(dpdyl(k1)) + allocate(dthldxls(k1)) allocate(dthldyls(k1)) + allocate(dthldtls(k1)) + allocate(dqtdxls(k1)) allocate(dqtdyls(k1)) allocate(dqtdtls(k1)) + allocate(dudxls(k1)) allocate(dudyls(k1)) + allocate(dudtls(k1)) + allocate(dvdxls(k1)) allocate(dvdyls(k1)) + allocate(dvdtls(k1)) + allocate(wfls (k1)) allocate(ql0h(2-ih:i1+ih,2-jh:j1+jh,k1)) allocate(dthvdz(2-ih:i1+ih,2-jh:j1+jh,k1)) @@ -242,8 +256,12 @@ subroutine initfields presf=0.;presh=0.;exnf=0.;exnh=0.;thvh=0.;thvf=0.;rhof=0. ! OG qt0av=0.;ql0av=0.;thl0av=0.;u0av=0.;v0av=0.;sv0av=0. thlprof=0.;qtprof=0.;uprof=0.;vprof=0.;e12prof=0.;svprof=0. - ug=0.;vg=0.;dpdxl=0.;dpdyl=0.;wfls=0.;whls=0.;thlpcar = 0. - dthldxls=0.;dthldyls=0.;dqtdxls=0.;dqtdyls=0.;dudxls=0.;dudyls=0.;dvdxls=0.;dvdyls=0. + ug=0.;vg=0.;dpdxl=0.;dpdyl=0.;wfls=0.;whls=0. + thlpcar = 0. + dthldxls=0.;dthldyls=0.;dthldtls=0. + dqtdxls=0.;dqtdyls=0.;dqtdtls=0. + dudxls=0.;dudyls=0.;dudtls=0. + dvdxls=0.;dvdyls=0.;dvdtls=0. dthvdz=0. SW_up_TOA=0.;SW_dn_TOA=0.;LW_up_TOA=0.;LW_dn_TOA=0. qvsl=0.;qvsi=0.;esl=0. @@ -261,7 +279,9 @@ subroutine exitfields deallocate(rhobf,rhobh) deallocate(drhobdzf,drhobdzh) deallocate(ql0,tmp0,ql0h,thv0h,dthvdz,whls,presf,presh,exnf,exnh,thvh,thvf,rhof,qt0av,ql0av,thl0av,u0av,v0av) - deallocate(ug,vg,dpdxl,dpdyl,dthldxls,dthldyls,dqtdxls,dqtdyls,dqtdtls,dudxls,dudyls,dvdxls,dvdyls,wfls) + deallocate(ug,vg,dpdxl,dpdyl,wfls) + deallocate(dthldxls,dthldyls,dthldtls,dqtdxls,dqtdyls,dqtdtls) + deallocate(dudxls,dudyls,dudtls,dvdxls,dvdyls,dvdtls) deallocate(thlprof,qtprof,uprof,vprof,e12prof,sv0av,svprof) deallocate(thlpcar) deallocate(SW_up_TOA,SW_dn_TOA,LW_up_TOA,LW_dn_TOA) diff --git a/src/modforces.f90 b/src/modforces.f90 index 682ef583..9d227edf 100644 --- a/src/modforces.f90 +++ b/src/modforces.f90 @@ -60,7 +60,7 @@ subroutine forces ! | !-----------------------------------------------------------------| - use modglobal, only : i1,j1,kmax,dzh,dzf,grav + use modglobal, only : i1,j1,kmax,dzh,dzf,grav, lpressgrad use modfields, only : sv0,up,vp,wp,thv0h,dpdxl,dpdyl,thvh use moduser, only : force_user use modmicrodata, only : imicro, imicro_bulk, imicro_bin, imicro_sice,iqr @@ -78,8 +78,11 @@ subroutine forces jp=j+1 jm=j-1 do i=2,i1 - up(i,j,k) = up(i,j,k) - dpdxl(k) + + if (lpressgrad) then + up(i,j,k) = up(i,j,k) - dpdxl(k) !RN LS pressure gradient force in x,y directions; vp(i,j,k) = vp(i,j,k) - dpdyl(k) + end if wp(i,j,k) = wp(i,j,k) + grav*(thv0h(i,j,k)-thvh(k))/thvh(k) - & grav*(sv0(i,j,k,iqr)*dzf(k-1)+sv0(i,j,k-1,iqr)*dzf(k))/(2.0*dzh(k)) end do @@ -110,9 +113,10 @@ subroutine forces jm = j-1 do i=2,i1 - up(i,j,1) = up(i,j,1) - dpdxl(1) - - vp(i,j,1) = vp(i,j,1) - dpdyl(1) + if (lpressgrad) then + up(i,j,1) = up(i,j,1) - dpdxl(1) + vp(i,j,1) = vp(i,j,1) - dpdyl(1) + end if wp(i,j,1) = 0.0 @@ -223,7 +227,8 @@ subroutine lstend use modglobal, only : i1,j1,kmax,dzh,nsv,lmomsubs use modfields, only : up,vp,thlp,qtp,svp,& whls, u0av,v0av,thl0,qt0,sv0,u0,v0,& - dudxls,dudyls,dvdxls,dvdyls,dthldxls,dthldyls,dqtdxls,dqtdyls,dqtdtls + dudxls,dudyls,dvdxls,dvdyls,dthldxls,dthldyls,dqtdxls,dqtdyls, & + dqtdtls, dthldtls, dudtls, dvdtls implicit none integer i,j,k,n,kp,km @@ -255,10 +260,10 @@ subroutine lstend svp(i,j,1,n) = svp(i,j,1,n)-subs_sv enddo endif - thlp(i,j,1) = thlp(i,j,1) -u0av(1)*dthldxls(1)-v0av(1)*dthldyls(1)-subs_thl - qtp(i,j,1) = qtp (i,j,1) -u0av(1)*dqtdxls (1)-v0av(1)*dqtdyls (1)-subs_qt +dqtdtls(1) - up (i,j,1) = up (i,j,1) -u0av(1)*dudxls (1)-v0av(1)*dudyls (1)-subs_u - vp (i,j,1) = vp (i,j,1) -u0av(1)*dvdxls (1)-v0av(1)*dvdyls (1)-subs_v + thlp(i,j,1) = thlp(i,j,1) -u0av(1)*dthldxls(1)-v0av(1)*dthldyls(1)-subs_thl + dthldtls(1) + qtp(i,j,1) = qtp (i,j,1) -u0av(1)*dqtdxls (1)-v0av(1)*dqtdyls (1)-subs_qt + dqtdtls(1) + up (i,j,1) = up (i,j,1) -u0av(1)*dudxls (1)-v0av(1)*dudyls (1)-subs_u + dudtls(1) + vp (i,j,1) = vp (i,j,1) -u0av(1)*dvdxls (1)-v0av(1)*dvdyls (1)-subs_v + dvdtls(1) end do end do @@ -292,11 +297,12 @@ subroutine lstend svp(i,j,k,n) = svp(i,j,k,n)-subs_sv enddo endif + + thlp(i,j,k) = thlp(i,j,k)-u0av(k)*dthldxls(k)-v0av(k)*dthldyls(k)-subs_thl + dthldtls(k) + qtp (i,j,k) = qtp (i,j,k)-u0av(k)*dqtdxls (k)-v0av(k)*dqtdyls (k)-subs_qt + dqtdtls(k) + up (i,j,k) = up (i,j,k)-u0av(k)*dudxls (k)-v0av(k)*dudyls (k)-subs_u + dudtls(k) + vp (i,j,k) = vp (i,j,k)-u0av(k)*dvdxls (k)-v0av(k)*dvdyls (k)-subs_v + dvdtls(k) - thlp(i,j,k) = thlp(i,j,k)-u0av(k)*dthldxls(k)-v0av(k)*dthldyls(k)-subs_thl - qtp (i,j,k) = qtp (i,j,k)-u0av(k)*dqtdxls (k)-v0av(k)*dqtdyls (k)-subs_qt+dqtdtls(k) - up (i,j,k) = up (i,j,k)-u0av(k)*dudxls (k)-v0av(k)*dudyls (k)-subs_u - vp (i,j,k) = vp (i,j,k)-u0av(k)*dvdxls (k)-v0av(k)*dvdyls (k)-subs_v enddo enddo enddo diff --git a/src/modgenstat.f90 b/src/modgenstat.f90 index 08f4a84c..69a7a7a6 100644 --- a/src/modgenstat.f90 +++ b/src/modgenstat.f90 @@ -701,7 +701,7 @@ subroutine do_genstat qls = 0.0 ! hj: no liquid water at the surface tsurf = thls*exnh(1)+(rlv/cp)*qls qsat = qts - qls - if (qls==0) then + if (qls< eps1) then ! TH: Should always be true c1 = 1.+(rv/rd-1)*qts c2 = (rv/rd-1) else diff --git a/src/modglobal.f90 b/src/modglobal.f90 index a533443a..94929b94 100644 --- a/src/modglobal.f90 +++ b/src/modglobal.f90 @@ -99,6 +99,8 @@ module modglobal real,parameter :: boltz = 5.67e-8 !< *Stefan-Boltzmann constant logical :: lcoriol = .true. !< switch for coriolis force + logical :: lpressgrad = .true. !< switch for horizontal pressure gradient force + integer :: igrw_damp = 2 !< switch to enable gravity wave damping real :: geodamptime = 7200. !< time scale for nudging to geowind in sponge layer, prevents oscillations real :: om22 !< *2.*omega_earth*cos(lat) @@ -120,6 +122,7 @@ module modglobal !Advection scheme integer :: iadv_mom = 5, iadv_tke = -1, iadv_thl = -1,iadv_qt = -1,iadv_sv(100) = -1 + integer, parameter :: iadv_null = 0 integer, parameter :: iadv_upw = 1 integer, parameter :: iadv_cd2 = 2 integer, parameter :: iadv_5th = 5 @@ -128,6 +131,7 @@ module modglobal integer, parameter :: iadv_52 = 52 integer, parameter :: iadv_kappa = 7 integer, parameter :: iadv_hybrid = 55 + integer, parameter :: iadv_hybrid_f = 555 real :: lambda_crit=100. !< maximum value for the smoothness. This controls if WENO or @@ -165,11 +169,10 @@ module modglobal integer(kind=longint) :: timee !< * elapsed time since the "cold" start real :: rtimee !< * elapsed time since the "cold" start integer(kind=longint) :: btime !< * time of (re)start - integer :: ntimee !< * number of timesteps since the cold start integer :: ntrun !< * number of timesteps since the start of the run integer(kind=longint) :: timeleft - logical :: ladaptive = .false. !< * adaptive timestepping on or off + logical :: ltotruntime = .false. !< * Whether the runtime is counted since the last cold start (if true) or the last warm start (if false, default) real :: courant = -1 real :: peclet = 0.15 @@ -210,10 +213,11 @@ module modglobal real :: xsize = -1 !< domain size in x-direction real :: ysize = -1 !< domain size in y-direction real, allocatable :: delta(:) !< (dx*dy*dz)**(1/3) + real, allocatable :: deltai(:) !< (dx*dy*dz)**(-1/3) logical :: leq = .true. !< switch for (non)-equidistant mode. logical :: lmomsubs = .false. !< switch to apply subsidence on the momentum or not - character(80) :: author='', version='DALES 4.1' + character(80) :: author='', version='DALES 4.2' contains !> Initialize global settings. @@ -242,6 +246,8 @@ subroutine initglobal case(iadv_52) courant = 1. case(iadv_hybrid) + courant = 1. + case(iadv_hybrid_f) courant = 1. case default courant = 1. @@ -295,6 +301,10 @@ subroutine initglobal ih = 3 jh = 3 kh = 1 + elseif (any(advarr==iadv_hybrid_f).or.any(iadv_sv(1:nsv)==iadv_hybrid_f)) then + ih = 3 + jh = 3 + kh = 1 elseif (any(advarr==iadv_kappa).or.any(iadv_sv(1:nsv)==iadv_kappa)) then ih = 2 jh = 2 @@ -309,10 +319,17 @@ subroutine initglobal ! Global constants + + + ! esatltab(m) gives the saturation vapor pressure over water at T corresponding to m + ! esatitab(m) is the same over ice + ! http://www.radiativetransfer.org/misc/atmlabdoc/atmlab/h2o/thermodynamics/e_eq_water_mk.html + ! Murphy and Koop 2005 parameterization formula. do m=1,2000 ttab(m)=150.+0.2*m esatltab(m)=exp(54.842763-6763.22/ttab(m)-4.21*log(ttab(m))+0.000367*ttab(m)+& - tanh(0.0415*(ttab(m)-218.8))*(53.878-1331.22/ttab(m)-9.44523*log(ttab(m))+ 0.014025*ttab(m))) + tanh(0.0415*(ttab(m)-218.8))*(53.878-1331.22/ttab(m)-9.44523*log(ttab(m))+ 0.014025*ttab(m))) + esatitab(m)=exp(9.550426-5723.265/ttab(m)+3.53068*log(ttab(m))-0.00728332*ttab(m)) end do @@ -361,7 +378,7 @@ subroutine initglobal allocate(dzh(k1)) allocate(zh(k1)) allocate(zf(k1)) - allocate(delta(k1)) + allocate(delta(k1),deltai(k1)) ijtot = real(itot*jtot) @@ -410,7 +427,8 @@ subroutine initglobal do k=1,k1 - delta(k) = (dx*dy*dzf(k))**(1./3.) + delta(k) = (dx*dy*dzf(k))**(1./3.) + deltai(k) = 1./delta(k) end do !-------------------------------------------------- @@ -420,7 +438,7 @@ subroutine initglobal leq=.true. dz = dzf(1) do k=1,k1 - if (dzf(k)/=dz) then + if (abs(dzf(k)-dz)/dz>eps1) then leq = .false. end if end do @@ -455,13 +473,13 @@ subroutine initglobal write(6,'(i4,5f10.2)') k,dzf(k),zf(k),zh(k),dzh(k),delta(k) end do end if - tnextrestart = trestart/tres - timeleft=ceiling(runtime/tres) +! tnextrestart = trestart/tres +! timeleft=ceiling(runtime/tres) end subroutine initglobal !> Clean up when leaving the run subroutine exitglobal - deallocate(dsv,dzf,dzh,zh,zf,delta) + deallocate(dsv,dzf,dzh,zh,zf,delta,deltai) end subroutine exitglobal FUNCTION LACZ_GAMMA(X) RESULT(fn_val) @@ -580,30 +598,30 @@ FUNCTION LACZ_GAMMA(X) RESULT(fn_val) !---------------------------------------------------------------------- ! Machine dependent parameters !---------------------------------------------------------------------- -REAL (dp), PARAMETER :: xbig = 171.624_dp, xminin = 2.23D-308, & - eps = 2.22D-16, xinf = 1.79D308 +REAL (dp), PARAMETER :: xbig = 171.624_dp, xminin = 2.23E-308_dp, & + eps = 2.22E-16_dp, xinf = 1.79E308_dp !---------------------------------------------------------------------- ! Numerator and denominator coefficients for rational minimax ! approximation over (1,2). !---------------------------------------------------------------------- REAL (dp), PARAMETER :: P(8) = & - (/ -1.71618513886549492533811D+0, 2.47656508055759199108314D+1, & - -3.79804256470945635097577D+2, 6.29331155312818442661052D+2, & - 8.66966202790413211295064D+2, -3.14512729688483675254357D+4, & - -3.61444134186911729807069D+4, 6.64561438202405440627855D+4 /) + (/ -1.71618513886549492533811E+0_dp, 2.47656508055759199108314E+1_dp, & + -3.79804256470945635097577E+2_dp, 6.29331155312818442661052E+2_dp, & + 8.66966202790413211295064E+2_dp, -3.14512729688483675254357E+4_dp, & + -3.61444134186911729807069E+4_dp, 6.64561438202405440627855E+4_dp /) REAL (dp), PARAMETER :: Q(8) = & - (/ -3.08402300119738975254353D+1, 3.15350626979604161529144D+2, & - -1.01515636749021914166146D+3, -3.10777167157231109440444D+3, & - 2.25381184209801510330112D+4, 4.75584627752788110767815D+3, & - -1.34659959864969306392456D+5, -1.15132259675553483497211D+5 /) + (/ -3.08402300119738975254353E+1_dp, 3.15350626979604161529144E+2_dp, & + -1.01515636749021914166146E+3_dp, -3.10777167157231109440444E+3_dp, & + 2.25381184209801510330112E+4_dp, 4.75584627752788110767815E+3_dp, & + -1.34659959864969306392456E+5_dp, -1.15132259675553483497211E+5_dp /) !---------------------------------------------------------------------- ! Coefficients for minimax approximation over (12, INF). !---------------------------------------------------------------------- REAL (dp), PARAMETER :: c(7) = & - (/ -1.910444077728D-03, 8.4171387781295D-04, & - -5.952379913043012D-04, 7.93650793500350248D-04, & - -2.777777777777681622553D-03, 8.333333333333333331554247D-02, & - 5.7083835261D-03 /) + (/ -1.910444077728E-03_dp, 8.4171387781295E-04_dp, & + -5.952379913043012E-04_dp, 7.93650793500350248E-04_dp, & + -2.777777777777681622553E-03_dp, 8.333333333333333331554247E-02_dp, & + 5.7083835261E-03_dp /) !---------------------------------------------------------------------- parity = .false. diff --git a/src/modheterostats.f90 b/src/modheterostats.f90 index 1ff742e8..cce46864 100644 --- a/src/modheterostats.f90 +++ b/src/modheterostats.f90 @@ -1136,7 +1136,7 @@ subroutine exitheterostats use typeSizes use netcdf - use modmpi, only : myid,myidx + use modmpi, only : myidx implicit none diff --git a/src/modlsmcrosssection.f90 b/src/modlsmcrosssection.f90 index 62a460ff..e7d5e159 100644 --- a/src/modlsmcrosssection.f90 +++ b/src/modlsmcrosssection.f90 @@ -169,7 +169,7 @@ end subroutine initlsmcrosssection !>Run lsmcrosssection. Mainly timekeeping subroutine lsmcrosssection use modglobal, only : rk3step,timee,dt_lim - use modstat_nc, only : lnetcdf, writestat_nc + use modstat_nc, only : writestat_nc implicit none diff --git a/src/modmicrodata.f90 b/src/modmicrodata.f90 index b1b01cdd..39b0927b 100644 --- a/src/modmicrodata.f90 +++ b/src/modmicrodata.f90 @@ -34,6 +34,7 @@ module modmicrodata integer, parameter :: imicro_bulk = 2 integer, parameter :: imicro_bin = 3 integer, parameter :: imicro_sice = 5 + integer, parameter :: imicro_sice2 = 6 integer, parameter :: imicro_user = 10 logical :: l_sb = .true. , &!< SB scheme (.true.) / KK00 scheme (.false.) (in namelist NAMMICROPHYSICS) l_sedc = .true. , & !< cloud droplet sedimentation flag (in namelist NAMMICROPHYSICS) @@ -41,7 +42,7 @@ module modmicrodata l_mur_cst = .false. ! false = no constant value of mur (mur=f(Dv)) (in namelist NAMMICROPHYSICS) real :: mur_cst = 5 & !< mur value if l_mur_cst=T (in namelist NAMMICROPHYSICS) - ,Nc_0 = 70e6 & !< initial cloud droplet number + ,Nc_0 = 70e6 & !< initial cloud droplet number (#/m3) ,sig_g = 1.34 & !< geom. std dev of cloud droplet DSD ,sig_gr = 1.5 !< geometric std dev of rain drop DSD @@ -233,5 +234,5 @@ module modmicrodata real,allocatable,dimension(:,:,:) :: ilratio,rsgratio,sgratio,lambdar,lambdas,lambdag ! Density-corrected A coefficients for terminal velocity real,allocatable,dimension(:) :: ccrz,ccsz,ccgz - + real,allocatable,dimension(:) :: ccrz2,ccsz2,ccgz2 end module modmicrodata diff --git a/src/modmicrophysics.f90 b/src/modmicrophysics.f90 index 26144731..e89339dc 100644 --- a/src/modmicrophysics.f90 +++ b/src/modmicrophysics.f90 @@ -38,15 +38,17 @@ module modmicrophysics contains subroutine initmicrophysics use modmpi, only :myid,my_real,comm3d,mpi_integer,mpi_logical - use modglobal,only :ifnamopt,fname_options + use modglobal,only :ifnamopt,fname_options,nsv use modbulkmicro, only : initbulkmicro use modsimpleice, only : initsimpleice + use modsimpleice2, only : initsimpleice2 implicit none integer :: ierr namelist/NAMMICROPHYSICS/ & imicro,l_sb,l_rain,l_sedc,l_mur_cst,l_berry,l_graupel,l_warm,mur_cst, & ! OG - Nc_0, sig_g, sig_gr ! SdeR - + Nc_0, sig_g, sig_gr, & ! SdeR + courantp ! FJ + if(myid==0)then open(ifnamopt,file=fname_options,status='old',iostat=ierr) read (ifnamopt,NAMMICROPHYSICS,iostat=ierr) @@ -71,16 +73,22 @@ subroutine initmicrophysics call MPI_BCAST(Nc_0, 1, MY_REAL ,0,comm3d,ierr) call MPI_BCAST(sig_g, 1, MY_REAL ,0,comm3d,ierr) call MPI_BCAST(sig_gr, 1, MY_REAL ,0,comm3d,ierr) + call MPI_BCAST(courantp, 1, MY_REAL ,0,comm3d,ierr) select case (imicro) case(imicro_none) case(imicro_drizzle) case(imicro_bulk) + if (nsv < 2) STOP "ERROR: Bulk microphysics requires nsv >=2" call initbulkmicro case(imicro_bin) ! call initbinmicro case(imicro_sice) - call initsimpleice + if (nsv < 2) STOP "ERROR: Simple ice microphysics requires nsv >=2" + call initsimpleice + case(imicro_sice2) + if (nsv < 2) STOP "ERROR: Simple ice microphysics requires nsv >=2" + call initsimpleice2 case(imicro_user) end select end subroutine initmicrophysics @@ -106,6 +114,7 @@ subroutine microsources use moduser, only : micro_user use modbulkmicro, only : bulkmicro use modsimpleice, only : simpleice + use modsimpleice2, only : simpleice2 ! use modbinmicro, only : binmicrosources implicit none @@ -118,7 +127,9 @@ subroutine microsources case(imicro_bin) ! call binmicrosources case(imicro_sice) - call simpleice + call simpleice + case(imicro_sice2) + call simpleice2 case(imicro_user) call micro_user end select @@ -128,6 +139,7 @@ end subroutine microsources subroutine exitmicrophysics use modbulkmicro, only : exitbulkmicro use modsimpleice, only : exitsimpleice + use modsimpleice2, only : exitsimpleice2 ! use modbinmicro, only : exitbinmicro implicit none @@ -140,7 +152,9 @@ subroutine exitmicrophysics ! call exitbinmicro case(imicro_user) case(imicro_sice) - call exitsimpleice + call exitsimpleice + case(imicro_sice2) + call exitsimpleice2 end select end subroutine exitmicrophysics diff --git a/src/modmpi.f90 b/src/modmpi.f90 index aa5be7fd..06c8f957 100644 --- a/src/modmpi.f90 +++ b/src/modmpi.f90 @@ -211,9 +211,10 @@ subroutine excj( a, sx, ex, sy, ey, sz,ez) enddo enddo else + ii = 0 !XPB added this line, otherwise crash if nprocy=0,nprocx=1 (may be unnecessary after commenting lines 217 and 263) do k=sz,ez do i=sx,ex - ii = ii + 1 +! ii = ii + 1 a(i,sy,k) = a(i,ey-1,k) a(i,ey,k) = a(i,sy+1,k) enddo @@ -259,7 +260,7 @@ subroutine excj( a, sx, ex, sy, ey, sz,ez) else do k=sz,ez do i=sy,ey - ii = ii + 1 +! ii = ii + 1 a(sx,i,k) = a(ex-1,i,k) a(ex,i,k) = a(sx+1,i,k) enddo @@ -424,6 +425,14 @@ subroutine slabsum(aver,ks,kf,var,ib,ie,jb,je,kb,ke,ibs,ies,jbs,jes,kbs,kes) return end subroutine slabsum + + subroutine mpi_get_time(val) + real, intent(out) :: val + + val = MPI_Wtime() + call MPI_BCAST(val,1,MY_REAL ,0,comm3d,mpierr) + + end subroutine mpi_get_time ! Gather a variable l(imax,jmax) along a row (ie. constant myidy) ! into g(itot,jmax) at the processor with myix=0 diff --git a/src/modnudge.f90 b/src/modnudge.f90 index 8eb6edd4..3e6c6f8d 100644 --- a/src/modnudge.f90 +++ b/src/modnudge.f90 @@ -44,7 +44,7 @@ module modnudge contains subroutine initnudge use modmpi, only :myid,my_real,mpierr,comm3d,mpi_logical - use modglobal,only :ifnamopt,fname_options,runtime,btime,cexpnr,ifinput,k1,kmax,tres + use modglobal,only :ifnamopt,fname_options,runtime,cexpnr,ifinput,k1,kmax implicit none integer :: ierr,k,t @@ -81,7 +81,7 @@ subroutine initnudge t = 0 open (ifinput,file='nudge.inp.'//cexpnr) - do while (timenudge(t) < tres*real(btime)+runtime) + do while (timenudge(t) < runtime) t = t + 1 chmess1 = "#" ierr = 1 ! not zero @@ -137,7 +137,7 @@ end subroutine initnudge !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! subroutine nudge - use modglobal, only : rtimee,i1,j1,kmax,rdt + use modglobal, only : timee,rtimee,i1,j1,kmax,rdt use modfields, only : up,vp,wp,thlp, qtp,u0av,v0av,qt0av,thl0av implicit none @@ -146,13 +146,13 @@ subroutine nudge if (.not.(lnudge)) return ! if (rk3step/=3) return - if (rtimee==0) return + if (timee==0) return t=1 do while(rtimee>timenudge(t)) t=t+1 end do - if (rtimee/=timenudge(1)) then + if (rtimee>timenudge(1)) then t=t-1 end if diff --git a/src/modpois.f90 b/src/modpois.f90 index 8c5f4dff..f942133b 100644 --- a/src/modpois.f90 +++ b/src/modpois.f90 @@ -236,11 +236,12 @@ subroutine solmpj real :: a(kmax),b(kmax),c(kmax) ! allocate d in the same shape as p and xyrt - real :: d(2-ih:i1+ih,2-jh:j1+jh,kmax) - + real, allocatable :: d(:,:,:) + real z,ak,bk,bbk integer i, j, k - + allocate(d(2-ih:i1+ih,2-jh:j1+jh,kmax)) + ! Forward FFT call fft2df(p,ih,jh) @@ -303,6 +304,8 @@ subroutine solmpj ! Backward FFT call fft2db(p,ih,jh) + deallocate(d) + return end subroutine solmpj !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! diff --git a/src/modprojection.f90 b/src/modprojection.f90 index db7e45fd..a60972df 100644 --- a/src/modprojection.f90 +++ b/src/modprojection.f90 @@ -67,7 +67,7 @@ module modprojection subroutine initprojection use modmpi, only :myid,my_real,mpierr,comm3d,mpi_logical,mpi_integer,cmyid use modglobal,only :imax,jmax,ifnamopt,fname_options,dtmax,dtav_glob,ladaptive,kmax,dt_lim,tres,btime,cexpnr,zf - use modstat_nc, only : lnetcdf, open_nc,define_nc,ncinfo, writestat_dims_nc + use modstat_nc, only : open_nc,define_nc,ncinfo, writestat_dims_nc implicit none integer :: ierr diff --git a/src/modquadrant.f90 b/src/modquadrant.f90 index 1069d119..37f0a23a 100644 --- a/src/modquadrant.f90 +++ b/src/modquadrant.f90 @@ -318,7 +318,7 @@ subroutine doquadrant use modglobal, only : imax,jmax,i1,j1,i2,j2,dzh,dzf,nsv,ijtot,cu,cv,dx,dy use modfields, only : u0,v0,w0,thl0,qt0,sv0 use modsubgriddata, only : ekh,ekm - use modmpi, only : slabsum,my_real,mpi_integer,comm3d,mpierr,mpi_sum + use modmpi, only : slabsum implicit none logical, allocatable, dimension(:,:,:) :: mask @@ -334,7 +334,7 @@ subroutine doquadrant real, allocatable, dimension(:,:,:) :: thlqtcov real, allocatable, dimension(:,:,:) :: ekhhalf,ekmhalf - integer :: i,j,k,km,n + integer :: k,km,n allocate(mask (2:i1,2:j1,klow:khigh )) allocate(uloc (2:i1,2:j1,klow:khigh )) diff --git a/src/modraddata.f90 b/src/modraddata.f90 index c508d065..a0d2fdd0 100644 --- a/src/modraddata.f90 +++ b/src/modraddata.f90 @@ -56,7 +56,9 @@ module modraddata real :: rka = 130. !< extinction coefficient in radpar scheme real :: dlwtop = 74. !< longwave radiative flux divergence at top of domain real :: dlwbot = 0. !< longwave radiative flux divergence near the surface - real :: sw0 = 1100.0 !< direct component at top of the cloud (W/m^2) + real :: sw0 = 1368.22 !< Solar constant (in W/m2). SWD at TOA = sw0*cos(mu) + !< NOTE: when using delta-Eddington (iradiation=2) this represents the downwelling solar + ! radiation at the top of the domain/cloud real :: gc = 0.85 !< asymmetry factor of droplet scattering angle distribution real :: SSA = 0.999 !< typical single scattering albedo for clouds @@ -106,6 +108,8 @@ module modraddata lwHRCS_slice, & ! Heating rate due to longwave rad,clear sky value (2D slice) swUp_slice, & ! Upwelling shortwave rad (2D slice) swDown_slice, & ! Downwelling shortwave rad (2D slice) + swDownDir_slice,& ! Downwelling shortwave direct rad (2D slice) + swDownDif_slice,& ! Downwelling shortwave diffuse rad (2D slice) swUpCS_slice, & ! Upwelling shortwave rad, clear sky value (2D slice) swDownCS_slice, & ! Downwelling shortwave rad, clear sky value(2D slice) swHR_slice, & ! Heating rate due to shortwave rad (2D slice) @@ -167,6 +171,7 @@ module modraddata real, allocatable :: swd(:,:,:) !< shortwave downward radiative flux real, allocatable :: swdir(:,:,:) !< Direct shortwave downward radiative flux real, allocatable :: swdif(:,:,:) !< Difuse shortwave downward radiative flux + real, allocatable :: lwc(:,:,:) !< Liquid water content calculated in rrtmg real, allocatable :: swu(:,:,:) !< shortwave upward radiative flux real, allocatable :: lwd(:,:,:) !< longwave downward radiative flux real, allocatable :: lwu(:,:,:) !< longwave upward radiative flux diff --git a/src/modradfull.f90 b/src/modradfull.f90 index ad7ca4dd..63e3ba53 100644 --- a/src/modradfull.f90 +++ b/src/modradfull.f90 @@ -29,6 +29,7 @@ module modradfull use RandomNumbers + use modglobal, only : pi implicit none private public :: radfull,d4stream @@ -194,9 +195,10 @@ end subroutine radfull subroutine d4stream(i1,ih,j1,jh,k1, tskin, albedo, CCN, dn0, & pi0, tk, rv, rc, fds3D,fus3D,fdir3D,fuir3D, rr,lclear) - use modglobal, only : cexpnr,cp,cpr,pi,pref0,rtimee,xday,xlat,xlon,xtime,rhow + use modglobal, only : cexpnr,cp,cpr,pref0,rtimee,xday,xlat,xlon,xtime,rhow use modraddata,only : useMcICA,zenith,sw0,SW_up_TOA, SW_dn_TOA, LW_up_TOA, LW_dn_TOA, & SW_up_ca_TOA, SW_dn_ca_TOA, LW_up_ca_TOA, LW_dn_ca_TOA + use modtestbed, only : ltestbed implicit none integer, intent (in) :: i1,ih,j1,jh,k1 @@ -213,18 +215,30 @@ subroutine d4stream(i1,ih,j1,jh,k1, tskin, albedo, CCN, dn0, & real :: prw, p0(k1), exner(k1), pres(k1) character (len=19) :: background - if (.not. d4stream_initialized) then - p0(k1) = (pref0*(pi0(k1)/cp)**cpr) / 100. - p0(k1-1) = (pref0*(pi0(k1-1)/cp)**cpr) / 100. - background = 'backrad.inp.'//cexpnr - call d4stream_setup(background,k1,npts,nv1,nv,p0) - d4stream_initialized = .True. - if (allocated(pre)) pre(:) = 0. - if (allocated(pde)) pde(:) = 0. - if (allocated(piwc)) piwc(:) = 0. - if (allocated(prwc)) prwc(:) = 0. - if (allocated(plwc)) plwc(:) = 0. - if (allocated(pgwc)) pgwc(:) = 0. + if (ltestbed) then + p0(k1) = (pref0*(pi0(k1)/cp)**cpr) / 100. + p0(k1-1) = (pref0*(pi0(k1-1)/cp)**cpr) / 100. + call d4stream_tb_setup(k1,npts,nv1,nv,p0) + if (allocated(pre)) pre(:) = 0. + if (allocated(pde)) pde(:) = 0. + if (allocated(piwc)) piwc(:) = 0. + if (allocated(prwc)) prwc(:) = 0. + if (allocated(plwc)) plwc(:) = 0. + if (allocated(pgwc)) pgwc(:) = 0. + else + if (.not. d4stream_initialized) then + p0(k1) = (pref0*(pi0(k1)/cp)**cpr) / 100. + p0(k1-1) = (pref0*(pi0(k1-1)/cp)**cpr) / 100. + background = 'backrad.inp.'//cexpnr + call d4stream_setup(background,k1,npts,nv1,nv,p0) + d4stream_initialized = .True. + if (allocated(pre)) pre(:) = 0. + if (allocated(pde)) pde(:) = 0. + if (allocated(piwc)) piwc(:) = 0. + if (allocated(prwc)) prwc(:) = 0. + if (allocated(plwc)) plwc(:) = 0. + if (allocated(pgwc)) pgwc(:) = 0. + end if end if if (present(lclear)) then doclear=lclear @@ -383,6 +397,7 @@ subroutine d4stream_setup(filenm,k1,npts,nv1,nv,zp) pt(1:norig) = st(1:norig) ph(1:norig) = sh(1:norig) po(1:norig) = so(1:norig) + plwc(1:norig) = sl(1:norig) do k=norig+1,npts pp(k) = (ptop + pp(k-1))*0.5 @@ -390,6 +405,7 @@ subroutine d4stream_setup(filenm,k1,npts,nv1,nv,zp) pt(k) = intrpl(sp(index),st(index),sp(index+1),st(index+1),pp(k)) ph(k) = intrpl(sp(index),sh(index),sp(index+1),sh(index+1),pp(k)) po(k) = intrpl(sp(index),so(index),sp(index+1),so(index+1),pp(k)) + plwc(k) = intrpl(sp(index),sl(index),sp(index+1),sl(index+1),pp(k)) end do ! ! set the ozone constant below the reference profile @@ -400,6 +416,119 @@ subroutine d4stream_setup(filenm,k1,npts,nv1,nv,zp) end if end subroutine d4stream_setup + + subroutine d4stream_tb_setup(k1,npts,nv1,nv,zp) + use modtestbed, only : tbrad_p, tbrad_t, tbrad_ql, tbrad_qv, tbrad_o3, testbed_getinttime, nknudge + implicit none + + integer, intent (in) :: k1 + integer, intent (out):: npts,nv1,nv + real, intent (in) :: zp(k1) + + real, allocatable :: sp(:), st(:), sh(:), so(:), sl(:) + + integer :: k, norig, index, t + logical :: blend + real :: pa, pb, ptop, ptest, test, dp1, dp2, dp3, dtm, dtp + + norig = 0 + allocate ( sp(nknudge), st(nknudge), sh(nknudge), so(nknudge), sl(nknudge)) + if (allocated(pp)) then + deallocate (pp,fds,fus,fdir,fuir) + deallocate (pt,ph,po,pre,pde,plwc,prwc) + end if + call testbed_getinttime(t, dtm, dtp) + sp = tbrad_p (t,:) * dtp + tbrad_p (t+1,:) * dtm /100. !convert to hPa + st = tbrad_t (t,:) * dtp + tbrad_t (t+1,:) * dtm + sh = tbrad_qv(t,:) * dtp + tbrad_qv(t+1,:) * dtm + so = tbrad_o3(t,:) * dtp + tbrad_o3(t+1,:) * dtm + sl = tbrad_ql(t,:) * dtp + tbrad_ql(t+1,:) * dtm + +! open ( unit = 08, file = filenm, status = 'old' ) +! if (myid==0) print *, 'Reading Background Sounding: ',filenm +! read (08,*) Tsurf, ns +! allocate ( sp(ns), st(ns), sh(ns), so(ns), sl(ns)) +! do k=1,ns +! read ( 08, *) sp(k), st(k), sh(k), so(k), sl(k) +! sp(k) = sp(k) / 100. !convert to hPa +! enddo +! close (08) + + ! + ! identify what part, if any, of background sounding to use + ! + ptop = zp(k1) + if (sp(2) < ptop) then + pa = sp(1) + pb = sp(2) + k = 3 + do while (sp(k) < ptop) + pa = pb + pb = sp(k) + k = k+1 + end do + k=k-1 ! identify first level above top of input + blend = .True. + else + blend = .False. + end if + ! + ! if blend is true then the free atmosphere above the sounding will be + ! specified based on the specified background climatology, here the + ! pressure levels for this part of the sounding are determined + ! + if (blend) then + dp1 = pb-pa + dp2 = ptop - pb + dp3 = zp(k1-1) - zp(k1) + if (dp1 > 2.*dp2) k = k-1 ! first level is too close, blend from prev + npts = k + norig = k + ptest = sp(k) + test = ptop-ptest + do while (test > 2*dp3) + ptest = (ptest+ptop)*0.5 + test = ptop-ptest + npts = npts + 1 + end do + nv1 = npts + k1 + else + nv1 = k1 + end if + nv = nv1-1 + ! + ! allocate the arrays for the sounding data to be used in the radiation + ! profile and then fill them first with the sounding data, by afill, then + ! by interpolating the background profile at pressures less than the + ! pressure at the top fo the sounding + ! + allocate (pp(nv1),fds(nv1),fus(nv1),fdir(nv1),fuir(nv1)) + allocate (pt(nv),ph(nv),po(nv),pre(nv),pde(nv),plwc(nv),prwc(nv)) + + if (blend) then + pp(1:norig) = sp(1:norig) + pt(1:norig) = st(1:norig) + ph(1:norig) = sh(1:norig) + po(1:norig) = so(1:norig) + plwc(1:norig) = sl(1:norig) + + do k=norig+1,npts + pp(k) = (ptop + pp(k-1))*0.5 + index = getindex(sp,nknudge,pp(k)) + pt(k) = intrpl(sp(index),st(index),sp(index+1),st(index+1),pp(k)) + ph(k) = intrpl(sp(index),sh(index),sp(index+1),sh(index+1),pp(k)) + po(k) = intrpl(sp(index),so(index),sp(index+1),so(index+1),pp(k)) + plwc(k) = intrpl(sp(index),sl(index),sp(index+1),sl(index+1),pp(k)) + end do + ! + ! set the ozone constant below the reference profile + ! + do k=npts+1,nv + po(k) = po(npts) + end do + end if + + end subroutine d4stream_tb_setup !> coefficient calculations for four first-order differential equations. !> !> See the paper by Liou, Fu and Ackerman (1988) for the formulation of @@ -426,7 +555,7 @@ subroutine coefft(solar,w,w1,w2,w3,t0,t1,u0,f0,aa,zz,a1,z1,fk1,fk2) q2 = w2w * ( 1.5 * fw - 0.5 ) q3 = - w3w * ( 2.5 * fw - 1.5 ) * u0 do i = 1, 4 - c(i,5) = (w0w + q1*p1d(i) + q2*p2d(i) + q3*p3d(i))/(u(i) + epsilon(u(i))) + c(i,5) = (w0w + q1*p1d(i) + q2*p2d(i) + q3*p3d(i))/(u(i)+epsilon(u0)) end do else do i = 1, 4 @@ -569,19 +698,23 @@ subroutine coefft0( solar,t0,t1,u0,f0,aa,zz,a1,z1,fk1,fk2) fk1 = 4.7320545 fk2 = 1.2679491 - y = exp ( - ( t1 - t0 ) / (u0+epsilon(u0))) - fw = 0.5 * f0 - do i = 1, 4 - if ( solar ) then + if ( solar ) then + do i = 1, 4 z1(i) = 0.0 zz(i,1) = 0.0 zz(i,2) = 0.0 - else + end do + else + y = exp ( - ( t1 - t0 ) / (u0+epsilon(u0))) + fw = 0.5 * f0 + do i = 1, 4 jj = 5 - i z1(i) = fw / ( 1.0 + u(jj) / (u0+epsilon(u0)) ) zz(i,1) = z1(i) zz(i,2) = z1(i) * y - endif + end do + endif + do i = 1, 4 do j = 1, 4 a1(i,j) = 0.0 do k = 1, 2 @@ -944,9 +1077,10 @@ end subroutine adjust !> Subroutine qft: Delta 4-stream solver for fluxes !> subroutine qft (solar, ee, as, u0, bf, tt, ww, ww1, ww2, ww3, ww4, ffu, ffd) - use modglobal, only : pi + use modglobal, only : eps1 + implicit none + logical, intent (in) :: solar - logical :: ldummy ! serves to make radiation scheme work under O4 real, intent (in) :: ee, as, u0 real, dimension (nv), intent (in) :: tt,ww,ww1,ww2,ww3,ww4 real, dimension (nv1), intent (in) :: bf @@ -955,7 +1089,7 @@ subroutine qft (solar, ee, as, u0, bf, tt, ww, ww1, ww2, ww3, ww4, ffu, ffd) real, dimension (nv) :: t,w,w1,w2,w3,u0a,f0a,fk1,fk2 integer :: k, kk, ii, jj real :: x(4), fi(4), a4(4,4,nv), z4(4,nv), g4(4,nv) - real :: tkm1, fw3, fw4, y1, xy, xas, xee + real :: tkm1, fw3, fw4, y1, xy, xas, xee, tmp real, parameter :: fw1 = 0.6638960, fw2 = 2.4776962 call adjust(tt,ww,ww1,ww2,ww3,ww4,t,w,w1,w2,w3) @@ -975,13 +1109,10 @@ subroutine qft (solar, ee, as, u0, bf, tt, ww, ww1, ww2, ww3, ww4, ffu, ffd) tkm1 = 0.0 do k = 1, nv f0a(k) = 2.0 * ( 1.0 - w(k) ) * bf(k) - u0a(k) = -(t(k)-tkm1) / ( alog( bf(k+1)/bf(k) ) + epsilon(1.)) - tkm1 = t(k) - if(abs(u0a(k))<10.e-10) then - ldummy=.true. - else - ldummy=.false. - endif + tmp = alog( bf(k+1)/bf(k) ) + u0a(k) = -(t(k)-tkm1) / sign(max(abs(tmp),eps1),tmp) + u0a(k) = sign(max(abs(u0a(k)),1.e-8),u0a(k)) + tkm1 = t(k) end do end if @@ -1086,7 +1217,6 @@ end subroutine rad !> subroutine rad_ir (pts, ee, pp, pt, ph, po, fdir, fuir, & plwc, pre, useMcICA ) - use modglobal, only : pi real, intent (in) :: pp (nv1) ! pressure at interfaces @@ -2065,35 +2195,35 @@ subroutine cloud_water ( ib, pre, pcw, dz, tw, ww, www ) return end subroutine cloud_water - - !> linear interpolation between two points, returns indicies of the - !> interpolation points and weights - !> - subroutine interpolate(x,ny,y,i1,i2,alpha) - - integer, intent (in) :: ny - real, intent (in) :: x, y(ny) - - integer, intent (out) :: i1, i2 - real, intent (out) :: alpha - - if (y(1) < y(2)) stop 'TERMINATING: band centers increasing' - - i2 = 1 - do while (x < y(i2) .and. i2 < ny) - i2 = i2+1 - end do - i1 = max(1,i2-1) - alpha = 1. - - if(i2.ne.i1) alpha = (x-y(i1))/(y(i2)-y(i1)) - if (alpha <0 .or. alpha >1) print 600, x, y(1), y(ny), alpha - - return - -600 format(/'CLOUD_INIT WARNING: Extrapolating because data out of range', & - /1x,'x = ',F8.1,', ymax = ',F7.0,', ymin =',F7.0,', alpha = ',F6.3) - end subroutine interpolate +! +! !> linear interpolation between two points, returns indicies of the +! !> interpolation points and weights +! !> +! subroutine interpolate(x,ny,y,i1,i2,alpha) +! +! integer, intent (in) :: ny +! real, intent (in) :: x, y(ny) +! +! integer, intent (out) :: i1, i2 +! real, intent (out) :: alpha +! +! if (y(1) < y(2)) stop 'TERMINATING: band centers increasing' +! +! i2 = 1 +! do while (x < y(i2) .and. i2 < ny) +! i2 = i2+1 +! end do +! i1 = max(1,i2-1) +! alpha = 1. +! +! if(i2.ne.i1) alpha = (x-y(i1))/(y(i2)-y(i1)) +! if (alpha <0 .or. alpha >1) print 600, x, y(1), y(ny), alpha +! +! return +! +! 600 format(/'CLOUD_INIT WARNING: Extrapolating because data out of range', & +! /1x,'x = ',F8.1,', ymax = ',F7.0,', ymin =',F7.0,', alpha = ',F6.3) +! end subroutine interpolate subroutine initvar_cldwtr(cntrs,re,fl,bz,wz,gz) real, dimension(:),intent(out) :: cntrs,re,fl real, dimension(:,:),intent(out) :: bz,wz,gz diff --git a/src/modradiation.f90 b/src/modradiation.f90 index f37f261c..b61ea7fa 100644 --- a/src/modradiation.f90 +++ b/src/modradiation.f90 @@ -105,6 +105,7 @@ subroutine initradiation allocate(swdir (2-ih:i1+ih,2-jh:j1+jh,k1) ) allocate(swdif (2-ih:i1+ih,2-jh:j1+jh,k1) ) + allocate(lwc (2-ih:i1+ih,2-jh:j1+jh,k1) ) allocate(SW_up_TOA (2-ih:i1+ih,2-jh:j1+jh) ) allocate(SW_dn_TOA (2-ih:i1+ih,2-jh:j1+jh) ) @@ -130,6 +131,7 @@ subroutine initradiation swdir = 0. swdif = 0. + lwc = 0. SW_up_TOA=0;SW_dn_TOA=0;LW_up_TOA=0;LW_dn_TOA=0 SW_up_ca_TOA = 0. ;SW_dn_ca_TOA=0 ;LW_up_ca_TOA=0 ;LW_dn_ca_TOA=0 @@ -236,7 +238,7 @@ subroutine radiation !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! subroutine exitradiation implicit none - deallocate(thlprad,swd,swdir,swdif,swu,lwd,lwu,swdca,swuca,lwdca,lwuca) + deallocate(thlprad,swd,swdir,swdif,swu,lwd,lwu,swdca,swuca,lwdca,lwuca,lwc) deallocate(SW_up_TOA, SW_dn_TOA,LW_up_TOA,LW_dn_TOA, & SW_up_ca_TOA,SW_dn_ca_TOA,LW_up_ca_TOA,LW_dn_ca_TOA) @@ -248,6 +250,7 @@ subroutine radpar use modglobal, only : i1,j1,kmax, k1,ih,jh,dzf,cp,xtime,rtimee,xday,xlat,xlon use modfields, only : ql0, sv0, rhof,exnf + use modsurfdata, only : tauField implicit none real, allocatable :: lwpt(:),lwpb(:) real, allocatable :: tau(:) @@ -324,16 +327,19 @@ subroutine radpar do i=2,i1 if (mu > 0.035) then !factor 0.035 needed for security - tauc = 0. ! tau cloud - do k = 1,kmax - tau(k) = 0. ! tau laagje dz - if(laero) then ! there are aerosols - tau(k) = sv0(i,j,k,iDE) - else ! there are clouds - if (ql0(i,j,k) > 1e-5) tau(k)=1.5*ql0(i,j,k)*rhof(k)*dzf(k)/reff/rho_l - end if - tauc=tauc+tau(k) - end do + tauc = 0. ! column-integrated tau cloud + if (laero .or. lcloudshading) then ! not sure if I have to define the use of lcldoushading before + do k = 1,kmax + tau(k) = 0. ! tau laagje dz + if(laero) then ! there are aerosols + tau(k) = sv0(i,j,k,iDE) + else if (lcloudshading) then ! there are clouds + if (ql0(i,j,k) > 1e-5) tau(k)=1.5*ql0(i,j,k)*rhof(k)*dzf(k)/reff/rho_l + end if + tauc=tauc+tau(k) + end do + endif + tauField(i,j) = tauc call sunray(tau,tauc,i,j) end if diff --git a/src/modradrrtmg.f90 b/src/modradrrtmg.f90 index 724c6908..9187fd7f 100644 --- a/src/modradrrtmg.f90 +++ b/src/modradrrtmg.f90 @@ -10,9 +10,10 @@ module modradrrtmg subroutine radrrtmg use modglobal, only : cp,rlv,dzf,& imax,jmax,kmax,i1,j1,k1,& - kind_rb,SHR_KIND_R4 + kind_rb,SHR_KIND_R4,boltz use modmpi, only : myid - use modfields, only : presh,presf,rhof,exnf + use modfields, only : presh,presf,rhof,exnf,thl0 + use modsurfdata , only : tskin use rrtmg_lw_init, only : rrtmg_lw_ini use rrtmg_lw_rad, only : rrtmg_lw use shr_orb_mod, only : shr_orb_params @@ -23,8 +24,7 @@ subroutine radrrtmg integer :: npatch ! Sounding levels above domain integer :: i,j,k,ierr(3) logical :: sunUp - real(SHR_KIND_R4),save :: eccf, & ! eccentricity factor (1./earth-sun dist^2) - eccen, & ! Earth's eccentricity factor (unitless) (typically 0 to 0.1) + real(SHR_KIND_R4),save :: eccen, & ! Earth's eccentricity factor (unitless) (typically 0 to 0.1) obliq, & ! Earth's obliquity angle (deg) (-90 to +90) (typically 22-26) mvelp, & ! Earth's moving vernal equinox at perhelion (deg)(0 to 360.0) ! @@ -106,6 +106,8 @@ subroutine radrrtmg lwDownCS_slice (imax,krad2), & swUp_slice (imax,krad2), & swDown_slice (imax,krad2), & + swDownDir_slice(imax,krad2), & + swDownDif_slice(imax,krad2), & swUpCS_slice (imax,krad2), & swDownCS_slice (imax,krad2), & lwHR_slice (imax,krad2), & @@ -162,7 +164,7 @@ subroutine radrrtmg ! Loop over the slices in the model, in the y direction do j=2,j1 call setupSlicesFromProfiles & - ( j, npatch_start, npatch_end, & !input + ( j, npatch_start, & !input LWP_slice, IWP_slice, cloudFrac, liquidRe, iceRe ) !output if (rad_longw) then @@ -180,9 +182,20 @@ subroutine radrrtmg lwu(2:i1,j,1:k1) = lwUp_slice (1:imax,1:k1) lwd(2:i1,j,1:k1) = -lwDown_slice(1:imax,1:k1) + if (.not. rad_longw) then !we get LW at surface identically to how it is done in sunray subroutine + do i=2,i1 + lwd(i,j,1) = -0.8 * boltz * thl0(i,j,1) ** 4. + lwu(i,j,1) = 1.0 * boltz * tskin(i,j) ** 4. + end do + end if + swu(2:i1,j,1:k1) = swUp_slice (1:imax,1:k1) swd(2:i1,j,1:k1) = -swDown_slice(1:imax,1:k1) + swdir(2:i1,j,1:k1) = -swDownDir_slice(1:imax,1:k1) + swdif(2:i1,j,1:k1) = -swDownDif_slice(1:imax,1:k1) + lwc (2:i1,j,1:k1) = LWP_slice (1:imax,1:k1) + lwuca(2:i1,j,1:k1) = lwUpCS_slice (1:imax,1:k1) lwdca(2:i1,j,1:k1) = -lwDownCS_slice(1:imax,1:k1) swuca(2:i1,j,1:k1) = swUpCS_slice (1:imax,1:k1) @@ -525,7 +538,7 @@ subroutine readTraceProfs ! original tracesini subroutine in rad_driver if(myid==0)then write(*,*) 'RRTMG rrtmg_lw.nc trace gas profile: number of levels=',np - write(*,*) 'gas traces vertical profiles (ppmv):' + write(*,*) 'gas traces vertical profiles (ppmv *10^-6):' write(*,*) 'p, hPa', (' ',traceGasNameOrder(m),m=1,nTraceGases) do k=1,krad1 write(*,*) tmppresf(k),o3(k),co2(k),ch4(k),n2o(k),o2(k), & @@ -543,7 +556,7 @@ end subroutine readTraceProfs ! ==============================================================================; ! ==============================================================================; - subroutine setupSlicesFromProfiles(j,npatch_start,npatch_end, & + subroutine setupSlicesFromProfiles(j,npatch_start, & LWP_slice,IWP_slice,cloudFrac,liquidRe,iceRe) !=============================================================================! ! This subroutine sets up 2D (xz) slices of different variables: ! @@ -565,7 +578,7 @@ subroutine setupSlicesFromProfiles(j,npatch_start,npatch_end, & implicit none - integer,intent(in) :: j,npatch_start,npatch_end + integer,intent(in) :: j,npatch_start real(KIND=kind_rb),intent(out) :: LWP_slice(imax,krad1), & IWP_slice(imax,krad1), & cloudFrac(imax,krad1), & @@ -601,7 +614,7 @@ subroutine setupSlicesFromProfiles(j,npatch_start,npatch_end, & do i=2,i1 im=i-1 do k=1,kmax - qv_slice (im,k) = qt0(i,j,k) - ql0(i,j,k) + qv_slice (im,k) = max(qt0(i,j,k) - ql0(i,j,k),1e-18) !avoid RRTMG reading negative initial values qcl_slice (im,k) = ql0(i,j,k) qci_slice (im,k) = 0. o3_slice (im,k) = o3snd(npatch_start) ! o3 constant below domain top (if usero3!) @@ -759,7 +772,6 @@ subroutine setupSW(sunUp) end if call shr_orb_decl( dayForSW ) ! Saves some orbital values to modraddata - !if (myid==0) write(*,*) 'eccf = ',eccf solarZenithAngleCos(:) = & zenith(xtime*3600 + rtimee, xday, xlat, xlon) ! Used function in modraddata ! solarZenithAngleCos(:) = 0.707106781 ! cos 45gr diff --git a/src/modradstat.f90 b/src/modradstat.f90 index c912ecad..d4d19719 100644 --- a/src/modradstat.f90 +++ b/src/modradstat.f90 @@ -232,7 +232,7 @@ subroutine do_radstat use modmpi, only : slabsum use modglobal, only : kmax,ijtot,cp,dzf,i1,j1,k1,ih,jh use modfields, only : thlpcar,rhof,exnf - use modraddata, only : lwd,lwu,swd,swdir,swdif,swu,thlprad + use modraddata, only : lwd,lwu,swd,swdir,swdif,swu,thlprad,irad_par,iradiation implicit none integer :: k @@ -255,10 +255,18 @@ subroutine do_radstat call slabsum(swdifav ,1,k1,swdif ,2-ih,i1+ih,2-jh,j1+jh,1,k1,2,i1,2,j1,1,k1) call slabsum(swuav ,1,k1,swu ,2-ih,i1+ih,2-jh,j1+jh,1,k1,2,i1,2,j1,1,k1) call slabsum(thltendav ,1,k1,thlprad ,2-ih,i1+ih,2-jh,j1+jh,1,k1,2,i1,2,j1,1,k1) - do k=1,kmax - thllwtendav(k) = -((lwdav(k+1) - lwuav(k+1)) - (lwdav(k) - lwuav(k)))/(rhof(k)*exnf(k)*cp*dzf(k)) - thlswtendav(k) = -((swdav(k+1) - swuav(k+1)) - (swdav(k) - swuav(k)))/(rhof(k)*exnf(k)*cp*dzf(k)) ! - end do + if (iradiation==irad_par) then !irad_par=Delta eddington keeps all fluxes(upwards and downwards) positive + do k=1,kmax + thllwtendav(k) = -((lwdav(k+1) - lwuav(k+1)) - (lwdav(k) - lwuav(k)))/(rhof(k)*exnf(k)*cp*dzf(k)) + thlswtendav(k) = -((swdav(k+1) - swuav(k+1)) - (swdav(k) - swuav(k)))/(rhof(k)*exnf(k)*cp*dzf(k)) ! + end do + else !upward fluxes positive, downwards negative + do k=1,kmax + thllwtendav(k) = (-lwdav(k+1) - lwuav(k+1) + lwdav(k) + lwuav(k))/(rhof(k)*exnf(k)*cp*dzf(k)) + thlswtendav(k) = (-swdav(k+1) - swuav(k+1) + swdav(k) + swuav(k))/(rhof(k)*exnf(k)*cp*dzf(k)) + end do + endif + ! ADD SLAB AVERAGES TO TIME MEAN @@ -346,7 +354,7 @@ subroutine writeradstat use modglobal, only : cexpnr,ifoutput,kmax,k1,zf,zh,rtimee use modstat_nc, only: lnetcdf, writestat_nc use modgenstat, only: ncid_prof=>ncid,nrec_prof=>nrec - use modraddata, only : iradiation + use modraddata, only : iradiation,irad_par,irad_rrtmg implicit none real,dimension(k1,nvar) :: vars integer nsecs, nhrs, nminut,k @@ -406,7 +414,7 @@ subroutine writeradstat end do close (ifoutput) - if(iradiation == 2) then + if(iradiation == irad_par .or. iradiation ==irad_rrtmg) then ! delta eddington or RRTMG) open (ifoutput,file='radsplitstat.'//cexpnr,position='append') write(ifoutput,'(//A,/A,F5.0,A,I4,A,I2,A,I2,A)') & '#--------------------------------------------------------' & diff --git a/src/modsampling.f90 b/src/modsampling.f90 index 8f6a7633..a51811a0 100644 --- a/src/modsampling.f90 +++ b/src/modsampling.f90 @@ -949,7 +949,7 @@ subroutine writesampling write (ifoutput,'(2A/2A)') & '#------------------------------------------------------' & ,'------------------------------' & - ,' LEV HGHT_F HGHT_H PRES COV_F COV_H W THL QT ' & + ,'# LEV HGHT_F HGHT_H PRES COV_F COV_H W THL QT ' & ,'QL THV P WW_RES_H WW_SUB_F' do k=1,kmax write(ifoutput,'(i5,2F8.0,F7.1,2F10.5,5F11.5,E14.5,2F14.5)') & @@ -980,7 +980,7 @@ subroutine writesampling write (ifoutput,'(2A/2A)') & '#------------------------------------------------------' & ,'------------------------------' & - ,' LEV HGHT PRES AW WTHL ' & + ,'# LEV HGHT PRES AW WTHL ' & ,'WQT WQL WTHV UW VW' do k=1,kmax write(ifoutput,'(i5,F8.0,F7.1,7E16.8)') & @@ -1008,7 +1008,7 @@ subroutine writesampling write (ifoutput,'(2A/3A)') & '#------------------------------------------------------' & ,'------------------------------' & - ,' LEV HGHT PRES COVER DWDTMN BUO DPDZMN DWWDZHMN DUWDXHMN ' & + ,'# LEV HGHT PRES COVER DWDTMN BUO DPDZMN DWWDZHMN DUWDXHMN ' & ,' DTAUDZHMN DTAUDXHMN CORIOLIS RESIDUAL WS_END SIG_END WADVHMN SUBPLUME ' & ,' NRTSAMPHAV ' do k=1,kmax diff --git a/src/modsimpleice2.f90 b/src/modsimpleice2.f90 new file mode 100644 index 00000000..f5f804ff --- /dev/null +++ b/src/modsimpleice2.f90 @@ -0,0 +1,564 @@ +!> \file modsimpleice.f90 + +!> +!! Ice microphysics. +!> +!! Calculates ice microphysics in a cheap scheme without prognostic nr +!! simpleice is called from *modmicrophysics* +!! \see Grabowski, 1998, JAS +!! and Khairoutdinov and Randall, 2006, JAS +!! \author Steef B\"oing, TU Delft +!! \par Revision list +! +! FJ: seems the ref should be Khairoutdinov and Randall, 2003, JAS +! +! http://dx.doi.org/10.1175/1520-0469(1998)055%3C3283:TCRMOL%3E2.0.CO;2 +! http://dx.doi.org/10.1175/JAS3810.1 +! http://dx.doi.org/10.1175/1520-0469(2003)060<0607:CRMOTA>2.0.CO;2 - 2003 +! +! This file is part of DALES. +! +! DALES is free software; you can redistribute it and/or modify +! it under the terms of the GNU General Public License as published by +! the Free Software Foundation; either version 3 of the License, or +! (at your option) any later version. +! +! DALES is distributed in the hope that it will be useful, +! but WITHOUT ANY WARRANTY; without even the implied warranty of +! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +! GNU General Public License for more details. +! +! You should have received a copy of the GNU General Public License +! along with this program. If not, see . +! +! Copyright 1993-2009 Delft University of Technology, Wageningen University, Utrecht University, KNMI +! + + +module modsimpleice2 + use modmicrodata + use modfields, only : rhobf + implicit none + real :: gamb1r + real :: gambd1r + real :: gamb1s + real :: gambd1s + real :: gamb1g + real :: gambd1g + real :: gam2dr + real :: gam2ds + real :: gam2dg + real :: gammaddr3 + real :: gammadds3 + real :: gammaddg3 + contains + +!> Initializes and allocates the arrays + subroutine initsimpleice2 + use modglobal, only : ih,i1,jh,j1,k1,lacz_gamma + implicit none + integer:: k + + + allocate (qr(2-ih:i1+ih,2-jh:j1+jh,k1) & ! qr (total precipitation!) converted from a scalar variable + ,qrp(2-ih:i1+ih,2-jh:j1+jh,k1) & ! qr tendency due to microphysics only, for statistics + ,nr(2-ih:i1+ih,2-jh:j1+jh,k1) & ! qr (total precipitation!) converted from a scalar variable + ,nrp(2-ih:i1+ih,2-jh:j1+jh,k1) & ! qr tendency due to microphysics only, for statistics + ,thlpmcr(2-ih:i1+ih,2-jh:j1+jh,k1) & ! thl tendency due to microphysics only, for statistics + ,qtpmcr(2-ih:i1+ih,2-jh:j1+jh,k1) & ! qt tendency due to microphysics only, for statistics + ,sed_qr(2-ih:i1+ih,2-jh:j1+jh,k1) & ! sedimentation rain droplets mixing ratio + ,qr_spl(2-ih:i1+ih,2-jh:j1+jh,k1) & ! time-splitting substep qr + ,ilratio(2-ih:i1+ih,2-jh:j1+jh,k1) & ! partition ratio cloud water vs cloud ice + ,rsgratio(2-ih:i1+ih,2-jh:j1+jh,k1) & ! partition ratio rain vs. snow/graupel + ,sgratio(2-ih:i1+ih,2-jh:j1+jh,k1) & ! partition ratio snow vs graupel + ,lambdar(2-ih:i1+ih,2-jh:j1+jh,k1) & ! slope parameter for rain + ,lambdas(2-ih:i1+ih,2-jh:j1+jh,k1) & ! slope parameter for snow + ,lambdag(2-ih:i1+ih,2-jh:j1+jh,k1)) ! slope parameter for graupel + + allocate (qrmask(2-ih:i1+ih,2-jh:j1+jh,k1) & ! mask for rain water + ,qcmask(2-ih:i1+ih,2-jh:j1+jh,k1)) ! mask for cloud water + + allocate(precep(2-ih:i1+ih,2-jh:j1+jh,k1)) ! precipitation for statistics + + allocate(ccrz(k1),ccsz(k1),ccgz(k1)) + allocate(ccrz2(k1),ccsz2(k1),ccgz2(k1)) + + gamb1r=lacz_gamma(bbr+1) + gambd1r=lacz_gamma(bbr+ddr+1) + gamb1s=lacz_gamma(bbs+1) + gambd1s=lacz_gamma(bbs+dds+1) + gamb1g=lacz_gamma(bbg+1) + gambd1g=lacz_gamma(bbg+ddg+1) + gam2dr=lacz_gamma(2.5+0.5*ddr) + gam2ds=lacz_gamma(2.5+0.5*dds) + gam2dg=lacz_gamma(2.5+0.5*ddg) + gammaddr3=lacz_gamma(3.+ddr) + gammadds3=lacz_gamma(3.+dds) + gammaddg3=lacz_gamma(3.+ddg) + + + ! Density corrected fall speed parameters, see Tomita 2008 + ! rhobf is constant in time + do k=1,k1 + ccrz(k)=ccr*(1.29/rhobf(k))**0.5 + ccsz(k)=ccs*(1.29/rhobf(k))**0.5 + ccgz(k)=ccg*(1.29/rhobf(k))**0.5 + + ! these coefficients are used in evapdep - tabulated because of sqrt + ccrz2(k) = gam2dr*.27*n0rr*sqrt(ccrz(k)/2.e-5) + ccsz2(k) = gam2ds*.39*n0rs*sqrt(ccsz(k)/2.e-5) ! NOTE: .27 here is suspect -> .39 + ccgz2(k) = gam2dg*.27*n0rg*sqrt(ccgz(k)/2.e-5) + end do + + nrp=0. ! not used in this scheme + nr=0. ! set to 0 here in case the statistics use them + + end subroutine initsimpleice2 + + +!> Cleaning up after the run + subroutine exitsimpleice2 + implicit none + deallocate(nr,nrp,qr,qrp,thlpmcr,qtpmcr,sed_qr,qr_spl,ilratio,rsgratio,sgratio,lambdar,lambdas,lambdag) + deallocate(qrmask,qcmask) + deallocate(precep) + deallocate(ccrz,ccsz,ccgz) + deallocate(ccrz2,ccsz2,ccgz2) + end subroutine exitsimpleice2 + + +!> Calculates the microphysical source term. + subroutine simpleice2 + use modglobal, only : i1,j1,k1,rdt,rk3step,timee,rlv,cp,tup,tdn,pi,tmelt,kmax,dzf,dzh + use modfields, only : sv0,svm,svp,qtp,thlp,qt0,ql0,exnf,rhof,tmp0,rhobf,qvsl,qvsi,esl + + use modsimpleicestat, only : simpleicetend + implicit none + integer:: i,j,k + real:: qrsmall, qrsum,qrtest + real :: qll,qli,ddisp,lwc,autl,tc,times,auti,aut ! autoconvert + real :: qrr,qrs,qrg, gaccrl,gaccsl,gaccgl,gaccri,gaccsi,gaccgi,accr,accs,accg,acc !accrete + real :: ssl,ssi,ventr,vents,ventg,thfun,evapdepr,evapdeps,evapdepg,devap !evapdep + real :: dt_spl,wfallmax,vtr,vts,vtg,vtf ! precipitation + real :: tmp_lambdar, tmp_lambdas, tmp_lambdag + integer :: jn + integer :: n_spl !< sedimentation time splitting loop + + real :: ilratio_,lambdar_,lambdas_,lambdag_, rsgratio_, sgratio_ ! local values instead of global arrays + logical :: qrmask_, qcmask_ + logical :: rain_present, snow_present, graupel_present ! logicals for presence of different forms of water in the current cell + logical :: any_qr, any_snow_graupel ! logicals for precense of any precipitation, and for presense of snow/graupel in the whole system + + delt = rdt/ (4. - dble(rk3step)) + + wfallmax = 9.9 ! cap for fall velocity + n_spl = ceiling(wfallmax*delt/(minval(dzf)*courantp)) ! number of sub-timesteps for precipitation + dt_spl = delt/real(n_spl) ! fixed time step for precipitation sub-stepping! + + ! sed_qr = 0. ! reset sedimentation fluxes + sed_qr(:,:,kmax+1) = 0 ! initialize ghost cells, other cells are initialized before use + + + ! Density corrected fall speed parameters, see Tomita 2008 + ! rhobf is constant in time + ! do k=1,k1 + ! ccrz(k)=ccr*(1.29/rhobf(k))**0.5 + ! ccsz(k)=ccs*(1.29/rhobf(k))**0.5 + ! ccgz(k)=ccg*(1.29/rhobf(k))**0.5 + ! end do + + ! used to check on negative qr and nr + qrsum=0. + qrsmall=0. + ! reset microphysics tendencies + qrp=0. + + !nrp=0. ! not used in this scheme + !nr=0. + + thlpmcr=0. + qtpmcr=0. + + any_qr = .false. + any_snow_graupel = .false. + qrmask_ = .false. ! needed if l_rain is false + + do k=kmax,1,-1 ! reverse order for upwind scheme at the end + do j=2,j1 + do i=2,i1 + rain_present = .false. + snow_present = .false. + graupel_present = .false. + + ! initialise qr + qr(i,j,k)= sv0(i,j,k,iqr) + ! initialise qc mask + if (ql0(i,j,k) > qcmin) then + qcmask_ = .true. + else + qcmask_ = .false. + end if + + ! initialise qr mask and check if we are not throwing away too much rain + if (l_rain) then + qrsum = qrsum+qr(i,j,k) + if (qr(i,j,k) <= qrmin) then + qrmask_ = .false. + if(qr(i,j,k)<0.) then + qrsmall = qrsmall-qr(i,j,k) + qr(i,j,k)=0. + end if + else + qrmask_=.true. ! this cell + any_qr = .true. ! whole system + endif + endif + + + ! logic + ! + ! qrmask: true if cell contains rain. qr > threshold + ! rsgratio, sgratio, lambda* calculated + ! + ! qcmask: true if cell contains cloud - condensed water - ql > threshold + ! ilratio, qll, qli calculated + ! + ! qr, qrp - rain, tendency + ! qtpmcr - qt tendency from microphysics + ! thlpmcr - thl tendency from microphysics + + + + !partitioning and determination of intercept parameter + + if(qrmask_.eqv..true.) then + if(l_warm) then !partitioning and determination of intercept parameter + rsgratio_=1. ! rain vs snow/graupel partitioning + rain_present = .true. + + sgratio_=0. ! snow versus graupel partitioning + lambdar_=(aar*n0rr*gamb1r/(rhof(k)*(qr(i,j,k))))**(1./(1.+bbr)) ! lambda rain + !lambdas_=lambdar_ ! lambda snow ! probably not right but they will not be used + !lambdag_=lambdar_ ! lambda graupel + elseif(l_graupel) then + rsgratio_=max(0.,min(1.,(tmp0(i,j,k)-tdnrsg)/(tuprsg-tdnrsg))) ! rain vs snow/graupel partitioning rsg = 1 if t > tuprsg + sgratio_=max(0.,min(1.,(tmp0(i,j,k)-tdnsg)/(tupsg-tdnsg))) ! snow versus graupel partitioning sg = 1 -> only graupel + if (rsgratio_ > 0) then ! sg = 0 -> only snow + rain_present = .true. + lambdar_=(aar*n0rr*gamb1r/(rhof(k)*(qr(i,j,k)*rsgratio_)))**(1./(1.+bbr)) ! lambda rain + endif + if (rsgratio_ < 1) then + any_snow_graupel = .true. ! whole system ! note: this may miss snow that appears during the precipitation substepping + if (sgratio_ > 0) then + graupel_present = .true. + lambdag_=(aag*n0rg*gamb1g/(rhof(k)*(qr(i,j,k)*(1.-rsgratio_)*sgratio_)))**(1./(1.+bbg)) ! graupel + endif + if (sgratio_ < 1) then + snow_present = .true. + lambdas_=(aas*n0rs*gamb1s/(rhof(k)*(qr(i,j,k)*(1.-rsgratio_)*(1.-sgratio_))))**(1./(1.+bbs)) ! snow + endif + endif + + ! no snow/graupel -> large lambda + else ! rain, snow but no graupel + rsgratio_=max(0.,min(1.,(tmp0(i,j,k)-tdnrsg)/(tuprsg-tdnrsg))) ! rain vs snow/graupel partitioning + sgratio_=0. + if (rsgratio_ > 0) then + rain_present = .true. + lambdar_=(aar*n0rr*gamb1r/(rhof(k)*(qr(i,j,k)*rsgratio_)))**(1./(1.+bbr)) ! lambda rain + endif + if (rsgratio_ < 1) then + snow_present = .true. + any_snow_graupel = .true. ! whole system + lambdas_=(aas*n0rs*gamb1s/(rhof(k)*(qr(i,j,k)*(1.-rsgratio_))))**(1./(1.+bbs)) ! lambda snow + endif + ! lambdag_=lambdas_ ! FJ: probably wrong - routines below don't always check sgratio + end if + endif + + + + ! Autoconvert + if (qcmask_.eqv..true.) then + if(l_warm) then + ilratio_=1. + else + ilratio_=max(0.,min(1.,(tmp0(i,j,k)-tdn)/(tup-tdn)))! cloud water vs cloud ice partitioning + endif + + ! ql partitioning - used here and in Accrete + qll=ql0(i,j,k)*ilratio_ + qli=ql0(i,j,k)-qll + + if(l_berry.eqv..true.) then ! Berry/Hsie autoconversion + ! ql partitioning + ! qll=ql0(i,j,k)*ilratio(i,j,k) + ! qli=ql0(i,j,k)-qll + + ddisp=0.146-5.964e-2*alog(Nc_0/2.e9) ! Relative dispersion coefficient for Berry autoconversion + lwc=1.e3*rhof(k)*qll ! Liquid water content in g/kg + autl=1./rhof(k)*1.67e-5*lwc*lwc/(5. + .0366*Nc_0/(1.e6*ddisp*(lwc+1.e-6))) + tc=tmp0(i,j,k)-tmelt ! Temperature wrt melting point + times=min(1.e3,(3.56*tc+106.7)*tc+1.e3) ! Time scale for ice autoconversion + auti=qli/times + aut = min(autl + auti,ql0(i,j,k)/delt) + qrp(i,j,k) = qrp(i,j,k)+aut + qtpmcr(i,j,k) = qtpmcr(i,j,k)-aut + thlpmcr(i,j,k) = thlpmcr(i,j,k)+(rlv/(cp*exnf(k)))*aut + else ! Lin/Kessler autoconversion as in Khairoutdinov and Randall, 2006 + + ! ql partitioning + ! qll=ql0(i,j,k)*ilratio(i,j,k) + ! qli=ql0(i,j,k)-qll + + autl=max(0.,timekessl*(qll-qll0)) + tc=tmp0(i,j,k)-tmelt + auti=max(0.,betakessi*exp(0.025*tc)*(qli-qli0)) + aut = min(autl + auti,ql0(i,j,k)/delt) + qrp(i,j,k) = qrp(i,j,k)+aut + qtpmcr(i,j,k) = qtpmcr(i,j,k)-aut + thlpmcr(i,j,k) = thlpmcr(i,j,k)+(rlv/(cp*exnf(k)))*aut + endif + + endif + + ! Accrete + + if (qrmask_.eqv..true.) then + if (qcmask_.eqv..true.) then ! apply mask + ! ql partitioning - calculated in Autoconvert + !qll=ql0(i,j,k)*ilratio(i,j,k) + !qli=ql0(i,j,k)-qll + + ! qr partitioning + qrr=qr(i,j,k)*rsgratio_ + qrs=qr(i,j,k)*(1.-rsgratio_)*(1.-sgratio_) + qrg=qr(i,j,k)*(1.-rsgratio_)*sgratio_ + ! collection of cloud water by rain etc. + + accr = 0 + accs = 0 + accg = 0 + if (rain_present) then + gaccrl=pi/4.*ccrz(k)*ceffrl*rhof(k)*qll*qrr*lambdar_**(bbr-2.-ddr)*gammaddr3/(aar*gamb1r) + gaccri=pi/4.*ccrz(k)*ceffri*rhof(k)*qli*qrr*lambdar_**(bbr-2.-ddr)*gammaddr3/(aar*gamb1r) + accr=(gaccrl+gaccri) !*qrr/(qrr+1.e-9) + endif + + if (snow_present) then + gaccsl=pi/4.*ccsz(k)*ceffsl*rhof(k)*qll*qrs*lambdas_**(bbs-2.-dds)*gammadds3/(aas*gamb1s) + gaccsi=pi/4.*ccsz(k)*ceffsi*rhof(k)*qli*qrs*lambdas_**(bbs-2.-dds)*gammadds3/(aas*gamb1s) + accs=(gaccsl+gaccsi) !*qrs/(qrs+1.e-9) ! why this division? makes accr small if qr* << 1e-9 + endif ! disable accretion if no snow present - now done with if. + + if (graupel_present) then + gaccgl=pi/4.*ccgz(k)*ceffgl*rhof(k)*qll*qrg*lambdag_**(bbg-2.-ddg)*gammaddg3/(aag*gamb1g) + gaccgi=pi/4.*ccgz(k)*ceffgi*rhof(k)*qli*qrg*lambdag_**(bbg-2.-ddg)*gammaddg3/(aag*gamb1g) + accg=(gaccgl+gaccgi) !*qrg/(qrg+1.e-9) + endif + + acc= min(accr+accs+accg,ql0(i,j,k)/delt) ! total growth by accretion + qrp(i,j,k) = qrp(i,j,k)+acc + qtpmcr(i,j,k) = qtpmcr(i,j,k)-acc + thlpmcr(i,j,k) = thlpmcr(i,j,k)+(rlv/(cp*exnf(k)))*acc + end if + end if + + ! evapdep + + if (qrmask_.eqv..true.) then + ! saturation ratios + ssl=(qt0(i,j,k)-ql0(i,j,k))/qvsl(i,j,k) + ssi=(qt0(i,j,k)-ql0(i,j,k))/qvsi(i,j,k) + !integration over ventilation factors and diameters, see e.g. seifert 2008 + evapdepr = 0 + evapdeps = 0 + evapdepg = 0 + thfun=1.e-7/(2.2*tmp0(i,j,k)/esl(i,j,k)+2.2e2/tmp0(i,j,k)) ! thermodynamic function + + + if (rain_present) then + !ventr=.78*n0rr/lambdar_**2 + gam2dr*.27*n0rr*sqrt(ccrz(k)/2.e-5)*lambdar_**(-2.5-0.5*ddr) + ventr=.78*n0rr/lambdar_**2 + ccrz2(k) * lambdar_**(-2.5-0.5*ddr) + evapdepr=(4.*pi/(betar*rhof(k)))*(ssl-1.)*ventr*thfun + endif + if (snow_present) then + !vents=.78*n0rs/lambdas_**2 + gam2ds*.27*n0rs*sqrt(ccsz(k)/2.e-5)*lambdas_**(-2.5-0.5*dds) + !vents=.78*n0rs/lambdas_**2 + ccsz2(k)*lambdas_**(-2.5-0.5*dds) + vents=.65*n0rs/lambdas_**2 + ccsz2(k)*lambdas_**(-2.5-0.5*dds) ! FJ corrected coefficient + evapdeps=(4.*pi/(betas*rhof(k)))*(ssi-1.)*vents*thfun + endif + if (graupel_present) then + !ventg=.78*n0rg/lambdag_**2 + gam2dg*.27*n0rg*sqrt(ccgz(k)/2.e-5)*lambdag_**(-2.5-0.5*ddg) + ventg=.78*n0rg/lambdag_**2 + ccgz2(k)*lambdag_**(-2.5-0.5*ddg) + evapdepg=(4.*pi/(betag*rhof(k)))*(ssi-1.)*ventg*thfun + endif + + ! total growth by deposition and evaporation + ! limit with qr and ql after accretion and autoconversion + devap= max(min(evapfactor*(evapdepr+evapdeps+evapdepg),ql0(i,j,k)/delt+qrp(i,j,k)),-qr(i,j,k)/delt-qrp(i,j,k)) + qrp(i,j,k) = qrp(i,j,k)+devap + qtpmcr(i,j,k) = qtpmcr(i,j,k)-devap + thlpmcr(i,j,k) = thlpmcr(i,j,k)+(rlv/(cp*exnf(k)))*devap + + ! Grabowski 1998 has different coefficients here for snow + ! also ccsz2 table needs to be updated + + end if + + + ! precipitate - part 1 + qr_spl(i,j,k) = qr(i,j,k) ! prepare for sub-timestepping precipitation + ! this is the first substep, using lambdas already calculated + if (qrmask_.eqv..true.) then + vtf = 0 + if (rain_present) then + vtr=ccrz(k)*(gambd1r/gamb1r)/(lambdar_**ddr) ! terminal velocity rain + vtf = vtf + rsgratio_*vtr + endif + if (snow_present) then + vts=ccsz(k)*(gambd1s/gamb1s)/(lambdas_**dds) ! terminal velocity snow + vtf = vtf + (1.-rsgratio_)*(1.-sgratio_)*vts + endif + if (graupel_present) then + vtg=ccgz(k)*(gambd1g/gamb1g)/(lambdag_**ddg) ! terminal velocity graupel + vtf = vtf + (1.-rsgratio_)*sgratio_*vtg + endif + ! vtf=rsgratio_*vtr+(1.-rsgratio_)*(1.-sgratio_)*vts+(1.-rsgratio_)*sgratio(i,j,k)*vtg ! weighted + vtf = min(wfallmax,vtf) + !write(*,*) 'vtf', vtf + + precep(i,j,k) = vtf*qr_spl(i,j,k) + sed_qr(i,j,k) = precep(i,j,k)*rhobf(k) ! convert to flux + else + precep(i,j,k) = 0. + sed_qr(i,j,k) = 0. + end if + + ! advect precipitation using upwind scheme + ! note this relies on loop order - k decreasing + + qr_spl(i,j,k) = qr_spl(i,j,k) + (sed_qr(i,j,k+1) - sed_qr(i,j,k))*dt_spl/(dzh(k+1)*rhobf(k)) + enddo + enddo + enddo + + + ! precipitate part 2 + +! write (*,*) 'any_qr:', any_qr +! write (*,*) 'any_snow_graupel:', any_snow_graupel +! write(*,*) 'n_spl', n_spl + + ! begin time splitting loop + IF (n_spl > 1 .and. any_qr) THEN + DO jn = 2 , n_spl + + ! reset fluxes at each step of loop + ! sed_qr = 0. ! not needed !? + + if (any_snow_graupel) then + do k=kmax,1,-1 + do j=2,j1 + do i=2,i1 + if (qr_spl(i,j,k) > qrmin) then + ! re-evaluate lambda and rsgratios + rsgratio_=max(0.,min(1.,(tmp0(i,j,k)-tdnrsg)/(tuprsg-tdnrsg))) ! rain vs snow/graupel partitioning rsg = 1 if t > tuprsg + sgratio_=max(0.,min(1.,(tmp0(i,j,k)-tdnsg) /(tupsg -tdnsg))) ! snow versus graupel partitioning sg = 1 -> only graupel + + !these ifs are here to avoid performing the power calculations unless they are going to be used + if (rsgratio_ > 0) then + tmp_lambdar=(aar*n0rr*gamb1r/(rhof(k)*(qr_spl(i,j,k)*rsgratio_)))**(1./(1.+bbr)) ! lambda rain + vtr=ccrz(k)*(gambd1r/gamb1r)/(tmp_lambdar**ddr) ! terminal velocity rain + else + vtr = 0 + end if + + if ( (1.-rsgratio_)*(1.-sgratio_) > 0 ) then + tmp_lambdas=(aas*n0rs*gamb1s/(rhof(k)*(qr_spl(i,j,k)*(1.-rsgratio_)*(1.-sgratio_))))**(1./(1.+bbs)) ! lambda snow + vts=ccsz(k)*(gambd1s/gamb1s)/(tmp_lambdas**dds) ! terminal velocity snow + else + vts = 0 + end if + + if ( (1.-rsgratio_)*sgratio_ > 0 ) then + tmp_lambdag=(aag*n0rg*gamb1g/(rhof(k)*(qr_spl(i,j,k)*(1.-rsgratio_)*sgratio_)))**(1./(1.+bbg)) ! lambda graupel + vtg=ccgz(k)*(gambd1g/gamb1g)/(tmp_lambdag**ddg) ! terminal velocity graupel + else + vtg = 0 + end if + + vtf=rsgratio_*vtr+(1.-rsgratio_)*(1.-sgratio_)*vts+(1.-rsgratio_)*sgratio_*vtg ! mass-weighted terminal velocity + vtf=min(wfallmax,vtf) + sed_qr(i,j,k) = vtf*qr_spl(i,j,k)*rhobf(k) + else + sed_qr(i,j,k) = 0. + endif + + ! update + ! note k must decrease in the loop + qr_spl(i,j,k) = qr_spl(i,j,k) + (sed_qr(i,j,k+1) - sed_qr(i,j,k))*dt_spl/(dzh(k+1)*rhobf(k)) + enddo + enddo + enddo + + else ! alternative loops when there is only rain + do k=kmax,1,-1 + do j=2,j1 + do i=2,i1 + if (qr_spl(i,j,k) > qrmin) then + !*rsgratio(i,j,k) removed from here, since it is 1 + tmp_lambdar=(aar*n0rr*gamb1r/(rhof(k)*(qr_spl(i,j,k))))**(1./(1.+bbr)) ! lambda rain + vtf=ccrz(k)*(gambd1r/gamb1r)/(tmp_lambdar**ddr) ! terminal velocity rain + + vtf=min(wfallmax,vtf) + sed_qr(i,j,k) = vtf*qr_spl(i,j,k)*rhobf(k) + else + sed_qr(i,j,k) = 0. + endif + + ! update + ! note k must decrease in the loop + qr_spl(i,j,k) = qr_spl(i,j,k) + (sed_qr(i,j,k+1) - sed_qr(i,j,k))*dt_spl/(dzh(k+1)*rhobf(k)) + enddo + enddo + enddo + endif + + ! end time splitting loop and if n>1 + ENDDO + ENDIF + + ! no thl and qt tendencies build in, implying no heat transfer between precipitation and air + + + if (qrsmall > 0.000001*qrsum) then + write(*,*)'amount of neg. qr thrown away is too high ',timee, ' sec', qrsmall, qrsum + end if + + do k=1,kmax !was k1 + do j=2,j1 + do i=2,i1 + qrp(i,j,k)= qrp(i,j,k) + (qr_spl(i,j,k) - qr(i,j,k))/delt + qrtest=svm(i,j,k,iqr)+(svp(i,j,k,iqr)+qrp(i,j,k))*delt + if (qrtest .lt. qrmin) then ! correction, after Jerome's implementation in Gales + qtp(i,j,k) = qtp(i,j,k) + qtpmcr(i,j,k) + svm(i,j,k,iqr)/delt + svp(i,j,k,iqr) + qrp(i,j,k) + thlp(i,j,k) = thlp(i,j,k) +thlpmcr(i,j,k) - (rlv/(cp*exnf(k)))*(svm(i,j,k,iqr)/delt + svp(i,j,k,iqr) + qrp(i,j,k)) + svp(i,j,k,iqr) = - svm(i,j,k,iqr)/delt + else + svp(i,j,k,iqr)=svp(i,j,k,iqr)+qrp(i,j,k) + thlp(i,j,k)=thlp(i,j,k)+thlpmcr(i,j,k) + qtp(i,j,k)=qtp(i,j,k)+qtpmcr(i,j,k) + ! adjust negative qr tendencies at the end of the time-step + end if + enddo + enddo + enddo + +! if (l_rain) then +! call simpleicetend !after corrections +! endif + end subroutine simpleice2 + + +end module modsimpleice2 diff --git a/src/modstartup.f90 b/src/modstartup.f90 index 89a9f6a8..1798beea 100644 --- a/src/modstartup.f90 +++ b/src/modstartup.f90 @@ -41,6 +41,7 @@ module modstartup integer :: krand = huge(0), krandumin=1,krandumax=0 real :: randthl= 0.1,randqt=1e-5 ! * thl and qt amplitude of randomnization real :: randu = 0.5 + real :: wctime=8640000. !< * The maximum wall clock time of a simulation (set to 100 days by default) contains subroutine startup @@ -53,10 +54,10 @@ subroutine startup ! Thijs Heus 15/06/2007 | !-----------------------------------------------------------------| - use modglobal, only : initglobal,iexpnr,runtime, dtmax,dtav_glob,timeav_glob,& + use modglobal, only : initglobal,iexpnr, ltotruntime, runtime, dtmax, dtav_glob,timeav_glob,& lwarmstart,startfile,trestart,& nsv,itot,jtot,kmax,xsize,ysize,xlat,xlon,xday,xtime,& - lmoist,lcoriol,igrw_damp,geodamptime,lmomsubs,cu, cv,ifnamopt,fname_options,llsadv,& + lmoist,lcoriol,lpressgrad,igrw_damp,geodamptime,lmomsubs,cu, cv,ifnamopt,fname_options,llsadv,& ibas_prf,lambda_crit,iadv_mom,iadv_tke,iadv_thl,iadv_qt,iadv_sv,courant,peclet,ladaptive,author,lnoclouds,lrigidlid,unudge use modforces, only : lforce_user use modsurfdata, only : z0,ustin,wtsurf,wqsurf,wsvsurf,ps,thls,isurf @@ -68,6 +69,8 @@ subroutine startup rad_ls,rad_longw,rad_shortw,rad_smoke,useMcICA,& timerad,rka,dlwtop,dlwbot,sw0,gc,reff,isvsmoke,lcloudshading use modtimedep, only : inittimedep,ltimedep + use modtimedepsv, only : inittimedepsv,ltimedepsv + use modtestbed, only : inittestbed use modboundary, only : initboundary,ksp use modthermodynamics, only : initthermodynamics,lqlnr, chi_half use modmicrophysics, only : initmicrophysics @@ -80,7 +83,7 @@ subroutine startup !declare namelists namelist/RUN/ & - iexpnr,lwarmstart,startfile,runtime,dtmax,dtav_glob,timeav_glob,& + iexpnr,lwarmstart,startfile,ltotruntime, runtime,dtmax,wctime,dtav_glob,timeav_glob,& trestart,irandom,randthl,randqt,krand,nsv,courant,peclet,ladaptive,author,& krandumin, krandumax, randu,& nprocx,nprocy @@ -91,10 +94,10 @@ subroutine startup namelist/PHYSICS/ & !cstep z0,ustin,wtsurf,wqsurf,wsvsurf,ps,thls,chi_half,lmoist,isurf,lneutraldrag,& z0,ustin,wtsurf,wqsurf,wsvsurf,ps,thls,lmoist,isurf,chi_half,& - lcoriol,igrw_damp,geodamptime,lmomsubs,ltimedep,irad,timerad,iradiation,rad_ls,rad_longw,rad_shortw,rad_smoke,useMcICA,& + lcoriol,lpressgrad,igrw_damp,geodamptime,lmomsubs,ltimedep,ltimedepsv,irad,timerad,iradiation,rad_ls,rad_longw,rad_shortw,rad_smoke,useMcICA,& rka,dlwtop,dlwbot,sw0,gc,reff,isvsmoke,lforce_user,lcloudshading,lrigidlid,unudge namelist/DYNAMICS/ & - llsadv, lqlnr, lambda_crit, cu, cv, ibas_prf, iadv_mom, iadv_tke, iadv_thl, iadv_qt, iadv_sv, lnoclouds + llsadv, lqlnr, lambda_crit, cu, cv, ibas_prf, iadv_mom, iadv_tke, iadv_thl, iadv_qt, iadv_sv, lnoclouds ! get myid call MPI_INIT(mpierr) @@ -154,6 +157,8 @@ subroutine startup call MPI_BCAST(trestart ,1,MY_REAL ,0,MPI_COMM_WORLD,mpierr) call MPI_BCAST(dtmax ,1,MY_REAL ,0,MPI_COMM_WORLD,mpierr) call MPI_BCAST(dtav_glob ,1,MY_REAL ,0,MPI_COMM_WORLD,mpierr) + call MPI_BCAST(ltotruntime,1,MPI_LOGICAL,0,MPI_COMM_WORLD,mpierr) + call MPI_BCAST(wctime ,1,MY_REAL ,0,MPI_COMM_WORLD,mpierr) call MPI_BCAST(timeav_glob,1,MY_REAL ,0,MPI_COMM_WORLD,mpierr) call MPI_BCAST(nsv ,1,MPI_INTEGER,0,MPI_COMM_WORLD,mpierr) call MPI_BCAST(nprocx ,1,MPI_INTEGER,0,MPI_COMM_WORLD,mpierr) @@ -180,11 +185,13 @@ subroutine startup call MPI_BCAST(chi_half ,1,MY_REAL ,0,MPI_COMM_WORLD,mpierr) call MPI_BCAST(lmoist ,1,MPI_LOGICAL,0,MPI_COMM_WORLD,mpierr) call MPI_BCAST(lcoriol ,1,MPI_LOGICAL,0,MPI_COMM_WORLD,mpierr) + call MPI_BCAST(lpressgrad ,1,MPI_LOGICAL,0,MPI_COMM_WORLD,mpierr) call MPI_BCAST(igrw_damp ,1,MPI_INTEGER,0,MPI_COMM_WORLD,mpierr) call MPI_BCAST(geodamptime,1,MY_REAL ,0,MPI_COMM_WORLD,mpierr) call MPI_BCAST(lforce_user,1,MPI_LOGICAL,0,MPI_COMM_WORLD,mpierr) call MPI_BCAST(lmomsubs ,1,MPI_LOGICAL,0,MPI_COMM_WORLD,mpierr) call MPI_BCAST(ltimedep ,1,MPI_LOGICAL,0,MPI_COMM_WORLD,mpierr) + call MPI_BCAST(ltimedepsv ,1,MPI_LOGICAL,0,MPI_COMM_WORLD,mpierr) call MPI_BCAST(lrigidlid ,1,MPI_LOGICAL,0,MPI_COMM_WORLD,mpierr) call MPI_BCAST(unudge ,1,MY_REAL ,0,MPI_COMM_WORLD,mpierr) @@ -237,9 +244,11 @@ subroutine startup ! Initialize MPI call initmpi + call testwctime ! Allocate and initialize core modules call initglobal call initfields + call inittestbed !reads initial profiles from scm_in.nc, to be used in readinitfiles call initboundary call initthermodynamics @@ -247,8 +256,8 @@ subroutine startup call initsurface call initsubgrid call initpois - call initmicrophysics call readinitfiles ! moved to obtain the correct btime for the timedependent forcings in case of a warmstart + call initmicrophysics call inittimedep !depends on modglobal,modfields, modmpi, modsurf, modradiation call checkinitvalues @@ -327,8 +336,8 @@ subroutine checkinitvalues case(1) case(2,10) case(3:4) - if (wtsurf == -1) stop 'wtsurf not set' - if (wqsurf == -1) stop 'wqsurf not set' + if (wtsurf <-1e10) stop 'wtsurf not set' + if (wqsurf <-1e10) stop 'wqsurf not set' case default stop 'isurf out of range/not set' end select @@ -355,30 +364,33 @@ subroutine readinitfiles v0av,u0av,qt0av,ql0av,thl0av,sv0av,exnf,exnh,presf,presh,rhof,& thlpcar,thvh,thvf use modglobal, only : i1,i2,ih,j1,j2,jh,kmax,k1,dtmax,idtmax,dt,rdt,runtime,timeleft,tres,& - rtimee,timee,ntimee,ntrun,btime,dt_lim,nsv,& + rtimee,timee,ntrun,btime,dt_lim,nsv,& zf,dzf,dzh,rv,rd,cp,rlv,pref0,om23_gs,& - ijtot,cu,cv,e12min,dzh,cexpnr,ifinput,lwarmstart,itrestart,& - trestart, ladaptive,llsadv,tnextrestart + ijtot,cu,cv,e12min,dzh,cexpnr,ifinput,lwarmstart,ltotruntime,itrestart,& + trestart, ladaptive,llsadv,tnextrestart,longint use modsubgrid, only : ekm,ekh use modsurfdata, only : wsvsurf, & thls,tskin,tskinm,tsoil,tsoilm,phiw,phiwm,Wl,Wlm,thvs,qts,isurf,svs,obl,oblav,& thvs_patch,lhetero,qskin - use modsurface, only : surface,qtsurf,dthldz + use modsurface, only : surface,qtsurf,dthldz,ps use modboundary, only : boundary use modmpi, only : slabsum,myid,comm3d,mpierr,my_real use modthermodynamics, only : thermodynamics,calc_halflev use moduser, only : initsurf_user + use modtestbed, only : ltestbed,tb_ps,tb_thl,tb_qt,tb_u,tb_v,tb_w,tb_ug,tb_vg,& + tb_dqtdxls,tb_dqtdyls,tb_qtadv,tb_thladv integer i,j,k,n + logical negval !switch to allow or not negative values in randomnization real, allocatable :: height(:), th0av(:) - real, dimension(2-ih:i1+ih,2-jh:j1+jh,k1) :: thv0 + real, allocatable :: thv0(:,:,:) character(80) chmess allocate (height(k1)) allocate (th0av(k1)) - + allocate(thv0(2-ih:i1+ih,2-jh:j1+jh,k1)) if (.not. lwarmstart) then @@ -396,22 +408,47 @@ subroutine readinitfiles dt = floor(rdt/tres) timee = 0 if (myid==0) then - open (ifinput,file='prof.inp.'//cexpnr) - read (ifinput,'(a80)') chmess - write(*, '(a80)') chmess - read (ifinput,'(a80)') chmess - do k=1,kmax - read (ifinput,*) & + if (ltestbed) then + + write(*,*) 'readinitfiles: testbed mode: profiles for initialization obtained from scm_in.nc' + + do k=1,kmax + height (k) = zf(k) + thlprof(k) = tb_thl(1,k) + qtprof (k) = tb_qt(1,k) + uprof (k) = tb_u(1,k) + vprof (k) = tb_v(1,k) + e12prof(k) = e12min + end do + + ps = tb_ps(1) + !qts + !thls + !wtsurf + !wqsurf + + else + + open (ifinput,file='prof.inp.'//cexpnr) + read (ifinput,'(a80)') chmess + write(*, '(a80)') chmess + read (ifinput,'(a80)') chmess + + do k=1,kmax + read (ifinput,*) & height (k), & thlprof(k), & qtprof (k), & uprof (k), & vprof (k), & e12prof(k) - end do + end do + + close(ifinput) + + end if !ltestbed - close(ifinput) write(*,*) 'height thl qt u v e12' do k=kmax,1,-1 write (*,'(f7.1,f8.1,e12.4,3f7.1)') & @@ -463,20 +500,24 @@ subroutine readinitfiles !--------------------------------------------------------------- krand = min(krand,kmax) + negval = .False. ! No negative perturbations for qt (negative moisture is non physical) do k = 1,krand - call randomnize(qtm ,k,randqt ,irandom,ih,jh) - call randomnize(qt0 ,k,randqt ,irandom,ih,jh) - call randomnize(thlm,k,randthl,irandom,ih,jh) - call randomnize(thl0,k,randthl,irandom,ih,jh) + call randomnize(qtm ,k,randqt ,irandom,ih,jh,negval) + call randomnize(qt0 ,k,randqt ,irandom,ih,jh,negval) + end do + negval = .True. ! negative perturbations allowed + do k = 1,krand + call randomnize(thlm,k,randthl,irandom,ih,jh,negval) + call randomnize(thl0,k,randthl,irandom,ih,jh,negval) end do do k=krandumin,krandumax - call randomnize(um ,k,randu ,irandom,ih,jh) - call randomnize(u0 ,k,randu ,irandom,ih,jh) - call randomnize(vm ,k,randu ,irandom,ih,jh) - call randomnize(v0 ,k,randu ,irandom,ih,jh) - call randomnize(wm ,k,randu ,irandom,ih,jh) - call randomnize(w0 ,k,randu ,irandom,ih,jh) + call randomnize(um ,k,randu ,irandom,ih,jh,negval) + call randomnize(u0 ,k,randu ,irandom,ih,jh,negval) + call randomnize(vm ,k,randu ,irandom,ih,jh,negval) + call randomnize(v0 ,k,randu ,irandom,ih,jh,negval) + call randomnize(wm ,k,randu ,irandom,ih,jh,negval) + call randomnize(w0 ,k,randu ,irandom,ih,jh,negval) end do svprof = 0. @@ -648,13 +689,29 @@ subroutine readinitfiles if(myid==0)then - open (ifinput,file='lscale.inp.'//cexpnr) - read (ifinput,'(a80)') chmess - read (ifinput,'(a80)') chmess - write(6,*) ' height u_geo v_geo subs ' & - ,' dqtdx dqtdy dqtdtls thl_rad ' - do k=1,kmax - read (ifinput,*) & + + if (ltestbed) then + + write(*,*) 'readinitfiles: testbed mode: profiles for ls forcing obtained from scm_in.nc' + + do k=1,kmax + height (k) = zf(k) + ug (k) = tb_ug(1,k) + vg (k) = tb_vg(1,k) + wfls (k) = tb_w(1,k) + dqtdxls(k) = tb_dqtdxls(1,k) + dqtdyls(k) = tb_dqtdyls(1,k) + dqtdtls(k) = tb_qtadv(1,k) + thlpcar(k) = tb_thladv(1,k) + end do + + else + + open (ifinput,file='lscale.inp.'//cexpnr) + read (ifinput,'(a80)') chmess + read (ifinput,'(a80)') chmess + do k=1,kmax + read (ifinput,*) & height (k), & ug (k), & vg (k), & @@ -663,9 +720,13 @@ subroutine readinitfiles dqtdyls(k), & dqtdtls(k), & thlpcar(k) - end do - close(ifinput) + end do + close(ifinput) + + end if + write(6,*) ' height u_geo v_geo subs ' & + ,' dqtdx dqtdy dqtdtls thl_rad ' do k=kmax,1,-1 write (6,'(3f7.1,5e12.4)') & height (k), & @@ -727,15 +788,18 @@ subroutine readinitfiles idtmax = floor(dtmax/tres) btime = timee - timeleft=ceiling(runtime/tres) + if (.not.(ltotruntime)) then + runtime = runtime + btime*tres + end if + timeleft=ceiling((runtime)/tres-btime,longint) + dt_lim = timeleft rdt = real(dt)*tres ntrun = 0 rtimee = real(timee)*tres - ntimee = nint(timee/dtmax) - itrestart = floor(trestart/tres) + itrestart = floor(trestart/tres,longint) tnextrestart = btime + itrestart - deallocate (height,th0av) + deallocate (height,th0av,thv0) end subroutine readinitfiles @@ -750,7 +814,7 @@ subroutine readrestartfiles use modglobal, only : i1,i2,ih,j1,j2,jh,k1,dtheta,dqt,dsv,startfile,timee,& tres,ifinput,nsv,dt use modmpi, only : cmyid - use modsubgriddata, only : ekm + use modsubgriddata, only : ekm,ekh character(50) :: name @@ -761,7 +825,7 @@ subroutine readrestartfiles !----------------------------------------------------------------- name = startfile name(5:5) = 'd' - name(12:19)=cmyid + name(13:20)=cmyid write(6,*) 'loading ',name open(unit=ifinput,file=name,form='unformatted', status='old') @@ -777,6 +841,7 @@ subroutine readrestartfiles read(ifinput) (((e120 (i,j,k),i=2-ih,i1+ih),j=2-jh,j1+jh),k=1,k1) read(ifinput) (((dthvdz(i,j,k),i=2-ih,i1+ih),j=2-jh,j1+jh),k=1,k1) read(ifinput) (((ekm (i,j,k),i=2-ih,i1+ih),j=2-jh,j1+jh),k=1,k1) + read(ifinput) (((ekh (i,j,k),i=2-ih,i1+ih),j=2-jh,j1+jh),k=1,k1) read(ifinput) (((tmp0 (i,j,k),i=2-ih,i1+ih),j=2-jh,j1+jh),k=1,k1) read(ifinput) (((esl (i,j,k),i=2-ih,i1+ih),j=2-jh,j1+jh),k=1,k1) read(ifinput) (((qvsl (i,j,k),i=2-ih,i1+ih),j=2-jh,j1+jh),k=1,k1) @@ -840,32 +905,33 @@ subroutine writerestartfiles obl,xpatches,ypatches,ps_patch,thls_patch,qts_patch,thvs_patch,oblpatch,lhetero,qskin use modraddata, only: iradiation, useMcICA use modfields, only : u0,v0,w0,thl0,qt0,ql0,ql0h,e120,dthvdz,presf,presh,sv0,tmp0,esl,qvsl,qvsi - use modglobal, only : i1,i2,ih,j1,j2,jh,k1,dsv,itrestart,tnextrestart,dt_lim,rtimee,timee,tres,cexpnr,& + use modglobal, only : i1,i2,ih,j1,j2,jh,k1,dsv,trestart,itrestart,tnextrestart,dt_lim,rtimee,timee,tres,cexpnr,& rtimee,rk3step,ifoutput,nsv,timeleft,dtheta,dqt,dt use modmpi, only : cmyid,myid - use modsubgriddata, only : ekm + use modsubgriddata, only : ekm,ekh implicit none - logical :: lexitnow = .false. integer imin,ihour integer i,j,k,n character(50) name,linkname if (timee == 0) return - if (rk3step /=3) return - name = 'exit_now.'//cexpnr - inquire(file=trim(name), EXIST=lexitnow) + if (rk3Step/=3) return if (timee=tnextrestart .or. lexitnow) then + + ! if trestart > 0, write a restartfile every trestart seconds and at the end + ! if trestart = 0, write restart files only at the end of the simulation + ! if trestart < 0, don't write any restart files + if ((timee>=tnextrestart .and. trestart > 0) .or. (timeleft==0 .and. trestart >= 0)) then tnextrestart = tnextrestart+itrestart ihour = floor(rtimee/3600) imin = floor((rtimee-ihour * 3600) /3600. * 60.) - name = 'initd h m .' - write (name(6:7) ,'(i2.2)') ihour - write (name(9:10) ,'(i2.2)') imin - name(12:19)= cmyid - name(21:23)= cexpnr + name = 'initdXXXhXXmXXXXXXXX.XXX' + write (name(6:8) ,'(i3.3)') ihour + write (name(10:11),'(i2.2)') imin + name(13:20)= cmyid + name(22:24)= cexpnr open (ifoutput,file=name,form='unformatted',status='replace') write(ifoutput) (((u0 (i,j,k),i=2-ih,i1+ih),j=2-jh,j1+jh),k=1,k1) @@ -878,6 +944,7 @@ subroutine writerestartfiles write(ifoutput) (((e120 (i,j,k),i=2-ih,i1+ih),j=2-jh,j1+jh),k=1,k1) write(ifoutput) (((dthvdz(i,j,k),i=2-ih,i1+ih),j=2-jh,j1+jh),k=1,k1) write(ifoutput) (((ekm (i,j,k),i=2-ih,i1+ih),j=2-jh,j1+jh),k=1,k1) + write(ifoutput) (((ekh (i,j,k),i=2-ih,i1+ih),j=2-jh,j1+jh),k=1,k1) write(ifoutput) (((tmp0 (i,j,k),i=2-ih,i1+ih),j=2-jh,j1+jh),k=1,k1) write(ifoutput) (((esl (i,j,k),i=2-ih,i1+ih),j=2-jh,j1+jh),k=1,k1) write(ifoutput) (((qvsl (i,j,k),i=2-ih,i1+ih),j=2-jh,j1+jh),k=1,k1) @@ -905,14 +972,10 @@ subroutine writerestartfiles close (ifoutput) linkname = name linkname(6:11) = "latest" - call system("ln -sf "//name //" "//linkname) + call system("cp "//name //" "//linkname) if (nsv>0) then - name = 'inits h m .' - write (name(6:7) ,'(i2.2)') ihour - write (name(9:10) ,'(i2.2)') imin - name(12:19) = cmyid - name(21:23) = cexpnr + name(5:5)='s' open (ifoutput,file=name,form='unformatted') write(ifoutput) ((((sv0(i,j,k,n),i=2-ih,i1+ih),j=2-jh,j1+jh),k=1,k1),n=1,nsv) write(ifoutput) (((svflux(i,j,n),i=1,i2),j=1,j2),n=1,nsv) @@ -922,16 +985,12 @@ subroutine writerestartfiles close (ifoutput) linkname = name linkname(6:11) = "latest" - call system("ln -sf "//name //" "//linkname) + call system("cp "//name //" "//linkname) end if if (isurf == 1) then - name = 'initl h m .' - write (name(6:7) ,'(i2.2)') ihour - write (name(9:10) ,'(i2.2)') imin - name(12:19) = cmyid - name(21:23) = cexpnr + name(5:5)='l' open (ifoutput,file=name,form='unformatted') write(ifoutput) (((tsoil(i,j,k),i=1,i2),j=1,j2),k=1,ksoilmax) write(ifoutput) (((phiw(i,j,k),i=1,i2),j=1,j2),k=1,ksoilmax) @@ -949,17 +1008,10 @@ subroutine writerestartfiles close (ifoutput) linkname = name linkname(6:11) = "latest" - call system("ln -sf "//name //" "//linkname) - end if - if (lexitnow) then - timeleft = 0 !jump out of the time loop - end if - if (lexitnow .and. myid == 0 ) then - open(1, file=trim(name), status='old') - close(1,status='delete') - write(*,*) 'Stopped at t=',rtimee + call system("cp "//name //" "//linkname) end if + if (myid==0) then write(*,'(A,F15.7,A,I4)') 'dump at time = ',rtimee,' unit = ',ifoutput end if @@ -969,6 +1021,25 @@ subroutine writerestartfiles end subroutine writerestartfiles + subroutine testwctime + use modmpi, only : mpi_get_time + use modglobal, only : timeleft + implicit none + real, save :: tstart = -1., tend = -1. + + if (tstart < 0) then + call mpi_get_time(tstart) + else + call mpi_get_time(tend) + if (tend-tstart>=wctime) then + write (*,*) wctime, "NO WALL CLOCK TIME LEFT" + timeleft=0 + end if + end if + + + end subroutine testwctime + subroutine exitmodules use modfields, only : exitfields use modglobal, only : exitglobal @@ -996,7 +1067,7 @@ subroutine exitmodules end subroutine exitmodules !---------------------------------------------------------------- - subroutine randomnize(field,klev,ampl,ir,ihl,jhl) + subroutine randomnize(field,klev,ampl,ir,ihl,jhl,negval) ! Adds (pseudo) random noise with given amplitude to the field at level k ! Use our own pseudo random function so results are reproducibly the same, ! independent of parallization. @@ -1007,10 +1078,10 @@ subroutine randomnize(field,klev,ampl,ir,ihl,jhl) integer ihl, jhl integer i,j,klev integer is,ie,js,je - integer m,mfac real ran,ampl real field(2-ihl:i1+ihl,2-jhl:j1+jhl,k1) parameter (imm = 134456, ia = 8121, ic = 28411) + logical negval is = myidx * imax + 1 ie = is + imax - 1 @@ -1024,7 +1095,12 @@ subroutine randomnize(field,klev,ampl,ir,ihl,jhl) ran=real(ir)/real(imm) if (i >= is .and. i <= ie .and. & j >= js .and. j <= je) then - field(i-is+2,j-js+2,klev) = field(i-is+2,j-js+2,klev) + (ran-0.5)*2.0*ampl + if (.not. negval) then ! Avoid non-physical negative values + field(i-is+2,j-js+2,klev) = field(i-is+2,j-js+2,klev) + (ran-0.5)*2.0*min(ampl,field(i-is+2,j-js+2,klev)) + else + field(i-is+2,j-js+2,klev) = field(i-is+2,j-js+2,klev) + (ran-0.5)*2.0*ampl + endif + endif enddo enddo diff --git a/src/modstat_nc.f90 b/src/modstat_nc.f90 index 536b4a3a..ef43e1fa 100644 --- a/src/modstat_nc.f90 +++ b/src/modstat_nc.f90 @@ -91,7 +91,7 @@ subroutine open_nc (fname, ncid,nrec,n1, n2, n3, ns,nq) if (.not.exans) then call date_and_time(date,time) - iret = nf90_create(fname,NF90_SHARE,ncid) + iret = nf90_create(fname,NF90_NETCDF4,ncid) iret = nf90_put_att(ncid,NF90_GLOBAL,'title',fname) iret = nf90_put_att(ncid,NF90_GLOBAL,'history','Created on '//trim(date)//' at '//trim(time)) iret = nf90_put_att(ncid, NF90_GLOBAL, 'Source',trim(version)) @@ -280,6 +280,7 @@ subroutine define_nc(ncID, nVar, sx) iret=nf90_def_var(ncID,sx(n,1),NF90_FLOAT,dim_0ttts,VarID) case ('tttts') iret=nf90_def_var(ncID,sx(n,1),NF90_FLOAT,dim_tttts,VarID) + !Quadrant analysis fields case('qt') iret=nf90_def_var(ncID,sx(n,1),NF90_FLOAT,dim_qt ,VarID) @@ -287,12 +288,14 @@ subroutine define_nc(ncID, nVar, sx) print *, 'ABORTING: Bad dimensional information ',sx(n,:) stop ! call appl_abort(0) + end select if (iret/=0) then write (*,*) 'nvar', nvar, sx(n,:) call nchandle_error(iret) end if + iret=nf90_def_var_deflate(ncid,varID, 0, 1, deflate_level = 2) iret=nf90_put_att(ncID,VarID,'longname',sx(n,2)) iret=nf90_put_att(ncID,VarID,'units',sx(n,3)) iret = nf90_put_att(ncid, VarID, '_FillValue',nc_fillvalue) @@ -317,26 +320,34 @@ subroutine exitstat_nc(ncid) status = nf90_close(ncid) if (status /= nf90_noerr) call nchandle_error(status) end subroutine exitstat_nc - subroutine writestat_dims_nc(ncid) + subroutine writestat_dims_nc(ncid, ncoarse) use modglobal, only : dx,dy,zf,zh,jmax,imax use modsurfdata, only : zsoilc,isurf use modmpi, only : myidx,myidy implicit none integer, intent(in) :: ncid - integer :: i=0,iret,length,varid + integer, optional, intent(in) :: ncoarse + integer :: i=0,iret,length,varid, nc + + if (present(ncoarse)) then + nc = ncoarse + else + nc = 1 + end if + iret = nf90_inq_varid(ncid, 'xt', VarID) if (iret==0) iret=nf90_inquire_dimension(ncid, xtID, len=length) - if (iret==0) iret = nf90_put_var(ncid, varID, (/(dx*(0.5+i)+myidx*imax*dx,i=0,length-1)/),(/1/)) + if (iret==0) iret = nf90_put_var(ncid, varID, (/(dx*(0.5+nc*i)+myidx*imax*dx,i=0,length-1)/),(/1/)) iret = nf90_inq_varid(ncid, 'xm', VarID) if (iret==0) iret=nf90_inquire_dimension(ncid, xmID, len=length) - if (iret==0) iret = nf90_put_var(ncid, varID, (/(dx*i+myidx*imax*dx,i=0,length-1)/),(/1/)) + if (iret==0) iret = nf90_put_var(ncid, varID, (/(dx*nc*i+myidx*imax*dx,i=0,length-1)/),(/1/)) iret = nf90_inq_varid(ncid, 'yt', VarID) if (iret==0) iret=nf90_inquire_dimension(ncid, ytID, len=length) - if (iret==0) iret = nf90_put_var(ncid, varID, (/(dy*(0.5+i)+myidy*jmax*dy,i=0,length-1)/),(/1/)) + if (iret==0) iret = nf90_put_var(ncid, varID, (/(dy*(0.5+nc*i)+myidy*jmax*dy,i=0,length-1)/),(/1/)) iret = nf90_inq_varid(ncid, 'ym', VarID) if (iret==0) iret=nf90_inquire_dimension(ncid, ymID, len=length) - if (iret==0) iret = nf90_put_var(ncid, varID, (/(dy*i+myidy*jmax*dy,i=0,length-1)/),(/1/)) + if (iret==0) iret = nf90_put_var(ncid, varID, (/(dy*nc*i+myidy*jmax*dy,i=0,length-1)/),(/1/)) iret = nf90_inq_varid(ncid, 'zt', VarID) if (iret==0) iret=nf90_inquire_dimension(ncid,ztID, len=length) diff --git a/src/modsubgrid.f90 b/src/modsubgrid.f90 index 40c55f98..903a5da0 100644 --- a/src/modsubgrid.f90 +++ b/src/modsubgrid.f90 @@ -69,7 +69,7 @@ subroutine initsubgrid ce1 = (cn**2)* (cm/Rigc - ch1*cm ) ce2 = ceps - ce1 - if(cs == -1.) then + if(cs < 0.) then csz(:) = (cm**3/ceps)**0.25 !< Smagorinsky constant else csz(:) = cs @@ -106,7 +106,7 @@ subroutine subgridnamelist integer :: ierr namelist/NAMSUBGRID/ & - ldelta,lmason, cf,cn,Rigc,Prandtl,lsmagorinsky,cs,nmason,sgs_surface_fix + ldelta,lmason, cf,cn,Rigc,Prandtl,lsmagorinsky,cs,nmason,ch1,ch2,cm,ce1,ce2 if(myid==0)then open(ifnamopt,file=fname_options,status='old',iostat=ierr) @@ -130,7 +130,10 @@ subroutine subgridnamelist call MPI_BCAST(Rigc ,1,MY_REAL ,0,comm3d,mpierr) call MPI_BCAST(Prandtl ,1,MY_REAL ,0,comm3d,mpierr) call MPI_BCAST(sgs_surface_fix ,1,MPI_LOGICAL ,0,comm3d,mpierr) - + call MPI_BCAST(ch1 ,1,MY_REAL ,0,comm3d,mpierr) + call MPI_BCAST(ch2 ,1,MY_REAL ,0,comm3d,mpierr) + call MPI_BCAST(ce1 ,1,MY_REAL ,0,comm3d,mpierr) + call MPI_BCAST(ce2 ,1,MY_REAL ,0,comm3d,mpierr) end subroutine subgridnamelist @@ -197,7 +200,7 @@ subroutine closure ! | !-----------------------------------------------------------------| - use modglobal, only : i1,j1,kmax,k1,ih,jh,i2,j2,delta,ekmin,grav,zf,fkar, & + use modglobal, only : i1,j1,kmax,k1,ih,jh,i2,j2,delta,ekmin,grav,zf,fkar,deltai, & dxi,dyi,dzf,dzh use modfields, only : dthvdz,e120,u0,v0,w0,thvf use modsurfdata, only : dudz,dvdz,z0m @@ -283,6 +286,9 @@ subroutine closure ekm(i,j,k) = mlen ** 2. * sqrt(2. * strain2) ekh(i,j,k) = ekm(i,j,k) / Prandtl + + ekm(i,j,k) = max(ekm(i,j,k),ekmin) + ekh(i,j,k) = max(ekh(i,j,k),ekmin) end do end do end do @@ -297,26 +303,30 @@ subroutine closure if (lmason) zlt(i,j,k) = (1. / zlt(i,j,k) ** nmason + 1. / ( fkar * (zf(k) + z0m(i,j)))**nmason) ** (-1./nmason) ekm(i,j,k) = cm * zlt(i,j,k) * e120(i,j,k) ekh(i,j,k) = (ch1 + ch2) * ekm(i,j,k) + + ekm(i,j,k) = max(ekm(i,j,k),ekmin) + ekh(i,j,k) = max(ekh(i,j,k),ekmin) else - zlt(i,j,k) = min(delta(k),cn*e120(i,j,k)/sqrt(grav/thvf(k)*abs(dthvdz(i,j,k)))) + ! zlt(i,j,k) = min(delta(k),cn*e120(i,j,k)/sqrt(grav/thvf(k)*abs(dthvdz(i,j,k)))) + ! faster calculation: evaluate sqrt only if the second argument is actually smaller + zlt(i,j,k) = delta(k) + if ( grav*abs(dthvdz(i,j,k)) * delta(k)**2 > (cn*e120(i,j,k))**2 * thvf(k) ) then + zlt(i,j,k) = cn*e120(i,j,k)/sqrt(grav/thvf(k)*abs(dthvdz(i,j,k))) + end if + if (lmason) zlt(i,j,k) = (1. / zlt(i,j,k) ** nmason + 1. / ( fkar * (zf(k) + z0m(i,j)))**nmason) ** (-1./nmason) ekm(i,j,k) = cm * zlt(i,j,k) * e120(i,j,k) - ekh(i,j,k) = (ch1 + ch2 * zlt(i,j,k)/delta(k)) * ekm(i,j,k) + ekh(i,j,k) = (ch1 + ch2 * zlt(i,j,k)*deltai(k)) * ekm(i,j,k) + + ekm(i,j,k) = max(ekm(i,j,k),ekmin) + ekh(i,j,k) = max(ekh(i,j,k),ekmin) endif end do end do end do end if - do k=1,k1 - do j=2,j1 - do i=2,i1 - ekm(i,j,k) = max(ekm(i,j,k),ekmin) - ekh(i,j,k) = max(ekh(i,j,k),ekmin) - end do - end do - end do !************************************************************* ! Set cyclic boundary condition for K-closure factors. !************************************************************* @@ -357,7 +367,7 @@ subroutine sources ! | !-----------------------------------------------------------------| - use modglobal, only : i1,j1,kmax,delta,dx,dy,dxi,dyi,dzf,dzh,grav, cu, cv + use modglobal, only : i1,j1,kmax,delta,dx,dy,dxi,dyi,dzf,dzh,grav,cu,cv,deltai use modfields, only : u0,v0,w0,e120,e12p,dthvdz,thvf use modsurfdata, only : dudz,dvdz,ustar,thlflux use modsubgriddata, only: sgs_surface_fix @@ -412,9 +422,16 @@ subroutine sources (w0(i,jp,kp)-w0(i,j,kp)) / dy )**2 ) - sbshr(i,j,k) = ekm(i,j,k)*tdef2/ ( 2*e120(i,j,k)) - sbbuo(i,j,k) = -ekh(i,j,k)*grav/thvf(k)*dthvdz(i,j,k)/ ( 2*e120(i,j,k)) - sbdiss(i,j,k) = - (ce1 + ce2*zlt(i,j,k)/delta(k)) * e120(i,j,k)**2 /(2.*zlt(i,j,k)) +! sbshr(i,j,k) = ekm(i,j,k)*tdef2/ ( 2*e120(i,j,k)) +! sbbuo(i,j,k) = -ekh(i,j,k)*grav/thvf(k)*dthvdz(i,j,k)/ ( 2*e120(i,j,k)) +! sbdiss(i,j,k) = - (ce1 + ce2*zlt(i,j,k)/delta(k)) * e120(i,j,k)**2 /(2.*zlt(i,j,k)) + +! e12p(2:i1,2:j1,1) = e12p(2:i1,2:j1,1)+ & +! sbshr(2:i1,2:j1,1)+sbbuo(2:i1,2:j1,1)+sbdiss(2:i1,2:j1,1) + e12p(i,j,k) = e12p(i,j,k) & + + (ekm(i,j,k)*tdef2 - ekh(i,j,k)*grav/thvf(k)*dthvdz(i,j,k) ) / (2*e120(i,j,k)) & ! sbshr and sbbuo + - (ce1 + ce2*zlt(i,j,k)*deltai(k)) * e120(i,j,k)**2 /(2.*zlt(i,j,k)) ! sbdiss + end do end do end do @@ -492,12 +509,14 @@ subroutine sources else sbbuo(i,j,1) = -ekh(i,j,1)*grav/thvf(1)*dthvdz(i,j,1)/ ( 2*e120(i,j,1)) endif - sbdiss(i,j,1) = - (ce1 + ce2*zlt(i,j,1)/delta(1)) * e120(i,j,1)**2 /(2.*zlt(i,j,1)) + sbdiss(i,j,1) = - (ce1 + ce2*zlt(i,j,1)*deltai(1)) * e120(i,j,1)**2 /(2.*zlt(i,j,1)) end do end do - e12p(2:i1,2:j1,1:kmax) = e12p(2:i1,2:j1,1:kmax)+ & - sbshr(2:i1,2:j1,1:kmax)+sbbuo(2:i1,2:j1,1:kmax)+sbdiss(2:i1,2:j1,1:kmax) +! e12p(2:i1,2:j1,1:kmax) = e12p(2:i1,2:j1,1:kmax)+ & +! sbshr(2:i1,2:j1,1:kmax)+sbbuo(2:i1,2:j1,1:kmax)+sbdiss(2:i1,2:j1,1:kmax) + e12p(2:i1,2:j1,1) = e12p(2:i1,2:j1,1) + & + sbshr(2:i1,2:j1,1)+sbbuo(2:i1,2:j1,1)+sbdiss(2:i1,2:j1,1) return end subroutine sources diff --git a/src/modsubgriddata.f90 b/src/modsubgriddata.f90 index dd018d74..81569c36 100644 --- a/src/modsubgriddata.f90 +++ b/src/modsubgriddata.f90 @@ -48,7 +48,7 @@ module modsubgriddata real :: nmason = 2. !< exponent in Mason correction function real :: alpha_kolm = 1.5 !< factor in Kolmogorov expression for spectral energy real :: beta_kolm = 1. !< factor in Kolmogorov relation for temperature spectrum - logical :: sgs_surface_fix = .true. !< which fix to apply to coupling of SGSTKE to surface + logical :: sgs_surface_fix = .false. !< which fix to apply to coupling of SGSTKE to surface real, allocatable :: ekm(:,:,:) !< k-coefficient for momentum diff --git a/src/modsurface.f90 b/src/modsurface.f90 index b9d4fc53..6b89090b 100644 --- a/src/modsurface.f90 +++ b/src/modsurface.f90 @@ -72,7 +72,7 @@ module modsurface subroutine initsurface use modglobal, only : i1, j1, i2, j2, itot, jtot, nsv, ifnamopt, fname_options, ifinput, cexpnr - use modraddata, only : iradiation,rad_shortw + use modraddata, only : iradiation,rad_shortw,irad_par,irad_user,irad_rrtmg use modmpi, only : myid, comm3d, mpierr, my_real, mpi_logical, mpi_integer implicit none @@ -95,7 +95,9 @@ subroutine initsurface ! Delay plant response in Ags lrelaxgc, kgc, lrelaxci, kci, & ! Soil properties - phi, phifc, phiwp, R10 + phi, phifc, phiwp, R10, & + !2leaf AGS, sunlit/shaded + lsplitleaf ! 1 - Initialize soil @@ -163,7 +165,8 @@ subroutine initsurface call MPI_BCAST(phifc , 1, MY_REAL , 0, comm3d, mpierr) call MPI_BCAST(phiwp , 1, MY_REAL , 0, comm3d, mpierr) call MPI_BCAST(R10 , 1, MY_REAL , 0, comm3d, mpierr) - + call MPI_BCAST(lsplitleaf , 1, MPI_LOGICAL, 0, comm3d, mpierr) + call MPI_BCAST(land_use(1:mpatch,1:mpatch),mpatch*mpatch, MPI_INTEGER, 0, comm3d, mpierr) if(lCO2Ags .and. (.not. lrsAgs)) then @@ -171,6 +174,11 @@ subroutine initsurface if(myid==0) print *,"WARNING::: Since AGS does not run, lCO2Ags will be set to .false. as well." lCO2Ags = .false. endif + if(lsplitleaf .and. (.not. (rad_shortw .and. ((iradiation.eq.irad_par).or.(iradiation .eq. irad_user) .or. (iradiation .eq. irad_rrtmg))))) then + if(myid==0) stop "WARNING::: You set lsplitleaf to .true., but that needs direct and diffuse calculations. Make sure you enable rad_shortw" + if(myid==0) stop "WARNING::: Since there is no direct and diffuse radiation calculated in the atmopshere, we set lsplitleaf to .false." + lsplitleaf = .false. + endif if(lrsAgs) then if(planttype==4) then !C4 plants, so standard settings for C3 plants are replaced @@ -663,6 +671,7 @@ subroutine initsurface if (lrsAgs) then allocate(AnField (2:i1,2:j1)) + allocate(gcco2Field(2:i1,2:j1)) allocate(RespField (2:i1,2:j1)) allocate(wco2Field (2:i1,2:j1)) allocate(rsco2Field(2:i1,2:j1)) @@ -671,6 +680,11 @@ subroutine initsurface allocate(ci_old (2:i1,2:j1)) allocate(tauField (2:i1,2:j1)) allocate(ciField (2:i1,2:j1)) + allocate(PARField (2:i1,2:j1)) + if (lsplitleaf) then + allocate(PARdirField (2:i1,2:j1)) + allocate(PARdifField (2:i1,2:j1)) + endif endif return end subroutine initsurface @@ -835,19 +849,9 @@ subroutine surface if(lCO2Ags) svflux(i,j,indCO2) = CO2flux(i,j) - if (obl(i,j) < 0.) then - phimzf = (1.-16.*zf(1)/obl(i,j))**(-0.25) - !phimzf = (1. + 3.6 * (-zf(1)/obl(i,j))**(2./3.))**(-0.5) - phihzf = (1.-16.*zf(1)/obl(i,j))**(-0.50) - !phihzf = (1. + 7.9 * (-zf(1)/obl(i,j))**(2./3.))**(-0.5) - elseif (obl(i,j) > 0.) then - phimzf = (1.+5.*zf(1)/obl(i,j)) - phihzf = (1.+5.*zf(1)/obl(i,j)) - else - phimzf = 1. - phihzf = 1. - endif - + phimzf = phim(zf(1)/obl(i,j)) + phihzf = phih(zf(1)/obl(i,j)) + dudz (i,j) = ustar(i,j) * phimzf / (fkar*zf(1))*(upcu/horv) dvdz (i,j) = ustar(i,j) * phimzf / (fkar*zf(1))*(vpcv/horv) dthldz(i,j) = - thlflux(i,j) / ustar(i,j) * phihzf / (fkar*zf(1)) @@ -878,19 +882,9 @@ subroutine surface svflux(i,j,n) = wsvsurf(n) enddo - if (obl(i,j) < 0.) then - phimzf = (1.-16.*zf(1)/obl(i,j))**(-0.25) - !phimzf = (1. + 3.6 * (-zf(1)/obl(i,j))**(2./3.))**(-0.5) - phihzf = (1.-16.*zf(1)/obl(i,j))**(-0.50) - !phihzf = (1. + 7.9 * (-zf(1)/obl(i,j))**(2./3.))**(-0.5) - elseif (obl(i,j) > 0.) then - phimzf = (1.+5.*zf(1)/obl(i,j)) - phihzf = (1.+5.*zf(1)/obl(i,j)) - else - phimzf = 1. - phihzf = 1. - endif - + phimzf = phim(zf(1)/obl(i,j)) + phihzf = phih(zf(1)/obl(i,j)) + upcu = 0.5 * (u0(i,j,1) + u0(i+1,j,1)) + cu vpcv = 0.5 * (v0(i,j,1) + v0(i,j+1,1)) + cv horv = sqrt(upcu ** 2. + vpcv ** 2.) @@ -973,20 +967,10 @@ subroutine surface svflux(i,j,n) = wsvsurf(n) enddo endif - - if (obl(i,j) < 0.) then - phimzf = (1.-16.*zf(1)/obl(i,j))**(-0.25) - !phimzf = (1. + 3.6 * (-zf(1)/obl(i,j))**(2./3.))**(-0.5) - phihzf = (1.-16.*zf(1)/obl(i,j))**(-0.50) - !phihzf = (1. + 7.9 * (-zf(1)/obl(i,j))**(2./3.))**(-0.5) - elseif (obl(i,j) > 0.) then - phimzf = (1.+5.*zf(1)/obl(i,j)) - phihzf = (1.+5.*zf(1)/obl(i,j)) - else - phimzf = 1. - phihzf = 1. - endif - + + phimzf = phim(zf(1)/obl(i,j)) + phihzf = phih(zf(1)/obl(i,j)) + dudz (i,j) = ustar(i,j) * phimzf / (fkar*zf(1))*(upcu/horv) dvdz (i,j) = ustar(i,j) * phimzf / (fkar*zf(1))*(vpcv/horv) dthldz(i,j) = - thlflux(i,j) / ustar(i,j) * phihzf / (fkar*zf(1)) @@ -1107,7 +1091,7 @@ subroutine qtsurf end subroutine qtsurf -!> Calculates the Obuhkov length iteratively. +!> Calculates the Obukhov length iteratively. subroutine getobl use modglobal, only : zf, rv, rd, grav, i1, j1, i2, j2, cu, cv use modfields, only : thl0av, qt0av, u0, v0, thl0, qt0, u0av, v0av @@ -1146,35 +1130,42 @@ subroutine getobl Rib = grav / thvs * zf(1) * (thv - thvsl) / horv2 endif - iter = 0 - L = obl(i,j) + if (Rib == 0) then + ! Rib can be 0 if there is no surface flux + ! L is capped at 1e6 below, so use the same cap here + L = 1e6 + write(*,*) 'Obukhov length: Rib = 0 -> setting L=1e6' + else + iter = 0 + L = obl(i,j) + + if(Rib * L < 0. .or. abs(L) == 1e5) then + if(Rib > 0) L = 0.01 + if(Rib < 0) L = -0.01 + end if + + do while (.true.) + iter = iter + 1 + Lold = L + fx = Rib - zf(1) / L * (log(zf(1) / z0h(i,j)) - psih(zf(1) / L) + psih(z0h(i,j) / L)) /& + (log(zf(1) / z0m(i,j)) - psim(zf(1) / L) + psim(z0m(i,j) / L)) ** 2. + Lstart = L - 0.001*L + Lend = L + 0.001*L + fxdif = ( (- zf(1) / Lstart * (log(zf(1) / z0h(i,j)) - psih(zf(1) / Lstart) + psih(z0h(i,j) / Lstart)) /& + (log(zf(1) / z0m(i,j)) - psim(zf(1) / Lstart) + psim(z0m(i,j) / Lstart)) ** 2.) - (-zf(1) / Lend * & + (log(zf(1) / z0h(i,j)) - psih(zf(1) / Lend) + psih(z0h(i,j) / Lend)) / (log(zf(1) / z0m(i,j)) - psim(zf(1) / Lend)& + + psim(z0m(i,j) / Lend)) ** 2.) ) / (Lstart - Lend) + L = L - fx / fxdif + if(Rib * L < 0. .or. abs(L) == 1e5) then + if(Rib > 0) L = 0.01 + if(Rib < 0) L = -0.01 + end if + if(abs((L - Lold)/L) < 1e-4) exit + if(iter > 1000) stop 'Obukhov length calculation does not converge!' + end do - if(Rib * L < 0. .or. abs(L) == 1e5) then - if(Rib > 0) L = 0.01 - if(Rib < 0) L = -0.01 + if (abs(L)>1e6) L = sign(1.0e6,L) end if - - do while (.true.) - iter = iter + 1 - Lold = L - fx = Rib - zf(1) / L * (log(zf(1) / z0h(i,j)) - psih(zf(1) / L) + psih(z0h(i,j) / L)) /& - (log(zf(1) / z0m(i,j)) - psim(zf(1) / L) + psim(z0m(i,j) / L)) ** 2. - Lstart = L - 0.001*L - Lend = L + 0.001*L - fxdif = ( (- zf(1) / Lstart * (log(zf(1) / z0h(i,j)) - psih(zf(1) / Lstart) + psih(z0h(i,j) / Lstart)) /& - (log(zf(1) / z0m(i,j)) - psim(zf(1) / Lstart) + psim(z0m(i,j) / Lstart)) ** 2.) - (-zf(1) / Lend * & - (log(zf(1) / z0h(i,j)) - psih(zf(1) / Lend) + psih(z0h(i,j) / Lend)) / (log(zf(1) / z0m(i,j)) - psim(zf(1) / Lend)& - + psim(z0m(i,j) / Lend)) ** 2.) ) / (Lstart - Lend) - L = L - fx / fxdif - if(Rib * L < 0. .or. abs(L) == 1e5) then - if(Rib > 0) L = 0.01 - if(Rib < 0) L = -0.01 - end if - if(abs((L - Lold)/L) < 1e-4) exit - if(iter > 1000) stop 'Obukhov length calculation does not converge!' - end do - - if (abs(L)>1e6) L = sign(1.0e6,L) obl(i,j) = L end do @@ -1278,40 +1269,46 @@ subroutine getobl horv2 = max(horv2, 0.01) Rib = grav / thvs * zf(1) * (thv - thvs) / horv2 - - iter = 0 - L = oblav - - if(Rib * L < 0. .or. abs(L) == 1e5) then - if(Rib > 0) L = 0.01 - if(Rib < 0) L = -0.01 - end if - - do while (.true.) - iter = iter + 1 - Lold = L - fx = Rib - zf(1) / L * (log(zf(1) / z0hav) - psih(zf(1) / L) + psih(z0hav / L)) /& - (log(zf(1) / z0mav) - psim(zf(1) / L) + psim(z0mav / L)) ** 2. - Lstart = L - 0.001*L - Lend = L + 0.001*L - fxdif = ( (- zf(1) / Lstart * (log(zf(1) / z0hav) - psih(zf(1) / Lstart) + psih(z0hav / Lstart)) /& - (log(zf(1) / z0mav) - psim(zf(1) / Lstart) + psim(z0mav / Lstart)) ** 2.) - (-zf(1) / Lend * (log(zf(1) / z0hav) & - - psih(zf(1) / Lend) + psih(z0hav / Lend)) / (log(zf(1) / z0mav) - psim(zf(1) / Lend) & - + psim(z0mav / Lend)) ** 2.) ) / (Lstart - Lend) - L = L - fx / fxdif - if(Rib * L < 0. .or. abs(L) == 1e5) then - if(Rib > 0) L = 0.01 - if(Rib < 0) L = -0.01 - end if - if(abs((L - Lold)/L) < 1e-4) exit - if(iter > 1000) stop 'Obukhov length calculation does not converge!' - end do - - if (abs(L)>1e6) L = sign(1.0e6,L) - if(.not. lmostlocal) then - if(.not. lhetero) then - obl(:,:) = L - endif + if (Rib == 0) then + ! Rib can be 0 if there is no surface flux + ! L is capped at 1e6 below, so use the same cap here + L = 1e6 + write(*,*) 'Obukhov length: Rib = 0 -> setting L=1e6 (2nd point)' + else + iter = 0 + L = oblav + + if(Rib * L < 0. .or. abs(L) == 1e5) then + if(Rib > 0) L = 0.01 + if(Rib < 0) L = -0.01 + end if + + do while (.true.) + iter = iter + 1 + Lold = L + fx = Rib - zf(1) / L * (log(zf(1) / z0hav) - psih(zf(1) / L) + psih(z0hav / L)) /& + (log(zf(1) / z0mav) - psim(zf(1) / L) + psim(z0mav / L)) ** 2. + Lstart = L - 0.001*L + Lend = L + 0.001*L + fxdif = ( (- zf(1) / Lstart * (log(zf(1) / z0hav) - psih(zf(1) / Lstart) + psih(z0hav / Lstart)) /& + (log(zf(1) / z0mav) - psim(zf(1) / Lstart) + psim(z0mav / Lstart)) ** 2.) - (-zf(1) / Lend * (log(zf(1) / z0hav) & + - psih(zf(1) / Lend) + psih(z0hav / Lend)) / (log(zf(1) / z0mav) - psim(zf(1) / Lend) & + + psim(z0mav / Lend)) ** 2.) ) / (Lstart - Lend) + L = L - fx / fxdif + if(Rib * L < 0. .or. abs(L) == 1e5) then + if(Rib > 0) L = 0.01 + if(Rib < 0) L = -0.01 + end if + if(abs((L - Lold)/L) < 1e-4) exit + if(iter > 1000) stop 'Obukhov length calculation does not converge!' + end do + + if (abs(L)>1e6) L = sign(1.0e6,L) + if(.not. lmostlocal) then + if(.not. lhetero) then + obl(:,:) = L + endif + end if end if oblav = L @@ -1360,16 +1357,59 @@ function psih(zeta) return end function psih + ! stability function Phi for momentum. + ! Many functional forms of Phi have been suggested, see e.g. Optis 2015 + ! Phi and Psi above are related by an integral and should in principle match, + ! currently they do not. + ! FJ 2018: For very stable situations, zeta > 1 add cap to phi - the linear expression is valid only for zeta < 1 + function phim(zeta) + implicit none + real :: phim + real, intent(in) :: zeta + + if (zeta < 0.) then ! unstable + phim = (1.-16.*zeta)**(-0.25) + !phimzf = (1. + 3.6 * (-zf(1)/obl(i,j))**(2./3.))**(-0.5) + elseif ( zeta < 1.) then ! 0 < zeta < 1, stable + phim = (1.+5.*zeta) + else + phim = 6 ! cap phi when z/L > 1 + endif + + return + end function phim + + ! stability function Phi for heat. + function phih(zeta) + implicit none + real :: phih + real, intent(in) :: zeta + + if (zeta < 0.) then ! unstable + phih = (1.-16.*zeta)**(-0.50) + !phihzf = (1. + 7.9 * (-zf(1)/obl(i,j))**(2./3.))**(-0.5) + elseif ( zeta < 1.) then ! 0 < zf(1) / obl < 1, stable + phih = (1.+5.*zeta) + else + phih = 6 ! cap phi when z/L > 1 + endif + + return + end function phih + + function E1(x) implicit none real :: E1 real, intent(in) :: x real :: E1sum!, factorial - integer :: k,t + integer :: k E1sum = 0.0 do k=1,99 - E1sum = E1sum + (-1.0) ** (k + 0.0) * x ** (k + 0.0) / ( (k + 0.0) * factorial(k) ) + !E1sum = E1sum + (-1.0) ** (k + 0.0) * x ** (k + 0.0) / ( (k + 0.0) * factorial(k) ) + E1sum = E1sum + (-1.0 * x) ** k / ( k * factorial(k) ) ! FJ changed this for compilation with cray fortran + end do E1 = -0.57721566490153286060 - log(x) - E1sum @@ -1586,13 +1626,14 @@ end subroutine initlsm !> Calculates surface resistance, temperature and moisture using the Land Surface Model subroutine do_lsm - use modglobal, only : pref0,boltz,cp,rd,rhow,rlv,i1,j1,rdt,ijtot,rk3step,nsv + use modglobal, only : pref0,boltz,cp,rd,rhow,rlv,i1,j1,rdt,ijtot,rk3step,nsv,xtime,rtimee,xday,xlat,xlon use modfields, only : ql0,qt0,thl0,rhof,presf,svm - use modraddata,only : iradiation,useMcICA,swd,swu,lwd,lwu + use modraddata,only : iradiation,useMcICA,swd,swu,lwd,lwu,irad_par,swdir,swdif,zenith use modmpi, only :comm3d,my_real,mpi_sum,mpierr,mpi_integer,myid + use modmicrodata, only : imicro,imicro_bulk real :: f1, f2, f3, f4 ! Correction functions for Jarvis-Stewart - integer :: i, j, k + integer :: i, j, k, itg integer :: patchx, patchy real :: rk3coef,thlsl @@ -1604,14 +1645,24 @@ subroutine do_lsm real :: CO2ags, CO2comp, gm, fmin0, fmin, esatsurf, Ds, D0, cfrac, co2abs, ci !Variables for AGS real :: Ammax, betaw, fstr, Am, Rdark, PAR, alphac, tempy, An, AGSa1, Dstar, gcco2 !Variables for AGS real :: rsAgs, rsCO2, fw, Resp, wco2 !Variables for AGS + real :: Ag, PARdir, PARdif !Variables for 2leaf AGS real :: MW_Air = 28.97 real :: MW_CO2 = 44 + + real :: sinbeta, kdrbl, kdf, kdr, ref, ref_dir + real :: iLAI, fSL + real :: PARdfU, PARdfD, PARdfT, PARdrU, PARdrD, PARdrT, dirPAR, difPAR + real :: HdfT, HdrT, dirH, Hshad, Hsun(nr_gauss), Fshad, Fsun, gshad, gsun + real :: Hleaf(nr_gauss+1), Fleaf(nr_gauss+1), gleaf(nr_gauss+1), Agl(nr_gauss+1) + real :: Fnet(nr_gauss), gnet(nr_gauss) + real :: minsinbeta = 1.e-10 real :: lthls_patch(xpatches,ypatches) integer :: Npatch(xpatches,ypatches), SNpatch(xpatches,ypatches) real :: local_wco2av real :: local_Anav + real :: local_gcco2av real :: local_Respav patchx = 0 @@ -1639,18 +1690,26 @@ subroutine do_lsm wco2av = 0.0 Anav = 0.0 + gcco2av = 0.0 Respav = 0.0 local_wco2av = 0.0 local_Anav = 0.0 + local_gcco2av= 0.0 local_Respav = 0.0 if (lrsAgs) then AnField = 0.0 + gcco2Field = 0.0 RespField = 0.0 wco2Field = 0.0 rsco2Field = 0.0 fstrField = 0.0 ciField = 0.0 + PARField = 0.0 + if (lsplitleaf) then + PARdirField= 0.0 + PARdifField= 0.0 + endif endif rk3coef = rdt / (4. - dble(rk3step)) @@ -1684,10 +1743,10 @@ subroutine do_lsm lwuav = sum(lwuavn(i,j,:)) / nradtime Qnet(i,j) = -(swdav + swuav + lwdav + lwuav) - elseif(iradiation == 2 .or. iradiation == 10) then ! Delta-eddington approach (2) .or. rad_user (10) + elseif(iradiation == irad_par .or. iradiation == 10) then ! Delta-eddington approach (2) .or. rad_user (10) swdav = -swd(i,j,1) Qnet(i,j) = (swd(i,j,1) - swu(i,j,1) + lwd(i,j,1) - lwu(i,j,1)) - else ! simple radiation scheme + else ! simple radiation scheme and RRTMG Qnet(i,j) = -(swd(i,j,1) + swu(i,j,1) + lwd(i,j,1) + lwu(i,j,1)) swdav = swd(i,j,1) end if @@ -1753,13 +1812,20 @@ subroutine do_lsm else !CO2 present in chemistry indCO2 = CO2loc endif !Is CO2 present? - else !Chemistry is not on + else if (imicro==imicro_bulk) then !chemistry off and bulk_microphysics on + if (myid==0) then + print *,'WARNING ::: bulk microphysics and AGS are both ON' + print *,'WARNING ::: Scalar 1 and 2 are considered qr and Nr,respectively for microphysics scheme' + print *,'WARNING ::: Scalar 3 is considered CO2 for A-gs' + endif + indCO2 = 3 + else !Chemistry and bulk_micro are off if (myid == 0) then print *, 'WARNING ::: There is no CO2 defined due to the absence of a chemistry scheme' print *, 'WARNING ::: Scalar 1 is considered to be CO2 ' endif indCO2 = 1 - endif !Is chemistry on? + endif !Is chemistry or bulk_micro on? linags = .true. endif !linags @@ -1814,32 +1880,90 @@ subroutine do_lsm Rdark = (1.0/9) * Am !PAR = 0.40 * max(0.1,-swdav * cveg(i,j)) - PAR = 0.50 * max(0.1,-swdav) !Increase PAR to 50 SW + PAR = 0.50 * max(0.1,abs(swdav)) !Increase PAR to 50 SW + if (lsplitleaf) then + PARdir = 0.50 * max(0.1,abs(swdir(i,j,1))) + PARdif = 0.50 * max(0.1,abs(swdif(i,j,1))) + endif ! Calculate the light use efficiency alphac = alpha0 * (co2abs - CO2comp) / (co2abs + 2 * CO2comp) + if(lsplitleaf) then + sinbeta = max(zenith(xtime*3600 + rtimee,xday,xlat,xlon), minsinbeta) + kdrbl = 0.5 / sinbeta ! Direct radiation extinction coefficient for black leaves + kdf = kdfbl * sqrt(1.0-sigma) + kdr = kdrbl * sqrt(1.0-sigma) + ref = (1.0 - sqrt(1.0-sigma)) / (1.0 + sqrt(1.0-sigma)) ! Reflection coefficient + ref_dir = 2 * ref / (1.0 + 1.6 * sinbeta) + + do itg = 1, nr_gauss ! loop over the different LAI locations + iLAI = LAI(i,j) * LAI_g(itg) ! Integrated LAI between here and canopy top; Gaussian distributed + fSL = exp(-kdrbl * iLAI) ! Fraction of sun-lit leaves + + PARdfD = PARdif * (1.0-ref) * exp(-kdf * iLAI ) ! Total downward PAR due to diffuse radiation at canopy top + PARdrD = PARdir * (1.0-ref_dir) * exp(-kdr * iLAI ) ! Total downward PAR due to direct radiation at canopy top + PARdfU = PARdif * (1.0-ref) * exp(-kdf * LAI(i,j)) * albedo(i,j) * (1.0-ref) * exp(-kdf * (LAI(i,j)-iLAI)) ! Total upward (reflected) PAR that originates as diffuse radiation + PARdrU = PARdir * (1.0-ref_dir) * exp(-kdr * LAI(i,j)) * albedo(i,j) * (1.0-ref) * exp(-kdf * (LAI(i,j)-iLAI)) ! Total upward (reflected) PAR that originates as direct radiation + PARdfT = PARdfD + PARdfU ! Total PAR due to diffuse radiation at canopy top + PARdrT = PARdrD + PARdrU ! Total PAR due to direct radiation at canopy top + + dirPAR = (1.0-sigma) * PARdir * fSL ! Purely direct PAR (can only be downward) + difPAR = PARdfT + PARdrT - dirPAR ! Total diffuse radiation + + HdfT = kdf * PARdfD + kdf * PARdfU + HdrT = kdr * PARdrD + kdf * PARdrU + dirH = kdrbl * dirPAR + Hshad = HdfT + HdrT - dirH + + Hsun = Hshad + angle_g * (1.0-sigma) * kdrbl * PARdir / sum(angle_g * weight_g) + + Hleaf(1) = Hshad + Hleaf(2:(nr_gauss+1)) = Hsun + + Agl = fstr * (Am + Rdark) * (1 - exp(-alphac*Hleaf/(Am + Rdark))) + gleaf = gmin/nuco2q + Agl/(co2abs-ci) + !Fleaf = -(co2abs - ci) / (ra(i,j) + 1.0 / gleaf) + Fleaf = Agl - Rdark + + Fshad = Fleaf(1) + Fsun = sum(weight_g * Fleaf(2:(nr_gauss+1))) + gshad = gleaf(1) + gsun = sum(weight_g * gleaf(2:(nr_gauss+1))) + + Fnet(itg) = Fsun * fSL + Fshad * (1 - fSL) + gnet(itg) = gsun * fSL + gshad * (1 - fSL) + + end do !itg + + An = LAI(i,j) * sum(weight_g * Fnet) + gc_inf = LAI(i,j) * sum(weight_g * gnet) + + else !lsplitleaf + ! Calculate upscaling from leaf to canopy: net flow CO2 into the plant (An) + AGSa1 = 1.0 / (1 - f0) + Dstar = D0 / (AGSa1 * (f0 - fmin)) + tempy = alphac * Kx * PAR / (Am + Rdark) An = (Am + Rdark) * (1 - 1.0 / (Kx * LAI(i,j)) * (E1(tempy * exp(-Kx*LAI(i,j))) - E1(tempy))) + gc_inf = LAI(i,j) * (gmin/nuco2q + AGSa1 * fstr * An / ((co2abs - CO2comp) * (1 + Ds / Dstar))) + + endif !lsplitleaf - ! Calculate upscaling from leaf to canopy: CO2 conductance at canopy level - AGSa1 = 1.0 / (1 - f0) - Dstar = D0 / (AGSa1 * (f0 - fmin)) if (lrelaxgc) then if (gc_old_set) then - gc_inf = LAI(i,j) * (gmin/nuco2q + AGSa1 * fstr * An / ((co2abs - CO2comp) * (1 + Ds / Dstar))) gcco2 = gc_old(i,j) + min(kgc*rk3coef, 1.0) * (gc_inf - gc_old(i,j)) if (rk3step ==3) then gc_old(i,j) = gcco2 endif else - gcco2 = LAI(i,j) * (gmin/nuco2q + AGSa1 * fstr * An / ((co2abs - CO2comp) * (1 + Ds / Dstar))) + gcco2 = gc_inf gc_old(i,j) = gcco2 endif else - gcco2 = LAI(i,j) * (gmin/nuco2q + AGSa1 * fstr * An / ((co2abs - CO2comp) * (1 + Ds / Dstar))) + gcco2 = gc_inf endif ! Calculate surface resistances for moisture and carbon dioxide @@ -1864,14 +1988,22 @@ subroutine do_lsm local_wco2av = local_wco2av + wco2 local_Anav = local_Anav + An + local_gcco2av= local_gcco2av + gcco2 local_Respav = local_Respav + Resp AnField (i,j) = An + gcco2Field(i,j) = gcco2 RespField (i,j) = Resp wco2Field (i,j) = wco2 rsco2Field(i,j) = rsCO2 fstrField (i,j) = fstr ciField (i,j) = ci + PARField (i,j) = PAR + if (lsplitleaf)then + PARdirField(i,j) = PARdir + PARdifField(i,j) = PARdif + endif + endif !lrsAgs ! 2.2 - Calculate soil resistance based on ECMWF method @@ -2047,9 +2179,11 @@ subroutine do_lsm call MPI_ALLREDUCE(local_wco2av, wco2av, 1, MY_REAL, MPI_SUM, comm3d,mpierr) call MPI_ALLREDUCE(local_Anav , Anav , 1, MY_REAL, MPI_SUM, comm3d,mpierr) + call MPI_ALLREDUCE(local_gcco2av , gcco2av , 1, MY_REAL, MPI_SUM, comm3d,mpierr) call MPI_ALLREDUCE(local_Respav, Respav, 1, MY_REAL, MPI_SUM, comm3d,mpierr) Anav = Anav/ijtot + gcco2av= gcco2av/ijtot wco2av = wco2av/ijtot Respav = Respav/ijtot diff --git a/src/modsurfdata.f90 b/src/modsurfdata.f90 index b4545dbb..277eda05 100644 --- a/src/modsurfdata.f90 +++ b/src/modsurfdata.f90 @@ -138,14 +138,19 @@ module modsurfdata logical :: ci_old_set = .false.!< Only apply relaxing function after initial ci is calculated once real :: wco2av = 0.0 real :: Anav = 0.0 + real :: gcco2av = 0.0 real :: Respav = 0.0 real, allocatable :: wco2Field (:,:) real, allocatable :: AnField (:,:) + real, allocatable :: gcco2Field (:,:) real, allocatable :: rsco2Field (:,:) real, allocatable :: RespField (:,:) real, allocatable :: fstrField (:,:) real, allocatable :: tauField (:,:) real, allocatable :: ciField (:,:) + real, allocatable :: PARField (:,:) + real, allocatable :: PARdirField (:,:) + real, allocatable :: PARdifField (:,:) ! \file modtestbed.f90 +!! Testbed continuous forcing & nudging +!> + +!> +!! Testbed continuous forcing & nudging +!> +!! \author Roel Neggers, IGMK +!! \par Revision list +!! \todo Documentation +! This file is part of DALES. +! +! DALES is free software; you can redistribute it and/or modify +! it under the terms of the GNU General Public License as published by +! the Free Software Foundation; either version 3 of the License, or +! (at your option) any later version. +! +! DALES is distributed in the hope that it will be useful, +! but WITHOUT ANY WARRANTY; without even the implied warranty of +! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +! GNU General Public License for more details. +! +! You should have received a copy of the GNU General Public License +! along with this program. If not, see . +! +! Copyright 1993-2009 Delft University of Technology, Wageningen University, Utrecht University, KNMI +! + + + +module modtestbed + +use netcdf + +implicit none +PRIVATE +PUBLIC :: inittestbed, testbednudge, exittestbed, ltestbed,testbed_getinttime, ntnudge, nknudge, & + tb_time,tb_ps,tb_qts,tb_thls,tb_wqs,tb_wts, tb_z0h, tb_z0m, tb_alb, tb_Qnet, & + tb_u,tb_v,tb_w,tb_thl,tb_qt,tb_ug,tb_vg, & + tb_dqtdxls,tb_dqtdyls, & + tb_qtadv,tb_thladv,tb_uadv,tb_vadv, & + tb_tsoilav,tb_phiwav, & + tbrad_p, tbrad_ql, tbrad_qv, tbrad_t, tbrad_o3 +SAVE + real, dimension(:,:), allocatable :: tnudge,tb_u,tb_v,tb_w,tb_thl,tb_qt,tb_ug,tb_vg, & + tb_dqtdxls,tb_dqtdyls, & + tb_qtadv,tb_thladv,tb_uadv,tb_vadv, & + tb_tsoilav,tb_phiwav, & + tbrad_p, tbrad_t, tbrad_qv, tbrad_ql, tbrad_o3 + real, dimension(:) , allocatable :: tb_time, tb_ps, tb_qts, tb_thls, tb_wqs, tb_wts, tb_z0h, tb_z0m, tb_alb, tb_Qnet + real :: tb_taunudge = 10800. + logical :: ltestbed = .false., & + ltb_nudge = .false., & + ltb_u,ltb_v,ltb_w,ltb_thl,ltb_qt + integer :: nknudge,ntnudge + +contains + subroutine inittestbed + + use modmpi, only :myid,my_real,mpierr,comm3d,mpi_logical,mpi_integer + use modglobal,only :ifnamopt,fname_options,k1,& + grav,rd,cp,pref0,rlv,zf + use modsurfdata,only : ksoilmax + use modforces, only : lforce_user + + implicit none + + real, dimension(:,:), allocatable :: dumomega,dumqv,dumql,dumqi,dumt,dumpf, dumo3,& + dumheight,dumqt,dumthl,dumu,dumv,dumw, & + dumug,dumvg,dumqtadv,dumthladv,dumuadv,dumvadv, & + dumqadv,dumladv,dumiadv,dumtadv, & + dumtsoilav,dumphiwav,dumswi,& + dumlwnet,dumswnet + + real, dimension(:), allocatable :: dumheights + + real :: dumphifc,dumphiwp + + INTEGER NCID, STATUS, VARID, timID + INTEGER start2(2), count2(2) + character(len = nf90_max_name) :: RecordDimName + + integer :: ierr,i,k,ik,nknudgep1,nknudges + real tv,rho,iexner,fac + + namelist /NAMTESTBED/ & + ltestbed, ltb_nudge, tb_taunudge + + if(myid==0)then + + open(ifnamopt,file=fname_options,status='old',iostat=ierr) + read (ifnamopt,NAMTESTBED,iostat=ierr) + if (ierr > 0) then + print *, 'Problem in namoptions NAMTESTBED' + print *, 'iostat error: ', ierr + stop 'ERROR: Problem in namoptions NAMTESTBED' + endif + write(6 ,NAMTESTBED) + close(ifnamopt) + + end if + + call MPI_BCAST(ltestbed , 1,MPI_LOGICAL,0,comm3d,mpierr) + call MPI_BCAST(ltb_nudge , 1,MPI_LOGICAL,0,comm3d,mpierr) + + if (.not. ltestbed) return + + lforce_user = .true. + + if(myid==0) then + !--- open nc file --- + STATUS = NF90_OPEN('scm_in.nc', nf90_nowrite, NCID) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + + + !--- get time & height dimensions --- + status = nf90_inq_dimid(ncid, "time", timID) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_inquire_dimension(NCID, timID, len=ntnudge, name=RecordDimName) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + +! write(6,'(a15,i10," ",a10)') 'scm_in time:',ntnudge,RecordDimName + + status = nf90_inq_dimid(ncid, "nlev", timID) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_inquire_dimension(NCID, timID, len=nknudge, name=RecordDimName) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + + status = nf90_inq_dimid(ncid, "nlevp1", timID) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_inquire_dimension(NCID, timID, len=nknudgep1, name=RecordDimName) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + + status = nf90_inq_dimid(ncid, "nlevs", timID) + if (status /= nf90_noerr) call handle_err(status) + status = nf90_inquire_dimension(NCID, timID, len=nknudges, name=RecordDimName) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + end if + + call MPI_BCAST(ntnudge , 1,MPI_INTEGER,0,comm3d,mpierr) + call MPI_BCAST(nknudge , 1,MPI_INTEGER,0,comm3d,mpierr) + call MPI_BCAST(nknudgep1 , 1,MPI_INTEGER,0,comm3d,mpierr) + call MPI_BCAST(nknudges , 1,MPI_INTEGER,0,comm3d,mpierr) + + !--- allocate space for input variables & reset--- + allocate( tnudge (ntnudge,k1), & + tb_u (ntnudge,k1), & + tb_v (ntnudge,k1), & + tb_w (ntnudge,k1), & + tb_thl (ntnudge,k1), & + tb_qt (ntnudge,k1), & + tb_ug (ntnudge,k1), & + tb_vg (ntnudge,k1), & + tb_dqtdxls(ntnudge,k1), & + tb_dqtdyls(ntnudge,k1), & + tb_qtadv (ntnudge,k1), & + tb_thladv (ntnudge,k1), & + tb_uadv (ntnudge,k1), & + tb_vadv (ntnudge,k1), & + tb_time (ntnudge), & + tb_ps (ntnudge), & + tb_qts (ntnudge), & + tb_thls (ntnudge), & + tb_wts (ntnudge), & + tb_wqs (ntnudge), & + tb_z0m (ntnudge), & + tb_z0h (ntnudge), & + tb_alb (ntnudge), & + tb_Qnet (ntnudge), & + tb_tsoilav(ntnudge,ksoilmax), & + tb_phiwav (ntnudge,ksoilmax), & + tbrad_p (ntnudge, nknudge), & + tbrad_t (ntnudge, nknudge), & + tbrad_qv (ntnudge, nknudge), & + tbrad_ql (ntnudge, nknudge), & + tbrad_o3 (ntnudge, nknudge) & + ) + + tnudge = tb_taunudge !nudging timescale + + tb_time=0 + tb_ps=0 + tb_qts=0 + tb_thls=0 + tb_wts=0 + tb_wqs=0 + tb_z0m=0 + tb_z0h=0 + tb_alb=0 + tb_Qnet=0 + + tb_u=0 + tb_v=0 + tb_w=0 + tb_thl=0 + tb_qt=0 + tb_ug=0 + tb_vg=0 + tb_dqtdxls=0 + tb_dqtdyls=0 + tb_qtadv=0 + tb_thladv=0 + tb_uadv=0 + tb_vadv=0 + + tb_tsoilav=0 + tb_phiwav=0 + + + if(myid==0) then + + allocate(dumomega (nknudge,ntnudge), & + dumheight(nknudge,ntnudge), & + dumpf (nknudge,ntnudge), & + dumqv (nknudge,ntnudge), & + dumql (nknudge,ntnudge), & + dumqi (nknudge,ntnudge), & + dumo3 (nknudge,ntnudge), & + dumt (nknudge,ntnudge), & + dumqt (nknudge,ntnudge), & + dumthl (nknudge,ntnudge), & + dumu (nknudge,ntnudge), & + dumv (nknudge,ntnudge), & + dumw (nknudge,ntnudge), & + dumug (nknudge,ntnudge), & + dumvg (nknudge,ntnudge), & + dumqtadv (nknudge,ntnudge), & + dumthladv(nknudge,ntnudge), & + dumuadv (nknudge,ntnudge), & + dumvadv (nknudge,ntnudge), & + dumqadv (nknudge,ntnudge), & + dumladv (nknudge,ntnudge), & + dumiadv (nknudge,ntnudge), & + dumtadv (nknudge,ntnudge), & + dumswnet (nknudgep1,ntnudge), & + dumlwnet (nknudgep1,ntnudge), & + dumheights (nknudges), & + dumtsoilav (nknudges,ntnudge), & + dumphiwav (nknudges,ntnudge), & + dumswi (nknudges,ntnudge) & + ) + + + !--- timeseries --- + + ! time + STATUS = NF90_INQ_VARID(NCID, 'time', VARID) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + STATUS = NF90_GET_VAR (NCID, VARID, tb_time, start=(/1/), count=(/ntnudge/) ) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) +! write(6,'(a30,5f10.2)') 'inittestbed: tb_time:',& +! tb_time(1),tb_time(2),tb_time(3),tb_time(ntnudge-1),tb_time(ntnudge) + + ! surface pressure + STATUS = NF90_INQ_VARID(NCID, 'ps', VARID) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + STATUS = NF90_GET_VAR (NCID, VARID, tb_ps, start=(/1/), count=(/ntnudge/) ) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + + ! surface temperature + STATUS = NF90_INQ_VARID(NCID, 't_skin', VARID) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + STATUS = NF90_GET_VAR (NCID, VARID, tb_thls, start=(/1/), count=(/ntnudge/) ) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + + ! surface humidity +! STATUS = NF90_INQ_VARID(NCID, '', VARID) +! if (STATUS .ne. nf90_noerr) call handle_err(STATUS) +! STATUS = NF90_GET_VAR (NCID, VARID, tb_qts, start=(/1/), count=(/ntnudge/) ) +! if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + + ! surface T flux + STATUS = NF90_INQ_VARID(NCID, 'sfc_sens_flx', VARID) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + STATUS = NF90_GET_VAR (NCID, VARID, tb_wts, start=(/1/), count=(/ntnudge/) ) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + + ! surface q flux + STATUS = NF90_INQ_VARID(NCID, 'sfc_lat_flx', VARID) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + STATUS = NF90_GET_VAR (NCID, VARID, tb_wqs, start=(/1/), count=(/ntnudge/) ) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + + do i=1,ntnudge + + rho = tb_ps(i) / (rd * tb_thls(i)) + tb_wts(i) = -tb_wts(i) / (cp * rho) !Change sign: upward = positive in LES, but by convention upward = negative in most GCMs. + tb_wqs(i) = -tb_wqs(i) / (rlv * rho) + + iexner = (tb_ps(i)/pref0)**(-rd/cp) + tb_thls(i) = iexner * tb_thls(i) + + end do + + ! roughness length for momentum + STATUS = NF90_INQ_VARID(NCID, 'mom_rough', VARID) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + STATUS = NF90_GET_VAR (NCID, VARID, tb_z0m, start=(/1/), count=(/ntnudge/) ) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + + ! roughness length for heat and moisture + STATUS = NF90_INQ_VARID(NCID, 'heat_rough', VARID) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + STATUS = NF90_GET_VAR (NCID, VARID, tb_z0h, start=(/1/), count=(/ntnudge/) ) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + + ! surface albedo, for radiation + STATUS = NF90_INQ_VARID(NCID, 'albedo', VARID) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + STATUS = NF90_GET_VAR (NCID, VARID, tb_alb, start=(/1/), count=(/ntnudge/) ) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + + + + !--- profiles full levels --- + start2 = (/ 1 , 1 /) + count2 = (/ nknudge, ntnudge /) + + ! height + STATUS = NF90_INQ_VARID(NCID, 'height_f', VARID) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + STATUS = NF90_GET_VAR (NCID, VARID, dumheight, start=start2, count=count2) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) +! write(6,'(a30,91f10.2)') 'inittestbed: heightnudge:',& +! & ( dumheight(k,1),k=1,nknudge ) + + ! u + STATUS = NF90_INQ_VARID(NCID, 'u', VARID) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + STATUS = NF90_GET_VAR (NCID, VARID, dumu, start=start2, count=count2) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + + ! v + STATUS = NF90_INQ_VARID(NCID, 'v', VARID) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + STATUS = NF90_GET_VAR (NCID, VARID, dumv, start=start2, count=count2) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + + ! qt + STATUS = NF90_INQ_VARID(NCID, 'q', VARID) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + STATUS = NF90_GET_VAR (NCID, VARID, dumqv, start=start2, count=count2) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + + STATUS = NF90_INQ_VARID(NCID, 'ql', VARID) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + STATUS = NF90_GET_VAR (NCID, VARID, dumql, start=start2, count=count2) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + + STATUS = NF90_INQ_VARID(NCID, 'qi', VARID) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + STATUS = NF90_GET_VAR (NCID, VARID, dumqi, start=start2, count=count2) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + + do i=1,ntnudge + do k=1,nknudge + dumqt(k,i) = dumqv(k,i) + dumql(k,i) + dumqi(k,i) + enddo + enddo + + ! thl + STATUS = NF90_INQ_VARID(NCID, 't', VARID) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + STATUS = NF90_GET_VAR (NCID, VARID, dumt, start=start2, count=count2) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + + STATUS = NF90_INQ_VARID(NCID, 'pressure_f', VARID) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + STATUS = NF90_GET_VAR (NCID, VARID, dumpf, start=start2, count=count2) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + + do i=1,ntnudge + do k=1,nknudge + iexner = (dumpf(k,i)/pref0)**(-rd/cp) + dumthl(k,i) = dumt(k,i) * iexner - (rlv * dumql(k,i)) / cp + enddo + enddo + + ! Ozone + STATUS = NF90_INQ_VARID(NCID, 'o3', VARID) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + STATUS = NF90_GET_VAR (NCID, VARID, dumo3, start=start2, count=count2) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + + ! w + STATUS = NF90_INQ_VARID(NCID, 'omega', VARID) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + STATUS = NF90_GET_VAR (NCID, VARID, dumomega, start=start2, count=count2) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + + do i=1,ntnudge + do k=1,nknudge + tv = dumt(k,i) * (1.+0.61*dumqv(k,i)) + rho = dumpf(k,i) / (rd*tv) + dumw(k,i) = - dumomega(k,i) / ( rho * grav ) !convert from Pa/s to m/s + enddo + enddo + + ! ug + STATUS = NF90_INQ_VARID(NCID, 'ug', VARID) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + STATUS = NF90_GET_VAR (NCID, VARID, dumug, start=start2, count=count2) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + + ! vg + STATUS = NF90_INQ_VARID(NCID, 'vg', VARID) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + STATUS = NF90_GET_VAR (NCID, VARID, dumvg, start=start2, count=count2) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + + ! uadv + STATUS = NF90_INQ_VARID(NCID, 'uadv', VARID) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + STATUS = NF90_GET_VAR (NCID, VARID, dumuadv, start=start2, count=count2) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + + ! vadv + STATUS = NF90_INQ_VARID(NCID, 'vadv', VARID) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + STATUS = NF90_GET_VAR (NCID, VARID, dumvadv, start=start2, count=count2) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + + ! qtadv + STATUS = NF90_INQ_VARID(NCID, 'qadv', VARID) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + STATUS = NF90_GET_VAR (NCID, VARID, dumqadv, start=start2, count=count2) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + + STATUS = NF90_INQ_VARID(NCID, 'ladv', VARID) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + STATUS = NF90_GET_VAR (NCID, VARID, dumladv, start=start2, count=count2) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + + STATUS = NF90_INQ_VARID(NCID, 'iadv', VARID) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + STATUS = NF90_GET_VAR (NCID, VARID, dumiadv, start=start2, count=count2) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + + do i=1,ntnudge + do k=1,nknudge + dumqtadv(k,i) = dumqadv(k,i) + dumladv(k,i) + dumiadv(k,i) + enddo + enddo + + ! thladv + STATUS = NF90_INQ_VARID(NCID, 'tadv', VARID) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + STATUS = NF90_GET_VAR (NCID, VARID, dumtadv, start=start2, count=count2) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + + do i=1,ntnudge + do k=1,nknudge + iexner = (dumpf(k,i)/pref0)**(-rd/cp) + dumthladv(k,i) = dumtadv(k,i) * iexner + enddo + enddo + + + + !--- profiles half levels --- + start2 = (/ 1 , 1 /) + count2 = (/ nknudgep1, ntnudge /) + + ! net SW downward flux + STATUS = NF90_INQ_VARID(NCID, 'fradSWnet', VARID) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + STATUS = NF90_GET_VAR (NCID, VARID, dumswnet, start=start2, count=count2) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + + ! net LW downward flux + STATUS = NF90_INQ_VARID(NCID, 'fradLWnet', VARID) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + STATUS = NF90_GET_VAR (NCID, VARID, dumlwnet, start=start2, count=count2) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + + do i=1,ntnudge + tb_Qnet(i) = dumswnet(nknudgep1,i) + dumlwnet(nknudgep1,i) !flux at surface is stored in lowest half level of profile +! write(6,*) "modtestbed: qnet:",i,tb_Qnet(i),nknudge,nknudgep1 + enddo + + + !--- soil profiles --- + + STATUS = NF90_INQ_VARID(NCID, 'h_soil', VARID) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + STATUS = NF90_GET_VAR (NCID, VARID, dumheights, start=(/1/), count=(/nknudges/) ) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + + start2 = (/ 1 , 1 /) + count2 = (/ nknudges, ntnudge /) + + ! tsoilav + STATUS = NF90_INQ_VARID(NCID, 't_soil', VARID) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + STATUS = NF90_GET_VAR (NCID, VARID, dumtsoilav, start=start2, count=count2) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + + ! phiwav + STATUS = NF90_INQ_VARID(NCID, 'q_soil', VARID) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + STATUS = NF90_GET_VAR (NCID, VARID, dumphiwav, start=start2, count=count2) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + + ! field capacity + status = nf90_inquire_attribute(ncid, nf90_global, "field_capacity") + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_att(ncid, nf90_global, "field_capacity", dumphifc) + if (status /= nf90_noerr) call handle_err(status) + + ! wilting point + status = nf90_inquire_attribute(ncid, nf90_global, "wilting_point") + if (status /= nf90_noerr) call handle_err(status) + status = nf90_get_att(ncid, nf90_global, "wilting_point", dumphiwp) + if (status /= nf90_noerr) call handle_err(status) + + dumswi = ( dumphiwav - dumphiwp ) / ( dumphifc - dumphiwp ) !soil wetness index, using input values for wilting point and field capacity + + + + !--- close nc file --- + STATUS = NF90_CLOSE(NCID) + if (STATUS .ne. nf90_noerr) call handle_err(STATUS) + + + + do i=1,ntnudge + + + !--- interpolate towards LES levels, reverse height-order, switch dimensions --- + ik = nknudge + do k=1,k1 + + do while( zf(k).gt.dumheight(ik,i) .and. ik.gt.1) + ik=ik-1 + enddo + if ( ik.lt.nknudge ) then + ik=ik+1 + endif + + fac = ( zf(k)-dumheight(ik,i) ) / ( dumheight(ik-1,i)-dumheight(ik,i) ) + + tb_thl (i,k) = dumthl (ik,i) + fac * ( dumthl (ik-1,i) - dumthl (ik,i) ) + tb_qt (i,k) = dumqt (ik,i) + fac * ( dumqt (ik-1,i) - dumqt (ik,i) ) + tb_u (i,k) = dumu (ik,i) + fac * ( dumu (ik-1,i) - dumu (ik,i) ) + tb_v (i,k) = dumv (ik,i) + fac * ( dumv (ik-1,i) - dumv (ik,i) ) + tb_w (i,k) = dumw (ik,i) + fac * ( dumw (ik-1,i) - dumw (ik,i) ) + tb_ug (i,k) = dumug (ik,i) + fac * ( dumug (ik-1,i) - dumug (ik,i) ) + tb_vg (i,k) = dumvg (ik,i) + fac * ( dumvg (ik-1,i) - dumvg (ik,i) ) + tb_uadv (i,k) = dumuadv (ik,i) + fac * ( dumuadv (ik-1,i) - dumuadv (ik,i) ) + tb_vadv (i,k) = dumvadv (ik,i) + fac * ( dumvadv (ik-1,i) - dumvadv (ik,i) ) + tb_qtadv (i,k) = dumqtadv (ik,i) + fac * ( dumqtadv (ik-1,i) - dumqtadv (ik,i) ) + tb_thladv (i,k) = dumthladv (ik,i) + fac * ( dumthladv (ik-1,i) - dumthladv (ik,i) ) + + !if (i.eq.1) write(6,*) k, zf(k), " : ", ik, dumheight(ik,i), ik-1, dumheight(ik-1,i) + + enddo + + + !--- soil & surface properties --- + tb_qts(i) = tb_qt(i,1) !qts seems not really used anymore (see subr. timedepsurf in modtimedep.f90) + +! if (i.eq.1) then +! do k=1,nknudges +! write(6,*) "modtestbed: soil: ", k, dumheights(k), dumtsoilav(k,i), dumphiwav(k,i) +! end do +! end if + + !dzsoil + + !tb_tsoilav(i,:) = dumtsoilav(:,i) + + !tb_phiwav (i,:) = phiwp + dumswi(:,i) * (phifc - phiwp ) !scale soil moisture using field capacity and wilting point + do k = 1, nknudge + tbrad_p(i,k) = dumpf(k,i) + tbrad_t(i,k) = dumt(k,i) + tbrad_qv(i,k) = dumqv(k,i) + tbrad_ql(i,k) = dumql(k,i) + dumqi(k,i) + tbrad_o3(i,k) = dumo3(k,i) + end do + + enddo + + + !--- clean-up --- + deallocate(dumomega) + deallocate(dumqv) + deallocate(dumql) + deallocate(dumqi) + deallocate(dumt) + deallocate(dumpf) + deallocate(dumo3) + + deallocate(dumheight) + deallocate(dumqt) + deallocate(dumthl) + deallocate(dumu) + deallocate(dumv) + deallocate(dumw) + deallocate(dumug) + deallocate(dumvg) + + deallocate(dumuadv) + deallocate(dumvadv) + deallocate(dumqtadv) + deallocate(dumthladv) + deallocate(dumqadv) + deallocate(dumladv) + deallocate(dumiadv) + deallocate(dumtadv) + deallocate(dumswnet) + deallocate(dumlwnet) + + deallocate(dumheights) + deallocate(dumtsoilav) + deallocate(dumphiwav) + deallocate(dumswi) + + + !--- do some output to screen --- +! do i=1,2 +! !do i=1,ntnudge +! +! write(6,'(a20,f10.2,a15,3f10.2)') 'modtestbed: scm_in time:',tb_time(i),' sfc pressure:',tb_ps(i),tb_thls(i),tb_qts(i) +! +! write(6,*) ' zf tnudge tb_u tb_v tb_w tb_thl tb_qt tb_ug tb_vg' +! do k=kmax,1,-1 +! write (6,'(f7.1,8e12.4)') & +! zf (k), & +! tnudge (i,k), & +! tb_u (i,k), & +! tb_v (i,k), & +! tb_w (i,k), & +! tb_thl (i,k), & +! tb_qt (i,k), & +! tb_ug (i,k), & +! tb_vg (i,k) +! end do +! +! end do + + end if + + call MPI_BCAST(ntnudge , 1,MPI_INTEGER,0,comm3d,mpierr) + + call MPI_BCAST(tb_time ,ntnudge ,MY_REAL ,0,comm3d,mpierr) + call MPI_BCAST(tb_ps ,ntnudge ,MY_REAL ,0,comm3d,mpierr) + call MPI_BCAST(tb_qts ,ntnudge ,MY_REAL ,0,comm3d,mpierr) + call MPI_BCAST(tb_thls ,ntnudge ,MY_REAL ,0,comm3d,mpierr) + call MPI_BCAST(tb_wts ,ntnudge ,MY_REAL ,0,comm3d,mpierr) + call MPI_BCAST(tb_wqs ,ntnudge ,MY_REAL ,0,comm3d,mpierr) + call MPI_BCAST(tb_z0h ,ntnudge ,MY_REAL ,0,comm3d,mpierr) + call MPI_BCAST(tb_z0m ,ntnudge ,MY_REAL ,0,comm3d,mpierr) + call MPI_BCAST(tb_Qnet ,ntnudge ,MY_REAL ,0,comm3d,mpierr) + + call MPI_BCAST(tnudge ,ntnudge*k1,MY_REAL ,0,comm3d,mpierr) + call MPI_BCAST(tb_u ,ntnudge*k1,MY_REAL ,0,comm3d,mpierr) + call MPI_BCAST(tb_v ,ntnudge*k1,MY_REAL ,0,comm3d,mpierr) + call MPI_BCAST(tb_w ,ntnudge*k1,MY_REAL ,0,comm3d,mpierr) + call MPI_BCAST(tb_thl ,ntnudge*k1,MY_REAL ,0,comm3d,mpierr) + call MPI_BCAST(tb_qt ,ntnudge*k1,MY_REAL ,0,comm3d,mpierr) + call MPI_BCAST(tb_ug ,ntnudge*k1,MY_REAL ,0,comm3d,mpierr) + call MPI_BCAST(tb_vg ,ntnudge*k1,MY_REAL ,0,comm3d,mpierr) + call MPI_BCAST(tb_uadv ,ntnudge*k1,MY_REAL ,0,comm3d,mpierr) + call MPI_BCAST(tb_vadv ,ntnudge*k1,MY_REAL ,0,comm3d,mpierr) + call MPI_BCAST(tb_qtadv ,ntnudge*k1,MY_REAL ,0,comm3d,mpierr) + call MPI_BCAST(tb_thladv ,ntnudge*k1,MY_REAL ,0,comm3d,mpierr) + call MPI_BCAST(tb_uadv ,ntnudge*k1,MY_REAL ,0,comm3d,mpierr) + call MPI_BCAST(tb_vadv ,ntnudge*k1,MY_REAL ,0,comm3d,mpierr) + call MPI_BCAST(tb_dqtdxls ,ntnudge*k1,MY_REAL ,0,comm3d,mpierr) + call MPI_BCAST(tb_dqtdyls ,ntnudge*k1,MY_REAL ,0,comm3d,mpierr) + + call MPI_BCAST(tb_tsoilav ,ntnudge*ksoilmax,MY_REAL ,0,comm3d,mpierr) + call MPI_BCAST(tb_phiwav ,ntnudge*ksoilmax,MY_REAL ,0,comm3d,mpierr) + + call MPI_BCAST(tbrad_p ,ntnudge*nknudge,MY_REAL ,0,comm3d,mpierr) + call MPI_BCAST(tbrad_qv ,ntnudge*nknudge,MY_REAL ,0,comm3d,mpierr) + call MPI_BCAST(tbrad_ql ,ntnudge*nknudge,MY_REAL ,0,comm3d,mpierr) + call MPI_BCAST(tbrad_t ,ntnudge*nknudge,MY_REAL ,0,comm3d,mpierr) + call MPI_BCAST(tbrad_o3 ,ntnudge*nknudge,MY_REAL ,0,comm3d,mpierr) + + ltb_u = any(abs(tb_u)>1e-8) + ltb_v = any(abs(tb_v)>1e-8) + ltb_w = any(abs(tb_w)>1e-8) + ltb_thl = any(abs(tb_thl)>1e-8) + ltb_qt = any(abs(tb_qt)>1e-8) + + + end subroutine inittestbed + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + subroutine testbednudge + use modglobal, only : timee,rtimee,i1,j1,kmax,rdt + use modfields, only : up,vp,wp,thlp, qtp,u0av,v0av,qt0av,thl0av + implicit none + + integer k,t + real :: dtm,dtp,currtnudge, qttnudge,qtthres + + if (.not.(ltestbed .and. ltb_nudge)) return + + if (timee==0) return + + t=1 + do while(rtimee>tb_time(t)) + t=t+1 + end do + if (rtimee>tb_time(1)) then + t=t-1 + end if + + dtm = ( rtimee-tb_time(t) ) / ( tb_time(t+1)-tb_time(t) ) + dtp = ( tb_time(t+1)-rtimee)/ ( tb_time(t+1)-tb_time(t) ) + + qtthres = 1e-6 + do k=1,kmax + + currtnudge = max(rdt,tnudge(t,k)*dtp+tnudge(t+1,k)*dtm) + + if (ltb_u) up(2:i1,2:j1,k) = up(2:i1,2:j1,k) - & + ( u0av(k) - (tb_u(t,k) *dtp + tb_u(t+1,k) *dtm) ) / currtnudge + + if (ltb_v) vp(2:i1,2:j1,k) = vp(2:i1,2:j1,k) - & + ( v0av(k) - (tb_v(t,k) *dtp + tb_v(t+1,k) *dtm) ) / currtnudge + + if (ltb_w) wp(2:i1,2:j1,k) = wp(2:i1,2:j1,k) - & + ( - (tb_w(t,k) *dtp + tb_w(t+1,k) *dtm) ) / currtnudge + + if (ltb_thl) thlp(2:i1,2:j1,k) = thlp(2:i1,2:j1,k) - & + ( thl0av(k) - (tb_thl(t,k)*dtp + tb_thl(t+1,k)*dtm) ) / currtnudge + + if (ltb_qt) then + if (qt0av(k)< qtthres) then + qttnudge = rdt + else + qttnudge = currtnudge + end if + qtp(2:i1,2:j1,k) = qtp(2:i1,2:j1,k) - & + ( qt0av(k) - (tb_qt(t,k) *dtp + tb_qt(t+1,k) *dtm) ) / qttnudge + end if + end do + + !write(6,*) 'testbednudge:', rtimee, t, tb_time(t), tb_time(t+1), currtnudge, dtm, dtp, qt0av (1),tb_qt (t,1),tb_qt (t+1,1) + !write(6,*) 'testbednudge:', rtimee, t, tb_time(t), tb_time(t+1), currtnudge, dtm, dtp, qt0av (kmax),tb_qt (t,kmax),tb_qt (t+1,kmax) + + !write(6,*) 'testbednudge:', rtimee, t, tb_time(t), tb_time(t+1), currtnudge, dtm, dtp, thl0av(1),tb_thl(t,1),tb_thl(t+1,1) + !write(6,*) 'testbednudge:', rtimee, t, tb_time(t), tb_time(t+1), currtnudge, dtm, dtp, thl0av(kmax),tb_thl(t,kmax),tb_thl(t+1,kmax) + + end subroutine testbednudge +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + subroutine testbed_getinttime(t, dtm, dtp) + use modglobal, only : rtimee +! use modfields, only : up,vp,wp,thlp, qtp,u0av,v0av,qt0av,thl0av +! use modmpi, only : myid + implicit none + integer, intent(out) :: t + real, intent(out) :: dtm, dtp + + + t=1 + do while(rtimee>tb_time(t)) + t=t+1 + end do + if (rtimee>tb_time(1)) then + t=t-1 + end if + + dtm = ( rtimee-tb_time(t) ) / ( tb_time(t+1)-tb_time(t) ) + dtp = ( tb_time(t+1)-rtimee)/ ( tb_time(t+1)-tb_time(t) ) + + + end subroutine testbed_getinttime + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + subroutine exittestbed + if (allocated(tb_time)) then + deallocate(tb_time) + end if + end subroutine exittestbed + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + subroutine handle_err(errcode) + + implicit none + + integer errcode + + write(6,*) 'Error: ', nf90_strerror(errcode) + stop 2 + + end subroutine handle_err + + +end module modtestbed diff --git a/src/modtimedep.f90 b/src/modtimedep.f90 index 0e6656c4..de589695 100644 --- a/src/modtimedep.f90 +++ b/src/modtimedep.f90 @@ -1,8 +1,8 @@ -!> \file modtimedepsv.f90 -!! Prescribes surface values, fluxes and LS forcings at certain times for scalars +!> \file modtimedep.f90 +!! Prescribes surface values, fluxes and LS forcings at certain times !> -!! Prescribes surface values, fluxes and LS forcings at certain times for scalars +!! Prescribes surface values, fluxes and LS forcings at certain times !> !! \author Roel Neggers, KNMI !! \author Thijs Heus,MPI-M @@ -42,14 +42,16 @@ module modtimedep logical :: ltimedepz = .true. !< Switch for large scale forcings logical :: ltimedepsurf = .true. !< Switch for surface fluxes - integer, parameter :: kflux = 100 - integer, parameter :: kls = 100 + integer :: kflux + integer :: kls + real, allocatable :: timeflux (:) real, allocatable :: wqsurft (:) real, allocatable :: wtsurft (:) real, allocatable :: thlst (:) real, allocatable :: qtst (:) real, allocatable :: pst (:) + real, allocatable :: Qnetavt (:) real, allocatable :: timels (:) real, allocatable :: ugt (:,:) @@ -58,7 +60,10 @@ module modtimedep real, allocatable :: dqtdxlst(:,:) real, allocatable :: dqtdylst(:,:) real, allocatable :: dqtdtlst(:,:) + real, allocatable :: dthldtlst(:,:) real, allocatable :: thlpcart(:,:) + real, allocatable :: dudtlst (:,:) + real, allocatable :: dvdtlst (:,:) real, allocatable :: thlproft(:,:) real, allocatable :: qtproft (:,:) @@ -68,9 +73,15 @@ module modtimedep !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! subroutine inittimedep use modmpi, only :myid,my_real,mpi_logical,mpierr,comm3d - use modglobal, only :btime,cexpnr,k1,kmax,ifinput,runtime,tres - use modsurfdata,only :ps,qts,wqsurf,wtsurf,thls + use modglobal, only :cexpnr,k1,kmax,ifinput,runtime,zf + use modsurfdata,only :ps,qts,wqsurf,wtsurf,thls, Qnetav use modtimedepsv, only : inittimedepsv + + use modtestbed, only : ltestbed,ntnudge,& + tb_time,tb_ps,tb_qts,tb_thls,tb_wqs,tb_wts,& + tb_w,tb_ug,tb_vg,& + tb_uadv,tb_vadv,tb_qtadv,tb_thladv,tb_Qnet + implicit none character (80):: chmess @@ -80,122 +91,191 @@ subroutine inittimedep real, allocatable, dimension (:) :: height if (.not. ltimedep) return - allocate(height(k1)) + if (ltestbed) then + kflux = ntnudge + kls = ntnudge + else + kflux = 100 + kls = 100 + end if + + allocate(height (k1)) + allocate(timeflux (0:kflux)) allocate(wqsurft (kflux)) allocate(wtsurft (kflux)) - allocate(timels (0:kls)) - allocate(ugt (k1,kls)) - allocate(vgt (k1,kls)) - allocate(wflst (k1,kls)) - allocate(dqtdxlst(k1,kls)) - allocate(dqtdylst(k1,kls)) - allocate(dqtdtlst(k1,kls)) - allocate(thlpcart(k1,kls)) - allocate(thlproft(k1,kls)) - allocate(qtproft(k1,kls)) - allocate(thlst (0:kls)) - allocate(qtst (0:kls)) - allocate(pst (0:kls)) + allocate(thlst (kflux)) + allocate(qtst (kflux)) + allocate(pst (kflux)) + allocate(Qnetavt (kflux)) + + allocate(timels (0:kls)) + allocate(ugt (k1,kls)) + allocate(vgt (k1,kls)) + allocate(wflst (k1,kls)) + + allocate(dqtdxlst (k1,kls)) + allocate(dqtdylst (k1,kls)) + + allocate(dqtdtlst (k1,kls)) + allocate(dthldtlst(k1,kls)) + allocate(dudtlst (k1,kls)) + allocate(dvdtlst (k1,kls)) + + allocate(thlpcart (k1,kls)) + + allocate(thlproft (k1,kls)) + allocate(qtproft (k1,kls)) timeflux = 0 + timels = 0 + wqsurft = wqsurf wtsurft = wtsurf thlst = thls qtst = qts pst = ps + Qnetavt = Qnetav - timels = 0 ugt = 0 vgt = 0 wflst = 0 + dqtdxlst = 0 dqtdylst = 0 + dqtdtlst = 0 + dthldtlst= 0 + dudtlst = 0 + dvdtlst = 0 + thlpcart = 0 + thlproft = 0 qtproft = 0 if (myid==0) then -! --- load lsforcings--- - - - open(ifinput,file='ls_flux.inp.'//cexpnr) - read(ifinput,'(a80)') chmess - write(6,*) chmess - read(ifinput,'(a80)') chmess - write(6,*) chmess - read(ifinput,'(a80)') chmess - write(6,*) chmess + !--- load lsforcings--- timeflux = 0 timels = 0 + if (ltestbed) then + + write(*,*) 'inittimedep: testbed mode: data for time-dependent forcing obtained from scm_in.nc' + + timeflux(1:kflux) = tb_time + timels (1:kls ) = tb_time + + pst = tb_ps + qtst = tb_qts + thlst = tb_thls + wqsurft = tb_wqs + wtsurft = tb_wts + Qnetavt = tb_Qnet + + height (:) = zf + do t=1,kls + ugt (:,t) = tb_ug (t,:) + vgt (:,t) = tb_vg (t,:) + wflst (:,t) = tb_w (t,:) + dqtdxlst (:,t) = 0. + dqtdylst (:,t) = 0. + dqtdtlst (:,t) = tb_qtadv (t,:) + dthldtlst(:,t) = tb_thladv(t,:) + dudtlst (:,t) = tb_uadv (t,:) + dvdtlst (:,t) = tb_vadv (t,:) + end do -! --- load fluxes--- - - t = 0 - ierr = 0 - do while (timeflux(t) < (tres*real(btime)+runtime)) - t=t+1 - read(ifinput,*, iostat = ierr) timeflux(t), wtsurft(t), wqsurft(t),thlst(t),qtst(t),pst(t) - write(*,'(i8,6e12.4)') t,timeflux(t), wtsurft(t), wqsurft(t),thlst(t),qtst(t),pst(t) - if (ierr < 0) then + else + + open(ifinput,file='ls_flux.inp.'//cexpnr) + read(ifinput,'(a80)') chmess + write(6,*) chmess + read(ifinput,'(a80)') chmess + write(6,*) chmess + read(ifinput,'(a80)') chmess + write(6,*) chmess + + timeflux = 0 + timels = 0 + + + !--- load fluxes--- + t = 0 + ierr = 0 + do while (timeflux(t) < runtime) + t=t+1 + read(ifinput,*, iostat = ierr) timeflux(t), wtsurft(t), wqsurft(t),thlst(t),qtst(t),pst(t) + write(*,'(i8,6e12.4)') t,timeflux(t), wtsurft(t), wqsurft(t),thlst(t),qtst(t),pst(t) + if (ierr < 0) then stop 'STOP: No time dependend data for end of run (surface fluxes)' - end if - end do - if(timeflux(1)>(tres*real(btime)+runtime)) then + end if + end do + if(timeflux(1)>runtime) then write(6,*) 'Time dependent surface variables do not change before end of' write(6,*) 'simulation. --> only large scale forcings' ltimedepsurf=.false. - endif -! flush to the end of fluxlist - do while (ierr ==0) - read (ifinput,*,iostat=ierr) dummyr - end do - backspace (ifinput) -! ---load large scale forcings---- - - t = 0 - - do while (timels(t) < (tres*real(btime)+runtime)) - t = t + 1 - chmess1 = "#" - ierr = 1 ! not zero - !search for the next line consisting of "# time", from there onwards the profiles will be read - do while (.not.(chmess1 == "#" .and. ierr ==0)) - read(ifinput,*,iostat=ierr) chmess1,timels(t) - if (ierr < 0) then - stop 'STOP: No time dependend data for end of run' - end if - end do - write (*,*) 'timels = ',timels(t) - do k=1,kmax - read (ifinput,*) & - height (k) , & - ugt (k,t), & - vgt (k,t), & - wflst (k,t), & - dqtdxlst(k,t), & - dqtdylst(k,t), & - dqtdtlst(k,t), & - thlpcart(k,t) + endif + ! flush to the end of fluxlist + do while (ierr ==0) + read (ifinput,*,iostat=ierr) dummyr end do - do k=kmax,1,-1 - write (6,'(3f7.1,5e12.4)') & - height (k) , & - ugt (k,t), & - vgt (k,t), & - wflst (k,t), & - dqtdxlst(k,t), & - dqtdylst(k,t), & - dqtdtlst(k,t), & - thlpcart(k,t) + backspace (ifinput) + + + !---load large scale forcings---- + t = 0 + do while (timels(t) < runtime) + t = t + 1 + chmess1 = "#" + ierr = 1 ! not zero + do while (.not.(chmess1 == "#" .and. ierr ==0)) !search for the next line consisting of "# time", from there onwards the profiles will be read + read(ifinput,*,iostat=ierr) chmess1,timels(t) + if (ierr < 0) then + stop 'STOP: No time dependend data for end of run' + end if + end do + write (*,*) 'timels = ',timels(t) + do k=1,kmax + read (ifinput,*) & + height (k) , & + ugt (k,t), & + vgt (k,t), & + wflst (k,t), & + dqtdxlst(k,t), & + dqtdylst(k,t), & + dqtdtlst(k,t), & + thlpcart(k,t) + end do end do - end do - if ((timels(1) > (tres*real(btime)+runtime)) .or. (timeflux(1) > (tres*real(btime)+runtime))) then + close(ifinput) + + end if !ltestbed + + +! do k=kmax,1,-1 +! write (6,'(3f7.1,5e12.4)') & +! height (k) , & +! ugt (k,t), & +! vgt (k,t), & +! wflst (k,t), & +! dqtdxlst(k,t), & +! dqtdylst(k,t), & +! dqtdtlst(k,t), & +! thlpcart(k,t) +! end do + + + if(timeflux(1)>runtime) then + write(6,*) 'Time dependent surface variables do not change before end of' + write(6,*) 'simulation. --> only large scale forcings' + ltimedepsurf=.false. + endif + + if ((timels(1) > runtime) .or. (timeflux(1) > runtime)) then write(6,*) 'Time dependent large scale forcings sets in after end of simulation -->' write(6,*) '--> only time dependent surface variables' ltimedepz=.false. @@ -211,6 +291,7 @@ subroutine inittimedep call MPI_BCAST(thlst ,kflux,MY_REAL,0,comm3d,mpierr) call MPI_BCAST(qtst ,kflux,MY_REAL,0,comm3d,mpierr) call MPI_BCAST(pst ,kflux,MY_REAL,0,comm3d,mpierr) + call MPI_BCAST(Qnetavt ,kflux,MY_REAL,0,comm3d,mpierr) call MPI_BCAST(timels(1:kls) ,kls,MY_REAL ,0,comm3d,mpierr) call MPI_BCAST(ugt ,kmax*kls,MY_REAL,0,comm3d,mpierr) call MPI_BCAST(vgt ,kmax*kls,MY_REAL,0,comm3d,mpierr) @@ -218,12 +299,16 @@ subroutine inittimedep call MPI_BCAST(dqtdxlst,kmax*kls,MY_REAL,0,comm3d,mpierr) call MPI_BCAST(dqtdylst,kmax*kls,MY_REAL,0,comm3d,mpierr) call MPI_BCAST(dqtdtlst,kmax*kls,MY_REAL,0,comm3d,mpierr) + call MPI_BCAST(dthldtlst,kmax*kls,MY_REAL,0,comm3d,mpierr) + call MPI_BCAST(dudtlst,kmax*kls,MY_REAL,0,comm3d,mpierr) + call MPI_BCAST(dvdtlst,kmax*kls,MY_REAL,0,comm3d,mpierr) call MPI_BCAST(thlpcart,kmax*kls,MY_REAL,0,comm3d,mpierr) call MPI_BCAST(thlproft,kmax*kls,MY_REAL,0,comm3d,mpierr) call MPI_BCAST(qtproft ,kmax*kls,MY_REAL,0,comm3d,mpierr) call MPI_BCAST(ltimedepsurf ,1,MPI_LOGICAL,0,comm3d,mpierr) call MPI_BCAST(ltimedepz ,1,MPI_LOGICAL,0,comm3d,mpierr) + call inittimedepsv call timedep @@ -264,10 +349,17 @@ subroutine timedep end subroutine timedep subroutine timedepz - use modfields, only : ug, vg, dqtdtls,dqtdxls,dqtdyls, wfls,whls, & - thlpcar,dthldxls,dthldyls,dudxls,dudyls,dvdxls,dvdyls,dpdxl,dpdyl + use modfields, only : ug, vg, wfls,whls, & + dqtdtls,dqtdxls,dqtdyls, & + dthldtls,dthldxls,dthldyls,thlpcar, & + dudtls,dudxls,dudyls, & + dvdtls,dvdxls,dvdyls, & + dpdxl,dpdyl + use modglobal, only : rtimee,om23_gs,dzf,dzh,k1,kmax,llsadv + use modmpi, only : myid + implicit none integer t,k @@ -280,18 +372,21 @@ subroutine timedepz do while(rtimee>timels(t)) t=t+1 end do - if (rtimee/=timels(1)) then + if (rtimee>timels(1)) then t=t-1 end if fac = ( rtimee-timels(t) ) / ( timels(t+1)-timels(t) ) - ug = ugt (:,t) + fac * ( ugt (:,t+1) - ugt (:,t) ) - vg = vgt (:,t) + fac * ( vgt (:,t+1) - vgt (:,t) ) - wfls = wflst (:,t) + fac * ( wflst (:,t+1) - wflst (:,t) ) - dqtdxls = dqtdxlst(:,t) + fac * ( dqtdxlst(:,t+1) - dqtdxlst(:,t) ) - dqtdyls = dqtdylst(:,t) + fac * ( dqtdylst(:,t+1) - dqtdylst(:,t) ) - dqtdtls = dqtdtlst(:,t) + fac * ( dqtdtlst(:,t+1) - dqtdtlst(:,t) ) - thlpcar = thlpcart(:,t) + fac * ( thlpcart(:,t+1) - thlpcart(:,t) ) + ug = ugt (:,t) + fac * ( ugt (:,t+1) - ugt (:,t) ) + vg = vgt (:,t) + fac * ( vgt (:,t+1) - vgt (:,t) ) + wfls = wflst (:,t) + fac * ( wflst (:,t+1) - wflst (:,t) ) + dqtdxls = dqtdxlst (:,t) + fac * ( dqtdxlst (:,t+1) - dqtdxlst (:,t) ) + dqtdyls = dqtdylst (:,t) + fac * ( dqtdylst (:,t+1) - dqtdylst (:,t) ) + dqtdtls = dqtdtlst (:,t) + fac * ( dqtdtlst (:,t+1) - dqtdtlst (:,t) ) + dthldtls = dthldtlst(:,t) + fac * ( dthldtlst(:,t+1) - dthldtlst(:,t) ) + dudtls = dudtlst (:,t) + fac * ( dudtlst (:,t+1) - dudtlst (:,t) ) + dvdtls = dvdtlst (:,t) + fac * ( dvdtlst (:,t+1) - dvdtlst (:,t) ) + thlpcar = thlpcart (:,t) + fac * ( thlpcart (:,t+1) - thlpcart (:,t) ) do k=1,kmax @@ -319,12 +414,13 @@ subroutine timedepz dthldxls = 0.0 dthldyls = 0.0 + return end subroutine timedepz subroutine timedepsurf use modglobal, only : rtimee, lmoist - use modsurfdata, only : wtsurf,wqsurf,thls,qts,ps + use modsurfdata, only : wtsurf,wqsurf,thls,qts,ps, Qnetav use modsurface, only : qtsurf implicit none integer t @@ -336,7 +432,7 @@ subroutine timedepsurf do while(rtimee>timeflux(t)) t=t+1 end do - if (rtimee/=timeflux(t)) then + if (rtimee>timeflux(t)) then t=t-1 endif @@ -345,6 +441,7 @@ subroutine timedepsurf wtsurf = wtsurft(t) + fac * ( wtsurft(t+1) - wtsurft(t) ) thls = thlst(t) + fac * ( thlst(t+1) - thlst(t) ) ps = pst(t) + fac * ( pst(t+1) - pst(t) ) + Qnetav = Qnetavt(t) + fac * ( Qnetavt(t+1) - Qnetavt(t) ) !cstep: not necessary to provide qts in ls_flux file qts = qtst(t) + fac * ( qtst(t+1) - qtst(t) ) if (lmoist) then call qtsurf @@ -360,8 +457,8 @@ subroutine exittimedep use modtimedepsv, only : exittimedepsv implicit none if (.not. ltimedep) return - deallocate(timels,ugt,vgt,wflst,dqtdxlst,dqtdylst,dqtdtlst,thlpcart) - deallocate(timeflux, wtsurft,wqsurft,thlst,qtst,pst) + deallocate(timels,ugt,vgt,wflst,dqtdxlst,dqtdylst,dqtdtlst,dthldtlst,dudtlst,dvdtlst,thlpcart) + deallocate(timeflux, wtsurft,wqsurft,thlst,qtst,pst,Qnetavt) call exittimedepsv end subroutine diff --git a/src/modtimedepsv.f90 b/src/modtimedepsv.f90 index e56d4045..91b5a401 100644 --- a/src/modtimedepsv.f90 +++ b/src/modtimedepsv.f90 @@ -35,9 +35,10 @@ module modtimedepsv implicit none private -public :: inittimedepsv, timedepsv,exittimedepsv +public :: inittimedepsv, timedepsv,ltimedepsv,exittimedepsv save ! switches for timedependent surface fluxes and large scale forcings + logical :: ltimedepsv = .false. !< Overall switch, input in namoptions logical :: ltimedepsvz = .false. !< Switch for large scale forcings logical :: ltimedepsvsurf = .true. !< Switch for surface fluxes @@ -55,7 +56,7 @@ module modtimedepsv !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! subroutine inittimedepsv use modmpi, only :myid,my_real,mpi_logical,mpierr,comm3d - use modglobal,only :btime,cexpnr,kmax,k1,ifinput,runtime,tres,nsv + use modglobal,only :cexpnr,kmax,k1,ifinput,runtime,nsv implicit none character (80):: chmess @@ -64,7 +65,8 @@ subroutine inittimedepsv integer :: k,t,n, ierr real :: dummyr real, allocatable, dimension (:) :: height - if (nsv==0) return + + if (nsv==0 .or. .not.ltimedepsv ) return allocate(height(k1)) allocate(timesvsurf (0:kflux)) @@ -96,7 +98,7 @@ subroutine inittimedepsv write(outputfmt(8:10),'(I3)') nsv t = 0 ierr = 0 - do while (timesvsurf(t)< tres*real(btime)+runtime) + do while (timesvsurf(t)< runtime) t=t+1 read(ifinput,*, iostat = ierr) timesvsurf(t), (svst(t,n),n=1,nsv) write(*,'(f7.1,4e12.4)') timesvsurf(t), (svst(t,n),n=1,nsv) @@ -104,7 +106,7 @@ subroutine inittimedepsv stop 'STOP: No time dependend data for end of run (surface fluxes of scalar)' end if end do - if(timesvsurf(1)>tres*real(btime)+runtime) then + if(timesvsurf(1)>runtime) then write(6,*) 'Time dependent surface variables do not change before end of' write(6,*) 'simulation. --> only large scale changes in scalars' ltimedepsvsurf=.false. @@ -116,7 +118,7 @@ subroutine inittimedepsv ! ---load large scale forcings---- t = 0 - do while (timesvz(t) < tres*(btime)+runtime) + do while (timesvz(t) < runtime) t = t + 1 chmess1 = "#" ierr = 1 ! not zero @@ -136,7 +138,7 @@ subroutine inittimedepsv end do end do - if ((timesvz(1) > tres*real(btime)+runtime) .or. (timesvsurf(1) > tres*real(btime)+runtime)) then + if ((timesvz(1) > runtime) .or. (timesvsurf(1) > runtime)) then write(6,*) 'Time dependent large scale forcings sets in after end of simulation -->' write(6,*) '--> only time dependent surface variables (scalars)' ltimedepsvz=.false. @@ -165,7 +167,7 @@ subroutine timedepsv use modglobal, only : nsv implicit none - if(nsv==0) return + if(nsv==0 .or. .not.ltimedepsv) return call timedepsvz call timedepsvsurf @@ -194,7 +196,7 @@ subroutine timedepsvsurf do while(rtimee>timesvsurf(t)) t=t+1 end do - if (rtimee/=timesvsurf(t)) then + if (rtimee>timesvsurf(t)) then t=t-1 end if @@ -209,7 +211,7 @@ end subroutine timedepsvsurf subroutine exittimedepsv use modglobal, only : nsv implicit none - if (nsv==0) return + if (nsv==0 .or. .not.ltimedepsv) return deallocate(timesvz,svzt,timesvsurf) end subroutine exittimedepsv diff --git a/src/modtimestat.f90 b/src/modtimestat.f90 index d6db35e4..22802cd7 100644 --- a/src/modtimestat.f90 +++ b/src/modtimestat.f90 @@ -178,11 +178,13 @@ subroutine inittimestat write(ifoutput,'(3a)') & '# time Qnet H LE G0 ', & ' tendskin rs ra tskin cliq ', & - ' Wl rssoil rsveg Resp wco2 An' + ' Wl rssoil rsveg Resp wco2 An', & + ' gcco2' write(ifoutput,'(3a)') & '# [s] [W/m2] [W/m2] [W/m2] [W/m2]', & ' [W/m2] [s/m] [s/m] [K] [-] ', & - ' [m] [s/m] [s/m]' + ' [m] [s/m] [s/m] [mgCm2/s] [mgCm2/s]',& + ' [m/s] ' close(ifoutput) end if @@ -336,14 +338,14 @@ end subroutine inittimestat !>Run timestat. Calculate and write the statistics subroutine timestat - use modglobal, only : i1,j1,kmax,zf,dzf,cu,cv,rv,rd,& + use modglobal, only : i1,j1,kmax,zf,dzf,cu,cv,rv,rd,eps1,& ijtot,timee,rtimee,dt_lim,rk3step,cexpnr,ifoutput ! use modfields, only : um,vm,wm,e12m,ql0,u0av,v0av,rhof,u0,v0,w0 use modsurfdata,only : wtsurf, wqsurf, isurf,ustar,thlflux,qtflux,z0,oblav,qts,thls,& Qnet, H, LE, G0, rs, ra, tskin, tendskin, & cliq,rsveg,rssoil,Wl, & - lhetero, xpatches, ypatches, qts_patch, wt_patch, wq_patch, thls_patch,obl,z0mav_patch, wco2av, Anav, Respav + lhetero, xpatches, ypatches, qts_patch, wt_patch, wq_patch, thls_patch,obl,z0mav_patch, wco2av, Anav, Respav,gcco2av use modsurface, only : patchxnr,patchynr use modmpi, only : my_real,mpi_sum,mpi_max,mpi_min,comm3d,mpierr,myid use modstat_nc, only : lnetcdf, writestat_nc,nc_fillvalue @@ -796,7 +798,7 @@ subroutine timestat if (isurf == 1) then !tmlsm open (ifoutput,file='tmlsm.'//cexpnr,position='append') - write(ifoutput,'(f10.2,9f11.3,e13.3, 5f11.3)') & + write(ifoutput,'(f10.2,9f11.3,e13.3, 5f11.3,e13.3)') & rtimee ,& Qnetav ,& Hav ,& @@ -812,19 +814,20 @@ subroutine timestat rsvegav ,& Respav ,& wco2av ,& - Anav + Anav ,& + gcco2av close(ifoutput) end if if (lnetcdf) then vars( 1) = rtimee vars( 2) = cc - if (vars(2)==0) vars(2) = nc_fillvalue + if (vars(2)0 .or. rk3step < 3) call tstep_update ! Calculate new timestep call timedep @@ -235,6 +238,7 @@ program DALES !Version 4.0.0alpha ! 3.4 EXECUTE ADD ONS !------------------------------------------------------ call nudge + call testbednudge ! call dospecs ! call tiltedgravity @@ -284,7 +288,9 @@ program DALES !Version 4.0.0alpha !call stressbudgetstat call heterostats + call testwctime call writerestartfiles + end do !------------------------------------------------------- @@ -300,6 +306,7 @@ program DALES !Version 4.0.0alpha call exitlsmstat !call exitparticles call exitnudge + call exittestbed call exitsampling call exitquadrant call exitsamptend diff --git a/src/rrtmg_lw_rad.f90 b/src/rrtmg_lw_rad.f90 index a0350cfd..b16d0fbd 100644 --- a/src/rrtmg_lw_rad.f90 +++ b/src/rrtmg_lw_rad.f90 @@ -279,8 +279,7 @@ subroutine rrtmg_lw & integer(kind=im) :: iout ! output option flag (inactive) integer(kind=im) :: iaer ! aerosol option flag integer(kind=im) :: iplon ! column loop index - integer(kind=im) :: imca ! flag for mcica [0=off, 1=on] - integer(kind=im) :: i,k ! layer loop index + integer(kind=im) :: k ! layer loop index integer(kind=im) :: ig ! g-point loop index ! Atmosphere @@ -466,7 +465,7 @@ subroutine rrtmg_lw & ! each longwave spectral band. call taumol(nlayers, pavel, wx, coldry, & - laytrop, jp, jt, jt1, planklay, planklev, plankbnd, & + laytrop, jp, jt, jt1, & colh2o, colco2, colo3, coln2o, colco, colch4, colo2, & colbrd, fac00, fac01, fac10, fac11, & rat_h2oco2, rat_h2oco2_1, rat_h2oo3, rat_h2oo3_1, & @@ -689,7 +688,7 @@ subroutine inatm (iplon, nlay, icld, iaer, & real(kind=rb), parameter :: amdc1 = 0.210852_rb ! Molecular weight of dry air / CFC11 real(kind=rb), parameter :: amdc2 = 0.239546_rb ! Molecular weight of dry air / CFC12 - integer(kind=im) :: isp, l, ix, n, imol, ib ! Loop indices + integer(kind=im) :: l, ix, n, imol, ib ! Loop indices real(kind=rb) :: amm, amttl, wvttl, wvsh, summol diff --git a/src/rrtmg_lw_rtrnmr.f90 b/src/rrtmg_lw_rtrnmr.f90 index 5528ad68..d7240e0a 100644 --- a/src/rrtmg_lw_rtrnmr.f90 +++ b/src/rrtmg_lw_rtrnmr.f90 @@ -105,14 +105,12 @@ subroutine rtrnmr(nlayers, istart, iend, iout, pz, semiss, ncbands, & ! ----- Local ----- ! Declarations for radiative transfer - real(kind=rb) :: abscld(nlayers,nbndlw) real(kind=rb) :: atot(nlayers) real(kind=rb) :: atrans(nlayers) real(kind=rb) :: bbugas(nlayers) real(kind=rb) :: bbutot(nlayers) real(kind=rb) :: clrurad(0:nlayers) real(kind=rb) :: clrdrad(0:nlayers) - real(kind=rb) :: efclfrac(nlayers,nbndlw) real(kind=rb) :: uflux(0:nlayers) real(kind=rb) :: dflux(0:nlayers) real(kind=rb) :: urad(0:nlayers) @@ -124,7 +122,7 @@ subroutine rtrnmr(nlayers, istart, iend, iout, pz, semiss, ncbands, & real(kind=rb) :: secdiff(nbndlw) ! secant of diffusivity angle real(kind=rb) :: a0(nbndlw),a1(nbndlw),a2(nbndlw)! diffusivity angle adjustment coefficients real(kind=rb) :: wtdiff, rec_6 - real(kind=rb) :: transcld, radld, radclrd, plfrac, blay, dplankup, dplankdn + real(kind=rb) :: radld, radclrd, plfrac, blay, dplankup, dplankdn real(kind=rb) :: odepth, odtot, odepth_rec, odtot_rec, gassrc, ttot real(kind=rb) :: tblind, tfactot, bbd, bbdtot, tfacgas, transc, tausfac real(kind=rb) :: rad0, reflect, radlu, radclru @@ -177,7 +175,6 @@ subroutine rtrnmr(nlayers, istart, iend, iout, pz, semiss, ncbands, & ! local ! atrans ! gaseous absorptivity -! abscld ! cloud absorptivity ! atot ! combined gaseous and cloud absorptivity ! odclr ! clear sky (gaseous) optical depth ! odcld ! cloud optical depth @@ -189,7 +186,6 @@ subroutine rtrnmr(nlayers, istart, iend, iout, pz, semiss, ncbands, & ! bbdtot ! gas and cloud planck function for downward rt ! bbutot ! gas and cloud planck function for upward calc. ! gassrc ! source radiance due to gas only -! efclfrac ! effective cloud fraction ! radlu ! spectrally summed upward radiance ! radclru ! spectrally summed clear sky upward radiance ! urad ! upward radiance by layer diff --git a/src/rrtmg_lw_taumol.f90 b/src/rrtmg_lw_taumol.f90 index c6959888..d3213f7c 100644 --- a/src/rrtmg_lw_taumol.f90 +++ b/src/rrtmg_lw_taumol.f90 @@ -30,7 +30,7 @@ module rrtmg_lw_taumol !---------------------------------------------------------------------------- subroutine taumol(nlayers, pavel, wx, coldry, & - laytrop, jp, jt, jt1, planklay, planklev, plankbnd, & + laytrop, jp, jt, jt1, & colh2o, colco2, colo3, coln2o, colco, colch4, colo2, & colbrd, fac00, fac01, fac10, fac11, & rat_h2oco2, rat_h2oco2_1, rat_h2oo3, rat_h2oo3_1, & @@ -191,12 +191,6 @@ subroutine taumol(nlayers, pavel, wx, coldry, & ! Dimensions: (nlayers) integer(kind=im), intent(in) :: jt1(:) ! ! Dimensions: (nlayers) - real(kind=rb), intent(in) :: planklay(:,:) ! - ! Dimensions: (nlayers,nbndlw) - real(kind=rb), intent(in) :: planklev(0:,:) ! - ! Dimensions: (nlayers,nbndlw) - real(kind=rb), intent(in) :: plankbnd(:) ! - ! Dimensions: (nbndlw) real(kind=rb), intent(in) :: colh2o(:) ! column amount (h2o) ! Dimensions: (nlayers) diff --git a/src/rrtmg_sw_rad.f90 b/src/rrtmg_sw_rad.f90 index 2574b28d..331b2f36 100644 --- a/src/rrtmg_sw_rad.f90 +++ b/src/rrtmg_sw_rad.f90 @@ -305,14 +305,10 @@ subroutine rrtmg_sw & ! [0 = direct and diffuse fluxes are unscaled] ! [1 = direct and diffuse fluxes are scaled] ! (total downward fluxes are always delta scaled) - integer(kind=im) :: isccos ! instrumental cosine response flag (inactive) integer(kind=im) :: iplon ! column loop index integer(kind=im) :: i ! layer loop index ! jk integer(kind=im) :: ib ! band loop index ! jsw - integer(kind=im) :: ia, ig ! indices - integer(kind=im) :: k ! layer loop index - integer(kind=im) :: ims ! value for changing mcica permute seed - integer(kind=im) :: imca ! flag for mcica [0=off, 1=on] + integer(kind=im) :: ia ! indices real(kind=rb) :: zepsec, zepzen ! epsilon real(kind=rb) :: zdpgcp ! flux to heating conversion ratio @@ -368,7 +364,6 @@ subroutine rrtmg_sw & fac10(nzrad+2), fac11(nzrad+2) ! Atmosphere/clouds - cldprop - integer(kind=im) :: ncbands ! number of cloud spectral bands integer(kind=im) :: inflag ! flag for cloud property method integer(kind=im) :: iceflag ! flag for ice cloud properties integer(kind=im) :: liqflag ! flag for liquid cloud properties @@ -537,7 +532,7 @@ subroutine rrtmg_sw & call inatm_sw (iplon, nzrad+1, ioverlap, iaer, & layerP, interfaceP, layerT, interfaceT, tsfc, h2ovmr, & o3vmr, co2vmr, ch4vmr, n2ovmr, o2vmr, & - real(eccf,rb), dyofyr, scon, inflgsw, iceflgsw, liqflgsw, & + real(eccf,rb), dyofyr, inflgsw, iceflgsw, liqflgsw, & cldfr, taucld, ssacld, asmcld, fsfcld, cicewp, cliqwp, & reice, reliq, tauaer, ssaaer, asmaer, & nlayers, pavel, pz, pdp, tavel, tz, tbound, coldry, wkl, & @@ -567,7 +562,7 @@ subroutine rrtmg_sw & ! molecular absorption coefficients by interpolating data from stored ! reference atmospheres. - call setcoef_sw(nlayers, pavel, tavel, pz, tz, tbound, coldry, wkl, & + call setcoef_sw(nlayers, pavel, tavel, tz, tbound, coldry, wkl, & laytrop, layswtch, laylow, jp, jt, jt1, & co2mult, colch4, colco2, colh2o, colmol, coln2o, & colo2, colo3, fac00, fac01, fac10, fac11, & @@ -692,11 +687,11 @@ subroutine rrtmg_sw & call spcvrt_sw & (nlayers, istart, iend, icpr, idelm, iout, & - pavel, tavel, pz, tz, tbound, albdif, albdir, & + albdif, albdir, & cldfrac, ztauc, zasyc, zomgc, ztaucorig, & - ztaua, zasya, zomga, cossza, coldry, wkl, adjflux, & - laytrop, layswtch, laylow, jp, jt, jt1, & - co2mult, colch4, colco2, colh2o, colmol, coln2o, colo2, colo3, & + ztaua, zasya, zomga, cossza, adjflux, & + laytrop, jp, jt, jt1, & + colch4, colco2, colh2o, colmol, colo2, colo3, & fac00, fac01, fac10, fac11, & selffac, selffrac, indself, forfac, forfrac, indfor, & zbbfd, zbbfu, zbbcd, zbbcu, zuvfd, zuvcd, znifd, znicd, & @@ -722,6 +717,8 @@ subroutine rrtmg_sw & dirdflux(i) = zbbfddir(i) !difdflux(i) = swdflx(iplon,i) - dirdflux(i) difdflux(i) = swDown_slice(iplon,i) - dirdflux(i) + swDownDir_slice(iplon,i) = dirdflux(i) + swDownDif_slice(iplon,i) = difdflux(i) ! UV/visible direct/diffuse fluxes dirdnuv(i) = zuvfddir(i) difdnuv(i) = zuvfd(i) - dirdnuv(i) @@ -785,7 +782,7 @@ end function earth_sun subroutine inatm_sw (iplon, nlay, icld, iaer, & play, plev, tlay, tlev, tsfc, h2ovmr, & o3vmr, co2vmr, ch4vmr, n2ovmr, o2vmr, & - adjes, dyofyr, scon, inflgsw, iceflgsw, liqflgsw, & + adjes, dyofyr, inflgsw, iceflgsw, liqflgsw, & cldfr, taucld, ssacld, asmcld, fsfcld, cicewp, cliqwp, & reice, reliq, tauaer, ssaaer, asmaer, & nlayers, pavel, pz, pdp, tavel, tz, tbound, coldry, wkl, & @@ -842,7 +839,6 @@ subroutine inatm_sw (iplon, nlay, icld, iaer, & integer(kind=im), intent(in) :: dyofyr ! Day of the year (used to get Earth/Sun ! distance if adjflx not provided) real(kind=rb), intent(in) :: adjes ! Flux adjustment for Earth/Sun distance - real(kind=rb), intent(in) :: scon ! Solar constant (W/m2) integer(kind=im), intent(in) :: inflgsw ! Flag for cloud optical properties integer(kind=im), intent(in) :: iceflgsw ! Flag for ice particle specification @@ -949,10 +945,10 @@ subroutine inatm_sw (iplon, nlay, icld, iaer, & real(kind=rb), parameter :: sbc = 5.67e-08_rb ! Stefan-Boltzmann constant (W/m2K4) - integer(kind=im) :: isp, l, ix, n, imol, ib ! Loop indices - real(kind=rb) :: amm, summol ! - real(kind=rb) :: adjflx ! flux adjustment for Earth/Sun distance -! real(kind=rb) :: earth_sun ! function for Earth/Sun distance adjustment + integer(kind=im) :: l, n, imol, ib ! Loop indices + real(kind=rb) :: amm ! + real(kind=rb) :: adjflx ! flux adjustment for Earth/Sun distance +! real(kind=rb) :: earth_sun ! function for Earth/Sun distance adjustment ! Add one to nlayers here to include extra model layer at top of atmosphere nlayers = nlay diff --git a/src/rrtmg_sw_reftra.f90 b/src/rrtmg_sw_reftra.f90 index 437c3f46..7008ac6a 100644 --- a/src/rrtmg_sw_reftra.f90 +++ b/src/rrtmg_sw_reftra.f90 @@ -104,7 +104,7 @@ subroutine reftra_sw(nlayers, lrtchk, pgg, prmuz, ptau, pw, & ! ------- Local ------- - integer(kind=im) :: jk, jl, kmodts + integer(kind=im) :: jk, kmodts integer(kind=im) :: itind real(kind=rb) :: tblind diff --git a/src/rrtmg_sw_setcoef.f90 b/src/rrtmg_sw_setcoef.f90 index 15cda3e6..161c05d1 100644 --- a/src/rrtmg_sw_setcoef.f90 +++ b/src/rrtmg_sw_setcoef.f90 @@ -28,7 +28,7 @@ module rrtmg_sw_setcoef contains !---------------------------------------------------------------------------- - subroutine setcoef_sw(nlayers, pavel, tavel, pz, tz, tbound, coldry, wkl, & + subroutine setcoef_sw(nlayers, pavel, tavel, tz, tbound, coldry, wkl, & laytrop, layswtch, laylow, jp, jt, jt1, & co2mult, colch4, colco2, colh2o, colmol, coln2o, & colo2, colo3, fac00, fac01, fac10, fac11, & @@ -52,8 +52,6 @@ subroutine setcoef_sw(nlayers, pavel, tavel, pz, tz, tbound, coldry, wkl, & ! Dimensions: (nlayers) real(kind=rb), intent(in) :: tavel(:) ! layer temperatures (K) ! Dimensions: (nlayers) - real(kind=rb), intent(in) :: pz(0:) ! level (interface) pressures (hPa, mb) - ! Dimensions: (0:nlayers) real(kind=rb), intent(in) :: tz(0:) ! level (interface) temperatures (K) ! Dimensions: (0:nlayers) real(kind=rb), intent(in) :: tbound ! surface temperature (K) diff --git a/src/rrtmg_sw_spcvrt.f90 b/src/rrtmg_sw_spcvrt.f90 index 8bcd3458..f9cf8e78 100644 --- a/src/rrtmg_sw_spcvrt.f90 +++ b/src/rrtmg_sw_spcvrt.f90 @@ -34,11 +34,11 @@ module rrtmg_sw_spcvrt ! --------------------------------------------------------------------------- subroutine spcvrt_sw & (nlayers, istart, iend, icpr, idelm, iout, & - pavel, tavel, pz, tz, tbound, palbd, palbp, & + palbd, palbp, & pclfr, ptauc, pasyc, pomgc, ptaucorig, & - ptaua, pasya, pomga, prmu0, coldry, wkl, adjflux, & - laytrop, layswtch, laylow, jp, jt, jt1, & - co2mult, colch4, colco2, colh2o, colmol, coln2o, colo2, colo3, & + ptaua, pasya, pomga, prmu0, adjflux, & + laytrop, jp, jt, jt1, & + colch4, colco2, colh2o, colmol, colo2, colo3, & fac00, fac01, fac10, fac11, & selffac, selffrac, indself, forfac, forfrac, indfor, & pbbfd, pbbfu, pbbcd, pbbcu, puvfd, puvcd, pnifd, pnicd, & @@ -85,8 +85,6 @@ subroutine spcvrt_sw & ! [1 = direct and diffuse fluxes are scaled] integer(kind=im), intent(in) :: iout integer(kind=im), intent(in) :: laytrop - integer(kind=im), intent(in) :: layswtch - integer(kind=im), intent(in) :: laylow integer(kind=im), intent(in) :: indfor(:) ! Dimensions: (nlayers) @@ -99,19 +97,6 @@ subroutine spcvrt_sw & integer(kind=im), intent(in) :: jt1(:) ! Dimensions: (nlayers) - real(kind=rb), intent(in) :: pavel(:) ! layer pressure (hPa, mb) - ! Dimensions: (nlayers) - real(kind=rb), intent(in) :: tavel(:) ! layer temperature (K) - ! Dimensions: (nlayers) - real(kind=rb), intent(in) :: pz(0:) ! level (interface) pressure (hPa, mb) - ! Dimensions: (0:nlayers) - real(kind=rb), intent(in) :: tz(0:) ! level temperatures (hPa, mb) - ! Dimensions: (0:nlayers) - real(kind=rb), intent(in) :: tbound ! surface temperature (K) - real(kind=rb), intent(in) :: wkl(:,:) ! molecular amounts (mol/cm2) - ! Dimensions: (mxmol,nlayers) - real(kind=rb), intent(in) :: coldry(:) ! dry air column density (mol/cm2) - ! Dimensions: (nlayers) real(kind=rb), intent(in) :: colmol(:) ! Dimensions: (nlayers) real(kind=rb), intent(in) :: adjflux(:) ! Earth/Sun distance adjustment @@ -145,15 +130,10 @@ subroutine spcvrt_sw & ! Dimensions: (nlayers) real(kind=rb), intent(in) :: colch4(:) ! Dimensions: (nlayers) - real(kind=rb), intent(in) :: co2mult(:) - ! Dimensions: (nlayers) real(kind=rb), intent(in) :: colo3(:) ! Dimensions: (nlayers) real(kind=rb), intent(in) :: colo2(:) ! Dimensions: (nlayers) - real(kind=rb), intent(in) :: coln2o(:) - ! Dimensions: (nlayers) - real(kind=rb), intent(in) :: forfac(:) ! Dimensions: (nlayers) real(kind=rb), intent(in) :: forfrac(:) @@ -206,8 +186,8 @@ subroutine spcvrt_sw & logical :: lrtchkclr(nlayers),lrtchkcld(nlayers) integer(kind=im) :: klev - integer(kind=im) :: ib1, ib2, ibm, igt, ikl, ikp, ikx - integer(kind=im) :: iw, jb, jg, jl, jk + integer(kind=im) :: ib1, ib2, ibm, igt, ikl + integer(kind=im) :: iw, jb, jg, jk ! integer(kind=im), parameter :: nuv = ?? ! integer(kind=im), parameter :: nvs = ?? integer(kind=im) :: itind @@ -215,24 +195,22 @@ subroutine spcvrt_sw & real(kind=rb) :: tblind, ze1 real(kind=rb) :: zclear, zcloud real(kind=rb) :: zdbt(nlayers+1), zdbt_nodel(nlayers+1) - real(kind=rb) :: zgc(nlayers), zgcc(nlayers), zgco(nlayers) - real(kind=rb) :: zomc(nlayers), zomcc(nlayers), zomco(nlayers) + real(kind=rb) :: zgcc(nlayers), zgco(nlayers) + real(kind=rb) :: zomcc(nlayers), zomco(nlayers) real(kind=rb) :: zrdnd(nlayers+1), zrdndc(nlayers+1) real(kind=rb) :: zref(nlayers+1), zrefc(nlayers+1), zrefo(nlayers+1) real(kind=rb) :: zrefd(nlayers+1), zrefdc(nlayers+1), zrefdo(nlayers+1) real(kind=rb) :: zrup(nlayers+1), zrupd(nlayers+1) real(kind=rb) :: zrupc(nlayers+1), zrupdc(nlayers+1) - real(kind=rb) :: zs1(nlayers+1) real(kind=rb) :: ztauc(nlayers), ztauo(nlayers) - real(kind=rb) :: ztdn(nlayers+1), ztdnd(nlayers+1), ztdbt(nlayers+1) - real(kind=rb) :: ztoc(nlayers), ztor(nlayers) + real(kind=rb) :: ztdbt(nlayers+1) real(kind=rb) :: ztra(nlayers+1), ztrac(nlayers+1), ztrao(nlayers+1) real(kind=rb) :: ztrad(nlayers+1), ztradc(nlayers+1), ztrado(nlayers+1) real(kind=rb) :: zdbtc(nlayers+1), ztdbtc(nlayers+1) real(kind=rb) :: zincflx(ngptsw), zdbtc_nodel(nlayers+1) real(kind=rb) :: ztdbt_nodel(nlayers+1), ztdbtc_nodel(nlayers+1) - real(kind=rb) :: zdbtmc, zdbtmo, zf, zgw, zreflect + real(kind=rb) :: zdbtmc, zdbtmo, zf real(kind=rb) :: zwf, tauorig, repclc ! real(kind=rb) :: zincflux ! inactive diff --git a/src/tstep.f90 b/src/tstep.f90 index cf1eec0b..8de66cf0 100644 --- a/src/tstep.f90 +++ b/src/tstep.f90 @@ -43,10 +43,10 @@ subroutine tstep_update - use modglobal, only : i1,j1,rk3step,timee,rtimee,dtmax,dt,ntimee,ntrun,courant,peclet,& + use modglobal, only : i1,j1,rk3step,timee,rtimee,dtmax,dt,ntrun,courant,peclet,& kmax,dx,dy,dzh,dt_lim,ladaptive,timeleft,idtmax,rdt,tres,longint ,lwarmstart use modfields, only : um,vm,wm - use modsubgrid,only : ekm + use modsubgrid,only : ekm,ekh use modmpi, only : comm3d,mpierr,mpi_max,my_real implicit none @@ -79,7 +79,9 @@ subroutine tstep_update enddo courtotmax=sqrt(courtotmax) do k=1,kmax - peclettotl=max(peclettotl,maxval(ekm(2:i1,2:j1,k))*rdt/minval((/dzh(k),dx,dy/))**2) + ! limit by the larger of ekh, ekm. ekh is generally larger. + peclettotl=max(peclettotl,maxval(ekm(2:i1,2:j1,k))*rdt/minval((/dzh(k),dx,dy/))**2) + peclettotl=max(peclettotl,maxval(ekh(2:i1,2:j1,k))*rdt/minval((/dzh(k),dx,dy/))**2) end do call MPI_ALLREDUCE(peclettotl,peclettot,1,MY_REAL,MPI_MAX,comm3d,mpierr) if ( pecletold>0) then @@ -93,7 +95,6 @@ subroutine tstep_update timee = timee + dt rtimee = dble(timee)*tres timeleft=timeleft-dt - ntimee = ntimee + 1 ntrun = ntrun + 1 else dt = 2 * dt @@ -117,7 +118,9 @@ subroutine tstep_update courtotmax=max(courtotmax,sqrt(courtot(k))) enddo do k=1,kmax - peclettotl=max(peclettotl,maxval(ekm(2:i1,2:j1,k))*rdt/minval((/dzh(k),dx,dy/))**2) + ! limit by the larger of ekh, ekm. ekh is generally larger. + peclettotl=max(peclettotl,maxval(ekm(2:i1,2:j1,k))*rdt/minval((/dzh(k),dx,dy/))**2) + peclettotl=max(peclettotl,maxval(ekh(2:i1,2:j1,k))*rdt/minval((/dzh(k),dx,dy/))**2) end do call MPI_ALLREDUCE(peclettotl,peclettot,1,MY_REAL,MPI_MAX,comm3d,mpierr) dt = min(timee,dt_lim,idtmax,floor(rdt/tres*courant/courtotmax,longint),floor(rdt/tres*peclet/peclettot,longint)) @@ -126,12 +129,10 @@ subroutine tstep_update dt_lim = timeleft timee = timee + dt rtimee = dble(timee)*tres - ntimee = ntimee + 1 ntrun = ntrun + 1 else dt = idtmax rdt = dtmax - ntimee = ntimee + 1 ntrun = ntrun + 1 timee = timee + dt !ntimee*dtmax rtimee = dble(timee)*tres @@ -174,27 +175,30 @@ subroutine tstep_integrate rk3coef = rdt / (4. - dble(rk3step)) wp_store = wp - do k=1,kmax - do j=2,j1 - do i=2,i1 - - u0(i,j,k) = um(i,j,k) + rk3coef * up(i,j,k) - v0(i,j,k) = vm(i,j,k) + rk3coef * vp(i,j,k) - w0(i,j,k) = wm(i,j,k) + rk3coef * wp(i,j,k) - thl0(i,j,k) = thlm(i,j,k) + rk3coef * thlp(i,j,k) - qt0(i,j,k) = qtm(i,j,k) + rk3coef * qtp(i,j,k) - e120(i,j,k) = e12m(i,j,k) + rk3coef * e12p(i,j,k) - - e120(i,j,k) = max(e12min,e120(i,j,k)) - e12m(i,j,k) = max(e12min,e12m(i,j,k)) - - do n=1,nsv - sv0(i,j,k,n) = svm(i,j,k,n) + rk3coef * svp(i,j,k,n) - end do - - end do - end do - end do + if(rk3step /= 3) then + u0 = um + rk3coef * up + v0 = vm + rk3coef * vp + w0 = wm + rk3coef * wp + thl0 = thlm + rk3coef * thlp + qt0 = qtm + rk3coef * qtp + sv0 = svm + rk3coef * svp + e120 = max(e12min,e12m + rk3coef * e12p) + else ! step 3 - store result in both ..0 and ..m + um = um + rk3coef * up + u0 = um + vm = vm + rk3coef * vp + v0 = vm + wm = wm + rk3coef * wp + w0 = wm + thlm = thlm + rk3coef * thlp + thl0 = thlm + qtm = qtm + rk3coef * qtp + qt0 = qtm + svm = svm + rk3coef * svp + sv0 = svm + e12m = max(e12min,e12m + rk3coef * e12p) + e120 = e12m + end if up=0. vp=0. @@ -204,14 +208,4 @@ subroutine tstep_integrate svp=0. e12p=0. - if(rk3step == 3) then - um = u0 - vm = v0 - wm = w0 - thlm = thl0 - qtm = qt0 - e12m = e120 - svm = sv0 - end if - end subroutine tstep_integrate diff --git a/tags b/tags index ad944f62..b3c58a64 100644 --- a/tags +++ b/tags @@ -3,63 +3,47 @@ !_TAG_PROGRAM_AUTHOR Darren Hiebert /dhiebert@users.sourceforge.net/ !_TAG_PROGRAM_NAME Exuberant Ctags // !_TAG_PROGRAM_URL http://ctags.sourceforge.net /official site/ -!_TAG_PROGRAM_VERSION 5.7 // +!_TAG_PROGRAM_VERSION 5.8 // 1 src/modcanopy.f90 /^ 1 continue$/;" l subroutine:splint file: -100 src/addon/modchem.f90 /^100 if (myid == 0) then$/;" l subroutine:inputchem file: -100 src/addon/modchem.f90 /^100 print *, 'error in reading chem species in inputchem'$/;" l subroutine:read_chem file: 100 src/modchem.f90 /^100 if (myid == 0) then$/;" l subroutine:inputchem file: 100 src/modchem.f90 /^100 print *, 'error in reading chem species in inputchem'$/;" l subroutine:read_chem file: 1000 src/rrtmg_lw_rtrn.f90 /^ 1000 continue$/;" l subroutine:rtrn file: 1000 src/rrtmg_lw_rtrnmr.f90 /^ 1000 continue$/;" l subroutine:rtrnmr file: -120 src/addon/modchem.f90 /^120 t=tb$/;" l subroutine:twostep2 file: 120 src/modchem.f90 /^120 t=tb$/;" l subroutine:twostep2 file: -25 src/addon/modchem.f90 /^25 nstart=nstart+1$/;" l subroutine:twostep2 file: 25 src/modchem.f90 /^25 nstart=nstart+1$/;" l subroutine:twostep2 file: -300 src/addon/modchem.f90 /^300 j=j-1$/;" l subroutine:inputchem file: 300 src/modchem.f90 /^300 j=j-1$/;" l subroutine:inputchem file: 5300 src/rrtmg_lw_setcoef.f90 /^ 5300 continue$/;" l subroutine:setcoef file: 5300 src/rrtmg_sw_setcoef.f90 /^ 5300 continue$/;" l subroutine:setcoef_sw file: 5400 src/rrtmg_lw_setcoef.f90 /^ 5400 continue$/;" l subroutine:setcoef file: 5400 src/rrtmg_sw_setcoef.f90 /^ 5400 continue$/;" l subroutine:setcoef_sw file: -60 src/addon/modchem.f90 /^60 continue$/;" l subroutine:twostep2 file: 60 src/modchem.f90 /^60 continue$/;" l subroutine:twostep2 file: 600 src/modradfull.f90 /^600 format ('-----------------------------------------------------------', &$/;" l subroutine:init_ckd file: -600 src/modradfull.f90 /^600 format(\/'CLOUD_INIT WARNING: Extrapolating because data out of range', &$/;" l subroutine:interpolate file: 601 src/modradfull.f90 /^601 format (' -----------', &$/;" l subroutine:init_ckd file: 602 src/modradfull.f90 /^602 format ('----------- ', &$/;" l subroutine:init_ckd file: 604 src/modradfull.f90 /^604 format ('---------------------------------------- Finished band init ')$/;" l subroutine:init_ckd file: 900 src/modglobal.f90 /^900 RETURN$/;" l function:LACZ_GAMMA file: 998 src/modradrrtmg.f90 /^998 format(i4,f8.3,f8.3,e12.4)$/;" l subroutine:readSounding file: -A src/addon/modchem.f90 /^ real A$/;" k type:RCdef A src/modchem.f90 /^ real A$/;" k type:RCdef AGScross src/modAGScross.f90 /^ subroutine AGScross$/;" s module:modAGScross AGShorz src/modAGScross.f90 /^ subroutine AGShorz$/;" s module:modAGScross Absorber src/rrlw_ncpar.f90 /^ integer(kind=im), parameter :: maxAbsorberN/;" v module:rrlw_ncpar -Absorber src/rrsw_ncpar.f90 /^ integer(kind=im), parameter :: maxAbsorberN/;" v module:rrsw_ncpar +Absorber src/rrsw_ncpar.f90 /^ integer(kind=im), parameter :: maxAbsorberN/;" v module:rrsw_ncpar AbsorberNames src/rrlw_ncpar.f90 /^ character(len = maxAbsorberNameLength), dimension(Absorber), parameter :: &$/;" v module:rrlw_ncpar AbsorberNames src/rrsw_ncpar.f90 /^ character(len = maxAbsorberNameLength), dimension(Absorber), parameter :: &$/;" v module:rrsw_ncpar Ammax298 src/modsurfdata.f90 /^ real :: Ammax298 /;" v module:modsurfdata AnField src/modsurfdata.f90 /^ real, allocatable :: AnField /;" v module:modsurfdata Anav src/modsurfdata.f90 /^ real :: Anav /;" v module:modsurfdata -Avogrado src/addon/modchem.f90 /^ real, parameter :: Avogrado /;" v module:modchem Avogrado src/modchem.f90 /^ real, parameter :: Avogrado /;" v module:modchem -B src/addon/modchem.f90 /^ real B$/;" k type:RCdef B src/modchem.f90 /^ real B$/;" k type:RCdef -BandNums src/rrsw_ncpar.f90 /^ integer(kind=im), dimension(band) :: BandNums /;" v module:rrsw_ncpar -C src/addon/modchem.f90 /^ real C$/;" k type:RCdef +BandNums src/rrsw_ncpar.f90 /^ integer(kind=im), dimension(band) :: BandNums /;" v module:rrsw_ncpar C src/modchem.f90 /^ real C$/;" k type:RCdef -CH2O src/addon/modchem.f90 /^ type (location) :: INERT, PRODUC , O3, O1D, NO2, NO, NO3, N2O5, HNO3, RH, R, ISO, RO2, H2O2, HO2, HO, CO, CO2, H2O, NH3, H2SO4, CH2O,/;" v module:modchem -CH3O2 src/addon/modchem.f90 /^ type (location) :: INERT, PRODUC , O3, O1D, NO2, NO, NO3, N2O5, HNO3, RH, R, ISO, RO2, H2O2, HO2, HO, CO, CO2, H2O, NH3, H2SO4, CH2O, CH3O2,/;" v module:modchem -CO src/addon/modchem.f90 /^ type (location) :: INERT, PRODUC , O3, O1D, NO2, NO, NO3, N2O5, HNO3, RH, R, ISO, RO2, H2O2, HO2, HO, CO,/;" v module:modchem CO src/modchem.f90 /^ type (location) :: INERT, PRODUC , O3, NO2, NO, NO3, N2O5, HNO3, RH, R, ISO, H2O2, HO2, HO, CO,/;" v module:modchem -CO2 src/addon/modchem.f90 /^ type (location) :: INERT, PRODUC , O3, O1D, NO2, NO, NO3, N2O5, HNO3, RH, R, ISO, RO2, H2O2, HO2, HO, CO, CO2,/;" v module:modchem CO2 src/modchem.f90 /^ type (location) :: INERT, PRODUC , O3, NO2, NO, NO3, N2O5, HNO3, RH, R, ISO, H2O2, HO2, HO, CO, CO2,/;" v module:modchem CO2comp298 src/modsurfdata.f90 /^ real :: CO2comp298 /;" v module:modsurfdata CO2flux src/modsurfdata.f90 /^ real, allocatable :: CO2flux(/;" v module:modsurfdata CO2loc src/modsurfdata.f90 /^ integer :: CO2loc /;" v module:modsurfdata CPU_program src/modmpi.f90 /^ real :: CPU_program /;" v module:modmpi CPU_program0 src/modmpi.f90 /^ real :: CPU_program0 /;" v module:modmpi -Chem src/addon/modchem.f90 /^ type Chem$/;" t subroutine:inputchem Chem src/modchem.f90 /^ type Chem$/;" t subroutine:inputchem Cm src/modsurfdata.f90 /^ real, allocatable :: Cm /;" v module:modsurfdata Cs src/modsurfdata.f90 /^ real, allocatable :: Cs /;" v module:modsurfdata @@ -68,7 +52,6 @@ Cskin_land src/modsurfdata.f90 /^ real :: Cskin_land(/;" v module: Cskin_patch src/modsurfdata.f90 /^ real, allocatable :: Cskin_patch(/;" v module:modsurfdata Cskinav src/modsurfdata.f90 /^ real :: Cskinav /;" v module:modsurfdata Cw src/modsurfdata.f90 /^ real :: Cw /;" v module:modsurfdata -D src/addon/modchem.f90 /^ real D$/;" k type:RCdef D src/modchem.f90 /^ real D$/;" k type:RCdef D0_kk src/addon/modbulkmicrodata.f90 /^ real, parameter :: D0_kk /;" v module:modbulkmicrodata D0_kk src/modmicrodata.f90 /^ real, parameter :: D0_kk /;" v module:modmicrodata @@ -90,70 +73,50 @@ Dvcmin src/addon/modbulkmicrodata.f90 /^ ,Dvcmin /;" v module:modb Dvcmin src/modmicrodata.f90 /^ ,Dvcmin /;" v module:modmicrodata Dvr src/addon/modbulkmicrodata.f90 /^ ,Dvr /;" v module:modbulkmicrodata Dvr src/modmicrodata.f90 /^ ,Dvr /;" v module:modmicrodata -Dvrav src/addon/modbulkmicrostat.f90 /^ Dvravl/;" v module:modbulkmicrostat Dvrav src/modbulkmicrostat.f90 /^ Dvravl/;" v module:modbulkmicrostat Dvrav src/modsimpleicestat.f90 /^ Dvravl/;" v module:modsimpleicestat -Dvravl src/addon/modbulkmicrostat.f90 /^ qrmn , &$/;" v module:modbulkmicrostat Dvravl src/modbulkmicrostat.f90 /^ qrmn , &$/;" v module:modbulkmicrostat Dvravl src/modsimpleicestat.f90 /^ qrmn , &$/;" v module:modsimpleicestat Dvrmax src/addon/modbulkmicrodata.f90 /^ ,Dvrmax /;" v module:modbulkmicrodata Dvrmax src/modmicrodata.f90 /^ ,Dvrmax /;" v module:modmicrodata Dvrmin src/addon/modbulkmicrodata.f90 /^ ,Dvrmin /;" v module:modbulkmicrodata Dvrmin src/modmicrodata.f90 /^ ,Dvrmin /;" v module:modmicrodata -Dvrmn src/addon/modbulkmicrostat.f90 /^ Dvrav , &$/;" v module:modbulkmicrostat Dvrmn src/modbulkmicrostat.f90 /^ Dvrav , &$/;" v module:modbulkmicrostat Dvrmn src/modsimpleicestat.f90 /^ Dvrav , &$/;" v module:modsimpleicestat -E src/addon/modchem.f90 /^ real E$/;" k type:RCdef E src/modchem.f90 /^ real E$/;" k type:RCdef E1 src/modsurface.f90 /^ function E1(/;" f module:modsurface Eact0 src/modsurfdata.f90 /^ real :: Eact0 /;" v module:modsurfdata -F src/addon/modchem.f90 /^ real F$/;" k type:RCdef F src/modchem.f90 /^ real F$/;" k type:RCdef -FIT src/addon/modchem.f90 /^subroutine FIT(/;" s module:modchem FIT src/modchem.f90 /^subroutine FIT(/;" s module:modchem -Form src/addon/modchem.f90 /^ type,PUBLIC :: Form$/;" t module:modchem Form src/modchem.f90 /^ type,PUBLIC :: Form$/;" t module:modchem -G src/addon/modchem.f90 /^ real G$/;" k type:RCdef G src/modchem.f90 /^ real G$/;" k type:RCdef G0 src/modsurfdata.f90 /^ real, allocatable :: G0 /;" v module:modsurfdata G0_patch src/modtimestat.f90 /^ real,allocatable, dimension(:,:) :: Qnet_patch, H_patch, LE_patch, G0_patch,/;" v module:modtimestat G0id src/addon/modnetcdfmovie.f90 /^ integer :: Hid, LEid, G0id,/;" v module:modnetcdfmovie GPoint src/rrlw_ncpar.f90 /^ band = 16, &$/;" v module:rrlw_ncpar -GPoint src/rrsw_ncpar.f90 /^ band = 14, &$/;" v module:rrsw_ncpar +GPoint src/rrsw_ncpar.f90 /^ band = 14, &$/;" v module:rrsw_ncpar GPointSet src/rrlw_ncpar.f90 /^ GPoint = 16, &$/;" v module:rrlw_ncpar -GPointSet src/rrsw_ncpar.f90 /^ GPoint = 16, &$/;" v module:rrsw_ncpar +GPointSet src/rrsw_ncpar.f90 /^ GPoint = 16, &$/;" v module:rrsw_ncpar H src/modsurfdata.f90 /^ real, allocatable :: H /;" v module:modsurfdata -H2O src/addon/modchem.f90 /^ type (location) :: INERT, PRODUC , O3, O1D, NO2, NO, NO3, N2O5, HNO3, RH, R, ISO, RO2, H2O2/;" v module:modchem H2O src/modchem.f90 /^ type (location) :: INERT, PRODUC , O3, NO2, NO, NO3, N2O5, HNO3, RH, R, ISO, H2O2/;" v module:modchem -H2O2 src/addon/modchem.f90 /^ type (location) :: INERT, PRODUC , O3, O1D, NO2, NO, NO3, N2O5, HNO3, RH, R, ISO, RO2, H2O2,/;" v module:modchem H2O2 src/modchem.f90 /^ type (location) :: INERT, PRODUC , O3, NO2, NO, NO3, N2O5, HNO3, RH, R, ISO, H2O2,/;" v module:modchem -H2SO4 src/addon/modchem.f90 /^ type (location) :: INERT, PRODUC , O3, O1D, NO2, NO, NO3, N2O5, HNO3, RH, R, ISO, RO2, H2O2, HO2, HO, CO, CO2, H2O, NH3, H2SO4,/;" v module:modchem H2SO4 src/modchem.f90 /^ type (location) :: INERT, PRODUC , O3, NO2, NO, NO3, N2O5, HNO3, RH, R, ISO, H2O2, HO2, HO, CO, CO2, H2O, NH3, H2SO4$/;" v module:modchem -HNO3 src/addon/modchem.f90 /^ type (location) :: INERT, PRODUC , O3, O1D, NO2, NO, NO3, N2O5, HNO3,/;" v module:modchem HNO3 src/modchem.f90 /^ type (location) :: INERT, PRODUC , O3, NO2, NO, NO3, N2O5, HNO3,/;" v module:modchem -HO src/addon/modchem.f90 /^ type (location) :: INERT, PRODUC , O3, O1D, NO2, NO, NO3, N2O5, HNO3, RH, R, ISO, RO2, H2O2, HO2/;" v module:modchem HO src/modchem.f90 /^ type (location) :: INERT, PRODUC , O3, NO2, NO, NO3, N2O5, HNO3, RH, R, ISO, H2O2, HO2/;" v module:modchem -HO2 src/addon/modchem.f90 /^ type (location) :: INERT, PRODUC , O3, O1D, NO2, NO, NO3, N2O5, HNO3, RH, R, ISO, RO2, H2O2, HO2,/;" v module:modchem HO2 src/modchem.f90 /^ type (location) :: INERT, PRODUC , O3, NO2, NO, NO3, N2O5, HNO3, RH, R, ISO, H2O2, HO2,/;" v module:modchem H_patch src/modtimestat.f90 /^ real,allocatable, dimension(:,:) :: Qnet_patch, H_patch,/;" v module:modtimestat Hid src/addon/modnetcdfmovie.f90 /^ integer :: Hid,/;" v module:modnetcdfmovie -INERT src/addon/modchem.f90 /^ type (location) :: INERT,/;" v module:modchem INERT src/modchem.f90 /^ type (location) :: INERT,/;" v module:modchem -ISO src/addon/modchem.f90 /^ type (location) :: INERT, PRODUC , O3, O1D, NO2, NO, NO3, N2O5, HNO3, RH, R, ISO,/;" v module:modchem ISO src/modchem.f90 /^ type (location) :: INERT, PRODUC , O3, NO2, NO, NO3, N2O5, HNO3, RH, R, ISO,/;" v module:modchem -ITER src/addon/modchem.f90 /^subroutine ITER(/;" s module:modchem ITER src/modchem.f90 /^subroutine ITER(/;" s module:modchem IWP_slice src/modraddata.f90 /^ real(kind=kind_rb),allocatable,dimension(:,:) :: LWP_slice,IWP_slice /;" v module:modraddata Ke src/modsurfdata.f90 /^ real :: Ke /;" v module:modsurfdata -Keff src/addon/modchem.f90 /^ real Keff /;" k type:RCdef Keff src/modchem.f90 /^ real Keff /;" k type:RCdef -KeySpeciesLower src/rrsw_ncpar.f90 /^ real(kind=rb), dimension(keylower) :: KeySpeciesLower /;" v module:rrsw_ncpar -KeySpeciesNamesLower src/rrsw_ncpar.f90 /^ character(len = maxKeySpeciesNameLength), dimension(band,maxKeySpeciesNames), parameter :: &$/;" v module:rrsw_ncpar -KeySpeciesNamesUpper src/rrsw_ncpar.f90 /^ character(len = maxKeySpeciesNameLength), dimension(band,maxKeySpeciesNames), parameter :: &$/;" v module:rrsw_ncpar -KeySpeciesUpper src/rrsw_ncpar.f90 /^ real(kind=rb), dimension(keyupper) :: KeySpeciesUpper /;" v module:rrsw_ncpar -Kindex src/addon/modchem.f90 /^ integer Kindex /;" k type:RCdef +KeySpeciesLower src/rrsw_ncpar.f90 /^ real(kind=rb), dimension(keylower) :: KeySpeciesLower /;" v module:rrsw_ncpar +KeySpeciesNamesLower src/rrsw_ncpar.f90 /^ character(len = maxKeySpeciesNameLength), dimension(band,maxKeySpeciesNames), parameter :: &$/;" v module:rrsw_ncpar +KeySpeciesNamesUpper src/rrsw_ncpar.f90 /^ character(len = maxKeySpeciesNameLength), dimension(band,maxKeySpeciesNames), parameter :: &$/;" v module:rrsw_ncpar +KeySpeciesUpper src/rrsw_ncpar.f90 /^ real(kind=rb), dimension(keyupper) :: KeySpeciesUpper /;" v module:rrsw_ncpar Kindex src/modchem.f90 /^ integer Kindex /;" k type:RCdef -Kreact src/addon/modchem.f90 /^ real Kreact /;" k type:RCdef Kreact src/modchem.f90 /^ real Kreact /;" k type:RCdef Kt src/addon/modbulkmicrodata.f90 /^ ,Kt /;" v module:modbulkmicrodata Kt src/modmicrodata.f90 /^ ,Kt /;" v module:modmicrodata @@ -167,7 +130,6 @@ LE src/modsurfdata.f90 /^ real, allocatable :: LE /;" v module:modsurfdata LE_patch src/modtimestat.f90 /^ real,allocatable, dimension(:,:) :: Qnet_patch, H_patch, LE_patch,/;" v module:modtimestat LEid src/addon/modnetcdfmovie.f90 /^ integer :: Hid, LEid,/;" v module:modnetcdfmovie LMASK src/rad_rndnmb.f90 /^ integer, parameter :: LMASK /;" v module:RandomNumbers -LOSS src/addon/modchem.f90 /^ integer PRODUCTION, LOSS$/;" v module:modchem LOSS src/modchem.f90 /^ integer PRODUCTION, LOSS$/;" v module:modchem LWP_slice src/modraddata.f90 /^ real(kind=kind_rb),allocatable,dimension(:,:) :: LWP_slice,/;" v module:modraddata LW_dn_TOA src/modfields.f90 /^ real, allocatable :: SW_up_TOA(:,:), SW_dn_TOA(:,:), LW_up_TOA(:,:), LW_dn_TOA(/;" v module:modfields @@ -178,81 +140,51 @@ LW_up_TOA src/modraddata.f90 /^ real, allocatable :: SW_up_TOA(:,:), SW_dn_TOA( LW_up_ca_TOA src/modraddata.f90 /^ real, allocatable :: SW_up_ca_TOA(:,:), SW_dn_ca_TOA(:,:), LW_up_ca_TOA(/;" v module:modraddata M src/rad_rndnmb.f90 /^ integer, parameter :: blockSize = 624, &$/;" v module:RandomNumbers MATRIX_A src/rad_rndnmb.f90 /^ M = 397, &$/;" v module:RandomNumbers -MVK src/addon/modchem.f90 /^ type (location) :: INERT, PRODUC , O3, O1D, NO2, NO, NO3, N2O5, HNO3, RH, R, ISO, RO2, H2O2, HO2, HO, CO, CO2, H2O, NH3, H2SO4, CH2O, CH3O2, MVK$/;" v module:modchem -MW_H2O src/addon/modchem.f90 /^ real, parameter :: MW_H2O /;" v module:modchem MW_H2O src/modchem.f90 /^ real, parameter :: MW_H2O /;" v module:modchem -MW_air src/addon/modchem.f90 /^ real, parameter :: MW_air /;" v module:modchem MW_air src/modchem.f90 /^ real, parameter :: MW_air /;" v module:modchem -N2O5 src/addon/modchem.f90 /^ type (location) :: INERT, PRODUC , O3, O1D, NO2, NO, NO3, N2O5,/;" v module:modchem N2O5 src/modchem.f90 /^ type (location) :: INERT, PRODUC , O3, NO2, NO, NO3, N2O5,/;" v module:modchem NAMAGScross src/modAGScross.f90 /^ namelist\/NAMAGScross\//;" n subroutine:initAGScross -NAMBUDGET src/addon/modbudget.f90 /^ namelist\/NAMBUDGET\//;" n subroutine:initbudget NAMBUDGET src/modbudget.f90 /^ namelist\/NAMBUDGET\//;" n subroutine:initbudget -NAMBULKMICROSTAT src/addon/modbulkmicrostat.f90 /^ namelist\/NAMBULKMICROSTAT\//;" n subroutine:initbulkmicrostat NAMBULKMICROSTAT src/modbulkmicrostat.f90 /^ namelist\/NAMBULKMICROSTAT\//;" n subroutine:initbulkmicrostat NAMCANOPY src/modcanopy.f90 /^ namelist\/NAMCANOPY\//;" n subroutine:initcanopy NAMCAPE src/modcape.f90 /^ namelist\/NAMCAPE\//;" n subroutine:initcape -NAMCHECKSIM src/addon/modchecksim.f90 /^ namelist\/NAMCHECKSIM\//;" n subroutine:initchecksim NAMCHECKSIM src/modchecksim.f90 /^ namelist\/NAMCHECKSIM\//;" n subroutine:initchecksim -NAMCHEM src/addon/modchem.f90 /^ namelist\/NAMCHEM\//;" n subroutine:initchem NAMCHEM src/modchem.f90 /^ namelist\/NAMCHEM\//;" n subroutine:initchem -NAMCLOUDFIELD src/addon/modcloudfield.f90 /^ namelist\/NAMCLOUDFIELD\//;" n subroutine:initcloudfield NAMCLOUDFIELD src/modcloudfield.f90 /^ namelist\/NAMCLOUDFIELD\//;" n subroutine:initcloudfield -NAMCROSSSECTION src/addon/modcrosssection.f90 /^ namelist\/NAMCROSSSECTION\//;" n subroutine:initcrosssection NAMCROSSSECTION src/modcrosssection.f90 /^ namelist\/NAMCROSSSECTION\//;" n subroutine:initcrosssection NAMDE src/modradiation.f90 /^ namelist\/NAMDE\//;" n subroutine:initradiation -NAMFIELDDUMP src/addon/modfielddump.f90 /^ namelist\/NAMFIELDDUMP\//;" n subroutine:initfielddump NAMFIELDDUMP src/modfielddump.f90 /^ namelist\/NAMFIELDDUMP\//;" n subroutine:initfielddump -NAMGENSTAT src/addon/modgenstat.f90 /^ namelist\/NAMGENSTAT\//;" n subroutine:initgenstat NAMGENSTAT src/modgenstat.f90 /^ namelist\/NAMGENSTAT\//;" n subroutine:initgenstat -NAMHETEROSTATS src/addon/modheterostats.f90 /^ namelist\/NAMHETEROSTATS\//;" n subroutine:initheterostats NAMHETEROSTATS src/modheterostats.f90 /^ namelist\/NAMHETEROSTATS\//;" n subroutine:initheterostats NAMLSMCROSSSECTION src/modlsmcrosssection.f90 /^ namelist\/NAMLSMCROSSSECTION\//;" n subroutine:initlsmcrosssection NAMLSMSTAT src/modlsmstat.f90 /^ namelist\/NAMLSMSTAT\//;" n subroutine:initlsmstat -NAMMICROPHYSICS src/addon/modmicrophysics.f90 /^ namelist\/NAMMICROPHYSICS\//;" n subroutine:initmicrophysics NAMMICROPHYSICS src/modmicrophysics.f90 /^ namelist\/NAMMICROPHYSICS\//;" n subroutine:initmicrophysics NAMNETCDFMOVIE src/addon/modnetcdfmovie.f90 /^ namelist\/NAMNETCDFMOVIE\//;" n subroutine:initnetcdfmovie NAMNETCDFSTATS src/addon/modnetcdfstats.f90 /^ namelist\/NAMNETCDFSTATS\//;" n subroutine:initnetcdfstats -NAMNETCDFSTATS src/addon/modstat_nc.f90 /^ namelist\/NAMNETCDFSTATS\//;" n subroutine:initstat_nc -NAMNETCDFSTATS src/addon/stat_nc_dummy.f90 /^ namelist\/NAMNETCDFSTATS\//;" n subroutine:initstat_nc NAMNETCDFSTATS src/modstat_nc.f90 /^ namelist\/NAMNETCDFSTATS\//;" n subroutine:initstat_nc -NAMNUDGE src/addon/modnudge.f90 /^ namelist \/NAMNUDGE\//;" n subroutine:initnudge NAMNUDGE src/modnudge.f90 /^ namelist \/NAMNUDGE\//;" n subroutine:initnudge NAMPARTICLES src/addon/modparticles.f90 /^ namelist\/NAMPARTICLES\//;" n subroutine:initparticles NAMRADIATION src/modradiation.f90 /^ namelist\/NAMRADIATION\//;" n subroutine:initradiation -NAMRADSTAT src/addon/modradstat.f90 /^ namelist\/NAMRADSTAT\//;" n subroutine:initradstat NAMRADSTAT src/modradstat.f90 /^ namelist\/NAMRADSTAT\//;" n subroutine:initradstat -NAMSAMPLING src/addon/modsampling.f90 /^ namelist\/NAMSAMPLING\//;" n subroutine:initsampling NAMSAMPLING src/modsampling.f90 /^ namelist\/NAMSAMPLING\//;" n subroutine:initsampling NAMSIMPLEICESTAT src/modsimpleicestat.f90 /^ namelist\/NAMSIMPLEICESTAT\//;" n subroutine:initsimpleicestat -NAMSTATTEND src/addon/modstattend.f90 /^ namelist\/NAMSTATTEND\//;" n subroutine:initstattend NAMSTATTEND src/modstattend.f90 /^ namelist\/NAMSTATTEND\//;" n subroutine:initstattend NAMSTRESS src/addon/modstress.f90 /^ namelist\/NAMSTRESS\//;" n subroutine:initstressbudget NAMSUBGRID src/modsubgrid.f90 /^ namelist\/NAMSUBGRID\//;" n subroutine:subgridnamelist NAMSURFACE src/modsurface.f90 /^ namelist\/NAMSURFACE\//;" n subroutine:initsurface +NAMTESTBED src/modtestbed.f90 /^ namelist \/NAMTESTBED\//;" n subroutine:inittestbed NAMTILT src/addon/modtilt.f90 /^ namelist\/NAMTILT\//;" n subroutine:inittilt -NAMTIMESTAT src/addon/modtimestat.f90 /^ namelist\/NAMTIMESTAT\//;" n subroutine:inittimestat NAMTIMESTAT src/modtimestat.f90 /^ namelist\/NAMTIMESTAT\//;" n subroutine:inittimestat -NAMprojection src/addon/modprojection.f90 /^ namelist\/NAMprojection\//;" n subroutine:initprojection NAMprojection src/modprojection.f90 /^ namelist\/NAMprojection\//;" n subroutine:initprojection NAMquadrant src/modquadrant.f90 /^ namelist\/NAMquadrant\//;" n subroutine:initquadrant -NCCAA src/addon/modchem.f90 /^ integer,parameter :: NCCAA /;" v module:modchem NCCAA src/modchem.f90 /^ integer,parameter :: NCCAA /;" v module:modchem -NCCBA src/addon/modchem.f90 /^ integer,parameter :: NCCBA /;" v module:modchem NCCBA src/modchem.f90 /^ integer,parameter :: NCCBA /;" v module:modchem -NEWDT src/addon/modchem.f90 /^subroutine NEWDT(/;" s module:modchem NEWDT src/modchem.f90 /^subroutine NEWDT(/;" s module:modchem -NH3 src/addon/modchem.f90 /^ type (location) :: INERT, PRODUC , O3, O1D, NO2, NO, NO3, N2O5, HNO3, RH, R, ISO, RO2, H2O2, HO2, HO, CO, CO2, H2O, NH3,/;" v module:modchem NH3 src/modchem.f90 /^ type (location) :: INERT, PRODUC , O3, NO2, NO, NO3, N2O5, HNO3, RH, R, ISO, H2O2, HO2, HO, CO, CO2, H2O, NH3,/;" v module:modchem -NNSPEC src/addon/modchem.f90 /^ integer,parameter :: NNSPEC /;" v module:modchem NNSPEC src/modchem.f90 /^ integer,parameter :: NNSPEC /;" v module:modchem -NO src/addon/modchem.f90 /^ type (location) :: INERT, PRODUC , O3, O1D, NO2/;" v module:modchem NO src/modchem.f90 /^ type (location) :: INERT, PRODUC , O3, NO2/;" v module:modchem -NO2 src/addon/modchem.f90 /^ type (location) :: INERT, PRODUC , O3, O1D, NO2,/;" v module:modchem NO2 src/modchem.f90 /^ type (location) :: INERT, PRODUC , O3, NO2,/;" v module:modchem -NO3 src/addon/modchem.f90 /^ type (location) :: INERT, PRODUC , O3, O1D, NO2, NO, NO3,/;" v module:modchem NO3 src/modchem.f90 /^ type (location) :: INERT, PRODUC , O3, NO2, NO, NO3,/;" v module:modchem -Name_Number src/addon/modchem.f90 /^ type,PUBLIC :: Name_Number$/;" t module:modchem Name_Number src/modchem.f90 /^ type,PUBLIC :: Name_Number$/;" t module:modchem Nc src/addon/modbulkmicrodata.f90 /^ ,Nc /;" v module:modbulkmicrodata Nc src/modmicrodata.f90 /^ ,Nc /;" v module:modmicrodata @@ -260,10 +192,8 @@ Nc_0 src/addon/modbulkmicrodata.f90 /^ ,Nc_0 /;" v module:modbul Nc_0 src/modmicrodata.f90 /^ ,Nc_0 /;" v module:modmicrodata Nevap src/addon/modbulkmicrodata.f90 /^ ,Nevap /;" v module:modbulkmicrodata Nevap src/modmicrodata.f90 /^ ,Nevap /;" v module:modmicrodata -Npav src/addon/modbulkmicrostat.f90 /^ real, allocatable, dimension(:,:) :: Npav /;" v module:modbulkmicrostat Npav src/modbulkmicrostat.f90 /^ real, allocatable, dimension(:,:) :: Npav /;" v module:modbulkmicrostat Npav src/modsimpleicestat.f90 /^ real, allocatable, dimension(:,:) :: Npav /;" v module:modsimpleicestat -Npmn src/addon/modbulkmicrostat.f90 /^ real, allocatable, dimension(:,:) :: Npav , &$/;" v module:modbulkmicrostat Npmn src/modbulkmicrostat.f90 /^ real, allocatable, dimension(:,:) :: Npav , &$/;" v module:modbulkmicrostat Npmn src/modsimpleicestat.f90 /^ real, allocatable, dimension(:,:) :: Npav , &$/;" v module:modsimpleicestat Nr src/addon/modbulkmicrodata.f90 /^ real,allocatable,dimension(:,:,:) :: Nr,/;" v module:modbulkmicrodata @@ -272,33 +202,22 @@ Nr_spl src/addon/modbulkmicrodata.f90 /^ real,allocatable, dimension(:,:,:) :: Nr_spl src/modmicrodata.f90 /^ real,allocatable, dimension(:,:,:) :: qr_spl, Nr_spl$/;" v module:modmicrodata Nrp src/addon/modbulkmicrodata.f90 /^ real,allocatable,dimension(:,:,:) :: Nr,Nrp,/;" v module:modbulkmicrodata Nrp src/modmicrodata.f90 /^ real,allocatable,dimension(:,:,:) :: Nr,Nrp,/;" v module:modmicrodata -Nrrainav src/addon/modbulkmicrostat.f90 /^ Nrrainavl/;" v module:modbulkmicrostat Nrrainav src/modbulkmicrostat.f90 /^ Nrrainavl/;" v module:modbulkmicrostat Nrrainav src/modsimpleicestat.f90 /^ Nrrainavl/;" v module:modsimpleicestat -Nrrainavl src/addon/modbulkmicrostat.f90 /^ raincountmn , &$/;" v module:modbulkmicrostat Nrrainavl src/modbulkmicrostat.f90 /^ raincountmn , &$/;" v module:modbulkmicrostat Nrrainavl src/modsimpleicestat.f90 /^ raincountmn , &$/;" v module:modsimpleicestat -Nrrainmn src/addon/modbulkmicrostat.f90 /^ Nrrainav , &$/;" v module:modbulkmicrostat Nrrainmn src/modbulkmicrostat.f90 /^ Nrrainav , &$/;" v module:modbulkmicrostat Nrrainmn src/modsimpleicestat.f90 /^ Nrrainav , &$/;" v module:modsimpleicestat -O1D src/addon/modchem.f90 /^ type (location) :: INERT, PRODUC , O3, O1D,/;" v module:modchem -O3 src/addon/modchem.f90 /^ type (location) :: INERT, PRODUC , O3,/;" v module:modchem O3 src/modchem.f90 /^ type (location) :: INERT, PRODUC , O3,/;" v module:modchem -Order src/addon/modchem.f90 /^ integer Order /;" k type:Reaction Order src/modchem.f90 /^ integer Order /;" k type:Reaction PHYSICS src/modstartup.f90 /^ namelist\/PHYSICS\//;" n subroutine:startup -PL src/addon/modchem.f90 /^ type (Form) PL(/;" k type:Name_Number PL src/modchem.f90 /^ type (Form) PL(/;" k type:Name_Number -PL_scheme src/addon/modchem.f90 /^ type (Name_Number), allocatable ::PL_scheme(/;" v module:modchem PL_scheme src/modchem.f90 /^ type (Name_Number), allocatable ::PL_scheme(/;" v module:modchem -PRODUC src/addon/modchem.f90 /^ type (location) :: INERT, PRODUC /;" v module:modchem PRODUC src/modchem.f90 /^ type (location) :: INERT, PRODUC /;" v module:modchem -PRODUCTION src/addon/modchem.f90 /^ integer PRODUCTION,/;" v module:modchem PRODUCTION src/modchem.f90 /^ integer PRODUCTION,/;" v module:modchem -PorL src/addon/modchem.f90 /^ integer PorL /;" k type:Form PorL src/modchem.f90 /^ integer PorL /;" k type:Form Prandtl src/modsubgriddata.f90 /^ real :: Prandtl /;" v module:modsubgriddata -PressForeign src/rrsw_ncpar.f90 /^ real(kind=rb), dimension(pforeign) :: PressForeign /;" v module:rrsw_ncpar +PressForeign src/rrsw_ncpar.f90 /^ real(kind=rb), dimension(pforeign) :: PressForeign /;" v module:rrsw_ncpar Q10CO2 src/modsurfdata.f90 /^ real :: Q10CO2 /;" v module:modsurfdata Q10am src/modsurfdata.f90 /^ real :: Q10am /;" v module:modsurfdata Q10gm src/modsurfdata.f90 /^ real :: Q10gm /;" v module:modsurfdata @@ -307,7 +226,7 @@ Qnet_land src/modsurfdata.f90 /^ real :: Qnet_land(/;" v module:mo Qnet_patch src/modsurfdata.f90 /^ real, allocatable :: Qnet_patch(/;" v module:modsurfdata Qnet_patch src/modtimestat.f90 /^ real,allocatable, dimension(:,:) :: Qnet_patch,/;" v module:modtimestat Qnetav src/modsurfdata.f90 /^ real :: Qnetav /;" v module:modsurfdata -R src/addon/modchem.f90 /^ type (location) :: INERT/;" v module:modchem +Qnetavt src/modtimedep.f90 /^ real, allocatable :: Qnetavt /;" v module:modtimedep R src/modchem.f90 /^ type (location) :: INERT/;" v module:modchem R10 src/modsurfdata.f90 /^ real :: R10 /;" v module:modsurfdata RADB2 src/fftnew.f90 /^ subroutine RADB2 /;" s @@ -320,9 +239,7 @@ RADF3 src/fftnew.f90 /^ subroutine RADF3 /;" s RADF4 src/fftnew.f90 /^ subroutine RADF4 /;" s RADF5 src/fftnew.f90 /^ subroutine RADF5 /;" s RADFG src/fftnew.f90 /^ subroutine RADFG /;" s -RC src/addon/modchem.f90 /^ type (RCd/;" v module:modchem RC src/modchem.f90 /^ type (RCd/;" v module:modchem -RCdef src/addon/modchem.f90 /^ type RCdef$/;" t module:modchem RCdef src/modchem.f90 /^ type RCdef$/;" t module:modchem RFFTB src/fftnew.f90 /^ subroutine RFFTB /;" s RFFTB1 src/fftnew.f90 /^ subroutine RFFTB1 /;" s @@ -330,14 +247,10 @@ RFFTF src/fftnew.f90 /^ subroutine RFFTF /;" s RFFTF1 src/fftnew.f90 /^ subroutine RFFTF1 /;" s RFFTI src/fftnew.f90 /^ subroutine RFFTI /;" s RFFTI1 src/fftnew.f90 /^ subroutine RFFTI1 /;" s -RH src/addon/modchem.f90 /^ type (location) :: INERT, PRODUC , O3, O1D, NO2, NO, NO3, N2O5, HNO3, RH,/;" v module:modchem RH src/modchem.f90 /^ type (location) :: INERT, PRODUC , O3, NO2, NO, NO3, N2O5, HNO3, RH,/;" v module:modchem -RO2 src/addon/modchem.f90 /^ type (location) :: INERT, PRODUC , O3, O1D, NO2, NO, NO3, N2O5, HNO3, RH, R, ISO, RO2,/;" v module:modchem RUN src/modstartup.f90 /^ namelist\/RUN\//;" n subroutine:startup -RadDep src/addon/modchem.f90 /^ integer RadDep /;" k type:Reaction RadDep src/modchem.f90 /^ integer RadDep /;" k type:Reaction RandomNumbers src/rad_rndnmb.f90 /^module RandomNumbers$/;" m -Reaction src/addon/modchem.f90 /^ type Reaction$/;" t subroutine:inputchem Reaction src/modchem.f90 /^ type Reaction$/;" t subroutine:inputchem RespField src/modsurfdata.f90 /^ real, allocatable :: RespField /;" v module:modsurfdata Respav src/modsurfdata.f90 /^ real :: Respav /;" v module:modsurfdata @@ -365,28 +278,27 @@ Sc_num src/addon/modbulkmicrodata.f90 /^ ,Sc_num /;" v module:modbulkmic Sc_num src/modmicrodata.f90 /^ ,Sc_num /;" v module:modmicrodata SolarConstant src/modradfull.f90 /^ real,parameter :: SolarConstant /;" v module:modradfull T src/rrlw_ncpar.f90 /^ pforeign = 4, &$/;" v module:rrlw_ncpar -T src/rrsw_ncpar.f90 /^ pforeign = 4, &$/;" v module:rrsw_ncpar +T src/rrsw_ncpar.f90 /^ pforeign = 4, &$/;" v module:rrsw_ncpar T1Am src/modsurfdata.f90 /^ real :: T1Am /;" v module:modsurfdata T1gm src/modsurfdata.f90 /^ real :: T1gm /;" v module:modsurfdata T2Am src/modsurfdata.f90 /^ real :: T2Am /;" v module:modsurfdata T2gm src/modsurfdata.f90 /^ real :: T2gm /;" v module:modsurfdata TMASKB src/rad_rndnmb.f90 /^ integer, parameter :: TMASKB=/;" v module:RandomNumbers TMASKC src/rad_rndnmb.f90 /^ integer, parameter :: TMASKB= -1658038656, & ! (0x9d2c5680UL)$/;" v module:RandomNumbers -T_abs src/addon/modchem.f90 /^ real, allocatable :: T_abs(/;" v module:modchem T_abs src/modchem.f90 /^ real, allocatable :: T_abs(/;" v module:modchem Tdiff src/rrlw_ncpar.f90 /^ keyupper = 5, &$/;" v module:rrlw_ncpar -Tdiff src/rrsw_ncpar.f90 /^ keyupper = 5, &$/;" v module:rrsw_ncpar -Temp src/rrsw_ncpar.f90 /^ real(kind=rb), dimension(T) :: Temp /;" v module:rrsw_ncpar -TempDiffs src/rrsw_ncpar.f90 /^ real(kind=rb), dimension(Tdiff) :: TempDiffs /;" v module:rrsw_ncpar -TempForeignlower src/rrsw_ncpar.f90 /^ real(kind=rb), dimension(Tforeignlower) :: TempForeignlower /;" v module:rrsw_ncpar -TempForeignupper src/rrsw_ncpar.f90 /^ real(kind=rb), dimension(Tforeignupper) :: TempForeignupper /;" v module:rrsw_ncpar -TempSelf src/rrsw_ncpar.f90 /^ real(kind=rb), dimension(Tself) :: TempSelf /;" v module:rrsw_ncpar +Tdiff src/rrsw_ncpar.f90 /^ keyupper = 5, &$/;" v module:rrsw_ncpar +Temp src/rrsw_ncpar.f90 /^ real(kind=rb), dimension(T) :: Temp /;" v module:rrsw_ncpar +TempDiffs src/rrsw_ncpar.f90 /^ real(kind=rb), dimension(Tdiff) :: TempDiffs /;" v module:rrsw_ncpar +TempForeignlower src/rrsw_ncpar.f90 /^ real(kind=rb), dimension(Tforeignlower) :: TempForeignlower /;" v module:rrsw_ncpar +TempForeignupper src/rrsw_ncpar.f90 /^ real(kind=rb), dimension(Tforeignupper) :: TempForeignupper /;" v module:rrsw_ncpar +TempSelf src/rrsw_ncpar.f90 /^ real(kind=rb), dimension(Tself) :: TempSelf /;" v module:rrsw_ncpar Tforeign src/rrlw_ncpar.f90 /^ Tself = 10, &$/;" v module:rrlw_ncpar -Tforeignlower src/rrsw_ncpar.f90 /^ Tself = 10, &$/;" v module:rrsw_ncpar -Tforeignupper src/rrsw_ncpar.f90 /^ Tforeignlower = 3, &$/;" v module:rrsw_ncpar +Tforeignlower src/rrsw_ncpar.f90 /^ Tself = 10, &$/;" v module:rrsw_ncpar +Tforeignupper src/rrsw_ncpar.f90 /^ Tforeignlower = 3, &$/;" v module:rrsw_ncpar Tplanck src/rrlw_ncpar.f90 /^ T = 19, &$/;" v module:rrlw_ncpar Tself src/rrlw_ncpar.f90 /^ pupper = 47, &$/;" v module:rrlw_ncpar -Tself src/rrsw_ncpar.f90 /^ pupper = 47, &$/;" v module:rrsw_ncpar +Tself src/rrsw_ncpar.f90 /^ pupper = 47, &$/;" v module:rrsw_ncpar UMASK src/rad_rndnmb.f90 /^ integer, parameter :: LMASK = huge(M), & ! least significant r bits$/;" v module:RandomNumbers Wl src/modsurfdata.f90 /^ real, allocatable :: Wl /;" v module:modsurfdata Wl_land src/modsurfdata.f90 /^ real :: Wl_land(/;" v module:modsurfdata @@ -476,9 +388,7 @@ abso3bo src/rrsw_kg25.f90 /^ real(kind=rb) :: abso3ao(no25), abso3bo(/;" v ac src/addon/modbulkmicrodata.f90 /^ ,ac /;" v module:modbulkmicrodata ac src/modmicrodata.f90 /^ ,ac /;" v module:modmicrodata accrete src/modsimpleice.f90 /^ subroutine accrete$/;" s module:modsimpleice -accretion src/addon/modbulkmicro.f90 /^ subroutine accretion$/;" s module:modbulkmicro accretion src/modbulkmicro.f90 /^ subroutine accretion$/;" s module:modbulkmicro -active src/addon/modchem.f90 /^ logical active /;" k type:Name_Number active src/modchem.f90 /^ logical active /;" k type:Name_Number ad src/modsurfdata.f90 /^ real :: ad /;" v module:modsurfdata adjust src/modradfull.f90 /^ subroutine adjust /;" s module:modradfull @@ -526,14 +436,11 @@ asyice2 src/rrsw_cld.f90 /^ real(kind=rb) :: extice2(43,16:29), ssaice2(43, asyice3 src/rrsw_cld.f90 /^ real(kind=rb) :: extice3(46,16:29), ssaice3(46,16:29), asyice3(/;" v module:rrsw_cld asyliq1 src/rrsw_cld.f90 /^ real(kind=rb) :: extliq1(58,16:29), ssaliq1(58,16:29), asyliq1(/;" v module:rrsw_cld at src/modglobal.f90 /^ real,parameter :: at /;" v module:modglobal -atol src/addon/modchem.f90 /^ real atol$/;" k type:Name_Number -atol src/addon/modchem.f90 /^ real, allocatable :: atol(/;" v module:modchem atol src/modchem.f90 /^ real atol$/;" k type:Name_Number atol src/modchem.f90 /^ real, allocatable :: atol(/;" v module:modchem au src/addon/modbulkmicrodata.f90 /^ ,au /;" v module:modbulkmicrodata au src/modmicrodata.f90 /^ ,au /;" v module:modmicrodata author src/modglobal.f90 /^ character(80) :: author=/;" v module:modglobal -autoconversion src/addon/modbulkmicro.f90 /^ subroutine autoconversion$/;" s module:modbulkmicro autoconversion src/modbulkmicro.f90 /^ subroutine autoconversion$/;" s module:modbulkmicro autoconvert src/modsimpleice.f90 /^ subroutine autoconvert$/;" s module:modsimpleice avf src/addon/modbulkmicrodata.f90 /^ ,avf /;" v module:modbulkmicrodata @@ -544,7 +451,7 @@ b_tvsb src/addon/modbulkmicrodata.f90 /^ ,b_tvsb /;" v module:modbulkmic b_tvsb src/modmicrodata.f90 /^ ,b_tvsb /;" v module:modmicrodata band src/modradfull.f90 /^ TYPE (band_/;" v module:modradfull band src/rrlw_ncpar.f90 /^ Tplanck = 181, &$/;" v module:rrlw_ncpar -band src/rrsw_ncpar.f90 /^ T = 19, &$/;" v module:rrsw_ncpar +band src/rrsw_ncpar.f90 /^ T = 19, &$/;" v module:rrsw_ncpar band_properties src/modradfull.f90 /^ TYPE band_properties$/;" t module:modradfull barrou src/modmpi.f90 /^ subroutine barrou(/;" s module:modmpi baseprofs src/modstartup.f90 /^ subroutine baseprofs$/;" s module:modstartup @@ -558,11 +465,8 @@ betag src/modmicrodata.f90 /^ ,betag=/;" v module:modmicrodata betakessi src/modmicrodata.f90 /^ ,betakessi=/;" v module:modmicrodata betar src/modmicrodata.f90 /^ ,betar=/;" v module:modmicrodata betas src/modmicrodata.f90 /^ ,betas=/;" v module:modmicrodata -blh_nsamp src/addon/modtimestat.f90 /^ integer :: blh_nsamp /;" v module:modtimestat blh_nsamp src/modtimestat.f90 /^ integer :: blh_nsamp /;" v module:modtimestat -blh_sign src/addon/modtimestat.f90 /^ real :: blh_thres=-1 ,blh_sign=/;" v module:modtimestat blh_sign src/modtimestat.f90 /^ real :: blh_thres=-1 ,blh_sign=/;" v module:modtimestat -blh_thres src/addon/modtimestat.f90 /^ real :: blh_thres=/;" v module:modtimestat blh_thres src/modtimestat.f90 /^ real :: blh_thres=/;" v module:modtimestat bllmx src/modradfull.f90 /^ real, save :: bllmx,/;" v module:modradfull blockSize src/rad_rndnmb.f90 /^ integer, parameter :: blockSize /;" v module:RandomNumbers @@ -577,19 +481,13 @@ br src/modmicrodata.f90 /^ ,br /;" v module:modmicrodata brlmn src/modradfull.f90 /^ real, save :: bllmx, brlmn$/;" v module:modradfull bt src/modglobal.f90 /^ real,parameter :: bt /;" v module:modglobal btime src/modglobal.f90 /^ integer(kind=longint) :: btime /;" v module:modglobal -budgetstat src/addon/modbudget.f90 /^ subroutine budgetstat$/;" s module:modbudget budgetstat src/modbudget.f90 /^ subroutine budgetstat$/;" s module:modbudget -budgmn src/addon/modbudget.f90 /^ real, allocatable :: budgmn(/;" v module:modbudget budgmn src/modbudget.f90 /^ real, allocatable :: budgmn(/;" v module:modbudget bufin src/modfft2d.f90 /^ real, dimension(:), allocatable :: bufin,/;" v module:modfft2d bufout src/modfft2d.f90 /^ real, dimension(:), allocatable :: bufin, bufout$/;" v module:modfft2d -bulkmicro src/addon/modbulkmicro.f90 /^ subroutine bulkmicro$/;" s module:modbulkmicro bulkmicro src/modbulkmicro.f90 /^ subroutine bulkmicro$/;" s module:modbulkmicro -bulkmicrostat src/addon/modbulkmicrostat.f90 /^ subroutine bulkmicrostat$/;" s module:modbulkmicrostat bulkmicrostat src/modbulkmicrostat.f90 /^ subroutine bulkmicrostat$/;" s module:modbulkmicrostat -bulkmicrotend src/addon/modbulkmicrostat.f90 /^ subroutine bulkmicrotend$/;" s module:modbulkmicrostat bulkmicrotend src/modbulkmicrostat.f90 /^ subroutine bulkmicrotend$/;" s module:modbulkmicrostat -buomn src/addon/modbudget.f90 /^ real, allocatable :: buomn(/;" v module:modbudget buomn src/modbudget.f90 /^ real, allocatable :: buomn(/;" v module:modbudget bvf src/addon/modbulkmicrodata.f90 /^ ,bvf /;" v module:modbulkmicrodata bvf src/modmicrodata.f90 /^ ,bvf /;" v module:modmicrodata @@ -602,14 +500,10 @@ c_evapkk src/addon/modbulkmicrodata.f90 /^ ,c_evapkk /;" v module:modbul c_evapkk src/modmicrodata.f90 /^ ,c_evapkk /;" v module:modmicrodata c_tvsb src/addon/modbulkmicrodata.f90 /^ ,c_tvsb /;" v module:modbulkmicrodata c_tvsb src/modmicrodata.f90 /^ ,c_tvsb /;" v module:modmicrodata -calc_K src/addon/modchem.f90 /^subroutine calc_K(/;" s module:modchem calc_K src/modchem.f90 /^subroutine calc_K(/;" s module:modchem calc_halflev src/modthermodynamics.f90 /^ subroutine calc_halflev$/;" s module:modthermodynamics -calcblheight src/addon/modtimestat.f90 /^ subroutine calcblheight$/;" s module:modtimestat calcblheight src/modtimestat.f90 /^ subroutine calcblheight$/;" s module:modtimestat -calccourant src/addon/modchecksim.f90 /^ subroutine calccourant$/;" s module:modchecksim calccourant src/modchecksim.f90 /^ subroutine calccourant$/;" s module:modchecksim -calcpeclet src/addon/modchecksim.f90 /^ subroutine calcpeclet$/;" s module:modchecksim calcpeclet src/modchecksim.f90 /^ subroutine calcpeclet$/;" s module:modchecksim caldefh src/addon/modtilt.f90 /^ subroutine caldefh$/;" s module:modtilt calthv src/modthermodynamics.f90 /^ subroutine calthv$/;" s module:modthermodynamics @@ -620,7 +514,6 @@ canopyu src/modcanopy.f90 /^ subroutine canopyu /;" s module:modcanopy canopyv src/modcanopy.f90 /^ subroutine canopyv /;" s module:modcanopy canopyw src/modcanopy.f90 /^ subroutine canopyw /;" s module:modcanopy cbari src/rrsw_cld.f90 /^ real(kind=rb) :: abari(5),bbari(5),cbari(/;" v module:rrsw_cld -cc src/addon/modtimestat.f90 /^ real :: cc,/;" v module:modtimestat cc src/modtimestat.f90 /^ real :: cc,/;" v module:modtimestat cc_field src/modtimestat.f90 /^ real,allocatable, dimension(:,:) :: zbase_field, ztop_field, cc_field,/;" v module:modtimestat cc_patch src/modtimestat.f90 /^ real,allocatable, dimension(:,:) :: cc_patch,/;" v module:modtimestat @@ -661,9 +554,7 @@ cfc22 src/modraddata.f90 /^ o3, co2, ch4, n2o, o2, cfc11, cfc12, cfc22,/;" cfc22adj src/rrlw_kg08.f90 /^ real(kind=rb) , dimension(ng8) :: cfc22adj$/;" v module:rrlw_kg08 cfc22adjo src/rrlw_kg08.f90 /^ real(kind=rb) , dimension(no8) :: cfc22adjo$/;" v module:rrlw_kg08 cfc22vmr src/modraddata.f90 /^ cfc12vmr, &$/;" v module:modraddata -cfracav src/addon/modgenstat.f90 /^ real, allocatable :: cfracav /;" v module:modgenstat cfracav src/modgenstat.f90 /^ real, allocatable :: cfracav /;" v module:modgenstat -cfracmn src/addon/modgenstat.f90 /^ real, allocatable :: qtmn (:) ,qlmn (:), qlhmn(:),cfracmn(/;" v module:modgenstat cfracmn src/modgenstat.f90 /^ real, allocatable :: qtmn (:) ,qlmn (:), qlhmn(:),cfracmn(/;" v module:modgenstat cgils_case_nr src/modraddata.f90 /^ integer :: cgils_case_nr$/;" v module:modraddata ch1 src/modsubgriddata.f90 /^ real :: ch1 /;" v module:modsubgriddata @@ -672,22 +563,15 @@ ch4 src/modraddata.f90 /^ o3, co2, ch4,/;" v module:modraddata ch4vmr src/modraddata.f90 /^ co2vmr, &$/;" v module:modraddata checkbound src/addon/modparticles.f90 /^ subroutine checkbound(/;" s module:modparticles checkinitvalues src/modstartup.f90 /^ subroutine checkinitvalues$/;" s module:modstartup -checksim src/addon/modchecksim.f90 /^ subroutine checksim$/;" s module:modchecksim checksim src/modchecksim.f90 /^ subroutine checksim$/;" s module:modchecksim -cheight src/addon/modcrosssection.f90 /^ character(4) :: cheight$/;" v module:modcrosssection cheight src/modcrosssection.f90 /^ character(4) :: cheight$/;" v module:modcrosssection cheight src/modlsmcrosssection.f90 /^ character(4) :: cheight$/;" v module:modlsmcrosssection -chem_nr src/addon/modchem.f90 /^ integer chem_nr$/;" k type:Chem chem_nr src/modchem.f90 /^ integer chem_nr$/;" k type:Chem -chem_number src/addon/modchem.f90 /^ integer chem_number /;" k type:Name_Number chem_number src/modchem.f90 /^ integer chem_number /;" k type:Name_Number -chemmovie src/addon/modchem.f90 /^subroutine chemmovie(/;" s module:modchem chemmovie src/modchem.f90 /^subroutine chemmovie(/;" s module:modchem chi_half src/modthermodynamics.f90 /^ real :: chi_half=/;" v module:modthermodynamics chi_mls src/rrlw_ref.f90 /^ real(kind=rb) :: chi_mls(/;" v module:rrlw_ref -chkdiv src/addon/modchecksim.f90 /^ subroutine chkdiv$/;" s module:modchecksim chkdiv src/modchecksim.f90 /^ subroutine chkdiv$/;" s module:modchecksim -choffset src/addon/modchem.f90 /^ integer choffset /;" v module:modchem choffset src/modchem.f90 /^ integer choffset /;" v module:modchem ciField src/modsurfdata.f90 /^ real, allocatable :: ciField /;" v module:modsurfdata ci_inf src/modsurfdata.f90 /^ real :: ci_inf /;" v module:modsurfdata @@ -706,16 +590,12 @@ closure src/modsubgrid.f90 /^ subroutine closure$/;" s module:modsubgrid cloudFrac src/modraddata.f90 /^ real(kind=kind_rb),allocatable,dimension(:,:) :: LWP_slice,IWP_slice ,cloudFrac,/;" v module:modraddata cloud_water src/modradfull.f90 /^ subroutine cloud_water /;" s module:modradfull cloudarea src/modfields.f90 /^ real, allocatable :: cloudarea(/;" v module:modfields -cloudcountav src/addon/modbulkmicrostat.f90 /^ cloudcountavl/;" v module:modbulkmicrostat cloudcountav src/modbulkmicrostat.f90 /^ cloudcountavl/;" v module:modbulkmicrostat cloudcountav src/modsimpleicestat.f90 /^ cloudcountavl/;" v module:modsimpleicestat -cloudcountavl src/addon/modbulkmicrostat.f90 /^ prec_prcmn , &$/;" v module:modbulkmicrostat cloudcountavl src/modbulkmicrostat.f90 /^ prec_prcmn , &$/;" v module:modbulkmicrostat cloudcountavl src/modsimpleicestat.f90 /^ prec_prcmn , &$/;" v module:modsimpleicestat -cloudcountmn src/addon/modbulkmicrostat.f90 /^ cloudcountav , &$/;" v module:modbulkmicrostat cloudcountmn src/modbulkmicrostat.f90 /^ cloudcountav , &$/;" v module:modbulkmicrostat cloudcountmn src/modsimpleicestat.f90 /^ cloudcountav , &$/;" v module:modsimpleicestat -cloudfield src/addon/modcloudfield.f90 /^ subroutine cloudfield$/;" s module:modcloudfield cloudfield src/modcloudfield.f90 /^ subroutine cloudfield$/;" s module:modcloudfield cloudnr src/modfields.f90 /^ real, allocatable :: cloudnr(/;" v module:modfields cloudnrold src/modfields.f90 /^ real, allocatable :: cloudnrold(/;" v module:modfields @@ -758,9 +638,7 @@ cnstZenith src/modraddata.f90 /^ real :: cnstZenith=/;" v module:modraddata co2 src/modraddata.f90 /^ o3, co2,/;" v module:modraddata co2factor src/modraddata.f90 /^ real :: co2factor /;" v module:modraddata co2vmr src/modraddata.f90 /^ o3vmr, &$/;" v module:modraddata -coef src/addon/modchem.f90 /^ real coef /;" k type:Form coef src/modchem.f90 /^ real coef /;" k type:Form -coeff src/addon/modchem.f90 /^ real coeff$/;" k type:Chem coeff src/modchem.f90 /^ real coeff$/;" k type:Chem coefft src/modradfull.f90 /^ subroutine coefft(/;" s module:modradfull coefft0 src/modradfull.f90 /^ subroutine coefft0(/;" s module:modradfull @@ -768,18 +646,13 @@ combineOpticalProperties src/modradfull.f90 /^ subroutine combineOpticalPropert comm3d src/modmpi.f90 /^ integer :: comm3d,/;" v module:modmpi commcol src/modmpi.f90 /^ integer :: comm3d, commrow, commcol$/;" v module:modmpi commrow src/modmpi.f90 /^ integer :: comm3d, commrow,/;" v module:modmpi -comp1 src/addon/modchem.f90 /^ integer comp1 /;" k type:Form comp1 src/modchem.f90 /^ integer comp1 /;" k type:Form -comp2 src/addon/modchem.f90 /^ integer comp2 /;" k type:Form comp2 src/modchem.f90 /^ integer comp2 /;" k type:Form -comp3 src/addon/modchem.f90 /^ integer comp3 /;" k type:Form comp3 src/modchem.f90 /^ integer comp3 /;" k type:Form -comp4 src/addon/modchem.f90 /^ integer comp4 /;" k type:Form comp4 src/modchem.f90 /^ integer comp4 /;" k type:Form computeIRBandWeights src/modradfull.f90 /^ subroutine computeIRBandWeights(/;" s module:modradfull computeRe_Liquid src/modradrrtmg.f90 /^ elemental real function computeRe_Liquid(/;" f module:modradrrtmg computeSolarBandWeights src/modradfull.f90 /^ subroutine computeSolarBandWeights(/;" s module:modradfull -convppb src/addon/modchem.f90 /^ real, allocatable :: T_abs(:,:),convppb(/;" v module:modchem convppb src/modchem.f90 /^ real, allocatable :: T_abs(:,:),convppb(/;" v module:modchem copy_band_properties src/modradfull.f90 /^ function copy_band_properties(/;" f module:modradfull coriolis src/modforces.f90 /^ subroutine coriolis$/;" s module:modforces @@ -789,25 +662,18 @@ cp src/modglobal.f90 /^ real,parameter :: cp /;" v module:modglobal cpdair src/rrlw_ncpar.f90 /^ real(kind=rb), parameter :: cpdair /;" v module:rrlw_ncpar cpdair src/rrsw_ncpar.f90 /^ real(kind=rb), parameter :: cpdair /;" v module:rrsw_ncpar cpr src/modglobal.f90 /^ real,parameter :: cpr /;" v module:modglobal -cross src/addon/modcrosssection.f90 /^ integer :: cross$/;" v module:modcrosssection cross src/modcrosssection.f90 /^ integer :: cross$/;" v module:modcrosssection -crossheight src/addon/modcrosssection.f90 /^ integer :: crossheight(/;" v module:modcrosssection crossheight src/modcrosssection.f90 /^ integer :: crossheight(/;" v module:modcrosssection crossheight src/modlsmcrosssection.f90 /^ integer :: crossheight$/;" v module:modlsmcrosssection -crossortho src/addon/modcrosssection.f90 /^ integer :: crossortho /;" v module:modcrosssection crossortho src/modcrosssection.f90 /^ integer :: crossortho /;" v module:modcrosssection -crossplane src/addon/modcrosssection.f90 /^ integer :: crossplane /;" v module:modcrosssection crossplane src/modcrosssection.f90 /^ integer :: crossplane /;" v module:modcrosssection crossplane src/modlsmcrosssection.f90 /^ integer :: crossplane /;" v module:modlsmcrosssection -crosssection src/addon/modcrosssection.f90 /^ subroutine crosssection$/;" s module:modcrosssection crosssection src/modcrosssection.f90 /^ subroutine crosssection$/;" s module:modcrosssection cs src/modsubgriddata.f90 /^ real :: cs /;" v module:modsubgriddata csed src/addon/modbulkmicrodata.f90 /^ real :: csed /;" v module:modbulkmicrodata csed src/modmicrodata.f90 /^ real :: csed /;" v module:modmicrodata csz src/modsubgriddata.f90 /^ real, allocatable :: csz(/;" v module:modsubgriddata -cszav src/addon/modgenstat.f90 /^ real, allocatable :: cszav(/;" v module:modgenstat cszav src/modgenstat.f90 /^ real, allocatable :: cszav(/;" v module:modgenstat -cszmn src/addon/modgenstat.f90 /^ real, allocatable :: cszmn(/;" v module:modgenstat cszmn src/modgenstat.f90 /^ real, allocatable :: cszmn(/;" v module:modgenstat cu src/modglobal.f90 /^ real :: cu /;" v module:modglobal currentElement src/rad_rndnmb.f90 /^ integer :: currentElement /;" k type:randomNumberSequence @@ -822,13 +688,12 @@ cyclicx src/addon/modstress.f90 /^ subroutine cyclicx(/;" s module:modstress d4stream src/modradfull.f90 /^ subroutine d4stream(/;" s module:modradfull d4stream_initialized src/modradfull.f90 /^ logical, save :: d4stream_initialized /;" v module:modradfull d4stream_setup src/modradfull.f90 /^ subroutine d4stream_setup(/;" s module:modradfull +d4stream_tb_setup src/modradfull.f90 /^ subroutine d4stream_tb_setup(/;" s module:modradfull dbari src/rrsw_cld.f90 /^ real(kind=rb) :: abari(5),bbari(5),cbari(5),dbari(/;" v module:rrsw_cld ddg src/modmicrodata.f90 /^ ,ddg=/;" v module:modmicrodata ddr src/modmicrodata.f90 /^ ,ddr=/;" v module:modmicrodata dds src/modmicrodata.f90 /^ ,dds=/;" v module:modmicrodata default_conc src/modradfull.f90 /^ real :: mweight, default_conc,/;" k type:ckd_properties -define_nc src/addon/modstat_nc.f90 /^ subroutine define_nc(/;" s module:modstat_nc -define_nc src/addon/stat_nc_dummy.f90 /^ subroutine define_nc(/;" s module:modstat_nc define_nc src/modstat_nc.f90 /^ subroutine define_nc(/;" s module:modstat_nc delt src/addon/modbulkmicrodata.f90 /^ real :: delt$/;" v module:modbulkmicrodata delt src/modmicrodata.f90 /^ real :: delt$/;" v module:modmicrodata @@ -843,7 +708,6 @@ diffe src/modsubgrid.f90 /^ subroutine diffe(/;" s module:modsubgrid diffu src/modsubgrid.f90 /^ subroutine diffu /;" s module:modsubgrid diffv src/modsubgrid.f90 /^ subroutine diffv /;" s module:modsubgrid diffw src/modsubgrid.f90 /^ subroutine diffw(/;" s module:modsubgrid -dissmn src/addon/modbudget.f90 /^ real, allocatable :: dissmn(/;" v module:modbudget dissmn src/modbudget.f90 /^ real, allocatable :: dissmn(/;" v module:modbudget distbuoy src/modfields.f90 /^ real, allocatable :: distbuoy(/;" v module:modfields distcld src/modfields.f90 /^ real, allocatable :: distcld(/;" v module:modfields @@ -854,34 +718,26 @@ distqr src/modfields.f90 /^ real, allocatable :: distqr(/;" v module:modfields distw src/modfields.f90 /^ real, allocatable :: distw(/;" v module:modfields dlwbot src/modraddata.f90 /^ real :: dlwbot /;" v module:modraddata dlwtop src/modraddata.f90 /^ real :: dlwtop /;" v module:modraddata -do_genbudget src/addon/modbudget.f90 /^ subroutine do_genbudget$/;" s module:modbudget do_genbudget src/modbudget.f90 /^ subroutine do_genbudget$/;" s module:modbudget -do_gensbbudget src/addon/modbudget.f90 /^ subroutine do_gensbbudget$/;" s module:modbudget do_gensbbudget src/modbudget.f90 /^ subroutine do_gensbbudget$/;" s module:modbudget -do_genstat src/addon/modgenstat.f90 /^ subroutine do_genstat$/;" s module:modgenstat do_genstat src/modgenstat.f90 /^ subroutine do_genstat$/;" s module:modgenstat -do_heterostats src/addon/modheterostats.f90 /^ subroutine do_heterostats$/;" s module:modheterostats do_heterostats src/modheterostats.f90 /^ subroutine do_heterostats$/;" s module:modheterostats do_lsm src/modsurface.f90 /^ subroutine do_lsm$/;" s module:modsurface do_lsmstat src/modlsmstat.f90 /^ subroutine do_lsmstat$/;" s module:modlsmstat do_netcdfmovie src/addon/modnetcdfmovie.f90 /^ subroutine do_netcdfmovie$/;" s module:modnetcdfmovie do_netcdfstats src/addon/modnetcdfstats.f90 /^ subroutine do_netcdfstats$/;" s module:modnetcdfstats -do_radstat src/addon/modradstat.f90 /^ subroutine do_radstat$/;" s module:modradstat do_radstat src/modradstat.f90 /^ subroutine do_radstat$/;" s module:modradstat do_stressbudget src/addon/modstress.f90 /^ subroutine do_stressbudget$/;" s module:modstress do_tiltstat src/addon/modtilt.f90 /^ subroutine do_tiltstat$/;" s module:modtilt -dobulkmicrostat src/addon/modbulkmicrostat.f90 /^ subroutine dobulkmicrostat$/;" s module:modbulkmicrostat dobulkmicrostat src/modbulkmicrostat.f90 /^ subroutine dobulkmicrostat$/;" s module:modbulkmicrostat docape src/modcape.f90 /^ subroutine docape$/;" s module:modcape doperpetual src/modraddata.f90 /^ logical :: doperpetual /;" v module:modraddata doquadrant src/modquadrant.f90 /^ subroutine doquadrant$/;" s module:modquadrant -dosampling src/addon/modsampling.f90 /^ subroutine dosampling$/;" s module:modsampling dosampling src/modsampling.f90 /^ subroutine dosampling$/;" s module:modsampling doseasons src/modraddata.f90 /^ logical :: doseasons /;" v module:modraddata dosimpleicestat src/modsimpleicestat.f90 /^ subroutine dosimpleicestat$/;" s module:modsimpleicestat dpdxl src/modfields.f90 /^ real, allocatable :: dpdxl(/;" v module:modfields dpdyl src/modfields.f90 /^ real, allocatable :: dpdyl(/;" v module:modfields -dpdzhavl src/addon/modsampling.f90 /^ real, allocatable, dimension(:,:) :: wwavl,pavl,dwdthavl,dwwdzhavl,dpdzhavl,/;" v module:modsampling dpdzhavl src/modsampling.f90 /^ real, allocatable, dimension(:,:) :: wwrhavl,wwsfavl,pfavl,dwdthavl,dwwdzhavl,dpdzhavl,/;" v module:modsampling dqt src/modglobal.f90 /^ real :: dqt /;" v module:modglobal dqtdtls src/modfields.f90 /^ real, allocatable :: dqtdtls(/;" v module:modfields @@ -893,7 +749,6 @@ dqtdylst src/modtimedep.f90 /^ real, allocatable :: dqtdylst(/;" v module:m dqtdz src/modsurfdata.f90 /^ real, allocatable :: dqtdz /;" v module:modsurfdata drhobdzf src/modfields.f90 /^ real, allocatable :: drhobdzf(/;" v module:modfields drhobdzh src/modfields.f90 /^ real, allocatable :: drhobdzh(/;" v module:modfields -drizzle src/addon/modmicrophysics.f90 /^ subroutine drizzle$/;" s module:modmicrophysics drizzle src/modmicrophysics.f90 /^ subroutine drizzle$/;" s module:modmicrophysics dsigma2dt_sgs src/addon/modparticles.f90 /^ real :: dsigma2dx_sgs=0, dsigma2dy_sgs=0, dsigma2dz_sgs=0, dsigma2dt_sgs=/;" v module:modparticles dsigma2dx_sgs src/addon/modparticles.f90 /^ real :: dsigma2dx_sgs=/;" v module:modparticles @@ -902,33 +757,19 @@ dsigma2dz_sgs src/addon/modparticles.f90 /^ real :: dsigma2dx_sgs=0, dsigma2dy_ dsv src/modglobal.f90 /^ real,allocatable :: dsv(/;" v module:modglobal dt src/modglobal.f90 /^ integer(kind=longint) :: dt /;" v module:modglobal dt_lim src/modglobal.f90 /^ integer(kind=longint) :: dt_lim$/;" v module:modglobal -dtaudxhavl src/addon/modsampling.f90 /^ duwdxhavl,dtaudxhavl,/;" v module:modsampling dtaudxhavl src/modsampling.f90 /^ duwdxhavl,dtaudxhavl,/;" v module:modsampling -dtaudzhavl src/addon/modsampling.f90 /^ duwdxhavl,dtaudxhavl,dtaudzhavl,/;" v module:modsampling dtaudzhavl src/modsampling.f90 /^ duwdxhavl,dtaudxhavl,dtaudzhavl,/;" v module:modsampling -dtav src/addon/modbudget.f90 /^ real :: dtav,/;" v module:modbudget -dtav src/addon/modbulkmicrostat.f90 /^ real :: dtav,/;" v module:modbulkmicrostat -dtav src/addon/modcloudfield.f90 /^ real :: dtav$/;" v module:modcloudfield -dtav src/addon/modcrosssection.f90 /^ real :: dtav$/;" v module:modcrosssection -dtav src/addon/modfielddump.f90 /^ real :: dtav$/;" v module:modfielddump -dtav src/addon/modgenstat.f90 /^ real :: dtav,/;" v module:modgenstat -dtav src/addon/modheterostats.f90 /^ real :: dtav$/;" v module:modheterostats dtav src/addon/modnetcdfstats.f90 /^ real :: dtav,/;" v module:modnetcdfstats dtav src/addon/modparticles.f90 /^ real :: dtav /;" v module:modparticles -dtav src/addon/modprojection.f90 /^ real :: dtav$/;" v module:modprojection -dtav src/addon/modradstat.f90 /^ real :: dtav,/;" v module:modradstat -dtav src/addon/modsampling.f90 /^ real :: dtav,/;" v module:modsampling -dtav src/addon/modstattend.f90 /^ real :: dtav,/;" v module:modstattend dtav src/addon/modstress.f90 /^ real :: dtav,/;" v module:modstress dtav src/addon/modtilt.f90 /^ real :: dtav,/;" v module:modtilt -dtav src/addon/modtimestat.f90 /^ real :: dtav$/;" v module:modtimestat dtav src/modAGScross.f90 /^ real :: dtav$/;" v module:modAGScross dtav src/modbudget.f90 /^ real :: dtav,/;" v module:modbudget dtav src/modbulkmicrostat.f90 /^ real :: dtav,/;" v module:modbulkmicrostat dtav src/modcape.f90 /^ real :: dtav$/;" v module:modcape dtav src/modcloudfield.f90 /^ real :: dtav$/;" v module:modcloudfield dtav src/modcrosssection.f90 /^ real :: dtav$/;" v module:modcrosssection -dtav src/modfielddump.f90 /^ real :: dtav$/;" v module:modfielddump +dtav src/modfielddump.f90 /^ real :: dtav,/;" v module:modfielddump dtav src/modgenstat.f90 /^ real :: dtav,/;" v module:modgenstat dtav src/modheterostats.f90 /^ real :: dtav$/;" v module:modheterostats dtav src/modlsmcrosssection.f90 /^ real :: dtav$/;" v module:modlsmcrosssection @@ -941,28 +782,29 @@ dtav src/modsimpleicestat.f90 /^ real :: dtav,/;" v module:modsimpleic dtav src/modstattend.f90 /^ real :: dtav,/;" v module:modstattend dtav src/modtimestat.f90 /^ real :: dtav$/;" v module:modtimestat dtav_glob src/modglobal.f90 /^ real :: dtav_glob /;" v module:modglobal -dtchmovie src/addon/modchem.f90 /^ real itermin,dtchmovie$/;" v module:modchem dtchmovie src/modchem.f90 /^ real itermin,dtchmovie$/;" v module:modchem dtheta src/modglobal.f90 /^ real :: dtheta /;" v module:modglobal +dthldtls src/modfields.f90 /^ real, allocatable :: dthldtls(/;" v module:modfields +dthldtlst src/modtimedep.f90 /^ real, allocatable :: dthldtlst(/;" v module:modtimedep dthldxls src/modfields.f90 /^ real, allocatable :: dthldxls(/;" v module:modfields dthldyls src/modfields.f90 /^ real, allocatable :: dthldyls(/;" v module:modfields dthldz src/modsurfdata.f90 /^ real, allocatable :: dthldz(/;" v module:modsurfdata dthvdz src/modfields.f90 /^ real, allocatable :: dthvdz(/;" v module:modfields dtmax src/modglobal.f90 /^ real :: dtmax /;" v module:modglobal -dtmn src/addon/modchecksim.f90 /^ real :: dtmn /;" v module:modchecksim dtmn src/modchecksim.f90 /^ real :: dtmn /;" v module:modchecksim dtmovie src/addon/modnetcdfmovie.f90 /^ real :: dtmovie /;" v module:modnetcdfmovie +dudtls src/modfields.f90 /^ real, allocatable :: dudtls(/;" v module:modfields +dudtlst src/modtimedep.f90 /^ real, allocatable :: dudtlst /;" v module:modtimedep dudxls src/modfields.f90 /^ real, allocatable :: dudxls(/;" v module:modfields dudyls src/modfields.f90 /^ real, allocatable :: dudyls(/;" v module:modfields dudz src/modsurfdata.f90 /^ real, allocatable :: dudz /;" v module:modsurfdata -duwdxhavl src/addon/modsampling.f90 /^ real, allocatable, dimension(:,:) :: wwavl,pavl,dwdthavl,dwwdzhavl,dpdzhavl, &$/;" v module:modsampling duwdxhavl src/modsampling.f90 /^ real, allocatable, dimension(:,:) :: wwrhavl,wwsfavl,pfavl,dwdthavl,dwwdzhavl,dpdzhavl, &$/;" v module:modsampling +dvdtls src/modfields.f90 /^ real, allocatable :: dvdtls(/;" v module:modfields +dvdtlst src/modtimedep.f90 /^ real, allocatable :: dvdtlst /;" v module:modtimedep dvdxls src/modfields.f90 /^ real, allocatable :: dvdxls(/;" v module:modfields dvdyls src/modfields.f90 /^ real, allocatable :: dvdyls(/;" v module:modfields dvdz src/modsurfdata.f90 /^ real, allocatable :: dvdz /;" v module:modsurfdata -dwdthavl src/addon/modsampling.f90 /^ real, allocatable, dimension(:,:) :: wwavl,pavl,dwdthavl,/;" v module:modsampling dwdthavl src/modsampling.f90 /^ real, allocatable, dimension(:,:) :: wwrhavl,wwsfavl,pfavl,dwdthavl,/;" v module:modsampling -dwwdzhavl src/addon/modsampling.f90 /^ real, allocatable, dimension(:,:) :: wwavl,pavl,dwdthavl,dwwdzhavl,/;" v module:modsampling dwwdzhavl src/modsampling.f90 /^ real, allocatable, dimension(:,:) :: wwrhavl,wwsfavl,pfavl,dwdthavl,dwwdzhavl,/;" v module:modsampling dx src/modglobal.f90 /^ real :: dx /;" v module:modglobal dx2i src/modglobal.f90 /^ real :: dx2i /;" v module:modglobal @@ -988,7 +830,6 @@ e12min src/modglobal.f90 /^ real,parameter :: e12min /;" v module:modglobal e12p src/modfields.f90 /^ real, allocatable :: e12p(/;" v module:modfields e12prof src/modfields.f90 /^ real, allocatable :: e12prof(/;" v module:modfields earth_sun src/rrtmg_sw_rad.f90 /^ real(kind=rb) function earth_sun(/;" f module:rrtmg_sw_rad -eavgid src/addon/modheterostats.f90 /^ integer :: uavgid, vavgid, wavgid, thlavgid, thvavgid, qtavgid, qlavgid, eavgid$/;" v module:modheterostats eavgid src/addon/modnetcdfstats.f90 /^ integer :: uavgid, vavgid, wavgid, thlavgid, qtavgid, eavgid$/;" v module:modnetcdfstats eavgid src/modheterostats.f90 /^ integer :: uavgid, vavgid, wavgid, thlavgid, thvavgid, qtavgid, qlavgid, eavgid$/;" v module:modheterostats ebari src/rrsw_cld.f90 /^ real(kind=rb) :: abari(5),bbari(5),cbari(5),dbari(5),ebari(/;" v module:rrsw_cld @@ -998,7 +839,6 @@ ee src/modradfull.f90 /^ real :: ee,/;" v module:modradfull ekh src/modsubgriddata.f90 /^ real, allocatable :: ekh(/;" v module:modsubgriddata ekm src/modsubgriddata.f90 /^ real, allocatable :: ekm(/;" v module:modsubgriddata ekmin src/modglobal.f90 /^ real,parameter :: ekmin /;" v module:modglobal -ekmmn src/addon/modbudget.f90 /^ real, allocatable :: ekmmn(/;" v module:modbudget ekmmn src/modbudget.f90 /^ real, allocatable :: ekmmn(/;" v module:modbudget ep src/modglobal.f90 /^ real,parameter :: ep /;" v module:modglobal ep2 src/modglobal.f90 /^ real,parameter :: ep2 /;" v module:modglobal @@ -1011,86 +851,66 @@ epsprec src/addon/modbulkmicrodata.f90 /^ ,epsprec /;" v mod epsprec src/modmicrodata.f90 /^ ,epsprec /;" v module:modmicrodata epsqr src/addon/modbulkmicrodata.f90 /^ ,epsqr /;" v module:modbulkmicrodata epsqr src/modmicrodata.f90 /^ ,epsqr /;" v module:modmicrodata -erfint src/addon/modbulkmicro.f90 /^ real function erfint(/;" f module:modbulkmicro erfint src/modbulkmicro.f90 /^ real function erfint(/;" f module:modbulkmicro es0 src/modglobal.f90 /^ real,parameter :: es0 /;" v module:modglobal -esatitab src/modglobal.f90 /^ real, dimension(1:2000) :: esatitab /;" v module:modglobal +esatitab src/modglobal.f90 /^ real, dimension(1:2000) :: esatitab$/;" v module:modglobal esatltab src/modglobal.f90 /^ real, dimension(1:2000) :: esatltab$/;" v module:modglobal esl src/modfields.f90 /^ real, allocatable :: esl(/;" v module:modfields evap src/addon/modbulkmicrodata.f90 /^ ,evap /;" v module:modbulkmicrodata evap src/modmicrodata.f90 /^ ,evap /;" v module:modmicrodata evapdep src/modsimpleice.f90 /^ subroutine evapdep$/;" s module:modsimpleice evapfactor src/modmicrodata.f90 /^ real :: evapfactor /;" v module:modmicrodata -evaporation src/addon/modbulkmicro.f90 /^ subroutine evaporation$/;" s module:modbulkmicro evaporation src/modbulkmicro.f90 /^ subroutine evaporation$/;" s module:modbulkmicro excj src/modmpi.f90 /^ subroutine excj(/;" s module:modmpi excjs src/modmpi.f90 /^ subroutine excjs(/;" s module:modmpi exitAGScross src/modAGScross.f90 /^ subroutine exitAGScross$/;" s module:modAGScross exitboundary src/modboundary.f90 /^ subroutine exitboundary$/;" s module:modboundary -exitbudget src/addon/modbudget.f90 /^ subroutine exitbudget$/;" s module:modbudget exitbudget src/modbudget.f90 /^ subroutine exitbudget$/;" s module:modbudget -exitbulkmicro src/addon/modbulkmicro.f90 /^ subroutine exitbulkmicro$/;" s module:modbulkmicro exitbulkmicro src/modbulkmicro.f90 /^ subroutine exitbulkmicro$/;" s module:modbulkmicro -exitbulkmicrostat src/addon/modbulkmicrostat.f90 /^ subroutine exitbulkmicrostat$/;" s module:modbulkmicrostat exitbulkmicrostat src/modbulkmicrostat.f90 /^ subroutine exitbulkmicrostat$/;" s module:modbulkmicrostat exitcanopy src/modcanopy.f90 /^ subroutine exitcanopy$/;" s module:modcanopy exitcape src/modcape.f90 /^ subroutine exitcape$/;" s module:modcape -exitcrosssection src/addon/modcrosssection.f90 /^ subroutine exitcrosssection$/;" s module:modcrosssection exitcrosssection src/modcrosssection.f90 /^ subroutine exitcrosssection$/;" s module:modcrosssection -exitfielddump src/addon/modfielddump.f90 /^ subroutine exitfielddump$/;" s module:modfielddump exitfielddump src/modfielddump.f90 /^ subroutine exitfielddump$/;" s module:modfielddump exitfields src/modfields.f90 /^ subroutine exitfields$/;" s module:modfields -exitgenstat src/addon/modgenstat.f90 /^ subroutine exitgenstat$/;" s module:modgenstat exitgenstat src/modgenstat.f90 /^ subroutine exitgenstat$/;" s module:modgenstat exitglobal src/modglobal.f90 /^ subroutine exitglobal$/;" s module:modglobal -exitheterostats src/addon/modheterostats.f90 /^ subroutine exitheterostats$/;" s module:modheterostats exitheterostats src/modheterostats.f90 /^ subroutine exitheterostats$/;" s module:modheterostats exitlsmcrosssection src/modlsmcrosssection.f90 /^ subroutine exitlsmcrosssection$/;" s module:modlsmcrosssection exitlsmstat src/modlsmstat.f90 /^ subroutine exitlsmstat$/;" s module:modlsmstat -exitmicrophysics src/addon/modmicrophysics.f90 /^ subroutine exitmicrophysics$/;" s module:modmicrophysics exitmicrophysics src/modmicrophysics.f90 /^ subroutine exitmicrophysics$/;" s module:modmicrophysics exitmodules src/modstartup.f90 /^ subroutine exitmodules$/;" s module:modstartup exitmpi src/modmpi.f90 /^ subroutine exitmpi$/;" s module:modmpi exitnetcdfmovie src/addon/modnetcdfmovie.f90 /^ subroutine exitnetcdfmovie$/;" s module:modnetcdfmovie exitnetcdfstats src/addon/modnetcdfstats.f90 /^ subroutine exitnetcdfstats$/;" s module:modnetcdfstats -exitnudge src/addon/modnudge.f90 /^ subroutine exitnudge$/;" s module:modnudge exitnudge src/modnudge.f90 /^ subroutine exitnudge$/;" s module:modnudge exitparticles src/addon/modparticles.f90 /^ subroutine exitparticles$/;" s module:modparticles exitpois src/modpois.f90 /^ subroutine exitpois$/;" s module:modpois exitquadrant src/modquadrant.f90 /^ subroutine exitquadrant$/;" s module:modquadrant exitradiation src/modradiation.f90 /^ subroutine exitradiation$/;" s module:modradiation -exitradstat src/addon/modradstat.f90 /^ subroutine exitradstat$/;" s module:modradstat exitradstat src/modradstat.f90 /^ subroutine exitradstat$/;" s module:modradstat -exitsampling src/addon/modsampling.f90 /^ subroutine exitsampling$/;" s module:modsampling exitsampling src/modsampling.f90 /^ subroutine exitsampling$/;" s module:modsampling exitsamptend src/modsamptend.f90 /^ subroutine exitsamptend$/;" s module:modsamptend exitsimpleice src/modsimpleice.f90 /^ subroutine exitsimpleice$/;" s module:modsimpleice exitsimpleicestat src/modsimpleicestat.f90 /^ subroutine exitsimpleicestat$/;" s module:modsimpleicestat -exitstat_nc src/addon/modstat_nc.f90 /^ subroutine exitstat_nc(/;" s module:modstat_nc -exitstat_nc src/addon/stat_nc_dummy.f90 /^ subroutine exitstat_nc(/;" s module:modstat_nc exitstat_nc src/modstat_nc.f90 /^ subroutine exitstat_nc(/;" s module:modstat_nc -exitstattend src/addon/modstattend.f90 /^ subroutine exitstattend$/;" s module:modstattend exitstattend src/modstattend.f90 /^ subroutine exitstattend$/;" s module:modstattend exitstressbudget src/addon/modstress.f90 /^ subroutine exitstressbudget$/;" s module:modstress exitsubgrid src/modsubgrid.f90 /^ subroutine exitsubgrid$/;" s module:modsubgrid exitsurface src/modsurface.f90 /^ subroutine exitsurface$/;" s module:modsurface +exittestbed src/modtestbed.f90 /^ subroutine exittestbed$/;" s module:modtestbed exitthermodynamics src/modthermodynamics.f90 /^ subroutine exitthermodynamics$/;" s module:modthermodynamics exittilt src/addon/modtilt.f90 /^ subroutine exittilt$/;" s module:modtilt exittimedep src/modtimedep.f90 /^ subroutine exittimedep$/;" s module:modtimedep exittimedepsv src/modtimedepsv.f90 /^ subroutine exittimedepsv$/;" s module:modtimedepsv -exittimestat src/addon/modtimestat.f90 /^ subroutine exittimestat$/;" s module:modtimestat exittimestat src/modtimestat.f90 /^ subroutine exittimestat$/;" s module:modtimestat exnf src/modfields.f90 /^ real, allocatable :: exnf(/;" v module:modfields exnf_b src/modradfull.f90 /^ real, allocatable :: rhof_b(:),exnf_b(/;" v module:modradfull exnh src/modfields.f90 /^ real, allocatable :: exnh(/;" v module:modfields exnz src/addon/modbulkmicrodata.f90 /^ real,allocatable, dimension(:,:,:) :: &$/;" v module:modbulkmicrodata -exp1 src/addon/modchem.f90 /^ integer exp1$/;" k type:Form exp1 src/modchem.f90 /^ integer exp1$/;" k type:Form -exp2 src/addon/modchem.f90 /^ integer exp2$/;" k type:Form exp2 src/modchem.f90 /^ integer exp2$/;" k type:Form -exp3 src/addon/modchem.f90 /^ integer exp3$/;" k type:Form exp3 src/modchem.f90 /^ integer exp3$/;" k type:Form -exp4 src/addon/modchem.f90 /^ integer exp4$/;" k type:Form exp4 src/modchem.f90 /^ integer exp4$/;" k type:Form exp_tbl src/rrlw_tbl.f90 /^ real(kind=rb) , dimension(0:ntbl) :: exp_tbl$/;" v module:rrlw_tbl exp_tbl src/rrsw_tbl.f90 /^ real(kind=rb) , dimension(0:ntbl) :: exp_tbl$/;" v module:rrsw_tbl @@ -1098,12 +918,10 @@ extice2 src/rrsw_cld.f90 /^ real(kind=rb) :: extice2(/;" v module:rrsw_cld extice3 src/rrsw_cld.f90 /^ real(kind=rb) :: extice3(/;" v module:rrsw_cld extliq1 src/rrsw_cld.f90 /^ real(kind=rb) :: extliq1(/;" v module:rrsw_cld f0 src/modsurfdata.f90 /^ real :: f0 /;" v module:modsurfdata -f_gamma src/addon/modbulkmicro.f90 /^ function f_gamma(/;" f module:modbulkmicro f_lai_h src/modcanopy.f90 /^ real :: f_lai_h /;" v module:modcanopy factorial src/modsurface.f90 /^ function factorial(/;" f module:modsurface fbari src/rrsw_cld.f90 /^ real(kind=rb) :: abari(5),bbari(5),cbari(5),dbari(5),ebari(5),fbari(/;" v module:rrsw_cld fce src/addon/modparticles.f90 /^ real :: fce$/;" v module:modparticles -fcoravl src/addon/modsampling.f90 /^ duwdxhavl,dtaudxhavl,dtaudzhavl,thvhavl, &$/;" v module:modsampling fcorhavl src/modsampling.f90 /^ duwdxhavl,dtaudxhavl,dtaudzhavl,thvhavl, &$/;" v module:modsampling fdir src/modradfull.f90 /^ plwc(:), piwc(:), prwc(:), pgwc(:), fds(:), fus(:), fdir(/;" v module:modradfull fdlice3 src/rrsw_cld.f90 /^ real(kind=rb) :: fdlice3(/;" v module:rrsw_cld @@ -1112,22 +930,15 @@ fft2db src/modfft2d.f90 /^ subroutine fft2db(/;" s module:modfft2d fft2dexit src/modfft2d.f90 /^ subroutine fft2dexit(/;" s module:modfft2d fft2df src/modfft2d.f90 /^ subroutine fft2df(/;" s module:modfft2d fft2dinit src/modfft2d.f90 /^ subroutine fft2dinit(/;" s module:modfft2d -fielddump src/addon/modfielddump.f90 /^ subroutine fielddump$/;" s module:modfielddump fielddump src/modfielddump.f90 /^ subroutine fielddump$/;" s module:modfielddump fillps src/modpois.f90 /^ subroutine fillps$/;" s module:modpois filter src/addon/filter.f90 /^subroutine filter(/;" s finalize_RandomNumberSequence src/rad_rndnmb.f90 /^ subroutine finalize_RandomNumberSequence(/;" s module:RandomNumbers -firstchem src/addon/modchem.f90 /^ integer tnor, firstchem,/;" v module:modchem firstchem src/modchem.f90 /^ integer tnor, firstchem,/;" v module:modchem fkar src/modglobal.f90 /^ real,parameter :: fkar /;" v module:modglobal fl src/modradfull.f90 /^ real, allocatable :: re(:), fl(/;" v module:modradfull fluxfac src/rrlw_con.f90 /^ real(kind=rb) :: fluxfac,/;" v module:rrlw_con fluxfac src/rrsw_con.f90 /^ real(kind=rb) :: fluxfac,/;" v module:rrsw_con -fname src/addon/modbulkmicrostat.f90 /^ character(80) :: fname /;" v module:modbulkmicrostat -fname src/addon/modfielddump.f90 /^ character(80) :: fname /;" v module:modfielddump -fname src/addon/modgenstat.f90 /^ character(80) :: fname /;" v module:modgenstat -fname src/addon/modstattend.f90 /^ character(80) :: fname /;" v module:modstattend -fname src/addon/modtimestat.f90 /^ character(80) :: fname /;" v module:modtimestat fname src/modcape.f90 /^ character(80) :: fname /;" v module:modcape fname src/modfielddump.f90 /^ character(80) :: fname /;" v module:modfielddump fname src/modgenstat.f90 /^ character(80) :: fname /;" v module:modgenstat @@ -1137,20 +948,16 @@ fname src/modsampling.f90 /^ character(80) :: fname /;" v module:modsampling fname src/modsamptend.f90 /^ character(80) :: fname /;" v module:modsamptend fname src/modstattend.f90 /^ character(80) :: fname /;" v module:modstattend fname src/modtimestat.f90 /^ character(80) :: fname /;" v module:modtimestat -fname1 src/addon/modcrosssection.f90 /^ character(80) :: fname1 /;" v module:modcrosssection fname1 src/modcrosssection.f90 /^ character(80) :: fname1 /;" v module:modcrosssection fname1 src/modlsmcrosssection.f90 /^ character(80) :: fname1 /;" v module:modlsmcrosssection -fname2 src/addon/modcrosssection.f90 /^ character(80) :: fname2 /;" v module:modcrosssection fname2 src/modcrosssection.f90 /^ character(80) :: fname2 /;" v module:modcrosssection fname2 src/modlsmcrosssection.f90 /^ character(80) :: fname2 /;" v module:modlsmcrosssection -fname3 src/addon/modcrosssection.f90 /^ character(80) :: fname3 /;" v module:modcrosssection fname3 src/modcrosssection.f90 /^ character(80) :: fname3 /;" v module:modcrosssection fname3 src/modlsmcrosssection.f90 /^ character(80) :: fname3 /;" v module:modlsmcrosssection fnameAGS src/modAGScross.f90 /^ character(80) :: fnameAGS /;" v module:modAGScross fname_options src/modglobal.f90 /^ character(50) :: fname_options /;" v module:modglobal force_user src/moduser.f90 /^subroutine force_user$/;" s module:moduser forces src/modforces.f90 /^ subroutine forces$/;" s module:modforces -formula src/addon/modchem.f90 /^ integer formula /;" k type:Form formula src/modchem.f90 /^ integer formula /;" k type:Form forref src/rrlw_kg01.f90 /^ real(kind=rb) :: selfref(10,ng1), forref(/;" v module:rrlw_kg01 forref src/rrlw_kg02.f90 /^ real(kind=rb) :: selfref(10,ng2), forref(/;" v module:rrlw_kg02 @@ -1267,7 +1074,6 @@ fsm src/addon/modparticles.f90 /^ real,allocatable :: fsm(/;" v module:modparti fstrField src/modsurfdata.f90 /^ real, allocatable :: fstrField /;" v module:modsurfdata fuir src/modradfull.f90 /^ plwc(:), piwc(:), prwc(:), pgwc(:), fds(:), fus(:), fdir(:), fuir(/;" v module:modradfull fuliou_Initialized src/modradfull.f90 /^ logical, save :: fuliou_Initialized /;" v module:modradfull -func1 src/addon/modchem.f90 /^ integer func1$/;" k type:RCdef func1 src/modchem.f90 /^ integer func1$/;" k type:RCdef fus src/modradfull.f90 /^ plwc(:), piwc(:), prwc(:), pgwc(:), fds(:), fus(/;" v module:modradfull gD src/modsurfdata.f90 /^ real, allocatable :: gD /;" v module:modsurfdata @@ -1307,17 +1113,15 @@ gc src/modraddata.f90 /^ real :: gc /;" v module:modraddata gc_inf src/modsurfdata.f90 /^ real :: gc_inf /;" v module:modsurfdata gc_old src/modsurfdata.f90 /^ real, allocatable :: gc_old /;" v module:modsurfdata gc_old_set src/modsurfdata.f90 /^ logical :: gc_old_set /;" v module:modsurfdata -genstat src/addon/modgenstat.f90 /^ subroutine genstat$/;" s module:modgenstat genstat src/modgenstat.f90 /^ subroutine genstat$/;" s module:modgenstat geodamptime src/modglobal.f90 /^ real :: geodamptime /;" v module:modglobal getAbsorberIndex src/rrlw_ncpar.f90 /^ subroutine getAbsorberIndex(/;" s module:rrlw_ncpar -getAbsorberIndex src/rrsw_ncpar.f90 /^ subroutine getAbsorberIndex(/;" s module:rrsw_ncpar +getAbsorberIndex src/rrsw_ncpar.f90 /^ subroutine getAbsorberIndex(/;" s module:rrsw_ncpar getRandomInt src/rad_rndnmb.f90 /^ function getRandomInt(/;" f module:RandomNumbers getRandomPositiveInt src/rad_rndnmb.f90 /^ function getRandomPositiveInt(/;" f module:RandomNumbers getRandomReal src/rad_rndnmb.f90 /^ function getRandomReal(/;" f module:RandomNumbers getindex src/modradfull.f90 /^ integer function getindex(/;" f module:modradfull getobl src/modsurface.f90 /^ subroutine getobl$/;" s module:modsurface -getth src/addon/modchem.f90 /^real function getth(/;" f module:modchem getth src/modchem.f90 /^real function getth(/;" f module:modchem gm298 src/modsurfdata.f90 /^ real :: gm298 /;" v module:modsurfdata gmin src/modsurfdata.f90 /^ real :: gmin /;" v module:modsurfdata @@ -1327,13 +1131,12 @@ grav src/rrsw_con.f90 /^ real(kind=rb) :: oneminus, pi, grav$/;" v module:r grwdamp src/modboundary.f90 /^ subroutine grwdamp$/;" s module:modboundary gz src/modradfull.f90 /^ real, allocatable :: re(:), fl(:), bz(:,:), wz(:,:), gz(/;" v module:modradfull h2ovmr src/modraddata.f90 /^ layerT, &$/;" v module:modraddata -h_ref src/addon/modchem.f90 /^ real t_ref,q_ref,p_ref,h_ref$/;" v module:modchem h_ref src/modchem.f90 /^ real t_ref,q_ref,p_ref,h_ref$/;" v module:modchem halflev_kappa src/advec_kappa.f90 /^subroutine halflev_kappa(/;" s +handle_err src/modtestbed.f90 /^ subroutine handle_err(/;" s module:modtestbed head src/addon/modparticles.f90 /^ TYPE (particle_record), POINTER:: head,/;" v module:modparticles heatfac src/rrlw_con.f90 /^ real(kind=rb) :: fluxfac, heatfac$/;" v module:rrlw_con heatfac src/rrsw_con.f90 /^ real(kind=rb) :: fluxfac, heatfac$/;" v module:rrsw_con -heterostats src/addon/modheterostats.f90 /^ subroutine heterostats$/;" s module:modheterostats heterostats src/modheterostats.f90 /^ subroutine heterostats$/;" s module:modheterostats hk src/modradfull.f90 /^ real, allocatable :: hk(/;" k type:band_properties hk src/modradfull.f90 /^ real, allocatable :: hk(/;" k type:ckd_properties @@ -1395,11 +1198,10 @@ hvrvqd src/rrsw_vsn.f90 /^ hvrspc,hvrset,hvrtau,hvrvqd,/;" v m i src/addon/modparticles.f90 /^ in/;" v module:modparticles i src/modradfull.f90 /^ in/;" v module:modradfull i src/rrlw_ncpar.f90 /^ in/;" v module:rrlw_ncpar -i src/rrsw_ncpar.f90 /^ in/;" v module:rrsw_ncpar +i src/rrsw_ncpar.f90 /^ in/;" v module:rrsw_ncpar i1 src/modglobal.f90 /^ integer :: i1$/;" v module:modglobal i2 src/modglobal.f90 /^ integer :: i2$/;" v module:modglobal iDE src/modraddata.f90 /^ integer :: iDE /;" v module:modraddata -iaccr src/addon/modbulkmicrostat.f90 /^ iauto = 2 , &$/;" v module:modbulkmicrostat iaccr src/modbulkmicrostat.f90 /^ iauto = 2 , &$/;" v module:modbulkmicrostat iaccr src/modsimpleicestat.f90 /^ iauto = 2 , &$/;" v module:modsimpleicestat iadv_52 src/modglobal.f90 /^ integer, parameter :: iadv_52 /;" v module:modglobal @@ -1415,7 +1217,6 @@ iadv_sv src/modglobal.f90 /^ integer :: iadv_mom = 5, iadv_tke = -1, iadv_t iadv_thl src/modglobal.f90 /^ integer :: iadv_mom = 5, iadv_tke = -1, iadv_thl /;" v module:modglobal iadv_tke src/modglobal.f90 /^ integer :: iadv_mom = 5, iadv_tke /;" v module:modglobal iadv_upw src/modglobal.f90 /^ integer, parameter :: iadv_upw /;" v module:modglobal -iauto src/addon/modbulkmicrostat.f90 /^ integer, parameter :: nrfields = 5 , &$/;" v module:modbulkmicrostat iauto src/modbulkmicrostat.f90 /^ integer, parameter :: nrfields = 5 , &$/;" v module:modbulkmicrostat iauto src/modsimpleicestat.f90 /^ integer, parameter :: nrfields = 5 , &$/;" v module:modsimpleicestat iband src/modradfull.f90 /^ integer :: ng, nt, np, noverlap, iband$/;" k type:ckd_properties @@ -1425,42 +1226,22 @@ ibas_st1 src/modglobal.f90 /^ integer, parameter :: ibas_st1 /;" v module:m ibas_st2 src/modglobal.f90 /^ integer, parameter :: ibas_st2 /;" v module:modglobal ibas_thv src/modglobal.f90 /^ integer, parameter :: ibas_thv /;" v module:modglobal ibas_usr src/modglobal.f90 /^ integer, parameter :: ibas_usr /;" v module:modglobal -iblh_flux src/addon/modtimestat.f90 /^ integer, parameter :: iblh_flux /;" v module:modtimestat iblh_flux src/modtimestat.f90 /^ integer, parameter :: iblh_flux /;" v module:modtimestat -iblh_grad src/addon/modtimestat.f90 /^ integer, parameter :: iblh_flux = 1, iblh_grad /;" v module:modtimestat iblh_grad src/modtimestat.f90 /^ integer, parameter :: iblh_flux = 1, iblh_grad /;" v module:modtimestat -iblh_meth src/addon/modtimestat.f90 /^ integer :: iblh_meth /;" v module:modtimestat iblh_meth src/modtimestat.f90 /^ integer :: iblh_meth /;" v module:modtimestat -iblh_qt src/addon/modtimestat.f90 /^ integer, parameter :: iblh_thv = -1,iblh_thl = -2, iblh_qt /;" v module:modtimestat iblh_qt src/modtimestat.f90 /^ integer, parameter :: iblh_thv = -1,iblh_thl = -2, iblh_qt /;" v module:modtimestat -iblh_thl src/addon/modtimestat.f90 /^ integer, parameter :: iblh_thv = -1,iblh_thl /;" v module:modtimestat iblh_thl src/modtimestat.f90 /^ integer, parameter :: iblh_thv = -1,iblh_thl /;" v module:modtimestat -iblh_thres src/addon/modtimestat.f90 /^ integer, parameter :: iblh_flux = 1, iblh_grad = 2, iblh_thres /;" v module:modtimestat iblh_thres src/modtimestat.f90 /^ integer, parameter :: iblh_flux = 1, iblh_grad = 2, iblh_thres /;" v module:modtimestat -iblh_thv src/addon/modtimestat.f90 /^ integer, parameter :: iblh_thv /;" v module:modtimestat iblh_thv src/modtimestat.f90 /^ integer, parameter :: iblh_thv /;" v module:modtimestat -iblh_var src/addon/modtimestat.f90 /^ integer :: iblh_meth = iblh_grad, iblh_var /;" v module:modtimestat iblh_var src/modtimestat.f90 /^ integer :: iblh_meth = iblh_grad, iblh_var /;" v module:modtimestat iceRe src/modraddata.f90 /^ real(kind=kind_rb),allocatable,dimension(:,:) :: LWP_slice,IWP_slice ,cloudFrac,liquidRe,iceRe$/;" v module:modraddata iceflglw src/modraddata.f90 /^ integer :: iceflglw /;" v module:modraddata iceflgsw src/modraddata.f90 /^ integer :: iceflgsw /;" v module:modraddata icethermo0 src/modthermodynamics.f90 /^ subroutine icethermo0$/;" s module:modthermodynamics icethermoh src/modthermodynamics.f90 /^ subroutine icethermoh$/;" s module:modthermodynamics -idtav src/addon/modbudget.f90 /^ integer(kind=longint) :: idtav,/;" v module:modbudget -idtav src/addon/modbulkmicrostat.f90 /^ integer(kind=longint):: idtav,/;" v module:modbulkmicrostat -idtav src/addon/modcloudfield.f90 /^ integer(kind=longint) :: idtav,/;" v module:modcloudfield -idtav src/addon/modcrosssection.f90 /^ integer(kind=longint) :: idtav,/;" v module:modcrosssection -idtav src/addon/modfielddump.f90 /^ integer(kind=longint) :: idtav,/;" v module:modfielddump -idtav src/addon/modgenstat.f90 /^ integer(kind=longint) :: idtav,/;" v module:modgenstat -idtav src/addon/modheterostats.f90 /^ integer(kind=longint):: idtav,/;" v module:modheterostats idtav src/addon/modparticles.f90 /^ integer(kind=longint) :: itimeav,idtav,/;" v module:modparticles -idtav src/addon/modprojection.f90 /^ integer(kind=longint) :: idtav,/;" v module:modprojection -idtav src/addon/modradstat.f90 /^ integer(kind=longint) :: idtav,/;" v module:modradstat -idtav src/addon/modsampling.f90 /^ integer(kind=longint) :: idtav,/;" v module:modsampling -idtav src/addon/modstattend.f90 /^ integer(kind=longint) :: idtav,/;" v module:modstattend idtav src/addon/modstress.f90 /^ integer(kind=longint) :: idtav,/;" v module:modstress idtav src/addon/modtilt.f90 /^ integer(kind=longint) :: idtav,/;" v module:modtilt -idtav src/addon/modtimestat.f90 /^ integer(kind=longint) :: idtav,/;" v module:modtimestat idtav src/modAGScross.f90 /^ integer(kind=longint) :: idtav,/;" v module:modAGScross idtav src/modbudget.f90 /^ integer(kind=longint) :: idtav,/;" v module:modbudget idtav src/modbulkmicrostat.f90 /^ integer(kind=longint):: idtav,/;" v module:modbulkmicrostat @@ -1480,11 +1261,9 @@ idtav src/modsamptend.f90 /^ integer(kind=longint) :: idtav,/;" v module:modsam idtav src/modsimpleicestat.f90 /^ integer(kind=longint):: idtav,/;" v module:modsimpleicestat idtav src/modstattend.f90 /^ integer(kind=longint) :: idtav,/;" v module:modstattend idtav src/modtimestat.f90 /^ integer(kind=longint) :: idtav,/;" v module:modtimestat -idtchmovie src/addon/modchem.f90 /^ integer(kind=longint) :: itimeav,tnextwrite,idtchmovie$/;" v module:modchem idtchmovie src/modchem.f90 /^ integer(kind=longint) :: itimeav,tnextwrite,idtchmovie$/;" v module:modchem idtmax src/modglobal.f90 /^ integer(kind=longint) :: idtmax /;" v module:modglobal idum src/addon/modparticles.f90 /^ integer (KIND=selected_int_kind(10)):: idum /;" v module:modparticles -ievap src/addon/modbulkmicrostat.f90 /^ iaccr = 3 , &$/;" v module:modbulkmicrostat ievap src/modbulkmicrostat.f90 /^ iaccr = 3 , &$/;" v module:modbulkmicrostat ievap src/modsimpleicestat.f90 /^ iaccr = 3 , &$/;" v module:modsimpleicestat iexpnr src/modglobal.f90 /^ integer :: iexpnr /;" v module:modglobal @@ -1506,7 +1285,6 @@ imicro_user src/modmicrodata.f90 /^ integer, parameter :: imicro_user /;" v mod inatm src/rrtmg_lw_rad.f90 /^ subroutine inatm /;" s module:rrtmg_lw_rad inatm_sw src/rrtmg_sw_rad.f90 /^ subroutine inatm_sw /;" s module:rrtmg_sw_rad indCO2 src/modsurfdata.f90 /^ integer :: indCO2 /;" v module:modsurfdata -index_sv0 src/addon/modchem.f90 /^ integer index_sv0$/;" k type:Chem index_sv0 src/modchem.f90 /^ integer index_sv0$/;" k type:Chem inflglw src/modraddata.f90 /^ integer :: inflglw /;" v module:modraddata inflgsw src/modraddata.f90 /^ integer :: inflgsw /;" v module:modraddata @@ -1514,82 +1292,61 @@ initAGScross src/modAGScross.f90 /^ subroutine initAGScross$/;" s module:modAGS init_ckd src/modradfull.f90 /^ subroutine init_ckd$/;" s module:modradfull init_cldwtr src/modradfull.f90 /^ subroutine init_cldwtr$/;" s module:modradfull initboundary src/modboundary.f90 /^ subroutine initboundary$/;" s module:modboundary -initbudget src/addon/modbudget.f90 /^ subroutine initbudget$/;" s module:modbudget initbudget src/modbudget.f90 /^ subroutine initbudget$/;" s module:modbudget -initbulkmicro src/addon/modbulkmicro.f90 /^ subroutine initbulkmicro$/;" s module:modbulkmicro initbulkmicro src/modbulkmicro.f90 /^ subroutine initbulkmicro$/;" s module:modbulkmicro -initbulkmicrostat src/addon/modbulkmicrostat.f90 /^subroutine initbulkmicrostat$/;" s module:modbulkmicrostat initbulkmicrostat src/modbulkmicrostat.f90 /^subroutine initbulkmicrostat$/;" s module:modbulkmicrostat initcanopy src/modcanopy.f90 /^ SUBROUTINE initcanopy$/;" s module:modcanopy initcape src/modcape.f90 /^ subroutine initcape$/;" s module:modcape -initchecksim src/addon/modchecksim.f90 /^ subroutine initchecksim$/;" s module:modchecksim initchecksim src/modchecksim.f90 /^ subroutine initchecksim$/;" s module:modchecksim -initchem src/addon/modchem.f90 /^SUBROUTINE initchem$/;" s module:modchem initchem src/modchem.f90 /^SUBROUTINE initchem$/;" s module:modchem -initcloudfield src/addon/modcloudfield.f90 /^ subroutine initcloudfield$/;" s module:modcloudfield initcloudfield src/modcloudfield.f90 /^ subroutine initcloudfield$/;" s module:modcloudfield -initcrosssection src/addon/modcrosssection.f90 /^ subroutine initcrosssection$/;" s module:modcrosssection initcrosssection src/modcrosssection.f90 /^ subroutine initcrosssection$/;" s module:modcrosssection -initfielddump src/addon/modfielddump.f90 /^ subroutine initfielddump$/;" s module:modfielddump initfielddump src/modfielddump.f90 /^ subroutine initfielddump$/;" s module:modfielddump initfields src/modfields.f90 /^subroutine initfields$/;" s module:modfields -initgenstat src/addon/modgenstat.f90 /^ subroutine initgenstat$/;" s module:modgenstat initgenstat src/modgenstat.f90 /^ subroutine initgenstat$/;" s module:modgenstat initglobal src/modglobal.f90 /^ subroutine initglobal$/;" s module:modglobal -initheterostats src/addon/modheterostats.f90 /^ subroutine initheterostats$/;" s module:modheterostats initheterostats src/modheterostats.f90 /^ subroutine initheterostats$/;" s module:modheterostats initialize_scalar src/rad_rndnmb.f90 /^ function initialize_scalar(/;" f module:RandomNumbers initialize_vector src/rad_rndnmb.f90 /^ function initialize_vector(/;" f module:RandomNumbers initlsm src/modsurface.f90 /^ subroutine initlsm$/;" s module:modsurface initlsmcrosssection src/modlsmcrosssection.f90 /^ subroutine initlsmcrosssection$/;" s module:modlsmcrosssection initlsmstat src/modlsmstat.f90 /^ subroutine initlsmstat$/;" s module:modlsmstat -initmicrophysics src/addon/modmicrophysics.f90 /^ subroutine initmicrophysics$/;" s module:modmicrophysics initmicrophysics src/modmicrophysics.f90 /^ subroutine initmicrophysics$/;" s module:modmicrophysics initmpi src/modmpi.f90 /^ subroutine initmpi$/;" s module:modmpi initnetcdfmovie src/addon/modnetcdfmovie.f90 /^ subroutine initnetcdfmovie$/;" s module:modnetcdfmovie initnetcdfstats src/addon/modnetcdfstats.f90 /^ subroutine initnetcdfstats$/;" s module:modnetcdfstats -initnudge src/addon/modnudge.f90 /^ subroutine initnudge$/;" s module:modnudge initnudge src/modnudge.f90 /^ subroutine initnudge$/;" s module:modnudge initparticles src/addon/modparticles.f90 /^ subroutine initparticles$/;" s module:modparticles initpois src/modpois.f90 /^ subroutine initpois$/;" s module:modpois -initprojection src/addon/modprojection.f90 /^ subroutine initprojection$/;" s module:modprojection initprojection src/modprojection.f90 /^ subroutine initprojection$/;" s module:modprojection initquadrant src/modquadrant.f90 /^ subroutine initquadrant$/;" s module:modquadrant initradiation src/modradiation.f90 /^ subroutine initradiation$/;" s module:modradiation -initradstat src/addon/modradstat.f90 /^ subroutine initradstat$/;" s module:modradstat initradstat src/modradstat.f90 /^ subroutine initradstat$/;" s module:modradstat -initsampling src/addon/modsampling.f90 /^ subroutine initsampling$/;" s module:modsampling initsampling src/modsampling.f90 /^ subroutine initsampling$/;" s module:modsampling initsamptend src/modsamptend.f90 /^subroutine initsamptend$/;" s module:modsamptend initsimpleice src/modsimpleice.f90 /^ subroutine initsimpleice$/;" s module:modsimpleice initsimpleicestat src/modsimpleicestat.f90 /^subroutine initsimpleicestat$/;" s module:modsimpleicestat -initstat_nc src/addon/modstat_nc.f90 /^ subroutine initstat_nc$/;" s module:modstat_nc -initstat_nc src/addon/stat_nc_dummy.f90 /^ subroutine initstat_nc$/;" s module:modstat_nc initstat_nc src/modstat_nc.f90 /^ subroutine initstat_nc$/;" s module:modstat_nc -initstattend src/addon/modstattend.f90 /^subroutine initstattend$/;" s module:modstattend initstattend src/modstattend.f90 /^subroutine initstattend$/;" s module:modstattend initstressbudget src/addon/modstress.f90 /^ subroutine initstressbudget$/;" s module:modstress initsubgrid src/modsubgrid.f90 /^ subroutine initsubgrid$/;" s module:modsubgrid initsurf_user src/moduser.f90 /^subroutine initsurf_user$/;" s module:moduser initsurface src/modsurface.f90 /^ subroutine initsurface$/;" s module:modsurface +inittestbed src/modtestbed.f90 /^ subroutine inittestbed$/;" s module:modtestbed initthermodynamics src/modthermodynamics.f90 /^ subroutine initthermodynamics$/;" s module:modthermodynamics initthla src/addon/modtilt.f90 /^ subroutine initthla$/;" s module:modtilt inittilt src/addon/modtilt.f90 /^ subroutine inittilt$/;" s module:modtilt inittimedep src/modtimedep.f90 /^ subroutine inittimedep$/;" s module:modtimedep inittimedepsv src/modtimedepsv.f90 /^ subroutine inittimedepsv$/;" s module:modtimedepsv -inittimestat src/addon/modtimestat.f90 /^ subroutine inittimestat$/;" s module:modtimestat inittimestat src/modtimestat.f90 /^ subroutine inittimestat$/;" s module:modtimestat initvar_cldwtr src/modradfull.f90 /^ subroutine initvar_cldwtr(/;" s module:modradfull inomove src/addon/modparticles.f90 /^ integer,parameter :: inomove=/;" v module:modparticles -inp src/addon/modchem.f90 /^ type (Chem) inp(/;" k type:Reaction inp src/modchem.f90 /^ type (Chem) inp(/;" k type:Reaction -inputchem src/addon/modchem.f90 /^subroutine inputchem$/;" s module:modchem inputchem src/modchem.f90 /^subroutine inputchem$/;" s module:modchem inr src/addon/modbulkmicrodata.f90 /^ integer :: inr /;" v module:modbulkmicrodata inr src/modmicrodata.f90 /^ integer :: inr /;" v module:modmicrodata interfaceP src/modraddata.f90 /^ real(kind=kind_rb),allocatable,dimension(:,:) :: interfaceP,/;" v module:modraddata interfaceT src/modraddata.f90 /^ real(kind=kind_rb),allocatable,dimension(:,:) :: interfaceP, &$/;" v module:modraddata -interpolate src/modradfull.f90 /^ subroutine interpolate(/;" s module:modradfull intmeth src/addon/modparticles.f90 /^ integer :: intmeth /;" v module:modparticles intrpl src/modradfull.f90 /^ real function intrpl(/;" f module:modradfull ioverlap src/modraddata.f90 /^ integer :: ioverlap /;" v module:modraddata @@ -1638,31 +1395,19 @@ isInitializedRrtmg src/modraddata.f90 /^ logical :: isInitializedRrtmg /;" v mo isReadSounding src/modraddata.f90 /^ logical :: isReadSounding /;" v module:modraddata isReadTraceProfiles src/modraddata.f90 /^ logical :: isReadTraceProfiles /;" v module:modraddata isSolar src/modradfull.f90 /^ elemental logical function isSolar(/;" f module:modradfull -isamp src/addon/modsampling.f90 /^ integer :: nsamples,isamp,/;" v module:modsampling isamp src/modquadrant.f90 /^ integer :: isamp$/;" v module:modquadrant isamp src/modsampling.f90 /^ integer :: nsamples,isamp,/;" v module:modsampling isamp src/modsamptend.f90 /^ integer :: nsamples,isamp,/;" v module:modsamptend -isamptot src/addon/modsampling.f90 /^ integer :: nsamples,isamp,isamptot$/;" v module:modsampling isamptot src/modquadrant.f90 /^ integer, parameter :: isamptot=/;" v module:modquadrant isamptot src/modsampling.f90 /^ integer :: nsamples,isamp,isamptot$/;" v module:modsampling isamptot src/modsamptend.f90 /^ integer :: nsamples,isamp,isamptot$/;" v module:modsamptend -ised src/addon/modbulkmicrostat.f90 /^ ievap = 4 , &$/;" v module:modbulkmicrostat ised src/modbulkmicrostat.f90 /^ ievap = 4 , &$/;" v module:modbulkmicrostat ised src/modsimpleicestat.f90 /^ ievap = 4 , &$/;" v module:modsimpleicestat isurf src/modsurfdata.f90 /^ integer :: isurf /;" v module:modsurfdata isvsmoke src/modraddata.f90 /^ integer :: isvsmoke /;" v module:modraddata -itcheck src/addon/modchecksim.f90 /^ integer(kind=longint) :: tnext = 3600.,itcheck$/;" v module:modchecksim itcheck src/modchecksim.f90 /^ integer(kind=longint) :: tnext = 3600.,itcheck$/;" v module:modchecksim -itermin src/addon/modchem.f90 /^ real itermin,/;" v module:modchem itermin src/modchem.f90 /^ real itermin,/;" v module:modchem -itimeav src/addon/modbudget.f90 /^ integer(kind=longint) :: idtav, itimeav,/;" v module:modbudget -itimeav src/addon/modbulkmicrostat.f90 /^ integer(kind=longint):: idtav, itimeav,/;" v module:modbulkmicrostat -itimeav src/addon/modchem.f90 /^ integer(kind=longint) :: itimeav,/;" v module:modchem -itimeav src/addon/modgenstat.f90 /^ integer(kind=longint) :: idtav,itimeav,/;" v module:modgenstat itimeav src/addon/modparticles.f90 /^ integer(kind=longint) :: itimeav,/;" v module:modparticles -itimeav src/addon/modradstat.f90 /^ integer(kind=longint) :: idtav,itimeav,/;" v module:modradstat -itimeav src/addon/modsampling.f90 /^ integer(kind=longint) :: idtav,itimeav,/;" v module:modsampling -itimeav src/addon/modstattend.f90 /^ integer(kind=longint) :: idtav,itimeav,/;" v module:modstattend itimeav src/addon/modstress.f90 /^ integer(kind=longint) :: idtav, itimeav,/;" v module:modstress itimeav src/addon/modtilt.f90 /^ integer(kind=longint) :: idtav,itimeav,/;" v module:modtilt itimeav src/modbudget.f90 /^ integer(kind=longint) :: idtav, itimeav,/;" v module:modbudget @@ -1678,6 +1423,8 @@ itimeav src/modsimpleicestat.f90 /^ integer(kind=longint):: idtav, itimeav,/;" itimeav src/modstattend.f90 /^ integer(kind=longint) :: idtav,itimeav,/;" v module:modstattend itimedump src/addon/modparticles.f90 /^ integer(kind=longint) :: itimeav,idtav,itimedump,/;" v module:modparticles itimerad src/modraddata.f90 /^ integer(kind=longint) :: itimerad /;" v module:modraddata +itmax src/modfielddump.f90 /^ integer(kind=longint) :: idtav,tnext,itmax,/;" v module:modfielddump +itmin src/modfielddump.f90 /^ integer(kind=longint) :: idtav,tnext,itmax,itmin$/;" v module:modfielddump itot src/modglobal.f90 /^ integer :: itot /;" v module:modglobal itrestart src/modglobal.f90 /^ integer(kind=longint) :: itrestart /;" v module:modglobal iwind src/modquadrant.f90 /^ integer :: iwind /;" v module:modquadrant @@ -1702,7 +1449,6 @@ k src/addon/modparticles.f90 /^ integer :: ipuresprev,ipvresprev,ipwresprev,ipx k src/modradfull.f90 /^ integer :: i,j,k,/;" v module:modradfull k1 src/modglobal.f90 /^ integer :: k1$/;" v module:modglobal k2 src/modglobal.f90 /^ integer :: k2$/;" v module:modglobal -k3d src/addon/modchem.f90 /^ real*4, allocatable :: k3d(/;" v module:modchem k3d src/modchem.f90 /^ real*4, allocatable :: k3d(/;" v module:modchem k_1 src/addon/modbulkmicrodata.f90 /^ ,k_1 /;" v module:modbulkmicrodata k_1 src/modmicrodata.f90 /^ ,k_1 /;" v module:modmicrodata @@ -1870,40 +1616,31 @@ kbo_mo2 src/rrlw_kg11.f90 /^ real(kind=rb) :: kbo_mo2(/;" v module:rrlw_kg1 kbo_mo3 src/rrlw_kg13.f90 /^ real(kind=rb) :: kbo_mo3(/;" v module:rrlw_kg13 kcb src/modglobal.f90 /^ integer :: kcb=/;" v module:modglobal kci src/modsurfdata.f90 /^ real :: kci /;" v module:modsurfdata -keff src/addon/modchem.f90 /^ real, allocatable :: keff(/;" v module:modchem keff src/modchem.f90 /^ real, allocatable :: keff(/;" v module:modchem -keffT src/addon/modchem.f90 /^ real, allocatable :: keffT(/;" v module:modchem keffT src/modchem.f90 /^ real, allocatable :: keffT(/;" v module:modchem -keffT3D src/addon/modchem.f90 /^ real, allocatable :: keffT3D(/;" v module:modchem -keff_index src/addon/modchem.f90 /^ integer keff_index$/;" k type:Reaction keff_index src/modchem.f90 /^ integer keff_index$/;" k type:Reaction -kefftemp src/addon/modchem.f90 /^ real, allocatable :: kefftemp(/;" v module:modchem kefftemp src/modchem.f90 /^ real, allocatable :: kefftemp(/;" v module:modchem keylower src/rrlw_ncpar.f90 /^ integer(kind=im), parameter :: keylower /;" v module:rrlw_ncpar -keylower src/rrsw_ncpar.f90 /^ integer(kind=im), parameter :: keylower /;" v module:rrsw_ncpar +keylower src/rrsw_ncpar.f90 /^ integer(kind=im), parameter :: keylower /;" v module:rrsw_ncpar keyupper src/rrlw_ncpar.f90 /^ integer(kind=im), parameter :: keylower = 9, &$/;" v module:rrlw_ncpar -keyupper src/rrsw_ncpar.f90 /^ integer(kind=im), parameter :: keylower = 9, &$/;" v module:rrsw_ncpar -kflux src/modtimedep.f90 /^ integer, parameter :: kflux /;" v module:modtimedep +keyupper src/rrsw_ncpar.f90 /^ integer(kind=im), parameter :: keylower = 9, &$/;" v module:rrsw_ncpar +kflux src/modtimedep.f90 /^ integer :: kflux$/;" v module:modtimedep kflux src/modtimedepsv.f90 /^ integer, parameter :: kflux /;" v module:modtimedepsv kg src/modradfull.f90 /^ integer :: kg,/;" k type:band_properties kg src/modradfull.f90 /^ elemental integer function kg(/;" f module:modradfull kgc src/modsurfdata.f90 /^ real :: kgc /;" v module:modsurfdata kh src/modglobal.f90 /^ integer :: kh=/;" v module:modglobal -khigh src/addon/modfielddump.f90 /^ integer :: klow,khigh$/;" v module:modfielddump -khigh src/modfielddump.f90 /^ integer :: klow,khigh$/;" v module:modfielddump +khigh src/modfielddump.f90 /^ integer :: klow,khigh,/;" v module:modfielddump khigh src/modquadrant.f90 /^ integer :: nvar, klow, khigh,/;" v module:modquadrant -khkmmn src/addon/modbudget.f90 /^ real, allocatable :: khkmmn(/;" v module:modbudget khkmmn src/modbudget.f90 /^ real, allocatable :: khkmmn(/;" v module:modbudget kind_im src/modglobal.f90 /^ integer, parameter :: kind_im /;" v module:modglobal kind_rb src/modglobal.f90 /^ integer, parameter :: kind_rb /;" v module:modglobal -klow src/addon/modfielddump.f90 /^ integer :: klow,/;" v module:modfielddump klow src/modfielddump.f90 /^ integer :: klow,/;" v module:modfielddump klow src/modquadrant.f90 /^ integer :: nvar, klow,/;" v module:modquadrant -kls src/modtimedep.f90 /^ integer, parameter :: kls /;" v module:modtimedep +kls src/modtimedep.f90 /^ integer :: kls$/;" v module:modtimedep kls src/modtimedepsv.f90 /^ integer, parameter :: kls /;" v module:modtimedepsv kmax src/modglobal.f90 /^ integer :: kmax /;" v module:modglobal knr src/modquadrant.f90 /^ integer :: nvar, klow, khigh, knr$/;" v module:modquadrant -kr src/addon/modchem.f90 /^ real kr /;" k type:Reaction kr src/modchem.f90 /^ real kr /;" k type:Reaction krad1 src/modraddata.f90 /^ integer :: kradmax, krad1,/;" v module:modraddata krad2 src/modraddata.f90 /^ integer :: kradmax, krad1, krad2 /;" v module:modraddata @@ -1911,7 +1648,6 @@ kradmax src/modraddata.f90 /^ integer :: kradmax,/;" v module:modraddata krand src/modstartup.f90 /^ integer :: krand /;" v module:modstartup krandumax src/modstartup.f90 /^ integer :: krand = huge(0), krandumin=1,krandumax=/;" v module:modstartup krandumin src/modstartup.f90 /^ integer :: krand = huge(0), krandumin=/;" v module:modstartup -kreact src/addon/modchem.f90 /^ real, allocatable :: rk1(:,:),rk2(:,:),rk(:,:),kreact(/;" v module:modchem kreact src/modchem.f90 /^ real, allocatable :: rk1(:,:),rk2(:,:),rk(:,:),kreact(/;" v module:modchem ksoilmax src/modsurfdata.f90 /^ integer, parameter :: ksoilmax /;" v module:modsurfdata ksp src/modboundary.f90 /^ integer :: ksp /;" v module:modboundary @@ -1936,7 +1672,6 @@ l_sedc src/addon/modbulkmicrodata.f90 /^ logical :: l_sb = .true. , &!< l_sedc src/modmicrodata.f90 /^ logical :: l_sb = .true. , &!< SB scheme (.true.) \/ KK00 scheme (.false.) (in namelist NAMMICROPHYSICS)$/;" v module:modmicrodata l_warm src/modmicrodata.f90 /^ logical :: l_warm /;" v module:modmicrodata ladaptive src/modglobal.f90 /^ logical :: ladaptive /;" v module:modglobal -laddinfo src/addon/modcloudfield.f90 /^ logical :: laddinfo /;" v module:modcloudfield laddinfo src/modcloudfield.f90 /^ logical :: laddinfo /;" v module:modcloudfield laero src/modraddata.f90 /^ logical :: laero /;" v module:modraddata lai src/modcanopy.f90 /^ real :: lai /;" v module:modcanopy @@ -1964,7 +1699,6 @@ lambm0 src/modraddata.f90 /^ o land_use src/modsurfdata.f90 /^ integer :: land_use(/;" v module:modsurfdata landname src/modsurfdata.f90 /^ character(len=10),dimension(max_lands) :: landname /;" v module:modsurfdata landtype src/modsurfdata.f90 /^ integer :: landtype(/;" v module:modsurfdata -lastchem src/addon/modchem.f90 /^ integer tnor, firstchem, lastchem$/;" v module:modchem lastchem src/modchem.f90 /^ integer tnor, firstchem, lastchem$/;" v module:modchem lastrk3coef src/modsamptend.f90 /^ real :: lastrk3coef$/;" v module:modsamptend layerP src/modraddata.f90 /^ real(kind=kind_rb),allocatable,dimension(:,:) :: layerP,/;" v module:modraddata @@ -1973,43 +1707,31 @@ lbdr src/addon/modbulkmicrodata.f90 /^ ,lbdr /;" v module:modbulkmicrod lbdr src/modmicrodata.f90 /^ ,lbdr /;" v module:modmicrodata lbinary src/modcrosssection.f90 /^ logical :: lbinary /;" v module:modcrosssection lbinary src/modfielddump.f90 /^ logical :: lbinary /;" v module:modfielddump -lbudget src/addon/modbudget.f90 /^ logical :: lbudget=/;" v module:modbudget lbudget src/modbudget.f90 /^ logical :: lbudget=/;" v module:modbudget lcanopy src/modcanopy.f90 /^ logical :: lcanopy /;" v module:modcanopy lcape src/modcape.f90 /^ logical :: lcape /;" v module:modcape -lchconst src/addon/modchem.f90 /^ logical lchem, ldiuvar,lchconst,/;" v module:modchem lchconst src/modchem.f90 /^ logical lchem, ldiuvar,lchconst,/;" v module:modchem -lchem src/addon/modchem.f90 /^ logical lchem,/;" v module:modchem lchem src/modchem.f90 /^ logical lchem,/;" v module:modchem -lchmovie src/addon/modchem.f90 /^ logical lchem, ldiuvar,lchconst,lchmovie,/;" v module:modchem lchmovie src/modchem.f90 /^ logical lchem, ldiuvar,lchconst,lchmovie,/;" v module:modchem -lcloudKconst src/addon/modchem.f90 /^ logical lchem, ldiuvar,lchconst,lchmovie,lcloudKconst,/;" v module:modchem lcloudKconst src/modchem.f90 /^ logical lchem, ldiuvar,lchconst,lchmovie,lcloudKconst,/;" v module:modchem -lcloudfield src/addon/modcloudfield.f90 /^ logical :: lcloudfield=/;" v module:modcloudfield lcloudfield src/modcloudfield.f90 /^ logical :: lcloudfield=/;" v module:modcloudfield lcloudshading src/modraddata.f90 /^ logical :: lcloudshading /;" v module:modraddata lcoriol src/modglobal.f90 /^ logical :: lcoriol /;" v module:modglobal -lcross src/addon/modcrosssection.f90 /^ logical :: lcross /;" v module:modcrosssection lcross src/modcrosssection.f90 /^ logical :: lcross /;" v module:modcrosssection lcross src/modlsmcrosssection.f90 /^ logical :: lcross /;" v module:modlsmcrosssection ldelta src/modsubgriddata.f90 /^ logical :: ldelta /;" v module:modsubgriddata -ldiracc src/addon/modfielddump.f90 /^ logical :: ldiracc /;" v module:modfielddump ldiracc src/modfielddump.f90 /^ logical :: ldiracc /;" v module:modfielddump -ldiuvar src/addon/modchem.f90 /^ logical lchem, ldiuvar,/;" v module:modchem ldiuvar src/modchem.f90 /^ logical lchem, ldiuvar,/;" v module:modchem ldosamptendleib src/modsamptend.f90 /^ logical :: ldosamptendleib /;" v module:modsamptend ldosamptendwrite src/modsamptend.f90 /^ logical :: ldosamptendwrite /;" v module:modsamptend ldump src/addon/modparticles.f90 /^ logical :: ldump /;" v module:modparticles leibniztend src/modsamptend.f90 /^ subroutine leibniztend$/;" s module:modsamptend leq src/modglobal.f90 /^ logical :: leq /;" v module:modglobal -lfielddump src/addon/modfielddump.f90 /^ logical :: lfielddump=/;" v module:modfielddump lfielddump src/modfielddump.f90 /^ logical :: lfielddump=/;" v module:modfielddump lforce_user src/modforces.f90 /^logical :: lforce_user /;" v module:modforces lhetero src/modsurfdata.f90 /^ logical :: lhetero /;" v module:modsurfdata -lheterostats src/addon/modheterostats.f90 /^ logical :: lheterostats /;" v module:modheterostats lheterostats src/modheterostats.f90 /^ logical :: lheterostats /;" v module:modheterostats linags src/modsurfdata.f90 /^ logical :: linags /;" v module:modsurfdata -liq_cont src/addon/modbulkmicro.f90 /^ real function liq_cont(/;" f module:modbulkmicro liq_cont src/modbulkmicro.f90 /^ real function liq_cont(/;" f module:modbulkmicro liqflglw src/modraddata.f90 /^ integer :: liqflglw /;" v module:modraddata liqflgsw src/modraddata.f90 /^ integer :: liqflgsw /;" v module:modraddata @@ -2018,7 +1740,6 @@ llimit src/modradfull.f90 /^ real :: llimit,/;" k type:band_ llimit src/modradfull.f90 /^ elemental real function llimit(/;" f module:modradfull llsadv src/modglobal.f90 /^ logical :: llsadv /;" v module:modglobal lmason src/modsubgriddata.f90 /^ logical :: lmason /;" v module:modsubgriddata -lmicrostat src/addon/modbulkmicrostat.f90 /^ logical :: lmicrostat /;" v module:modbulkmicrostat lmicrostat src/modbulkmicrostat.f90 /^ logical :: lmicrostat /;" v module:modbulkmicrostat lmicrostat src/modsimpleicestat.f90 /^ logical :: lmicrostat /;" v module:modsimpleicestat lmoist src/modglobal.f90 /^ logical :: lmoist /;" v module:modglobal @@ -2026,62 +1747,46 @@ lmomsubs src/modglobal.f90 /^ logical :: lmomsubs /;" v module:modglobal lmostlocal src/modsurfdata.f90 /^ logical :: lmostlocal /;" v module:modsurfdata lmoviez src/addon/modnetcdfmovie.f90 /^ logical :: lmoviez /;" v module:modnetcdfmovie lnetcdf src/addon/modnetcdfstats.f90 /^ logical :: lnetcdf /;" v module:modnetcdfstats -lnetcdf src/addon/modstat_nc.f90 /^ logical :: lnetcdf$/;" v module:modstat_nc -lnetcdf src/addon/stat_nc_dummy.f90 /^ logical :: lnetcdf$/;" v module:modstat_nc lnetcdf src/modstat_nc.f90 /^ logical :: lnetcdf /;" v module:modstat_nc lnetcdfmovie src/addon/modnetcdfmovie.f90 /^ logical :: lnetcdfmovie /;" v module:modnetcdfmovie lneutral src/modsurfdata.f90 /^ logical :: lneutral /;" v module:modsurfdata lnoclouds src/modglobal.f90 /^ logical :: lnoclouds /;" v module:modglobal -lnudge src/addon/modnudge.f90 /^ logical :: lnudge,/;" v module:modnudge lnudge src/modnudge.f90 /^ logical :: lnudge /;" v module:modnudge -loc src/addon/modchem.f90 /^ integer loc$/;" k type:location loc src/modchem.f90 /^ integer loc$/;" k type:location -location src/addon/modchem.f90 /^ type, PUBLIC :: location$/;" t module:modchem location src/modchem.f90 /^ type, PUBLIC :: location$/;" t module:modchem loldtable src/modsurfdata.f90 /^ logical :: loldtable /;" v module:modsurfdata longint src/modglobal.f90 /^ integer, parameter :: longint=/;" v module:modglobal -longsamplname src/addon/modsampling.f90 /^ character(20),dimension(10) :: samplname,longsamplname$/;" v module:modsampling longsamplname src/modquadrant.f90 /^ character(30),dimension(4) :: samplname,longsamplname$/;" v module:modquadrant longsamplname src/modsampling.f90 /^ character(20),dimension(10) :: samplname,longsamplname$/;" v module:modsampling longsamplname src/modsamptend.f90 /^ character(20),dimension(10) :: samplname,longsamplname$/;" v module:modsamptend lpaddistr src/modcanopy.f90 /^ logical :: lpaddistr /;" v module:modcanopy lpartic src/addon/modparticles.f90 /^ logical :: lpartic /;" v module:modparticles lpartsgs src/addon/modparticles.f90 /^ logical :: lpartsgs /;" v module:modparticles -lproject src/addon/modprojection.f90 /^ logical:: lproject /;" v module:modprojection +lpressgrad src/modglobal.f90 /^ logical :: lpressgrad /;" v module:modglobal lproject src/modprojection.f90 /^ logical:: lproject /;" v module:modprojection lqlnr src/modthermodynamics.f90 /^ logical :: lqlnr /;" v module:modthermodynamics -lqtnudge src/addon/modnudge.f90 /^ logical :: lnudge,lunudge,lvnudge,lwnudge,lthlnudge,lqtnudge$/;" v module:modnudge lqtnudge src/modnudge.f90 /^ logical :: lnudge = .false.,lunudge,lvnudge,lwnudge,lthlnudge,lqtnudge$/;" v module:modnudge lquadrant src/modquadrant.f90 /^ logical :: lquadrant /;" v module:modquadrant -lradclearair src/addon/modradstat.f90 /^ logical :: lradclearair=/;" v module:modradstat lradclearair src/modradstat.f90 /^ logical :: lradclearair=/;" v module:modradstat lrelaxci src/modsurfdata.f90 /^ logical :: lrelaxci /;" v module:modsurfdata lrelaxgc src/modsurfdata.f90 /^ logical :: lrelaxgc /;" v module:modsurfdata lrigidlid src/modglobal.f90 /^ logical :: lrigidlid /;" v module:modglobal lrsAgs src/modsurfdata.f90 /^ logical :: lrsAgs /;" v module:modsurfdata lsampall src/modsampdata.f90 /^ logical :: lsampall /;" v module:modsampdata -lsampbuup src/addon/modsampling.f90 /^ logical :: lsampbuup /;" v module:modsampling lsampbuup src/modsampdata.f90 /^ logical :: lsampbuup /;" v module:modsampdata -lsampcl src/addon/modsampling.f90 /^ logical :: lsampcl /;" v module:modsampling lsampcl src/modsampdata.f90 /^ logical :: lsampcl /;" v module:modsampdata lsampcldup src/modsampdata.f90 /^ logical :: lsampcldup /;" v module:modsampdata -lsampco src/addon/modsampling.f90 /^ logical :: lsampco /;" v module:modsampling lsampco src/modsampdata.f90 /^ logical :: lsampco /;" v module:modsampdata lsamptend src/modsampdata.f90 /^ logical :: lsamptend /;" v module:modsampdata -lsampup src/addon/modsampling.f90 /^ logical :: lsampup /;" v module:modsampling lsampup src/modsampdata.f90 /^ logical :: lsampup /;" v module:modsampdata -lsbtkeb src/addon/modbudget.f90 /^ logical :: lsbtkeb /;" v module:modbudget lsbtkeb src/modbudget.f90 /^ logical :: lsbtkeb /;" v module:modbudget -lsegr src/addon/modchem.f90 /^ logical lchem, ldiuvar,lchconst,lchmovie,lcloudKconst,lsegr$/;" v module:modchem lsegr src/modchem.f90 /^ logical lchem, ldiuvar,lchconst,lchmovie,lcloudKconst,lsegr$/;" v module:modchem lsgbucorr src/modglobal.f90 /^ logical :: lsgbucorr=/;" v module:modglobal lsmagorinsky src/modsubgriddata.f90 /^ logical :: lsmagorinsky /;" v module:modsubgriddata lsmcrosssection src/modlsmcrosssection.f90 /^ subroutine lsmcrosssection$/;" s module:modlsmcrosssection lsmoothflux src/modsurfdata.f90 /^ logical :: lsmoothflux /;" v module:modsurfdata lsmstat src/modlsmstat.f90 /^ subroutine lsmstat$/;" s module:modlsmstat -lstat src/addon/modgenstat.f90 /^ logical :: lstat=/;" v module:modgenstat lstat src/addon/modparticles.f90 /^ logical :: lstat /;" v module:modparticles -lstat src/addon/modradstat.f90 /^ logical :: lstat=/;" v module:modradstat lstat src/addon/modtilt.f90 /^ logical :: lstat /;" v module:modtilt lstat src/modgenstat.f90 /^ logical :: lstat=/;" v module:modgenstat lstat src/modlsmstat.f90 /^ logical :: lstat=/;" v module:modlsmstat @@ -2089,23 +1794,26 @@ lstat src/modradstat.f90 /^ logical :: lstat=/;" v module:modradstat lstend src/modforces.f90 /^ subroutine lstend$/;" s module:modforces lstress src/addon/modstress.f90 /^ logical :: lstress=/;" v module:modstress lstressb src/addon/modstress.f90 /^ logical :: lstressb /;" v module:modstress -ltend src/addon/modstattend.f90 /^ logical :: ltend /;" v module:modstattend +ltb_nudge src/modtestbed.f90 /^ logical :: ltestbed = .false., &$/;" v module:modtestbed +ltb_qt src/modtestbed.f90 /^ ltb_u,ltb_v,ltb_w,ltb_thl,ltb_qt$/;" v module:modtestbed +ltb_thl src/modtestbed.f90 /^ ltb_u,ltb_v,ltb_w,ltb_thl,/;" v module:modtestbed +ltb_u src/modtestbed.f90 /^ ltb_nudge = .false., &$/;" v module:modtestbed +ltb_v src/modtestbed.f90 /^ ltb_u,ltb_v,/;" v module:modtestbed +ltb_w src/modtestbed.f90 /^ ltb_u,ltb_v,ltb_w,/;" v module:modtestbed ltend src/modstattend.f90 /^ logical :: ltend /;" v module:modstattend -lthlnudge src/addon/modnudge.f90 /^ logical :: lnudge,lunudge,lvnudge,lwnudge,lthlnudge,/;" v module:modnudge +ltestbed src/modtestbed.f90 /^ logical :: ltestbed /;" v module:modtestbed lthlnudge src/modnudge.f90 /^ logical :: lnudge = .false.,lunudge,lvnudge,lwnudge,lthlnudge,/;" v module:modnudge ltilted src/addon/modtilt.f90 /^ logical :: ltilted /;" v module:modtilt ltimedep src/modtimedep.f90 /^ logical :: ltimedep /;" v module:modtimedep ltimedepsurf src/modtimedep.f90 /^ logical :: ltimedepsurf /;" v module:modtimedep +ltimedepsv src/modtimedepsv.f90 /^ logical :: ltimedepsv /;" v module:modtimedepsv ltimedepsvsurf src/modtimedepsv.f90 /^ logical :: ltimedepsvsurf /;" v module:modtimedepsv ltimedepsvz src/modtimedepsv.f90 /^ logical :: ltimedepsvz /;" v module:modtimedepsv ltimedepz src/modtimedep.f90 /^ logical :: ltimedepz /;" v module:modtimedep -ltimestat src/addon/modtimestat.f90 /^ logical :: ltimestat=/;" v module:modtimestat ltimestat src/modtimestat.f90 /^ logical :: ltimestat=/;" v module:modtimestat -ltkeb src/addon/modbudget.f90 /^ logical :: ltkeb /;" v module:modbudget ltkeb src/modbudget.f90 /^ logical :: ltkeb /;" v module:modbudget -lunudge src/addon/modnudge.f90 /^ logical :: lnudge,lunudge,/;" v module:modnudge +ltotruntime src/modglobal.f90 /^ logical :: ltotruntime /;" v module:modglobal lunudge src/modnudge.f90 /^ logical :: lnudge = .false.,lunudge,/;" v module:modnudge -lvnudge src/addon/modnudge.f90 /^ logical :: lnudge,lunudge,lvnudge,/;" v module:modnudge lvnudge src/modnudge.f90 /^ logical :: lnudge = .false.,lunudge,lvnudge,/;" v module:modnudge lwDownCS_slice src/modraddata.f90 /^ lwUpCS_slice, & ! Upwelling longwave rad, clear sky value (2D slice)$/;" v module:modraddata lwDown_slice src/modraddata.f90 /^ lwUp_slice, & ! Upwelling longwave rad (2D slice)$/;" v module:modraddata @@ -2119,16 +1827,16 @@ lw_kgb03 src/rrtmg_lw_read_nc.f90 /^subroutine lw_kgb03$/;" s lw_kgb04 src/rrtmg_lw_read_nc.f90 /^subroutine lw_kgb04$/;" s lw_kgb05 src/rrtmg_lw_read_nc.f90 /^subroutine lw_kgb05$/;" s lw_kgb06 src/rrtmg_lw_read_nc.f90 /^subroutine lw_kgb06$/;" s -lw_kgb07 src/rrtmg_lw_read_nc.f90 /^subroutine lw_kgb07 /;" s -lw_kgb08 src/rrtmg_lw_read_nc.f90 /^subroutine lw_kgb08 /;" s -lw_kgb09 src/rrtmg_lw_read_nc.f90 /^subroutine lw_kgb09 /;" s -lw_kgb10 src/rrtmg_lw_read_nc.f90 /^subroutine lw_kgb10 /;" s +lw_kgb07 src/rrtmg_lw_read_nc.f90 /^subroutine lw_kgb07$/;" s +lw_kgb08 src/rrtmg_lw_read_nc.f90 /^subroutine lw_kgb08$/;" s +lw_kgb09 src/rrtmg_lw_read_nc.f90 /^subroutine lw_kgb09$/;" s +lw_kgb10 src/rrtmg_lw_read_nc.f90 /^subroutine lw_kgb10$/;" s lw_kgb11 src/rrtmg_lw_read_nc.f90 /^subroutine lw_kgb11$/;" s lw_kgb12 src/rrtmg_lw_read_nc.f90 /^subroutine lw_kgb12$/;" s -lw_kgb13 src/rrtmg_lw_read_nc.f90 /^subroutine lw_kgb13 /;" s -lw_kgb14 src/rrtmg_lw_read_nc.f90 /^subroutine lw_kgb14 /;" s -lw_kgb15 src/rrtmg_lw_read_nc.f90 /^subroutine lw_kgb15 /;" s -lw_kgb16 src/rrtmg_lw_read_nc.f90 /^subroutine lw_kgb16 /;" s +lw_kgb13 src/rrtmg_lw_read_nc.f90 /^subroutine lw_kgb13$/;" s +lw_kgb14 src/rrtmg_lw_read_nc.f90 /^subroutine lw_kgb14$/;" s +lw_kgb15 src/rrtmg_lw_read_nc.f90 /^subroutine lw_kgb15$/;" s +lw_kgb16 src/rrtmg_lw_read_nc.f90 /^subroutine lw_kgb16$/;" s lwarmstart src/modglobal.f90 /^ logical :: lwarmstart /;" v module:modglobal lwatmref src/rrtmg_lw_setcoef.f90 /^ subroutine lwatmref$/;" s module:rrtmg_lw_setcoef lwavplank src/rrtmg_lw_setcoef.f90 /^ subroutine lwavplank$/;" s module:rrtmg_lw_setcoef @@ -2136,36 +1844,25 @@ lwcldpr src/rrtmg_lw_init.f90 /^ subroutine lwcldpr$/;" s module:rrtmg_lw_i lwcmbdat src/rrtmg_lw_init.f90 /^ subroutine lwcmbdat$/;" s module:rrtmg_lw_init lwd src/modraddata.f90 /^ real, allocatable :: lwd(/;" v module:modraddata lwdatinit src/rrtmg_lw_init.f90 /^ subroutine lwdatinit(/;" s module:rrtmg_lw_init -lwdav src/addon/modradstat.f90 /^ real, allocatable :: lwdav(/;" v module:modradstat lwdav src/modradstat.f90 /^ real, allocatable :: lwdav(/;" v module:modradstat lwdavn src/modsurfdata.f90 /^ real, allocatable :: lwdavn /;" v module:modsurfdata lwdca src/modraddata.f90 /^ real, allocatable :: lwdca(/;" v module:modraddata -lwdcaav src/addon/modradstat.f90 /^ real, allocatable :: lwdcaav(/;" v module:modradstat lwdcaav src/modradstat.f90 /^ real, allocatable :: lwdcaav(/;" v module:modradstat -lwdcamn src/addon/modradstat.f90 /^ real, allocatable :: lwdcamn(/;" v module:modradstat lwdcamn src/modradstat.f90 /^ real, allocatable :: lwdcamn(/;" v module:modradstat -lwdmn src/addon/modradstat.f90 /^ real, allocatable :: lwdmn(/;" v module:modradstat lwdmn src/modradstat.f90 /^ real, allocatable :: lwdmn(/;" v module:modradstat -lwnudge src/addon/modnudge.f90 /^ logical :: lnudge,lunudge,lvnudge,lwnudge,/;" v module:modnudge lwnudge src/modnudge.f90 /^ logical :: lnudge = .false.,lunudge,lvnudge,lwnudge,/;" v module:modnudge -lwpid src/addon/modheterostats.f90 /^ integer :: lwpid$/;" v module:modheterostats lwpid src/modheterostats.f90 /^ integer :: lwpid$/;" v module:modheterostats lwu src/modraddata.f90 /^ real, allocatable :: lwu(/;" v module:modraddata -lwuav src/addon/modradstat.f90 /^ real, allocatable :: lwuav(/;" v module:modradstat lwuav src/modradstat.f90 /^ real, allocatable :: lwuav(/;" v module:modradstat lwuavn src/modsurfdata.f90 /^ real, allocatable :: lwuavn /;" v module:modsurfdata lwuca src/modraddata.f90 /^ real, allocatable :: lwuca(/;" v module:modraddata -lwucaav src/addon/modradstat.f90 /^ real, allocatable :: lwucaav(/;" v module:modradstat lwucaav src/modradstat.f90 /^ real, allocatable :: lwucaav(/;" v module:modradstat -lwucamn src/addon/modradstat.f90 /^ real, allocatable :: lwucamn(/;" v module:modradstat lwucamn src/modradstat.f90 /^ real, allocatable :: lwucamn(/;" v module:modradstat -lwumn src/addon/modradstat.f90 /^ real, allocatable :: lwumn(/;" v module:modradstat lwumn src/modradstat.f90 /^ real, allocatable :: lwumn(/;" v module:modradstat mair src/modglobal.f90 /^ real,parameter :: mair /;" v module:modglobal -massflxavl src/addon/modsampling.f90 /^ real, allocatable, dimension(:,:) :: wavl,tlavl,tvavl,qtavl,qlavl,nrsampl,massflxavl,/;" v module:modsampling massflxhavl src/modsampling.f90 /^ real, allocatable, dimension(:,:) :: wfavl,thlfavl,thvfavl,qtfavl,qlfavl,nrsampfl,massflxhavl,/;" v module:modsampling maxAbsorberNameLength src/rrlw_ncpar.f90 /^ integer(kind=im), parameter :: maxAbsorberNameLength /;" v module:rrlw_ncpar -maxAbsorberNameLength src/rrsw_ncpar.f90 /^ integer(kind=im), parameter :: maxAbsorberNameLength /;" v module:rrsw_ncpar +maxAbsorberNameLength src/rrsw_ncpar.f90 /^ integer(kind=im), parameter :: maxAbsorberNameLength /;" v module:rrsw_ncpar maxKeySpeciesNameLength src/rrsw_ncpar.f90 /^ Absorber = 12, &$/;" v module:rrsw_ncpar maxKeySpeciesNames src/rrsw_ncpar.f90 /^ maxKeySpeciesNameLength = 3, &$/;" v module:rrsw_ncpar max_lands src/modsurfdata.f90 /^ integer, parameter:: max_lands /;" v module:modsurfdata @@ -2176,90 +1873,70 @@ mg src/parrrsw.f90 /^ integer(kind=im), parameter :: mg /;" v module:parrrs mg src/parrrtm.f90 /^ integer(kind=im), parameter :: mg /;" v module:parrrtm micro_user src/addon/micro_user.f90 /^subroutine micro_user$/;" s micro_user src/moduser.f90 /^subroutine micro_user$/;" s module:moduser -microphysics src/addon/modmicrophysics.f90 /^ subroutine microphysics$/;" s module:modmicrophysics microphysics src/modmicrophysics.f90 /^ subroutine microphysics$/;" s module:modmicrophysics -microsources src/addon/modmicrophysics.f90 /^ subroutine microsources$/;" s module:modmicrophysics microsources src/modmicrophysics.f90 /^ subroutine microsources$/;" s module:modmicrophysics minSolarZenithCosForVis src/modradfull.f90 /^ real, parameter :: minSolarZenithCosForVis /;" v module:modradfull mineps src/addon/modbulkmicrodata.f90 /^ ,mineps /;" v module:modbulkmicrodata mixbits src/rad_rndnmb.f90 /^ elemental function mixbits(/;" f module:RandomNumbers modAGScross src/modAGScross.f90 /^module modAGScross$/;" m modboundary src/modboundary.f90 /^module modboundary$/;" m -modbudget src/addon/modbudget.f90 /^module modbudget$/;" m modbudget src/modbudget.f90 /^module modbudget$/;" m -modbulkmicro src/addon/modbulkmicro.f90 /^module modbulkmicro$/;" m modbulkmicro src/modbulkmicro.f90 /^module modbulkmicro$/;" m modbulkmicrodata src/addon/modbulkmicrodata.f90 /^ module modbulkmicrodata$/;" m -modbulkmicrostat src/addon/modbulkmicrostat.f90 /^module modbulkmicrostat$/;" m modbulkmicrostat src/modbulkmicrostat.f90 /^module modbulkmicrostat$/;" m modcanopy src/modcanopy.f90 /^module modcanopy$/;" m modcape src/modcape.f90 /^module modcape$/;" m -modchecksim src/addon/modchecksim.f90 /^module modchecksim$/;" m modchecksim src/modchecksim.f90 /^module modchecksim$/;" m -modchem src/addon/modchem.f90 /^module modchem$/;" m modchem src/modchem.f90 /^module modchem$/;" m -modcloudfield src/addon/modcloudfield.f90 /^module modcloudfield$/;" m modcloudfield src/modcloudfield.f90 /^module modcloudfield$/;" m -modcrosssection src/addon/modcrosssection.f90 /^module modcrosssection$/;" m modcrosssection src/modcrosssection.f90 /^module modcrosssection$/;" m modfft2d src/modfft2d.f90 /^module modfft2d$/;" m -modfielddump src/addon/modfielddump.f90 /^module modfielddump$/;" m modfielddump src/modfielddump.f90 /^module modfielddump$/;" m modfields src/modfields.f90 /^module modfields$/;" m modforces src/modforces.f90 /^module modforces$/;" m -modgenstat src/addon/modgenstat.f90 /^module modgenstat$/;" m modgenstat src/modgenstat.f90 /^module modgenstat$/;" m modglobal src/modglobal.f90 /^module modglobal$/;" m -modheterostats src/addon/modheterostats.f90 /^module modheterostats$/;" m modheterostats src/modheterostats.f90 /^module modheterostats$/;" m modlsmcrosssection src/modlsmcrosssection.f90 /^module modlsmcrosssection$/;" m modlsmstat src/modlsmstat.f90 /^module modlsmstat$/;" m modmicrodata src/modmicrodata.f90 /^ module modmicrodata$/;" m -modmicrophysics src/addon/modmicrophysics.f90 /^module modmicrophysics$/;" m modmicrophysics src/modmicrophysics.f90 /^module modmicrophysics$/;" m modmpi src/modmpi.f90 /^module modmpi$/;" m modnetcdfmovie src/addon/modnetcdfmovie.f90 /^module modnetcdfmovie$/;" m modnetcdfstats src/addon/modnetcdfstats.f90 /^module modnetcdfstats$/;" m -modnudge src/addon/modnudge.f90 /^module modnudge$/;" m modnudge src/modnudge.f90 /^module modnudge$/;" m modparticles src/addon/modparticles.f90 /^module modparticles$/;" m modpois src/modpois.f90 /^module modpois$/;" m -modprojection src/addon/modprojection.f90 /^module modprojection$/;" m modprojection src/modprojection.f90 /^module modprojection$/;" m modquadrant src/modquadrant.f90 /^module modquadrant$/;" m modraddata src/modraddata.f90 /^module modraddata$/;" m modradfull src/modradfull.f90 /^module modradfull$/;" m modradiation src/modradiation.f90 /^module modradiation$/;" m modradrrtmg src/modradrrtmg.f90 /^module modradrrtmg$/;" m -modradstat src/addon/modradstat.f90 /^module modradstat$/;" m modradstat src/modradstat.f90 /^module modradstat$/;" m modsampdata src/modsampdata.f90 /^module modsampdata$/;" m -modsampling src/addon/modsampling.f90 /^module modsampling$/;" m modsampling src/modsampling.f90 /^module modsampling$/;" m modsamptend src/modsamptend.f90 /^module modsamptend$/;" m modsimpleice src/modsimpleice.f90 /^module modsimpleice$/;" m modsimpleicestat src/modsimpleicestat.f90 /^module modsimpleicestat$/;" m modstartup src/modstartup.f90 /^module modstartup$/;" m -modstat_nc src/addon/modstat_nc.f90 /^module modstat_nc$/;" m -modstat_nc src/addon/stat_nc_dummy.f90 /^module modstat_nc$/;" m modstat_nc src/modstat_nc.f90 /^module modstat_nc$/;" m -modstattend src/addon/modstattend.f90 /^module modstattend$/;" m modstattend src/modstattend.f90 /^module modstattend$/;" m modstress src/addon/modstress.f90 /^module modstress$/;" m modsubgrid src/modsubgrid.f90 /^module modsubgrid$/;" m modsubgriddata src/modsubgriddata.f90 /^module modsubgriddata$/;" m modsurface src/modsurface.f90 /^module modsurface$/;" m modsurfdata src/modsurfdata.f90 /^module modsurfdata$/;" m +modtestbed src/modtestbed.f90 /^module modtestbed$/;" m modthermodynamics src/modthermodynamics.f90 /^module modthermodynamics$/;" m modtilt src/addon/modtilt.f90 /^module modtilt$/;" m modtimedep src/modtimedep.f90 /^module modtimedep$/;" m modtimedepsv src/modtimedepsv.f90 /^module modtimedepsv$/;" m -modtimestat src/addon/modtimestat.f90 /^module modtimestat$/;" m modtimestat src/modtimestat.f90 /^module modtimestat$/;" m moduser src/moduser.f90 /^module moduser$/;" m mpatch src/modsurfdata.f90 /^ integer, parameter:: mpatch /;" v module:modsurfdata +mpi_get_time src/modmpi.f90 /^ subroutine mpi_get_time(/;" s module:modmpi mpierr src/modmpi.f90 /^ integer :: mpierr$/;" v module:modmpi -mrpcc src/addon/modchem.f90 /^ integer mrpcc$/;" v module:modchem mrpcc src/modchem.f90 /^ integer mrpcc$/;" v module:modchem mu src/modraddata.f90 /^ real mu /;" v module:modraddata mu0_cgils src/modraddata.f90 /^ real :: mu0_cgils$/;" v module:modraddata @@ -2288,10 +1965,6 @@ n0rs src/modmicrodata.f90 /^ ,n0rs=/;" v module:modmicrodata n2o src/modraddata.f90 /^ o3, co2, ch4, n2o,/;" v module:modraddata n2ovmr src/modraddata.f90 /^ ch4vmr, &$/;" v module:modraddata naerec src/parrrsw.f90 /^ integer(kind=im), parameter :: naerec /;" v module:parrrsw -name src/addon/modchem.f90 /^ character (len = 6) name$/;" k type:location -name src/addon/modchem.f90 /^ character (len=6) name /;" k type:Name_Number -name src/addon/modchem.f90 /^ character (len=6) name$/;" k type:Chem -name src/addon/modchem.f90 /^ character*6 name$/;" k type:Reaction name src/modchem.f90 /^ character (len = 6) name$/;" k type:location name src/modchem.f90 /^ character (len=6) name /;" k type:Name_Number name src/modchem.f90 /^ character (len=6) name$/;" k type:Chem @@ -2304,32 +1977,19 @@ nbreast src/modmpi.f90 /^ integer :: nbreast$/;" v module:modmpi nbrnorth src/modmpi.f90 /^ integer :: nbrnorth$/;" v module:modmpi nbrsouth src/modmpi.f90 /^ integer :: nbrsouth$/;" v module:modmpi nbrwest src/modmpi.f90 /^ integer :: nbrwest$/;" v module:modmpi -nc_fillvalue src/addon/modstat_nc.f90 /^ real(kind=4) :: nc_fillvalue /;" v module:modstat_nc -nc_fillvalue src/addon/stat_nc_dummy.f90 /^ real :: nc_fillvalue=/;" v module:modstat_nc nc_fillvalue src/modstat_nc.f90 /^ real(kind=4) :: nc_fillvalue /;" v module:modstat_nc ncanopy src/modcanopy.f90 /^ integer :: ncanopy /;" v module:modcanopy -nccall src/addon/modheterostats.f90 /^ integer :: nccall /;" v module:modheterostats nccall src/addon/modnetcdfmovie.f90 /^ integer :: nccall /;" v module:modnetcdfmovie nccall src/addon/modnetcdfstats.f90 /^ integer :: nccall /;" v module:modnetcdfstats nccall src/modheterostats.f90 /^ integer :: nccall /;" v module:modheterostats ncfieldflag src/addon/modnetcdfstats.f90 /^ integer :: ncfieldflag$/;" v module:modnetcdfstats -nchandle_error src/addon/modheterostats.f90 /^ subroutine nchandle_error(/;" s module:modheterostats nchandle_error src/addon/modnetcdfmovie.f90 /^ subroutine nchandle_error(/;" s module:modnetcdfmovie nchandle_error src/addon/modnetcdfstats.f90 /^ subroutine nchandle_error(/;" s module:modnetcdfstats -nchandle_error src/addon/modstat_nc.f90 /^ subroutine nchandle_error(/;" s module:modstat_nc nchandle_error src/modheterostats.f90 /^ subroutine nchandle_error(/;" s module:modheterostats nchandle_error src/modstat_nc.f90 /^ subroutine nchandle_error(/;" s module:modstat_nc -nchsp src/addon/modchem.f90 /^ integer nchsp /;" v module:modchem nchsp src/modchem.f90 /^ integer nchsp /;" v module:modchem -ncid src/addon/modbudget.f90 /^ integer :: ncid,/;" v module:modbudget -ncid src/addon/modbulkmicrostat.f90 /^ integer :: ncid,/;" v module:modbulkmicrostat -ncid src/addon/modfielddump.f90 /^ integer :: ncid,/;" v module:modfielddump -ncid src/addon/modgenstat.f90 /^ integer :: ncid,/;" v module:modgenstat -ncid src/addon/modheterostats.f90 /^ integer :: ncid$/;" v module:modheterostats ncid src/addon/modnetcdfmovie.f90 /^ integer :: ncid$/;" v module:modnetcdfmovie ncid src/addon/modnetcdfstats.f90 /^ integer :: ncid$/;" v module:modnetcdfstats -ncid src/addon/modstattend.f90 /^ integer :: ncid,/;" v module:modstattend -ncid src/addon/modtimestat.f90 /^ integer :: ncid,/;" v module:modtimestat ncid src/modfielddump.f90 /^ integer :: ncid,/;" v module:modfielddump ncid src/modgenstat.f90 /^ integer :: ncid,/;" v module:modgenstat ncid src/modheterostats.f90 /^ integer :: ncid$/;" v module:modheterostats @@ -2339,13 +1999,10 @@ ncid src/modsampling.f90 /^ integer :: ncid,/;" v module:modsampling ncid src/modsamptend.f90 /^ integer :: ncid,/;" v module:modsamptend ncid src/modstattend.f90 /^ integer :: ncid,/;" v module:modstattend ncid src/modtimestat.f90 /^ integer :: ncid,/;" v module:modtimestat -ncid1 src/addon/modcrosssection.f90 /^ integer :: ncid1 /;" v module:modcrosssection ncid1 src/modcrosssection.f90 /^ integer :: ncid1 /;" v module:modcrosssection ncid1 src/modlsmcrosssection.f90 /^ integer :: ncid1 /;" v module:modlsmcrosssection -ncid2 src/addon/modcrosssection.f90 /^ integer,allocatable :: ncid2(/;" v module:modcrosssection ncid2 src/modcrosssection.f90 /^ integer,allocatable :: ncid2(/;" v module:modcrosssection ncid2 src/modlsmcrosssection.f90 /^ integer :: ncid2 /;" v module:modlsmcrosssection -ncid3 src/addon/modcrosssection.f90 /^ integer :: ncid3 /;" v module:modcrosssection ncid3 src/modcrosssection.f90 /^ integer :: ncid3 /;" v module:modcrosssection ncid3 src/modlsmcrosssection.f90 /^ integer :: ncid3 /;" v module:modlsmcrosssection ncid4 src/modcape.f90 /^ integer :: ncid4 /;" v module:modcape @@ -2356,26 +2013,15 @@ ncidfieldu src/addon/modnetcdfstats.f90 /^ integer :: ncidfieldu,/;" v module:m ncidfieldv src/addon/modnetcdfstats.f90 /^ integer :: ncidfieldu, ncidfieldv,/;" v module:modnetcdfstats ncidfieldw src/addon/modnetcdfstats.f90 /^ integer :: ncidfieldu, ncidfieldv, ncidfieldw,/;" v module:modnetcdfstats ncidmovie src/addon/modnetcdfstats.f90 /^ integer :: ncidmovie$/;" v module:modnetcdfstats -ncinfo src/addon/modstat_nc.f90 /^ subroutine ncinfo(/;" s module:modstat_nc -ncinfo src/addon/stat_nc_dummy.f90 /^ subroutine ncinfo(/;" s module:modstat_nc ncinfo src/modstat_nc.f90 /^ subroutine ncinfo(/;" s module:modstat_nc -ncklimit src/addon/modheterostats.f90 /^ integer :: ncklimit /;" v module:modheterostats ncklimit src/addon/modnetcdfmovie.f90 /^ integer :: ncklimit /;" v module:modnetcdfmovie ncklimit src/addon/modnetcdfstats.f90 /^ integer :: ncklimit /;" v module:modnetcdfstats -ncklimit src/modheterostats.f90 /^ integer :: ncklimit /;" v module:modheterostats -ncname src/addon/modbudget.f90 /^ character(80),dimension(nvar,4) :: ncname$/;" v module:modbudget -ncname src/addon/modbulkmicrostat.f90 /^ character(80),dimension(nvar,4) :: ncname$/;" v module:modbulkmicrostat -ncname src/addon/modfielddump.f90 /^ character(80),dimension(nvar,4) :: ncname$/;" v module:modfielddump -ncname src/addon/modgenstat.f90 /^ character(80),dimension(nvar,4) :: ncname$/;" v module:modgenstat -ncname src/addon/modradstat.f90 /^ character(80),dimension(nvar,4) :: ncname$/;" v module:modradstat -ncname src/addon/modsampling.f90 /^ character(80),allocatable,dimension(:,:,:) :: ncname$/;" v module:modsampling -ncname src/addon/modstattend.f90 /^ character(80),dimension(nvar,4) :: ncname$/;" v module:modstattend +ncklimit src/modheterostats.f90 /^ integer :: ncklimit$/;" v module:modheterostats ncname src/addon/modstress.f90 /^ character(80),dimension(nvar,4) :: ncname$/;" v module:modstress -ncname src/addon/modtimestat.f90 /^ character(80), allocatable, dimension(:,:) :: ncname$/;" v module:modtimestat ncname src/modbudget.f90 /^ character(80),dimension(nvar,4) :: ncname$/;" v module:modbudget ncname src/modbulkmicrostat.f90 /^ character(80),dimension(nvar,4) :: ncname$/;" v module:modbulkmicrostat ncname src/modcape.f90 /^ character(80),dimension(nvar,4) :: ncname$/;" v module:modcape -ncname src/modfielddump.f90 /^ character(80),dimension(nvar,4) :: ncname$/;" v module:modfielddump +ncname src/modfielddump.f90 /^ character(80),dimension(:,:), allocatable :: ncname$/;" v module:modfielddump ncname src/modgenstat.f90 /^ character(80),allocatable, dimension(:,:) :: ncname$/;" v module:modgenstat ncname src/modlsmstat.f90 /^ character(80),dimension(nvar,4) :: ncname$/;" v module:modlsmstat ncname src/modprojection.f90 /^ character(80),dimension(nvar,4) :: ncname$/;" v module:modprojection @@ -2386,18 +2032,15 @@ ncname src/modsamptend.f90 /^ character(80),allocatable,dimension(:,:,:) :: ncn ncname src/modsimpleicestat.f90 /^ character(80),dimension(nvar,4) :: ncname$/;" v module:modsimpleicestat ncname src/modstattend.f90 /^ character(80),dimension(nvar,4) :: ncname$/;" v module:modstattend ncname src/modtimestat.f90 /^ character(80), allocatable, dimension(:,:) :: ncname$/;" v module:modtimestat -ncname1 src/addon/modcrosssection.f90 /^ character(80),dimension(nvar,4) :: ncname1$/;" v module:modcrosssection ncname1 src/modcrosssection.f90 /^ character(80),dimension(nvar,4) :: ncname1$/;" v module:modcrosssection ncname1 src/modlsmcrosssection.f90 /^ character(80),dimension(nvar,4) :: ncname1$/;" v module:modlsmcrosssection -ncname2 src/addon/modcrosssection.f90 /^ character(80),dimension(nvar,4) :: ncname2$/;" v module:modcrosssection ncname2 src/modcrosssection.f90 /^ character(80),dimension(nvar,4) :: ncname2$/;" v module:modcrosssection ncname2 src/modlsmcrosssection.f90 /^ character(80),dimension(nvar,4) :: ncname2$/;" v module:modlsmcrosssection -ncname3 src/addon/modcrosssection.f90 /^ character(80),dimension(nvar,4) :: ncname3$/;" v module:modcrosssection ncname3 src/modcrosssection.f90 /^ character(80),dimension(nvar,4) :: ncname3$/;" v module:modcrosssection ncname3 src/modlsmcrosssection.f90 /^ character(80),dimension(nvar3,4) :: ncname3$/;" v module:modlsmcrosssection ncnameAGS src/modAGScross.f90 /^ character(80),dimension(nvar,4) :: ncnameAGS$/;" v module:modAGScross +ncoarse src/modfielddump.f90 /^ integer :: klow,khigh,ncoarse=/;" v module:modfielddump ncosv src/modglobal.f90 /^ integer :: ncosv /;" v module:modglobal -ndt src/addon/modchecksim.f90 /^ real :: dtmn =0.,ndt /;" v module:modchecksim ndt src/modchecksim.f90 /^ real :: dtmn =0.,ndt /;" v module:modchecksim ndtmovie src/addon/modnetcdfmovie.f90 /^ integer :: ndtmovie$/;" v module:modnetcdfmovie netcdfmovie src/addon/modnetcdfmovie.f90 /^ subroutine netcdfmovie$/;" s module:modnetcdfmovie @@ -2496,6 +2139,7 @@ ngs6 src/parrrtm.f90 /^ integer(kind=im), parameter :: ngs6 /;" v module:pa ngs7 src/parrrtm.f90 /^ integer(kind=im), parameter :: ngs7 /;" v module:parrrtm ngs8 src/parrrtm.f90 /^ integer(kind=im), parameter :: ngs8 /;" v module:parrrtm ngs9 src/parrrtm.f90 /^ integer(kind=im), parameter :: ngs9 /;" v module:parrrtm +nknudge src/modtestbed.f90 /^ integer :: nknudge,/;" v module:modtestbed nkonx src/modfft2d.f90 /^ integer :: nkonx,/;" v module:modfft2d nkony src/modfft2d.f90 /^ integer :: nkonx, nkony$/;" v module:modfft2d nmason src/modsubgriddata.f90 /^ real :: nmason /;" v module:modsubgriddata @@ -2543,24 +2187,12 @@ nprocs src/modmpi.f90 /^ integer :: nprocs$/;" v module:modmpi nprocx src/modmpi.f90 /^ integer :: nprocx /;" v module:modmpi nprocy src/modmpi.f90 /^ integer :: nprocy /;" v module:modmpi npts src/modradfull.f90 /^ integer :: i,j,k, npts$/;" v module:modradfull -nr_PL src/addon/modchem.f90 /^ integer nr_PL /;" k type:Name_Number nr_PL src/modchem.f90 /^ integer nr_PL /;" k type:Name_Number -nr_chem src/addon/modchem.f90 /^ integer nr_chem /;" k type:Reaction nr_chem src/modchem.f90 /^ integer nr_chem /;" k type:Reaction -nr_chem_inp src/addon/modchem.f90 /^ integer nr_chem_inp /;" k type:Reaction nr_chem_inp src/modchem.f90 /^ integer nr_chem_inp /;" k type:Reaction -nr_chem_outp src/addon/modchem.f90 /^ integer nr_chem_outp /;" k type:Reaction nr_chem_outp src/modchem.f90 /^ integer nr_chem_outp /;" k type:Reaction -nr_raddep src/addon/modchem.f90 /^ integer nr_raddep /;" v module:modchem nr_raddep src/modchem.f90 /^ integer nr_raddep /;" v module:modchem nradtime src/modsurfdata.f90 /^ integer :: nradtime /;" v module:modsurfdata -nrc src/addon/modcrosssection.f90 /^ integer :: nrc$/;" v module:modcrosssection -nrec src/addon/modbudget.f90 /^ integer :: ncid,nrec /;" v module:modbudget -nrec src/addon/modbulkmicrostat.f90 /^ integer :: ncid,nrec /;" v module:modbulkmicrostat -nrec src/addon/modfielddump.f90 /^ integer :: ncid,nrec /;" v module:modfielddump -nrec src/addon/modgenstat.f90 /^ integer :: ncid,nrec /;" v module:modgenstat -nrec src/addon/modstattend.f90 /^ integer :: ncid,nrec /;" v module:modstattend -nrec src/addon/modtimestat.f90 /^ integer :: ncid,nrec /;" v module:modtimestat nrec src/modcape.f90 /^ integer :: nrec /;" v module:modcape nrec src/modfielddump.f90 /^ integer :: ncid,nrec /;" v module:modfielddump nrec src/modgenstat.f90 /^ integer :: ncid,nrec /;" v module:modgenstat @@ -2570,18 +2202,13 @@ nrec src/modsampling.f90 /^ integer :: ncid,nrec /;" v module:modsampling nrec src/modsamptend.f90 /^ integer :: ncid,nrec /;" v module:modsamptend nrec src/modstattend.f90 /^ integer :: ncid,nrec /;" v module:modstattend nrec src/modtimestat.f90 /^ integer :: ncid,nrec /;" v module:modtimestat -nrec1 src/addon/modcrosssection.f90 /^ integer :: nrec1 /;" v module:modcrosssection nrec1 src/modcrosssection.f90 /^ integer :: nrec1 /;" v module:modcrosssection nrec1 src/modlsmcrosssection.f90 /^ integer :: nrec1 /;" v module:modlsmcrosssection -nrec2 src/addon/modcrosssection.f90 /^ integer,allocatable :: nrec2(/;" v module:modcrosssection nrec2 src/modcrosssection.f90 /^ integer,allocatable :: nrec2(/;" v module:modcrosssection nrec2 src/modlsmcrosssection.f90 /^ integer :: nrec2 /;" v module:modlsmcrosssection -nrec3 src/addon/modcrosssection.f90 /^ integer :: nrec3 /;" v module:modcrosssection nrec3 src/modcrosssection.f90 /^ integer :: nrec3 /;" v module:modcrosssection nrec3 src/modlsmcrosssection.f90 /^ integer :: nrec3 /;" v module:modlsmcrosssection nrecAGS src/modAGScross.f90 /^ integer :: nrecAGS /;" v module:modAGScross -nrfields src/addon/modbulkmicrostat.f90 /^ integer, parameter :: nrfields /;" v module:modbulkmicrostat -nrfields src/addon/modstattend.f90 /^ integer,parameter :: nrfields /;" v module:modstattend nrfields src/modbulkmicrostat.f90 /^ integer, parameter :: nrfields /;" v module:modbulkmicrostat nrfields src/modsamptend.f90 /^ integer,parameter :: nrfields /;" v module:modsamptend nrfields src/modsimpleicestat.f90 /^ integer, parameter :: nrfields /;" v module:modsimpleicestat @@ -2592,22 +2219,14 @@ nrpmn src/modsamptend.f90 /^ real, allocatable :: upmn(:,:,:),vpmn(:,:,:),wpmn( nrptm src/modsamptend.f90 /^ real, allocatable :: uptm(:,:,:),vptm(:,:,:),wptm(:,:,:),thlptm(:,:,:),qtptm(:,:,:),qrptm(:,:,:),nrptm(/;" v module:modsamptend nrsamp src/modsamptend.f90 /^ integer, allocatable :: nrsampt/;" v module:modsamptend nrsampfl src/modsampling.f90 /^ real, allocatable, dimension(:,:) :: wfavl,thlfavl,thvfavl,qtfavl,qlfavl,nrsampfl,/;" v module:modsampling -nrsamphl src/addon/modsampling.f90 /^ fcoravl,nrsamphl$/;" v module:modsampling nrsamphl src/modsampling.f90 /^ fcorhavl,nrsamphl$/;" v module:modsampling -nrsampl src/addon/modsampling.f90 /^ real, allocatable, dimension(:,:) :: wavl,tlavl,tvavl,qtavl,qlavl,nrsampl,/;" v module:modsampling nrsampl src/modquadrant.f90 /^ real, allocatable, dimension(:,:) :: nrsampl$/;" v module:modquadrant nrsamplast src/modsamptend.f90 /^ integer, allocatable :: nrsamptot(:,:),nrsamp(:,:),nrsamplast(/;" v module:modsamptend nrsampnew src/modsamptend.f90 /^ integer, allocatable :: nrsamptot(:,:),nrsamp(:,:),nrsamplast(:,:),nrsampnew(/;" v module:modsamptend nrsamptot src/modsamptend.f90 /^ integer, allocatable :: nrsamptot(/;" v module:modsamptend nrst src/modsamptend.f90 /^ real, allocatable :: ust(:,:),vst(:,:),wst(:,:),thlst(:,:),qtst(:,:),qrst(:,:),nrst(/;" v module:modsamptend nrtsamphav src/modsampling.f90 /^ integer,allocatable, dimension(:,:) :: nrtsamphav$/;" v module:modsampling -nsamples src/addon/modbudget.f90 /^ integer :: nsamples$/;" v module:modbudget -nsamples src/addon/modbulkmicrostat.f90 /^ integer :: nsamples$/;" v module:modbulkmicrostat -nsamples src/addon/modgenstat.f90 /^ integer :: nsamples$/;" v module:modgenstat nsamples src/addon/modparticles.f90 /^ integer :: nsamples$/;" v module:modparticles -nsamples src/addon/modradstat.f90 /^ integer :: nsamples$/;" v module:modradstat -nsamples src/addon/modsampling.f90 /^ integer :: nsamples,/;" v module:modsampling -nsamples src/addon/modstattend.f90 /^ integer :: nsamples$/;" v module:modstattend nsamples src/addon/modstress.f90 /^ integer :: nsamples$/;" v module:modstress nsamples src/addon/modtilt.f90 /^ integer :: nsamples$/;" v module:modtilt nsamples src/modbudget.f90 /^ integer :: nsamples$/;" v module:modbudget @@ -2630,37 +2249,25 @@ nsv src/modglobal.f90 /^ integer :: nsv /;" v module:modglobal nt src/modradfull.f90 /^ inte/;" k type:ckd_properties ntbl src/rrlw_tbl.f90 /^ integer(kind=im), parameter :: ntbl /;" v module:rrlw_tbl ntbl src/rrsw_tbl.f90 /^ integer(kind=im), parameter :: ntbl /;" v module:rrsw_tbl -ntimee src/modglobal.f90 /^ integer :: ntimee /;" v module:modglobal -ntnudge src/addon/modnudge.f90 /^ integer :: ntnudge /;" v module:modnudge ntnudge src/modnudge.f90 /^ integer :: ntnudge /;" v module:modnudge +ntnudge src/modtestbed.f90 /^ integer :: nknudge,ntnudge$/;" v module:modtestbed ntrun src/modglobal.f90 /^ integer :: ntrun /;" v module:modglobal nu_a src/addon/modbulkmicrodata.f90 /^ ,nu_a /;" v module:modbulkmicrodata nu_a src/modmicrodata.f90 /^ ,nu_a /;" v module:modmicrodata nuc src/addon/modbulkmicrodata.f90 /^ ,nuc /;" v module:modbulkmicrodata nuc src/modmicrodata.f90 /^ ,nuc /;" v module:modmicrodata nuco2q src/modsurfdata.f90 /^ real :: nuco2q /;" v module:modsurfdata -nudge src/addon/modnudge.f90 /^ subroutine nudge$/;" s module:modnudge nudge src/modnudge.f90 /^ subroutine nudge$/;" s module:modnudge -numit src/addon/modchem.f90 /^ integer ,parameter :: numit /;" v module:modchem numit src/modchem.f90 /^ integer ,parameter :: numit /;" v module:modchem nv src/modradfull.f90 /^ integer :: nv,/;" v module:modradfull nv1 src/modradfull.f90 /^ integer :: nv,nv1,/;" v module:modradfull -nvar src/addon/modbudget.f90 /^ integer,parameter :: nvar /;" v module:modbudget -nvar src/addon/modbulkmicrostat.f90 /^ integer,parameter :: nvar /;" v module:modbulkmicrostat -nvar src/addon/modcrosssection.f90 /^ integer,parameter :: nvar /;" v module:modcrosssection -nvar src/addon/modfielddump.f90 /^ integer,parameter :: nvar /;" v module:modfielddump -nvar src/addon/modgenstat.f90 /^ integer,parameter :: nvar /;" v module:modgenstat -nvar src/addon/modradstat.f90 /^ integer,parameter :: nvar /;" v module:modradstat -nvar src/addon/modsampling.f90 /^ integer,parameter :: nvar /;" v module:modsampling -nvar src/addon/modstattend.f90 /^ integer,parameter :: nvar /;" v module:modstattend nvar src/addon/modstress.f90 /^ integer,parameter :: nvar /;" v module:modstress -nvar src/addon/modtimestat.f90 /^ integer :: nvar$/;" v module:modtimestat nvar src/modAGScross.f90 /^ integer,parameter :: nvar /;" v module:modAGScross nvar src/modbudget.f90 /^ integer,parameter :: nvar /;" v module:modbudget nvar src/modbulkmicrostat.f90 /^ integer,parameter :: nvar /;" v module:modbulkmicrostat nvar src/modcape.f90 /^ integer,parameter :: nvar /;" v module:modcape nvar src/modcrosssection.f90 /^ integer,parameter :: nvar /;" v module:modcrosssection -nvar src/modfielddump.f90 /^ integer,parameter :: nvar /;" v module:modfielddump +nvar src/modfielddump.f90 /^ integer :: nvar /;" v module:modfielddump nvar src/modgenstat.f90 /^ integer :: nvar /;" v module:modgenstat nvar src/modlsmcrosssection.f90 /^ integer,parameter :: nvar /;" v module:modlsmcrosssection nvar src/modlsmstat.f90 /^ integer,parameter :: nvar /;" v module:modlsmstat @@ -2674,7 +2281,6 @@ nvar src/modstattend.f90 /^ integer,parameter :: nvar /;" v module:modstattend nvar src/modtimestat.f90 /^ integer :: nvar$/;" v module:modtimestat nvar3 src/modlsmcrosssection.f90 /^ integer,parameter :: nvar = 2,nvar3=/;" v module:modlsmcrosssection nxmol src/rrlw_wvn.f90 /^ integer(kind=im) :: nxmol$/;" v module:rrlw_wvn -nxy src/addon/modcrosssection.f90 /^ integer :: nxy /;" v module:modcrosssection nxy src/modcrosssection.f90 /^ integer :: nxy /;" v module:modcrosssection nzrad src/modraddata.f90 /^ integer :: nzrad /;" v module:modraddata nzsnd src/modraddata.f90 /^ integer, parameter :: nzsnd /;" v module:modraddata @@ -2697,10 +2303,7 @@ om23 src/modglobal.f90 /^ real :: om23 /;" v module:modglobal om23_gs src/modglobal.f90 /^ real :: om23_gs /;" v module:modglobal oneminus src/rrlw_con.f90 /^ real(kind=rb) :: oneminus,/;" v module:rrlw_con oneminus src/rrsw_con.f90 /^ real(kind=rb) :: oneminus,/;" v module:rrsw_con -open_nc src/addon/modstat_nc.f90 /^ subroutine open_nc /;" s module:modstat_nc -open_nc src/addon/stat_nc_dummy.f90 /^ subroutine open_nc /;" s module:modstat_nc open_nc src/modstat_nc.f90 /^ subroutine open_nc /;" s module:modstat_nc -outp src/addon/modchem.f90 /^ type (Chem) outp(/;" k type:Reaction outp src/modchem.f90 /^ type (Chem) outp(/;" k type:Reaction p src/modpois.f90 /^ real,allocatable :: p(/;" v module:modpois p11d src/modradfull.f90 /^ real, parameter, dimension(4, 4) :: &$/;" v module:modradfull @@ -2712,7 +2315,6 @@ p3d src/modradfull.f90 /^ real, parameter :: p3d(/;" v module:modradfull pCm src/modsurfdata.f90 /^ real, parameter :: pCm /;" v module:modsurfdata pCs src/modsurfdata.f90 /^ real, allocatable :: pCs /;" v module:modsurfdata pCw src/modsurfdata.f90 /^ real, parameter :: pCw /;" v module:modsurfdata -p_ref src/addon/modchem.f90 /^ real t_ref,q_ref,p_ref,/;" v module:modchem p_ref src/modchem.f90 /^ real t_ref,q_ref,p_ref,/;" v module:modchem pade src/rrlw_tbl.f90 /^ real(kind=rb), parameter :: pade /;" v module:rrlw_tbl pade src/rrsw_tbl.f90 /^ real(kind=rb), parameter :: pade /;" v module:rrsw_tbl @@ -2736,12 +2338,11 @@ partstep src/addon/modparticles.f90 /^ integer :: partstep$/;" k type:particl patchsum_1level src/modtimestat.f90 /^ function patchsum_1level(/;" f module:modtimestat patchxnr src/modsurface.f90 /^ function patchxnr(/;" f module:modsurface patchynr src/modsurface.f90 /^ function patchynr(/;" f module:modsurface -pavl src/addon/modsampling.f90 /^ real, allocatable, dimension(:,:) :: wwavl,pavl,/;" v module:modsampling pde src/modradfull.f90 /^ real, allocatable, save :: pp(:), pt(:), ph(:), po(:), pre(:), pde(/;" v module:modradfull peclet src/modglobal.f90 /^ real :: peclet /;" v module:modglobal pfavl src/modsampling.f90 /^ real, allocatable, dimension(:,:) :: wwrhavl,wwsfavl,pfavl,/;" v module:modsampling pforeign src/rrlw_ncpar.f90 /^ Tforeign = 4, &$/;" v module:rrlw_ncpar -pforeign src/rrsw_ncpar.f90 /^ Tforeignupper = 2, &$/;" v module:rrsw_ncpar +pforeign src/rrsw_ncpar.f90 /^ Tforeignupper = 2, &$/;" v module:rrsw_ncpar pgwc src/modradfull.f90 /^ plwc(:), piwc(:), prwc(:), pgwc(/;" v module:modradfull ph src/modradfull.f90 /^ real, allocatable, save :: pp(:), pt(:), ph(/;" v module:modradfull phi src/addon/modbulkmicrodata.f90 /^ ,phi /;" v module:modbulkmicrodata @@ -2770,7 +2371,7 @@ planck src/rrlw_con.f90 /^ real(kind=rb) :: planck,/;" v module:rrlw_con planck src/rrsw_con.f90 /^ real(kind=rb) :: planck,/;" v module:rrsw_con planttype src/modsurfdata.f90 /^ integer :: planttype /;" v module:modsurfdata plower src/rrlw_ncpar.f90 /^ ps = 59, &$/;" v module:rrlw_ncpar -plower src/rrsw_ncpar.f90 /^ ps = 59, &$/;" v module:rrsw_ncpar +plower src/rrsw_ncpar.f90 /^ ps = 59, &$/;" v module:rrsw_ncpar pluseps src/addon/modbulkmicrodata.f90 /^ ,pluseps /;" v module:modbulkmicrodata plwc src/modradfull.f90 /^ real, allocatable, save :: pp(:), pt(:), ph(:), po(:), pre(:), pde(:), &$/;" v module:modradfull po src/modradfull.f90 /^ real, allocatable, save :: pp(:), pt(:), ph(:), po(/;" v module:modradfull @@ -2779,37 +2380,27 @@ power src/modradfull.f90 /^ real :: llimit, rlimit, center, power src/modradfull.f90 /^ elemental real function power(/;" f module:modradfull pp src/modradfull.f90 /^ real, allocatable, save :: pp(/;" v module:modradfull ppad src/modcanopy.f90 /^ real, allocatable :: ppad(/;" v module:modcanopy -ppb src/addon/modchem.f90 /^ real, parameter :: ppb /;" v module:modchem ppb src/modchem.f90 /^ real, parameter :: ppb /;" v module:modchem pre src/modradfull.f90 /^ real, allocatable, save :: pp(:), pt(:), ph(:), po(:), pre(/;" v module:modradfull -prec_prcav src/addon/modbulkmicrostat.f90 /^ prec_prcavl/;" v module:modbulkmicrostat prec_prcav src/modbulkmicrostat.f90 /^ prec_prcavl/;" v module:modbulkmicrostat prec_prcav src/modsimpleicestat.f90 /^ prec_prcavl/;" v module:modsimpleicestat -prec_prcavl src/addon/modbulkmicrostat.f90 /^ preccountmn , &$/;" v module:modbulkmicrostat prec_prcavl src/modbulkmicrostat.f90 /^ preccountmn , &$/;" v module:modbulkmicrostat prec_prcavl src/modsimpleicestat.f90 /^ preccountmn , &$/;" v module:modsimpleicestat -prec_prcmn src/addon/modbulkmicrostat.f90 /^ prec_prcav , &$/;" v module:modbulkmicrostat prec_prcmn src/modbulkmicrostat.f90 /^ prec_prcav , &$/;" v module:modbulkmicrostat prec_prcmn src/modsimpleicestat.f90 /^ prec_prcav , &$/;" v module:modsimpleicestat -precav src/addon/modbulkmicrostat.f90 /^ real, allocatable, dimension(:) :: precavl/;" v module:modbulkmicrostat precav src/modbulkmicrostat.f90 /^ real, allocatable, dimension(:) :: precavl/;" v module:modbulkmicrostat precav src/modsimpleicestat.f90 /^ real, allocatable, dimension(:) :: precavl/;" v module:modsimpleicestat -precavl src/addon/modbulkmicrostat.f90 /^ real, allocatable, dimension(:) :: precavl /;" v module:modbulkmicrostat precavl src/modbulkmicrostat.f90 /^ real, allocatable, dimension(:) :: precavl /;" v module:modbulkmicrostat precavl src/modsimpleicestat.f90 /^ real, allocatable, dimension(:) :: precavl /;" v module:modsimpleicestat -preccountav src/addon/modbulkmicrostat.f90 /^ preccountavl/;" v module:modbulkmicrostat preccountav src/modbulkmicrostat.f90 /^ preccountavl/;" v module:modbulkmicrostat preccountav src/modsimpleicestat.f90 /^ preccountavl/;" v module:modsimpleicestat -preccountavl src/addon/modbulkmicrostat.f90 /^ precmn , &$/;" v module:modbulkmicrostat preccountavl src/modbulkmicrostat.f90 /^ precmn , &$/;" v module:modbulkmicrostat preccountavl src/modsimpleicestat.f90 /^ precmn , &$/;" v module:modsimpleicestat -preccountmn src/addon/modbulkmicrostat.f90 /^ preccountav , &$/;" v module:modbulkmicrostat preccountmn src/modbulkmicrostat.f90 /^ preccountav , &$/;" v module:modbulkmicrostat preccountmn src/modsimpleicestat.f90 /^ preccountav , &$/;" v module:modsimpleicestat precep src/addon/modbulkmicrodata.f90 /^ real,allocatable,dimension(:,:,:) :: precep$/;" v module:modbulkmicrodata precep src/modmicrodata.f90 /^ real,allocatable,dimension(:,:,:) :: precep$/;" v module:modmicrodata precipitate src/modsimpleice.f90 /^ subroutine precipitate$/;" s module:modsimpleice -precmn src/addon/modbulkmicrostat.f90 /^ precav , &$/;" v module:modbulkmicrostat precmn src/modbulkmicrostat.f90 /^ precav , &$/;" v module:modbulkmicrostat precmn src/modsimpleicestat.f90 /^ precav , &$/;" v module:modsimpleicestat pref src/rrlw_ref.f90 /^ real(kind=rb) , dimension(59) :: pref$/;" v module:rrlw_ref @@ -2824,15 +2415,12 @@ presh_input src/modraddata.f90 /^ real,allocatable,dimension(:) :: presf_inpu presz src/addon/modbulkmicrodata.f90 /^ ,presz /;" v module:modbulkmicrodata presz src/modmicrodata.f90 /^ real,allocatable, dimension(:,:,:) :: &$/;" v module:modmicrodata prev src/addon/modparticles.f90 /^ TYPE (particle_record), POINTER:: next,prev$/;" k type:particle_record -projectheight src/addon/modprojection.f90 /^ integer :: projectheight /;" v module:modprojection projectheight src/modprojection.f90 /^ real :: projectheight /;" v module:modprojection -projection src/addon/modprojection.f90 /^ subroutine projection$/;" s module:modprojection projection src/modprojection.f90 /^ subroutine projection$/;" s module:modprojection -projectplane src/addon/modprojection.f90 /^ integer :: projectplane /;" v module:modprojection prwc src/modradfull.f90 /^ plwc(:), piwc(:), prwc(/;" v module:modradfull ps src/modsurfdata.f90 /^ real :: ps /;" v module:modsurfdata ps src/rrlw_ncpar.f90 /^ Tdiff = 5, &$/;" v module:rrlw_ncpar -ps src/rrsw_ncpar.f90 /^ Tdiff = 5, &$/;" v module:rrsw_ncpar +ps src/rrsw_ncpar.f90 /^ Tdiff = 5, &$/;" v module:rrsw_ncpar ps_land src/modsurfdata.f90 /^ real :: ps_land(/;" v module:modsurfdata ps_patch src/modsurfdata.f90 /^ real, allocatable :: ps_patch(/;" v module:modsurfdata psih src/modsurface.f90 /^ function psih(/;" f module:modsurface @@ -2841,11 +2429,9 @@ psisat src/modsurfdata.f90 /^ real, parameter :: psisat /;" v module:modsurfd psnd src/modraddata.f90 /^ real,allocatable,dimension(:) :: psnd,/;" v module:modraddata pst src/modtimedep.f90 /^ real, allocatable :: pst /;" v module:modtimedep pt src/modradfull.f90 /^ real, allocatable, save :: pp(:), pt(/;" v module:modradfull -ptrspmn src/addon/modbudget.f90 /^ real, allocatable :: ptrspmn(/;" v module:modbudget ptrspmn src/modbudget.f90 /^ real, allocatable :: ptrspmn(/;" v module:modbudget pupper src/rrlw_ncpar.f90 /^ plower = 13, &$/;" v module:rrlw_ncpar -pupper src/rrsw_ncpar.f90 /^ plower = 13, &$/;" v module:rrsw_ncpar -q_ref src/addon/modchem.f90 /^ real t_ref,q_ref,/;" v module:modchem +pupper src/rrsw_ncpar.f90 /^ plower = 13, &$/;" v module:rrsw_ncpar q_ref src/modchem.f90 /^ real t_ref,q_ref,/;" v module:modchem qc src/addon/modbulkmicrodata.f90 /^ real,allocatable, dimension(:,:,:) :: qc /;" v module:modbulkmicrodata qc src/modmicrodata.f90 /^ real,allocatable, dimension(:,:,:) :: qc /;" v module:modmicrodata @@ -2862,56 +2448,40 @@ qk src/modradfull.f90 /^ subroutine qk /;" s module:modradfull ql0 src/modfields.f90 /^ real, allocatable :: ql0(/;" v module:modfields ql0av src/modfields.f90 /^ real, allocatable :: ql0av(/;" v module:modfields ql0h src/modfields.f90 /^ real, allocatable :: ql0h(/;" v module:modfields -ql2mn src/addon/modgenstat.f90 /^ real, allocatable :: thl2mn (:), thv2mn(:), th2mn(:), ql2mn(/;" v module:modgenstat ql2mn src/modgenstat.f90 /^ real, allocatable :: thl2mn (:), thv2mn(:), th2mn(:), ql2mn(/;" v module:modgenstat ql_b src/modradfull.f90 /^ real, allocatable :: temp_b(:,:,:),qv_b(:,:,:),ql_b(/;" v module:modradfull -qlavgid src/addon/modheterostats.f90 /^ integer :: uavgid, vavgid, wavgid, thlavgid, thvavgid, qtavgid, qlavgid,/;" v module:modheterostats qlavgid src/modheterostats.f90 /^ integer :: uavgid, vavgid, wavgid, thlavgid, thvavgid, qtavgid, qlavgid,/;" v module:modheterostats -qlavl src/addon/modsampling.f90 /^ real, allocatable, dimension(:,:) :: wavl,tlavl,tvavl,qtavl,qlavl,/;" v module:modsampling qlfavl src/modsampling.f90 /^ real, allocatable, dimension(:,:) :: wfavl,thlfavl,thvfavl,qtfavl,qlfavl,/;" v module:modsampling -qlhmn src/addon/modgenstat.f90 /^ real, allocatable :: qtmn (:) ,qlmn (:), qlhmn(/;" v module:modgenstat qlhmn src/modgenstat.f90 /^ real, allocatable :: qtmn (:) ,qlmn (:), qlhmn(/;" v module:modgenstat qli0 src/modmicrodata.f90 /^ ,qli0=/;" v module:modmicrodata -qlint src/addon/modtimestat.f90 /^ real :: qlint$/;" v module:modtimestat qlint src/modtimestat.f90 /^ real :: qlint$/;" v module:modtimestat qlint_field src/modtimestat.f90 /^ real,allocatable, dimension(:,:) :: zbase_field, ztop_field, cc_field, qlint_field,/;" v module:modtimestat qlint_patch src/modtimestat.f90 /^ real,allocatable, dimension(:,:) :: cc_patch, qlint_patch,/;" v module:modtimestat -qlintav src/addon/modtimestat.f90 /^ real :: qlintav,/;" v module:modtimestat qlintav src/modtimestat.f90 /^ real :: qlintav,/;" v module:modtimestat -qlintmax src/addon/modtimestat.f90 /^ real :: qlintav, qlintmax,/;" v module:modtimestat qlintmax src/modtimestat.f90 /^ real :: qlintav, qlintmax,/;" v module:modtimestat qlintmax_patch src/modtimestat.f90 /^ real,allocatable, dimension(:,:) :: cc_patch, qlint_patch, qlintmax_patch,/;" v module:modtimestat qlintmax_patchl src/modtimestat.f90 /^ real,allocatable, dimension(:,:) :: cc_patch, qlint_patch, qlintmax_patch, qlintmax_patchl,/;" v module:modtimestat qll0 src/modmicrodata.f90 /^ ,qll0=/;" v module:modmicrodata -qlmav src/addon/modgenstat.f90 /^ real, allocatable :: qlmav /;" v module:modgenstat qlmav src/modgenstat.f90 /^ real, allocatable :: qlmav /;" v module:modgenstat -qlmax src/addon/modtimestat.f90 /^ real :: cc, wmax, qlmax$/;" v module:modtimestat qlmax src/modtimestat.f90 /^ real :: cc, wmax, qlmax$/;" v module:modtimestat qlmax_patch src/modtimestat.f90 /^ real,allocatable, dimension(:,:) :: wmax_patch, wmax_patchl, qlmax_patch,/;" v module:modtimestat qlmax_patchl src/modtimestat.f90 /^ real,allocatable, dimension(:,:) :: wmax_patch, wmax_patchl, qlmax_patch, qlmax_patchl,/;" v module:modtimestat -qlmn src/addon/modgenstat.f90 /^ real, allocatable :: qtmn (:) ,qlmn /;" v module:modgenstat qlmn src/modgenstat.f90 /^ real, allocatable :: qtmn (:) ,qlmn /;" v module:modgenstat qlmnlast src/modgenstat.f90 /^ real, allocatable :: qlmnlast(/;" v module:modgenstat -qlpav src/addon/modbulkmicrostat.f90 /^ Npmn , &$/;" v module:modbulkmicrostat qlpav src/modbulkmicrostat.f90 /^ Npmn , &$/;" v module:modbulkmicrostat qlpav src/modsimpleicestat.f90 /^ Npmn , &$/;" v module:modsimpleicestat -qlpmn src/addon/modbulkmicrostat.f90 /^ qlpav , &$/;" v module:modbulkmicrostat qlpmn src/modbulkmicrostat.f90 /^ qlpav , &$/;" v module:modbulkmicrostat qlpmn src/modsimpleicestat.f90 /^ qlpav , &$/;" v module:modsimpleicestat -qlptav src/addon/modgenstat.f90 /^ real, allocatable :: qlptav(/;" v module:modgenstat qlptav src/modgenstat.f90 /^ real, allocatable :: qlptav(/;" v module:modgenstat qltot src/addon/modbulkmicrodata.f90 /^ real,allocatable,dimension(:,:,:) :: Nr,Nrp,qltot,/;" v module:modbulkmicrodata qltot src/modmicrodata.f90 /^ real,allocatable,dimension(:,:,:) :: Nr,Nrp,qltot,/;" v module:modmicrodata -qlvarid src/addon/modheterostats.f90 /^ integer :: uvarid, vvarid, wvarid, thlvarid, thvvarid, qtvarid, qlvarid$/;" v module:modheterostats qlvarid src/modheterostats.f90 /^ integer :: uvarid, vvarid, wvarid, thlvarid, thvvarid, qtvarid, qlvarid$/;" v module:modheterostats qr src/addon/modbulkmicrodata.f90 /^ real,allocatable,dimension(:,:,:) :: Nr,Nrp,qltot,qr,/;" v module:modbulkmicrodata qr src/modmicrodata.f90 /^ real,allocatable,dimension(:,:,:) :: Nr,Nrp,qltot,qr,/;" v module:modmicrodata qr_spl src/addon/modbulkmicrodata.f90 /^ real,allocatable, dimension(:,:,:) :: qr_spl,/;" v module:modbulkmicrodata qr_spl src/modmicrodata.f90 /^ real,allocatable, dimension(:,:,:) :: qr_spl,/;" v module:modmicrodata -qrav src/addon/modbulkmicrostat.f90 /^ qravl/;" v module:modbulkmicrostat qrav src/modbulkmicrostat.f90 /^ qravl/;" v module:modbulkmicrostat qrav src/modsimpleicestat.f90 /^ qravl/;" v module:modsimpleicestat -qravl src/addon/modbulkmicrostat.f90 /^ Nrrainmn , &$/;" v module:modbulkmicrostat qravl src/modbulkmicrostat.f90 /^ Nrrainmn , &$/;" v module:modbulkmicrostat qravl src/modsimpleicestat.f90 /^ Nrrainmn , &$/;" v module:modsimpleicestat qrfavl src/modsampling.f90 /^ wthlthavl,wthvthavl,wqtthavl,wqlthavl,uwthavl,vwthavl,qrfavl$/;" v module:modsampling @@ -2919,7 +2489,6 @@ qrmask src/addon/modbulkmicrodata.f90 /^ logical ,allocatable,dimension(:,:,:): qrmask src/modmicrodata.f90 /^ logical ,allocatable,dimension(:,:,:):: qcmask,qrmask$/;" v module:modmicrodata qrmin src/addon/modbulkmicrodata.f90 /^ ,qrmin /;" v module:modbulkmicrodata qrmin src/modmicrodata.f90 /^ ,qrmin /;" v module:modmicrodata -qrmn src/addon/modbulkmicrostat.f90 /^ qrav , &$/;" v module:modbulkmicrostat qrmn src/modbulkmicrostat.f90 /^ qrav , &$/;" v module:modbulkmicrostat qrmn src/modsimpleicestat.f90 /^ qrav , &$/;" v module:modsimpleicestat qrp src/addon/modbulkmicrodata.f90 /^ real,allocatable,dimension(:,:,:) :: Nr,Nrp,qltot,qr,qrp,/;" v module:modbulkmicrodata @@ -2934,12 +2503,9 @@ qst_patch src/modtimestat.f90 /^ real,allocatable, dimension(:,:) :: ust_patch, qt0 src/modfields.f90 /^ real, allocatable :: qt0(/;" v module:modfields qt0av src/modfields.f90 /^ real, allocatable :: qt0av(/;" v module:modfields qt0h src/modfields.f90 /^ real, allocatable :: qt0h(/;" v module:modfields -qt2mn src/addon/modgenstat.f90 /^ real, allocatable :: u2mn (:), v2mn (:), qt2mn(/;" v module:modgenstat qt2mn src/modgenstat.f90 /^ real, allocatable :: u2mn (:), v2mn (:), qt2mn(/;" v module:modgenstat -qtavgid src/addon/modheterostats.f90 /^ integer :: uavgid, vavgid, wavgid, thlavgid, thvavgid, qtavgid,/;" v module:modheterostats qtavgid src/addon/modnetcdfstats.f90 /^ integer :: uavgid, vavgid, wavgid, thlavgid, qtavgid,/;" v module:modnetcdfstats qtavgid src/modheterostats.f90 /^ integer :: uavgid, vavgid, wavgid, thlavgid, thvavgid, qtavgid,/;" v module:modheterostats -qtavl src/addon/modsampling.f90 /^ real, allocatable, dimension(:,:) :: wavl,tlavl,tvavl,qtavl,/;" v module:modsampling qtavl src/modquadrant.f90 /^ real, allocatable, dimension(:,:) :: uavl,vavl,wavl,utotavl,thlavl,qtavl$/;" v module:modquadrant qtfavl src/modsampling.f90 /^ real, allocatable, dimension(:,:) :: wfavl,thlfavl,thvfavl,qtfavl,/;" v module:modsampling qtflux src/modsurfdata.f90 /^ real, allocatable :: qtflux /;" v module:modsurfdata @@ -2947,23 +2513,16 @@ qtid src/addon/modnetcdfmovie.f90 /^ integer :: uid, vid, wid, thlid, qtid$/;" qtidfield src/addon/modnetcdfstats.f90 /^ integer :: uidfield, vidfield, widfield, thlidfield, qtidfield$/;" v module:modnetcdfstats qtidmovie src/addon/modnetcdfstats.f90 /^ integer :: uidmovie, vidmovie, widmovie, thlidmovie, qtidmovie$/;" v module:modnetcdfstats qtm src/modfields.f90 /^ real, allocatable :: qtm(/;" v module:modfields -qtmav src/addon/modgenstat.f90 /^ real, allocatable :: qtmav /;" v module:modgenstat qtmav src/modgenstat.f90 /^ real, allocatable :: qtmav /;" v module:modgenstat -qtmn src/addon/modgenstat.f90 /^ real, allocatable :: qtmn /;" v module:modgenstat qtmn src/modgenstat.f90 /^ real, allocatable :: qtmn /;" v module:modgenstat -qtnudge src/addon/modnudge.f90 /^ real, dimension(:,:), allocatable :: tnudge,unudge,vnudge,wnudge,thlnudge,qtnudge$/;" v module:modnudge qtnudge src/modnudge.f90 /^ real, dimension(:,:), allocatable :: tnudge,unudge,vnudge,wnudge,thlnudge,qtnudge$/;" v module:modnudge qtp src/modfields.f90 /^ real, allocatable :: qtp(/;" v module:modfields -qtpav src/addon/modbulkmicrostat.f90 /^ qlpmn , &$/;" v module:modbulkmicrostat -qtpav src/addon/modstattend.f90 /^ real, allocatable :: upav(:,:),vpav(:,:),wpav(:,:),thlpav(:,:),qtpav(/;" v module:modstattend qtpav src/modbulkmicrostat.f90 /^ qlpmn , &$/;" v module:modbulkmicrostat qtpav src/modsamptend.f90 /^ real, allocatable :: upav(:,:,:),vpav(:,:,:),wpav(:,:,:),thlpav(:,:,:),qtpav(/;" v module:modsamptend qtpav src/modsimpleicestat.f90 /^ qlpmn , &$/;" v module:modsimpleicestat qtpav src/modstattend.f90 /^ real, allocatable :: upav(:,:),vpav(:,:),wpav(:,:),thlpav(:,:),qtpav(/;" v module:modstattend qtpmcr src/addon/modbulkmicrodata.f90 /^ real,allocatable,dimension(:,:,:) :: Nr,Nrp,qltot,qr,qrp,thlpmcr,qtpmcr$/;" v module:modbulkmicrodata qtpmcr src/modmicrodata.f90 /^ real,allocatable,dimension(:,:,:) :: Nr,Nrp,qltot,qr,qrp,thlpmcr,qtpmcr$/;" v module:modmicrodata -qtpmn src/addon/modbulkmicrostat.f90 /^ qtpav , &$/;" v module:modbulkmicrostat -qtpmn src/addon/modstattend.f90 /^ real, allocatable :: upmn(:,:),vpmn(:,:),wpmn(:,:),thlpmn(:,:),qtpmn(/;" v module:modstattend qtpmn src/modbulkmicrostat.f90 /^ qtpav , &$/;" v module:modbulkmicrostat qtpmn src/modsamptend.f90 /^ real, allocatable :: upmn(:,:,:),vpmn(:,:,:),wpmn(:,:,:),thlpmn(:,:,:),qtpmn(/;" v module:modsamptend qtpmn src/modsimpleicestat.f90 /^ qtpav , &$/;" v module:modsimpleicestat @@ -2976,7 +2535,6 @@ qts_patch src/modsurfdata.f90 /^ real, allocatable :: qts_patch(/;" v module:mo qtst src/modsamptend.f90 /^ real, allocatable :: ust(:,:),vst(:,:),wst(:,:),thlst(:,:),qtst(/;" v module:modsamptend qtst src/modtimedep.f90 /^ real, allocatable :: qtst /;" v module:modtimedep qtsurf src/modsurface.f90 /^ subroutine qtsurf$/;" s module:modsurface -qtvarid src/addon/modheterostats.f90 /^ integer :: uvarid, vvarid, wvarid, thlvarid, thvvarid, qtvarid,/;" v module:modheterostats qtvarid src/addon/modnetcdfstats.f90 /^ integer :: uvarid, vvarid, wvarid, thlvarid, qtvarid$/;" v module:modnetcdfstats qtvarid src/modheterostats.f90 /^ integer :: uvarid, vvarid, wvarid, thlvarid, thvvarid, qtvarid,/;" v module:modheterostats qtvarl src/modquadrant.f90 /^ real, allocatable, dimension(:,:) :: uvarl,vvarl,wvarl,utotvarl,thlvarl,qtvarl$/;" v module:modquadrant @@ -2985,7 +2543,6 @@ qv_b src/modradfull.f90 /^ real, allocatable :: temp_b(:,:,:),qv_b(/;" v modul qv_slice src/modraddata.f90 /^ real(kind=kind_rb),allocatable,dimension(:,:) :: tabs_slice, & ! Absolute temperature (2D slice)$/;" v module:modraddata qvsi src/modfields.f90 /^ real, allocatable :: qvsi(/;" v module:modfields qvsl src/modfields.f90 /^ real, allocatable :: qvsl(/;" v module:modfields -r_nr src/addon/modchem.f90 /^ integer r_nr /;" k type:Form r_nr src/modchem.f90 /^ integer r_nr /;" k type:Form ra src/modsurfdata.f90 /^ real, allocatable :: ra /;" v module:modsurfdata ra_patch src/modtimestat.f90 /^ real,allocatable, dimension(:,:) :: Qnet_patch, H_patch, LE_patch, G0_patch, tendskin_patch,rs_patch,ra_patch$/;" v module:modtimestat @@ -2998,15 +2555,12 @@ rad_shortw src/modraddata.f90 /^ logical :: rad_shortw /;" v module:modraddata rad_smoke src/modraddata.f90 /^ logical :: rad_smoke /;" v module:modraddata rad_user src/moduser.f90 /^subroutine rad_user$/;" s module:moduser rad_vis src/modradfull.f90 /^ subroutine rad_vis /;" s module:modradfull -radclearair src/addon/modradstat.f90 /^ subroutine radclearair$/;" s module:modradstat radclearair src/modradstat.f90 /^ subroutine radclearair$/;" s module:modradstat radcn1 src/rrlw_con.f90 /^ real(kind=rb) :: radcn1,/;" v module:rrlw_con radcn1 src/rrsw_con.f90 /^ real(kind=rb) :: radcn1,/;" v module:rrsw_con radcn2 src/rrlw_con.f90 /^ real(kind=rb) :: radcn1, radcn2$/;" v module:rrlw_con radcn2 src/rrsw_con.f90 /^ real(kind=rb) :: radcn1, radcn2$/;" v module:rrsw_con -raddep src/addon/modchem.f90 /^ integer raddep /;" k type:RCdef raddep src/modchem.f90 /^ integer raddep /;" k type:RCdef -raddep_RCindex src/addon/modchem.f90 /^ integer, allocatable :: raddep_RCindex(/;" v module:modchem raddep_RCindex src/modchem.f90 /^ integer, allocatable :: raddep_RCindex(/;" v module:modchem radfull src/modradfull.f90 /^ subroutine radfull$/;" s module:modradfull radiation src/modradiation.f90 /^ subroutine radiation$/;" s module:modradiation @@ -3014,15 +2568,11 @@ radlsm src/modradiation.f90 /^ subroutine radlsm$/;" s module:modradiation radpar src/modradiation.f90 /^subroutine radpar$/;" s module:modradiation radprof src/modradiation.f90 /^ subroutine radprof$/;" s module:modradiation radrrtmg src/modradrrtmg.f90 /^ subroutine radrrtmg$/;" s module:modradrrtmg -radstat src/addon/modradstat.f90 /^ subroutine radstat$/;" s module:modradstat radstat src/modradstat.f90 /^ subroutine radstat$/;" s module:modradstat -raincountav src/addon/modbulkmicrostat.f90 /^ raincountavl/;" v module:modbulkmicrostat raincountav src/modbulkmicrostat.f90 /^ raincountavl/;" v module:modbulkmicrostat raincountav src/modsimpleicestat.f90 /^ raincountavl/;" v module:modsimpleicestat -raincountavl src/addon/modbulkmicrostat.f90 /^ cloudcountmn , &$/;" v module:modbulkmicrostat raincountavl src/modbulkmicrostat.f90 /^ cloudcountmn , &$/;" v module:modbulkmicrostat raincountavl src/modsimpleicestat.f90 /^ cloudcountmn , &$/;" v module:modsimpleicestat -raincountmn src/addon/modbulkmicrostat.f90 /^ raincountav , &$/;" v module:modbulkmicrostat raincountmn src/modbulkmicrostat.f90 /^ raincountav , &$/;" v module:modbulkmicrostat raincountmn src/modsimpleicestat.f90 /^ raincountav , &$/;" v module:modsimpleicestat ran1 src/addon/modparticles.f90 /^ function ran1(/;" f module:modparticles @@ -3032,13 +2582,12 @@ randoms src/modradfull.f90 /^ type(randomNumberSequence), save :: randoms$/;" v randqt src/modstartup.f90 /^ real :: randthl= 0.1,randqt=/;" v module:modstartup randthl src/modstartup.f90 /^ real :: randthl=/;" v module:modstartup randu src/modstartup.f90 /^ real :: randu /;" v module:modstartup -ratech src/addon/modchem.f90 /^subroutine ratech$/;" s module:modchem ratech src/modchem.f90 /^subroutine ratech$/;" s module:modchem rayl src/rrsw_kg16.f90 /^ real(kind=rb) :: rayl$/;" v module:rrsw_kg16 rayl src/rrsw_kg17.f90 /^ real(kind=rb) :: rayl$/;" v module:rrsw_kg17 rayl src/rrsw_kg18.f90 /^ real(kind=rb) :: rayl$/;" v module:rrsw_kg18 rayl src/rrsw_kg19.f90 /^ real(kind=rb) :: rayl$/;" v module:rrsw_kg19 -rayl src/rrsw_kg20.f90 /^ real(kind=rb) :: rayl /;" v module:rrsw_kg20 +rayl src/rrsw_kg20.f90 /^ real(kind=rb) :: rayl$/;" v module:rrsw_kg20 rayl src/rrsw_kg21.f90 /^ real(kind=rb) :: rayl$/;" v module:rrsw_kg21 rayl src/rrsw_kg22.f90 /^ real(kind=rb) :: rayl$/;" v module:rrsw_kg22 rayl src/rrsw_kg23.f90 /^ real(kind=rb) :: sfluxref(ng23), rayl(/;" v module:rrsw_kg23 @@ -3060,22 +2609,17 @@ rcp src/modglobal.f90 /^ real,parameter :: rcp /;" v module:modglobal rd src/modglobal.f90 /^ real,parameter :: rd /;" v module:modglobal rdt src/modglobal.f90 /^ real :: rdt /;" v module:modglobal re src/modradfull.f90 /^ rea/;" v module:modradfull -reaction_ev src/addon/modchem.f90 /^ logical, allocatable :: reaction_ev(/;" v module:modchem reaction_ev src/modchem.f90 /^ logical, allocatable :: reaction_ev(/;" v module:modchem readSounding src/modradrrtmg.f90 /^ subroutine readSounding(/;" s module:modradrrtmg readTraceProfs src/modradrrtmg.f90 /^ subroutine readTraceProfs /;" s module:modradrrtmg -read_chem src/addon/modchem.f90 /^SUBROUTINE read_chem(/;" s module:modchem read_chem src/modchem.f90 /^SUBROUTINE read_chem(/;" s module:modchem readinitfiles src/modstartup.f90 /^ subroutine readinitfiles$/;" s module:modstartup readrestartfiles src/modstartup.f90 /^ subroutine readrestartfiles$/;" s module:modstartup readthla src/addon/modtilt.f90 /^ subroutine readthla$/;" s module:modtilt -redefine_nc src/addon/modstat_nc.f90 /^ subroutine redefine_nc(/;" s module:modstat_nc -redefine_nc src/addon/stat_nc_dummy.f90 /^ subroutine redefine_nc(/;" s module:modstat_nc redefine_nc src/modstat_nc.f90 /^ subroutine redefine_nc(/;" s module:modstat_nc reff src/modraddata.f90 /^ real :: reff /;" v module:modraddata refparam src/rrlw_kg02.f90 /^ real(kind=rb) :: refparam(/;" v module:rrlw_kg02 reftra_sw src/rrtmg_sw_reftra.f90 /^ subroutine reftra_sw(/;" s module:rrtmg_sw_reftra -residmn src/addon/modbudget.f90 /^ real, allocatable :: residmn(/;" v module:modbudget residmn src/modbudget.f90 /^ real, allocatable :: residmn(/;" v module:modbudget rho_c src/addon/modbulkmicrodata.f90 /^ real :: rho_c /;" v module:modbulkmicrodata rho_c src/modmicrodata.f90 /^ real :: rho_c /;" v module:modmicrodata @@ -3087,11 +2631,8 @@ rhow src/modglobal.f90 /^ real,parameter :: rhow /;" v module:modglobal rhoz src/addon/modbulkmicrodata.f90 /^ ,rhoz /;" v module:modbulkmicrodata rhoz src/modmicrodata.f90 /^ ,rhoz /;" v module:modmicrodata riv src/modglobal.f90 /^ real,parameter :: riv /;" v module:modglobal -rk src/addon/modchem.f90 /^ real, allocatable :: rk1/;" v module:modchem rk src/modchem.f90 /^ real, allocatable :: rk1/;" v module:modchem -rk1 src/addon/modchem.f90 /^ real, allocatable :: rk1(/;" v module:modchem rk1 src/modchem.f90 /^ real, allocatable :: rk1(/;" v module:modchem -rk2 src/addon/modchem.f90 /^ real, allocatable :: rk1(:,:),rk2(/;" v module:modchem rk2 src/modchem.f90 /^ real, allocatable :: rk1(:,:),rk2(/;" v module:modchem rk3 src/addon/modparticles.f90 /^ subroutine rk3(/;" s module:modparticles rk3step src/modglobal.f90 /^ integer :: rk3step /;" v module:modglobal @@ -3101,7 +2642,6 @@ rlimit src/modradfull.f90 /^ real :: llimit, rlimit,/;" k ty rlimit src/modradfull.f90 /^ elemental real function rlimit(/;" f module:modradfull rlv src/modglobal.f90 /^ real,parameter :: rlv /;" v module:modglobal rlvocp src/modglobal.f90 /^ real,parameter :: rlvocp /;" v module:modglobal -rname src/addon/modchem.f90 /^ character*6 rname$/;" k type:RCdef rname src/modchem.f90 /^ character*6 rname$/;" k type:RCdef rnu0 src/modboundary.f90 /^ real :: rnu0 /;" v module:modboundary rootf src/modsurfdata.f90 /^ real, allocatable :: rootf /;" v module:modsurfdata @@ -3197,8 +2737,6 @@ rstre src/addon/modstress.f90 /^ real, allocatable, dimension (:,:,:) :: rstrb, rsveg src/modsurfdata.f90 /^ real, allocatable :: rsveg /;" v module:modsurfdata rsveg_patch src/modtimestat.f90 /^ real,allocatable, dimension(:,:) :: cliq_patch, wl_patch, rsveg_patch,/;" v module:modtimestat rtimee src/modglobal.f90 /^ real :: rtimee /;" v module:modglobal -rtol src/addon/modchem.f90 /^ real rtol$/;" k type:Name_Number -rtol src/addon/modchem.f90 /^ real, allocatable :: atol(:),rtol(/;" v module:modchem rtol src/modchem.f90 /^ real rtol$/;" k type:Name_Number rtol src/modchem.f90 /^ real, allocatable :: atol(:),rtol(/;" v module:modchem rtrn src/rrtmg_lw_rtrn.f90 /^ subroutine rtrn(/;" s module:rrtmg_lw_rtrn @@ -3207,71 +2745,48 @@ runtime src/modglobal.f90 /^ real :: runtime /;" v module:modglobal rv src/modglobal.f90 /^ real,parameter :: rv /;" v module:modglobal rwgt src/rrlw_wvn.f90 /^ real(kind=rb) :: rwgt(/;" v module:rrlw_wvn rwgt src/rrsw_wvn.f90 /^ real(kind=rb) :: rwgt(/;" v module:rrsw_wvn -sampling src/addon/modsampling.f90 /^ subroutine sampling$/;" s module:modsampling sampling src/modsampling.f90 /^ subroutine sampling$/;" s module:modsampling -samplname src/addon/modsampling.f90 /^ character(20),dimension(10) :: samplname,/;" v module:modsampling samplname src/modquadrant.f90 /^ character(30),dimension(4) :: samplname,/;" v module:modquadrant samplname src/modsampling.f90 /^ character(20),dimension(10) :: samplname,/;" v module:modsampling samplname src/modsamptend.f90 /^ character(20),dimension(10) :: samplname,/;" v module:modsamptend samptend src/modsamptend.f90 /^ subroutine samptend(/;" s module:modsamptend -sbbudgmn src/addon/modbudget.f90 /^ real, allocatable :: sbbudgmn(/;" v module:modbudget sbbudgmn src/modbudget.f90 /^ real, allocatable :: sbbudgmn(/;" v module:modbudget sbbuo src/modsubgriddata.f90 /^ real, allocatable :: sbbuo(/;" v module:modsubgriddata -sbbuomn src/addon/modbudget.f90 /^ real, allocatable :: sbbuomn(/;" v module:modbudget sbbuomn src/modbudget.f90 /^ real, allocatable :: sbbuomn(/;" v module:modbudget sbcnst src/rrlw_con.f90 /^ real(kind=rb) :: sbcnst,/;" v module:rrlw_con sbcnst src/rrsw_con.f90 /^ real(kind=rb) :: sbcnst,/;" v module:rrsw_con sbdiss src/modsubgriddata.f90 /^ real, allocatable :: sbdiss(/;" v module:modsubgriddata -sbdissmn src/addon/modbudget.f90 /^ real, allocatable :: sbdissmn(/;" v module:modbudget sbdissmn src/modbudget.f90 /^ real, allocatable :: sbdissmn(/;" v module:modbudget -sbresidmn src/addon/modbudget.f90 /^ real, allocatable :: sbresidmn(/;" v module:modbudget sbresidmn src/modbudget.f90 /^ real, allocatable :: sbresidmn(/;" v module:modbudget sbshr src/modsubgriddata.f90 /^ real, allocatable :: sbshr(/;" v module:modsubgriddata -sbshrmn src/addon/modbudget.f90 /^ real, allocatable :: sbshrmn(/;" v module:modbudget sbshrmn src/modbudget.f90 /^ real, allocatable :: sbshrmn(/;" v module:modbudget -sbstormn src/addon/modbudget.f90 /^ real, allocatable :: sbstormn(/;" v module:modbudget sbstormn src/modbudget.f90 /^ real, allocatable :: sbstormn(/;" v module:modbudget -sbtkeav src/addon/modbudget.f90 /^ real, allocatable :: sbtkeav(/;" v module:modbudget sbtkeav src/modbudget.f90 /^ real, allocatable :: sbtkeav(/;" v module:modbudget -sbtkeb src/addon/modbudget.f90 /^ real, allocatable :: sbtkeb(/;" v module:modbudget sbtkeb src/modbudget.f90 /^ real, allocatable :: sbtkeb(/;" v module:modbudget -sbtkemn src/addon/modbudget.f90 /^ real, allocatable :: sbtkemn(/;" v module:modbudget sbtkemn src/modbudget.f90 /^ real, allocatable :: sbtkemn(/;" v module:modbudget sc src/addon/modbulkmicrodata.f90 /^ ,sc /;" v module:modbulkmicrodata sc src/modmicrodata.f90 /^ ,sc /;" v module:modmicrodata scalintp src/addon/modparticles.f90 /^ function scalintp(/;" f module:modparticles -scon src/modraddata.f90 /^ real :: scon /;" v module:modraddata +scon src/modraddata.f90 /^ real :: scon$/;" v module:modraddata secdy src/rrlw_con.f90 /^ real(kind=rb) :: sbcnst, secdy$/;" v module:rrlw_con secdy src/rrsw_con.f90 /^ real(kind=rb) :: sbcnst, secdy$/;" v module:rrsw_con sed_Nr src/addon/modbulkmicrodata.f90 /^ sed_qr, & !< sedimentation rain drops mix. ratio$/;" v module:modbulkmicrodata sed_Nr src/modmicrodata.f90 /^ sed_qr, & !< sedimentation rain drops mix. ratio$/;" v module:modmicrodata -sed_flux src/addon/modbulkmicro.f90 /^ real function sed_flux(/;" f module:modbulkmicro sed_flux src/modbulkmicro.f90 /^ real function sed_flux(/;" f module:modbulkmicro sed_qr src/addon/modbulkmicrodata.f90 /^ real,allocatable, dimension(:,:,:) :: sedc, & !< sedimentation cloud droplets mix. ratio$/;" v module:modbulkmicrodata sed_qr src/modmicrodata.f90 /^ real,allocatable, dimension(:,:,:) :: sedc, & !< sedimentation cloud droplets mix. ratio$/;" v module:modmicrodata sedc src/addon/modbulkmicrodata.f90 /^ real,allocatable, dimension(:,:,:) :: sedc,/;" v module:modbulkmicrodata sedc src/modmicrodata.f90 /^ real,allocatable, dimension(:,:,:) :: sedc,/;" v module:modmicrodata -sedimentation_cloud src/addon/modbulkmicro.f90 /^ subroutine sedimentation_cloud$/;" s module:modbulkmicro sedimentation_cloud src/modbulkmicro.f90 /^ subroutine sedimentation_cloud$/;" s module:modbulkmicro -sedimentation_rain src/addon/modbulkmicro.f90 /^ subroutine sedimentation_rain$/;" s module:modbulkmicro sedimentation_rain src/modbulkmicro.f90 /^ subroutine sedimentation_rain$/;" s module:modbulkmicro -seg_conc src/addon/modchem.f90 /^ real, allocatable :: seg_conc(/;" v module:modchem seg_conc src/modchem.f90 /^ real, allocatable :: seg_conc(/;" v module:modchem -seg_conc_mult src/addon/modchem.f90 /^ real, allocatable :: seg_conc_mult(/;" v module:modchem seg_conc_mult src/modchem.f90 /^ real, allocatable :: seg_conc_mult(/;" v module:modchem -seg_conc_mult_vert src/addon/modchem.f90 /^ real, allocatable :: seg_conc_mult_vert(/;" v module:modchem seg_conc_mult_vert src/modchem.f90 /^ real, allocatable :: seg_conc_mult_vert(/;" v module:modchem -seg_conc_prod src/addon/modchem.f90 /^ real, allocatable :: seg_conc_prod(/;" v module:modchem seg_conc_prod src/modchem.f90 /^ real, allocatable :: seg_conc_prod(/;" v module:modchem -seg_conc_prod_vert src/addon/modchem.f90 /^ real, allocatable :: seg_conc_prod_vert(/;" v module:modchem seg_conc_prod_vert src/modchem.f90 /^ real, allocatable :: seg_conc_prod_vert(/;" v module:modchem -seg_conc_prodl src/addon/modchem.f90 /^ real, allocatable :: seg_conc_prodl(/;" v module:modchem seg_conc_prodl src/modchem.f90 /^ real, allocatable :: seg_conc_prodl(/;" v module:modchem -seg_concl src/addon/modchem.f90 /^ real, allocatable :: seg_concl(/;" v module:modchem seg_concl src/modchem.f90 /^ real, allocatable :: seg_concl(/;" v module:modchem -segregation src/addon/modchem.f90 /^ real, allocatable :: segregation(/;" v module:modchem segregation src/modchem.f90 /^ real, allocatable :: segregation(/;" v module:modchem -segregation_vert src/addon/modchem.f90 /^ real, allocatable :: segregation_vert(/;" v module:modchem segregation_vert src/modchem.f90 /^ real, allocatable :: segregation_vert(/;" v module:modchem select_bandg src/modradfull.f90 /^ subroutine select_bandg(/;" s module:modradfull select_gas src/modradfull.f90 /^ subroutine select_gas /;" s module:modradfull @@ -3369,9 +2884,7 @@ shr_orb_decl src/shr_orb_mod.f90 /^ SUBROUTINE shr_orb_decl(/;" s module:shr_or shr_orb_mod src/shr_orb_mod.f90 /^MODULE shr_orb_mod$/;" m shr_orb_params src/shr_orb_mod.f90 /^SUBROUTINE shr_orb_params(/;" s module:shr_orb_mod shr_orb_print src/shr_orb_mod.f90 /^SUBROUTINE shr_orb_print(/;" s module:shr_orb_mod -shrmn src/addon/modbudget.f90 /^ real, allocatable :: shrmn(/;" v module:modbudget shrmn src/modbudget.f90 /^ real, allocatable :: shrmn(/;" v module:modbudget -sig_el src/addon/modsampling.f90 /^ real,allocatable, dimension(:,:) :: w_el,sig_el$/;" v module:modsampling sig_g src/addon/modbulkmicrodata.f90 /^ ,sig_g /;" v module:modbulkmicrodata sig_g src/modmicrodata.f90 /^ ,sig_g /;" v module:modmicrodata sig_gr src/addon/modbulkmicrodata.f90 /^ ,sig_gr /;" v module:modbulkmicrodata @@ -3382,7 +2895,6 @@ sigma2_sgs src/addon/modparticles.f90 /^ real ::sigma2_sgs$/;" k type:particl simpleice src/modsimpleice.f90 /^ subroutine simpleice$/;" s module:modsimpleice simpleicestat src/modsimpleicestat.f90 /^ subroutine simpleicestat$/;" s module:modsimpleicestat simpleicetend src/modsimpleicestat.f90 /^ subroutine simpleicetend$/;" s module:modsimpleicestat -skewmn src/addon/modgenstat.f90 /^ real, allocatable :: w2mn (:), skewmn /;" v module:modgenstat skewmn src/modgenstat.f90 /^ real, allocatable :: w2mn (:), skewmn /;" v module:modgenstat slabsum src/modmpi.f90 /^ subroutine slabsum(/;" s module:modmpi slicex src/addon/modnetcdfmovie.f90 /^ integer :: slicex /;" v module:modnetcdfmovie @@ -3404,12 +2916,10 @@ startfilepart src/addon/modparticles.f90 /^ character(30) :: startfilepart$/;" startup src/modstartup.f90 /^ subroutine startup$/;" s module:modstartup state src/rad_rndnmb.f90 /^ integer, dimension(0:blockSize -1) :: state /;" k type:randomNumberSequence statistics src/addon/modparticles.f90 /^ subroutine statistics$/;" s module:modparticles -stattend src/addon/modstattend.f90 /^ subroutine stattend(/;" s module:modstattend stattend src/modstattend.f90 /^ subroutine stattend(/;" s module:modstattend status src/rrlw_ncpar.f90 /^ integer(kind=im), dimension(40) :: status$/;" v module:rrlw_ncpar -status src/rrsw_ncpar.f90 /^ integer(kind=im), dimension(50) :: status$/;" v module:rrsw_ncpar +status src/rrsw_ncpar.f90 /^ integer(kind=im), dimension(50) :: status$/;" v module:rrsw_ncpar store_zi src/modtimestat.f90 /^ logical:: store_zi /;" v module:modtimestat -stormn src/addon/modbudget.f90 /^ real, allocatable :: stormn(/;" v module:modbudget stormn src/modbudget.f90 /^ real, allocatable :: stormn(/;" v module:modbudget str_budg src/addon/modstress.f90 /^ real, allocatable, dimension (:,:,:) :: str_budg /;" v module:modstress str_res src/addon/modstress.f90 /^ real, allocatable, dimension (:,:,:) :: str_res /;" v module:modstress @@ -3423,32 +2933,22 @@ surf_user src/moduser.f90 /^subroutine surf_user$/;" s module:moduser surface src/modsurface.f90 /^ subroutine surface$/;" s module:modsurface sv0 src/modfields.f90 /^ real, allocatable :: sv0(/;" v module:modfields sv0av src/modfields.f90 /^ real, allocatable :: sv0av(/;" v module:modfields -sv2mn src/addon/modgenstat.f90 /^ real, allocatable :: sv2mn(/;" v module:modgenstat sv2mn src/modgenstat.f90 /^ real, allocatable :: sv2mn(/;" v module:modgenstat -svavgid src/addon/modheterostats.f90 /^ integer, allocatable :: svavgid(/;" v module:modheterostats svavgid src/modheterostats.f90 /^ integer, allocatable :: svavgid(/;" v module:modheterostats svavl src/modquadrant.f90 /^ real, allocatable, dimension(:,:,:) :: svavl,/;" v module:modquadrant svflux src/modsurfdata.f90 /^ real, allocatable :: svflux /;" v module:modsurfdata svm src/modfields.f90 /^ real, allocatable :: svm(/;" v module:modfields -svmav src/addon/modgenstat.f90 /^ real, allocatable :: svmav /;" v module:modgenstat svmav src/modgenstat.f90 /^ real, allocatable :: svmav /;" v module:modgenstat -svmmn src/addon/modgenstat.f90 /^ real, allocatable :: svmmn(/;" v module:modgenstat svmmn src/modgenstat.f90 /^ real, allocatable :: svmmn(/;" v module:modgenstat svp src/modfields.f90 /^ real, allocatable :: svp(/;" v module:modfields -svpav src/addon/modgenstat.f90 /^ real, allocatable :: svpav(/;" v module:modgenstat svpav src/modgenstat.f90 /^ real, allocatable :: svpav(/;" v module:modgenstat -svplsmn src/addon/modgenstat.f90 /^ real, allocatable :: svmmn(:,:),svptmn(:,:),svplsmn(/;" v module:modgenstat svplsmn src/modgenstat.f90 /^ real, allocatable :: svmmn(:,:),svptmn(:,:),svplsmn(/;" v module:modgenstat -svpmn src/addon/modgenstat.f90 /^ real, allocatable :: svmmn(:,:),svptmn(:,:),svplsmn(:,:),svpmn(/;" v module:modgenstat svpmn src/modgenstat.f90 /^ real, allocatable :: svmmn(:,:),svptmn(:,:),svplsmn(:,:),svpmn(/;" v module:modgenstat svprof src/modfields.f90 /^ real, allocatable :: svprof(/;" v module:modfields -svptav src/addon/modgenstat.f90 /^ real, allocatable :: svptav(/;" v module:modgenstat svptav src/modgenstat.f90 /^ real, allocatable :: svptav(/;" v module:modgenstat -svptmn src/addon/modgenstat.f90 /^ real, allocatable :: svmmn(:,:),svptmn(/;" v module:modgenstat svptmn src/modgenstat.f90 /^ real, allocatable :: svmmn(:,:),svptmn(/;" v module:modgenstat svs src/modsurfdata.f90 /^ real, allocatable :: svs /;" v module:modsurfdata svst src/modtimedepsv.f90 /^ real, allocatable :: svst /;" v module:modtimedepsv -svvarid src/addon/modheterostats.f90 /^ integer, allocatable :: svvarid(/;" v module:modheterostats svvarid src/modheterostats.f90 /^ integer, allocatable :: svvarid(/;" v module:modheterostats svvarl src/modquadrant.f90 /^ real, allocatable, dimension(:,:,:) :: svavl,svvarl$/;" v module:modquadrant svzt src/modtimedepsv.f90 /^ real, allocatable :: svzt(/;" v module:modtimedepsv @@ -3465,27 +2965,24 @@ sw_kgb18 src/rrtmg_sw_read_nc.f90 /^subroutine sw_kgb18$/;" s sw_kgb19 src/rrtmg_sw_read_nc.f90 /^subroutine sw_kgb19$/;" s sw_kgb20 src/rrtmg_sw_read_nc.f90 /^subroutine sw_kgb20$/;" s sw_kgb21 src/rrtmg_sw_read_nc.f90 /^subroutine sw_kgb21$/;" s -sw_kgb22 src/rrtmg_sw_read_nc.f90 /^subroutine sw_kgb22 /;" s -sw_kgb23 src/rrtmg_sw_read_nc.f90 /^subroutine sw_kgb23 /;" s -sw_kgb24 src/rrtmg_sw_read_nc.f90 /^subroutine sw_kgb24 /;" s -sw_kgb25 src/rrtmg_sw_read_nc.f90 /^subroutine sw_kgb25 /;" s +sw_kgb22 src/rrtmg_sw_read_nc.f90 /^subroutine sw_kgb22$/;" s +sw_kgb23 src/rrtmg_sw_read_nc.f90 /^subroutine sw_kgb23$/;" s +sw_kgb24 src/rrtmg_sw_read_nc.f90 /^subroutine sw_kgb24$/;" s +sw_kgb25 src/rrtmg_sw_read_nc.f90 /^subroutine sw_kgb25$/;" s sw_kgb26 src/rrtmg_sw_read_nc.f90 /^subroutine sw_kgb26$/;" s sw_kgb27 src/rrtmg_sw_read_nc.f90 /^subroutine sw_kgb27$/;" s -sw_kgb28 src/rrtmg_sw_read_nc.f90 /^subroutine sw_kgb28 /;" s -sw_kgb29 src/rrtmg_sw_read_nc.f90 /^subroutine sw_kgb29 /;" s +sw_kgb28 src/rrtmg_sw_read_nc.f90 /^subroutine sw_kgb28$/;" s +sw_kgb29 src/rrtmg_sw_read_nc.f90 /^subroutine sw_kgb29$/;" s swaerpr src/rrtmg_sw_init.f90 /^ subroutine swaerpr$/;" s module:rrtmg_sw_init swatmref src/rrtmg_sw_setcoef.f90 /^ subroutine swatmref$/;" s module:rrtmg_sw_setcoef swcldpr src/rrtmg_sw_init.f90 /^ subroutine swcldpr$/;" s module:rrtmg_sw_init swcmbdat src/rrtmg_sw_init.f90 /^ subroutine swcmbdat$/;" s module:rrtmg_sw_init swd src/modraddata.f90 /^ real, allocatable :: swd(/;" v module:modraddata swdatinit src/rrtmg_sw_init.f90 /^ subroutine swdatinit(/;" s module:rrtmg_sw_init -swdav src/addon/modradstat.f90 /^ real, allocatable :: swdav(/;" v module:modradstat swdav src/modradstat.f90 /^ real, allocatable :: swdav(/;" v module:modradstat swdavn src/modsurfdata.f90 /^ real, allocatable :: swdavn /;" v module:modsurfdata swdca src/modraddata.f90 /^ real, allocatable :: swdca(/;" v module:modraddata -swdcaav src/addon/modradstat.f90 /^ real, allocatable :: swdcaav(/;" v module:modradstat swdcaav src/modradstat.f90 /^ real, allocatable :: swdcaav(/;" v module:modradstat -swdcamn src/addon/modradstat.f90 /^ real, allocatable :: swdcamn(/;" v module:modradstat swdcamn src/modradstat.f90 /^ real, allocatable :: swdcamn(/;" v module:modradstat swdif src/modraddata.f90 /^ real, allocatable :: swdif(/;" v module:modraddata swdifav src/modradstat.f90 /^ real, allocatable :: swdifav(/;" v module:modradstat @@ -3493,22 +2990,15 @@ swdifmn src/modradstat.f90 /^ real, allocatable :: swdifmn(/;" v module:modrads swdir src/modraddata.f90 /^ real, allocatable :: swdir(/;" v module:modraddata swdirav src/modradstat.f90 /^ real, allocatable :: swdirav(/;" v module:modradstat swdirmn src/modradstat.f90 /^ real, allocatable :: swdirmn(/;" v module:modradstat -swdmn src/addon/modradstat.f90 /^ real, allocatable :: swdmn(/;" v module:modradstat swdmn src/modradstat.f90 /^ real, allocatable :: swdmn(/;" v module:modradstat -switch src/addon/modchem.f90 /^ logical switch$/;" v module:modchem switch src/modchem.f90 /^ logical switch$/;" v module:modchem swu src/modraddata.f90 /^ real, allocatable :: swu(/;" v module:modraddata -swuav src/addon/modradstat.f90 /^ real, allocatable :: swuav(/;" v module:modradstat swuav src/modradstat.f90 /^ real, allocatable :: swuav(/;" v module:modradstat swuavn src/modsurfdata.f90 /^ real, allocatable :: swuavn /;" v module:modsurfdata swuca src/modraddata.f90 /^ real, allocatable :: swuca(/;" v module:modraddata -swucaav src/addon/modradstat.f90 /^ real, allocatable :: swucaav(/;" v module:modradstat swucaav src/modradstat.f90 /^ real, allocatable :: swucaav(/;" v module:modradstat -swucamn src/addon/modradstat.f90 /^ real, allocatable :: swucamn(/;" v module:modradstat swucamn src/modradstat.f90 /^ real, allocatable :: swucamn(/;" v module:modradstat -swumn src/addon/modradstat.f90 /^ real, allocatable :: swumn(/;" v module:modradstat swumn src/modradstat.f90 /^ real, allocatable :: swumn(/;" v module:modradstat -t_ref src/addon/modchem.f90 /^ real t_ref,/;" v module:modchem t_ref src/modchem.f90 /^ real t_ref,/;" v module:modchem tabs_slice src/modraddata.f90 /^ real(kind=kind_rb),allocatable,dimension(:,:) :: tabs_slice,/;" v module:modraddata tadv src/addon/modstress.f90 /^ real, allocatable, dimension (:,:,:) :: tadv /;" v module:modstress @@ -3550,11 +3040,41 @@ taumol27 src/rrtmg_sw_taumol.f90 /^ subroutine taumol27$/;" s subroutine:ta taumol28 src/rrtmg_sw_taumol.f90 /^ subroutine taumol28$/;" s subroutine:taumol_sw taumol29 src/rrtmg_sw_taumol.f90 /^ subroutine taumol29$/;" s subroutine:taumol_sw taumol_sw src/rrtmg_sw_taumol.f90 /^ subroutine taumol_sw(/;" s module:rrtmg_sw_taumol +tb_Qnet src/modtestbed.f90 /^ real, dimension(:) , allocatable :: tb_time, tb_ps, tb_qts, tb_thls, tb_wqs, tb_wts, tb_z0h, tb_z0m, tb_alb, tb_Qnet$/;" v module:modtestbed +tb_alb src/modtestbed.f90 /^ real, dimension(:) , allocatable :: tb_time, tb_ps, tb_qts, tb_thls, tb_wqs, tb_wts, tb_z0h, tb_z0m, tb_alb,/;" v module:modtestbed +tb_dqtdxls src/modtestbed.f90 /^ real, dimension(:,:), allocatable :: tnudge,tb_u,tb_v,tb_w,tb_thl,tb_qt,tb_ug,tb_vg, &$/;" v module:modtestbed +tb_dqtdyls src/modtestbed.f90 /^ tb_dqtdxls,tb_dqtdyls,/;" v module:modtestbed +tb_phiwav src/modtestbed.f90 /^ tb_tsoilav,tb_phiwav,/;" v module:modtestbed +tb_ps src/modtestbed.f90 /^ real, dimension(:) , allocatable :: tb_time, tb_ps,/;" v module:modtestbed +tb_qt src/modtestbed.f90 /^ real, dimension(:,:), allocatable :: tnudge,tb_u,tb_v,tb_w,tb_thl,tb_qt,/;" v module:modtestbed +tb_qtadv src/modtestbed.f90 /^ tb_dqtdxls,tb_dqtdyls, &$/;" v module:modtestbed +tb_qts src/modtestbed.f90 /^ real, dimension(:) , allocatable :: tb_time, tb_ps, tb_qts,/;" v module:modtestbed +tb_taunudge src/modtestbed.f90 /^ real :: tb_taunudge /;" v module:modtestbed +tb_thl src/modtestbed.f90 /^ real, dimension(:,:), allocatable :: tnudge,tb_u,tb_v,tb_w,tb_thl,/;" v module:modtestbed +tb_thladv src/modtestbed.f90 /^ tb_qtadv,tb_thladv,/;" v module:modtestbed +tb_thls src/modtestbed.f90 /^ real, dimension(:) , allocatable :: tb_time, tb_ps, tb_qts, tb_thls,/;" v module:modtestbed +tb_time src/modtestbed.f90 /^ real, dimension(:) , allocatable :: tb_time,/;" v module:modtestbed +tb_tsoilav src/modtestbed.f90 /^ tb_qtadv,tb_thladv,tb_uadv,tb_vadv, &$/;" v module:modtestbed +tb_u src/modtestbed.f90 /^ real, dimension(:,:), allocatable :: tnudge,tb_u,/;" v module:modtestbed +tb_uadv src/modtestbed.f90 /^ tb_qtadv,tb_thladv,tb_uadv,/;" v module:modtestbed +tb_ug src/modtestbed.f90 /^ real, dimension(:,:), allocatable :: tnudge,tb_u,tb_v,tb_w,tb_thl,tb_qt,tb_ug,/;" v module:modtestbed +tb_v src/modtestbed.f90 /^ real, dimension(:,:), allocatable :: tnudge,tb_u,tb_v,/;" v module:modtestbed +tb_vadv src/modtestbed.f90 /^ tb_qtadv,tb_thladv,tb_uadv,tb_vadv,/;" v module:modtestbed +tb_vg src/modtestbed.f90 /^ real, dimension(:,:), allocatable :: tnudge,tb_u,tb_v,tb_w,tb_thl,tb_qt,tb_ug,tb_vg,/;" v module:modtestbed +tb_w src/modtestbed.f90 /^ real, dimension(:,:), allocatable :: tnudge,tb_u,tb_v,tb_w,/;" v module:modtestbed +tb_wqs src/modtestbed.f90 /^ real, dimension(:) , allocatable :: tb_time, tb_ps, tb_qts, tb_thls, tb_wqs,/;" v module:modtestbed +tb_wts src/modtestbed.f90 /^ real, dimension(:) , allocatable :: tb_time, tb_ps, tb_qts, tb_thls, tb_wqs, tb_wts,/;" v module:modtestbed +tb_z0h src/modtestbed.f90 /^ real, dimension(:) , allocatable :: tb_time, tb_ps, tb_qts, tb_thls, tb_wqs, tb_wts, tb_z0h,/;" v module:modtestbed +tb_z0m src/modtestbed.f90 /^ real, dimension(:) , allocatable :: tb_time, tb_ps, tb_qts, tb_thls, tb_wqs, tb_wts, tb_z0h, tb_z0m,/;" v module:modtestbed tbase src/modradfull.f90 /^ real :: mweight, default_conc, tbase$/;" k type:ckd_properties tblint src/rrlw_tbl.f90 /^ real(kind=rb), parameter :: tblint /;" v module:rrlw_tbl tblint src/rrsw_tbl.f90 /^ real(kind=rb), parameter :: tblint /;" v module:rrsw_tbl +tbrad_o3 src/modtestbed.f90 /^ tbrad_p, tbrad_t, tbrad_qv, tbrad_ql, tbrad_o3$/;" v module:modtestbed +tbrad_p src/modtestbed.f90 /^ tb_tsoilav,tb_phiwav, &$/;" v module:modtestbed +tbrad_ql src/modtestbed.f90 /^ tbrad_p, tbrad_t, tbrad_qv, tbrad_ql,/;" v module:modtestbed +tbrad_qv src/modtestbed.f90 /^ tbrad_p, tbrad_t, tbrad_qv,/;" v module:modtestbed +tbrad_t src/modtestbed.f90 /^ tbrad_p, tbrad_t,/;" v module:modtestbed tbuo src/addon/modstress.f90 /^ real, allocatable, dimension (:,:,:) :: tbuo /;" v module:modstress -tcheck src/addon/modchecksim.f90 /^ real :: tcheck /;" v module:modchecksim tcheck src/modchecksim.f90 /^ real :: tcheck /;" v module:modchecksim tcor src/addon/modstress.f90 /^ real, allocatable, dimension (:,:,:) :: tcor /;" v module:modstress tderive src/modpois.f90 /^ subroutine tderive$/;" s module:modpois @@ -3565,40 +3085,28 @@ tdnsg src/modmicrodata.f90 /^ ,tdnsg=/;" v module:modmicrodata temp_b src/modradfull.f90 /^ real, allocatable :: temp_b(/;" v module:modradfull temper src/rad_rndnmb.f90 /^ function temper(/;" f module:RandomNumbers tempskin src/modradfull.f90 /^ real, allocatable :: tempskin(/;" v module:modradfull -tend_addon src/addon/modstattend.f90 /^ tend_rad=5,tend_ls=6,tend_micro=7, tend_topbound=8,tend_pois=9,tend_addon=/;" v module:modstattend tend_addon src/modsamptend.f90 /^ tend_ls=6,tend_micro=7, tend_topbound=8,tend_pois=9,tend_addon=/;" v module:modsamptend tend_addon src/modstattend.f90 /^ tend_rad=5,tend_ls=6,tend_micro=7, tend_topbound=8,tend_pois=9,tend_addon=/;" v module:modstattend -tend_adv src/addon/modstattend.f90 /^ integer,parameter :: tend_tot=1,tend_start=1,tend_adv=/;" v module:modstattend tend_adv src/modsamptend.f90 /^ integer,public,parameter :: tend_tot=1,tend_start=1,tend_adv=/;" v module:modsamptend tend_adv src/modstattend.f90 /^ integer,parameter :: tend_tot=1,tend_start=1,tend_adv=/;" v module:modstattend -tend_coriolis src/addon/modstattend.f90 /^ tend_rad=5,tend_ls=6,tend_micro=7, tend_topbound=8,tend_pois=9,tend_addon=10, tend_coriolis=/;" v module:modstattend tend_coriolis src/modsamptend.f90 /^ tend_ls=6,tend_micro=7, tend_topbound=8,tend_pois=9,tend_addon=10, tend_coriolis=/;" v module:modsamptend tend_coriolis src/modstattend.f90 /^ tend_rad=5,tend_ls=6,tend_micro=7, tend_topbound=8,tend_pois=9,tend_addon=10, tend_coriolis=/;" v module:modstattend -tend_force src/addon/modstattend.f90 /^ integer,parameter :: tend_tot=1,tend_start=1,tend_adv=2,tend_subg=3,tend_force=/;" v module:modstattend tend_force src/modsamptend.f90 /^ integer,public,parameter :: tend_tot=1,tend_start=1,tend_adv=2,tend_subg=3,tend_force=/;" v module:modsamptend tend_force src/modstattend.f90 /^ integer,parameter :: tend_tot=1,tend_start=1,tend_adv=2,tend_subg=3,tend_force=/;" v module:modstattend -tend_ls src/addon/modstattend.f90 /^ tend_rad=5,tend_ls=/;" v module:modstattend tend_ls src/modsamptend.f90 /^ integer,public,parameter :: tend_tot=1,tend_start=1,tend_adv=2,tend_subg=3,tend_force=4,tend_rad=5,&$/;" v module:modsamptend tend_ls src/modstattend.f90 /^ tend_rad=5,tend_ls=/;" v module:modstattend -tend_micro src/addon/modstattend.f90 /^ tend_rad=5,tend_ls=6,tend_micro=/;" v module:modstattend tend_micro src/modsamptend.f90 /^ tend_ls=6,tend_micro=/;" v module:modsamptend tend_micro src/modstattend.f90 /^ tend_rad=5,tend_ls=6,tend_micro=/;" v module:modstattend -tend_pois src/addon/modstattend.f90 /^ tend_rad=5,tend_ls=6,tend_micro=7, tend_topbound=8,tend_pois=/;" v module:modstattend tend_pois src/modsamptend.f90 /^ tend_ls=6,tend_micro=7, tend_topbound=8,tend_pois=/;" v module:modsamptend tend_pois src/modstattend.f90 /^ tend_rad=5,tend_ls=6,tend_micro=7, tend_topbound=8,tend_pois=/;" v module:modstattend -tend_rad src/addon/modstattend.f90 /^ integer,parameter :: tend_tot=1,tend_start=1,tend_adv=2,tend_subg=3,tend_force=4,&$/;" v module:modstattend tend_rad src/modsamptend.f90 /^ integer,public,parameter :: tend_tot=1,tend_start=1,tend_adv=2,tend_subg=3,tend_force=4,tend_rad=/;" v module:modsamptend tend_rad src/modstattend.f90 /^ integer,parameter :: tend_tot=1,tend_start=1,tend_adv=2,tend_subg=3,tend_force=4,&$/;" v module:modstattend -tend_start src/addon/modstattend.f90 /^ integer,parameter :: tend_tot=1,tend_start=/;" v module:modstattend tend_start src/modsamptend.f90 /^ integer,public,parameter :: tend_tot=1,tend_start=/;" v module:modsamptend tend_start src/modstattend.f90 /^ integer,parameter :: tend_tot=1,tend_start=/;" v module:modstattend -tend_subg src/addon/modstattend.f90 /^ integer,parameter :: tend_tot=1,tend_start=1,tend_adv=2,tend_subg=/;" v module:modstattend tend_subg src/modsamptend.f90 /^ integer,public,parameter :: tend_tot=1,tend_start=1,tend_adv=2,tend_subg=/;" v module:modsamptend tend_subg src/modstattend.f90 /^ integer,parameter :: tend_tot=1,tend_start=1,tend_adv=2,tend_subg=/;" v module:modstattend -tend_topbound src/addon/modstattend.f90 /^ tend_rad=5,tend_ls=6,tend_micro=7, tend_topbound=/;" v module:modstattend tend_topbound src/modsamptend.f90 /^ tend_ls=6,tend_micro=7, tend_topbound=/;" v module:modsamptend tend_topbound src/modstattend.f90 /^ tend_rad=5,tend_ls=6,tend_micro=7, tend_topbound=/;" v module:modstattend -tend_tot src/addon/modstattend.f90 /^ integer,parameter :: tend_tot=/;" v module:modstattend tend_tot src/modsamptend.f90 /^ integer,public,parameter :: tend_tot=/;" v module:modsamptend tend_tot src/modstattend.f90 /^ integer,parameter :: tend_tot=/;" v module:modstattend tend_totlb src/modsamptend.f90 /^ tend_ls=6,tend_micro=7, tend_topbound=8,tend_pois=9,tend_addon=10, tend_coriolis=11, tend_totlb=/;" v module:modsamptend @@ -3606,12 +3114,13 @@ tendmask src/modsamptend.f90 /^ logical, allocatable :: tendmask(/;" v module:m tendskin src/modsurfdata.f90 /^ real, allocatable :: tendskin /;" v module:modsurfdata tendskin_patch src/modtimestat.f90 /^ real,allocatable, dimension(:,:) :: Qnet_patch, H_patch, LE_patch, G0_patch, tendskin_patch,/;" v module:modtimestat tendskinid src/addon/modnetcdfmovie.f90 /^ integer :: Hid, LEid, G0id, tendskinid,/;" v module:modnetcdfmovie +testbed_getinttime src/modtestbed.f90 /^ subroutine testbed_getinttime(/;" s module:modtestbed +testbednudge src/modtestbed.f90 /^ subroutine testbednudge$/;" s module:modtestbed +testwctime src/modstartup.f90 /^ subroutine testwctime$/;" s module:modstartup tfn_tbl src/rrlw_tbl.f90 /^ real(kind=rb) , dimension(0:ntbl) :: tfn_tbl$/;" v module:rrlw_tbl tg_slice src/modraddata.f90 /^ real,allocatable,dimension(:) :: tg_slice /;" v module:modraddata -th0av src/addon/modgenstat.f90 /^ real, allocatable :: th0av(/;" v module:modgenstat th0av src/modgenstat.f90 /^ real, allocatable :: th0av(/;" v module:modgenstat th0av src/modthermodynamics.f90 /^ real, allocatable :: th0av(/;" v module:modthermodynamics -th2mn src/addon/modgenstat.f90 /^ real, allocatable :: thl2mn (:), thv2mn(:), th2mn(/;" v module:modgenstat th2mn src/modgenstat.f90 /^ real, allocatable :: thl2mn (:), thv2mn(:), th2mn(/;" v module:modgenstat thermo src/modthermodynamics.f90 /^ subroutine thermo /;" s module:modthermodynamics thermodynamics src/modthermodynamics.f90 /^ subroutine thermodynamics$/;" s module:modthermodynamics @@ -3620,11 +3129,9 @@ thicks src/modradfull.f90 /^ subroutine thicks(/;" s module:modradfull thl0 src/modfields.f90 /^ real, allocatable :: thl0(/;" v module:modfields thl0av src/modfields.f90 /^ real, allocatable :: thl0av(/;" v module:modfields thl0h src/modfields.f90 /^ real, allocatable :: thl0h(/;" v module:modfields -thl2mn src/addon/modgenstat.f90 /^ real, allocatable :: thl2mn /;" v module:modgenstat thl2mn src/modgenstat.f90 /^ real, allocatable :: thl2mn /;" v module:modgenstat thla src/addon/modtilt.f90 /^ real, allocatable :: thla(/;" v module:modtilt thlaav src/addon/modtilt.f90 /^ real, allocatable :: thlaav(/;" v module:modtilt -thlavgid src/addon/modheterostats.f90 /^ integer :: uavgid, vavgid, wavgid, thlavgid,/;" v module:modheterostats thlavgid src/addon/modnetcdfstats.f90 /^ integer :: uavgid, vavgid, wavgid, thlavgid,/;" v module:modnetcdfstats thlavgid src/modheterostats.f90 /^ integer :: uavgid, vavgid, wavgid, thlavgid,/;" v module:modheterostats thlavl src/modquadrant.f90 /^ real, allocatable, dimension(:,:) :: uavl,vavl,wavl,utotavl,thlavl,/;" v module:modquadrant @@ -3641,28 +3148,22 @@ thlidmovie src/addon/modnetcdfstats.f90 /^ integer :: uidmovie, vidmovie, widmo thllwtendav src/modradstat.f90 /^ real, allocatable :: thllwtendav(/;" v module:modradstat thllwtendmn src/modradstat.f90 /^ real, allocatable :: thllwtendmn(/;" v module:modradstat thlm src/modfields.f90 /^ real, allocatable :: thlm(/;" v module:modfields -thlmav src/addon/modgenstat.f90 /^ real, allocatable :: thlmav /;" v module:modgenstat thlmav src/modgenstat.f90 /^ real, allocatable :: thlmav /;" v module:modgenstat -thlmn src/addon/modgenstat.f90 /^ real, allocatable :: thlmn /;" v module:modgenstat thlmn src/modgenstat.f90 /^ real, allocatable :: thlmn /;" v module:modgenstat -thlnudge src/addon/modnudge.f90 /^ real, dimension(:,:), allocatable :: tnudge,unudge,vnudge,wnudge,thlnudge,/;" v module:modnudge thlnudge src/modnudge.f90 /^ real, dimension(:,:), allocatable :: tnudge,unudge,vnudge,wnudge,thlnudge,/;" v module:modnudge thlp src/modfields.f90 /^ real, allocatable :: thlp(/;" v module:modfields -thlpav src/addon/modstattend.f90 /^ real, allocatable :: upav(:,:),vpav(:,:),wpav(:,:),thlpav(/;" v module:modstattend thlpav src/modsamptend.f90 /^ real, allocatable :: upav(:,:,:),vpav(:,:,:),wpav(:,:,:),thlpav(/;" v module:modsamptend thlpav src/modstattend.f90 /^ real, allocatable :: upav(:,:),vpav(:,:),wpav(:,:),thlpav(/;" v module:modstattend thlpcar src/modfields.f90 /^ real, allocatable :: thlpcar(/;" v module:modfields thlpcart src/modtimedep.f90 /^ real, allocatable :: thlpcart(/;" v module:modtimedep thlpmcr src/addon/modbulkmicrodata.f90 /^ real,allocatable,dimension(:,:,:) :: Nr,Nrp,qltot,qr,qrp,thlpmcr,/;" v module:modbulkmicrodata thlpmcr src/modmicrodata.f90 /^ real,allocatable,dimension(:,:,:) :: Nr,Nrp,qltot,qr,qrp,thlpmcr,/;" v module:modmicrodata -thlpmn src/addon/modstattend.f90 /^ real, allocatable :: upmn(:,:),vpmn(:,:),wpmn(:,:),thlpmn(/;" v module:modstattend thlpmn src/modsamptend.f90 /^ real, allocatable :: upmn(:,:,:),vpmn(:,:,:),wpmn(:,:,:),thlpmn(/;" v module:modsamptend thlpmn src/modstattend.f90 /^ real, allocatable :: upmn(:,:),vpmn(:,:),wpmn(:,:),thlpmn(/;" v module:modstattend thlprad src/modraddata.f90 /^ real, allocatable :: thlprad(/;" v module:modraddata thlprof src/modfields.f90 /^ real, allocatable :: thlprof(/;" v module:modfields thlproft src/modtimedep.f90 /^ real, allocatable :: thlproft(/;" v module:modtimedep thlptm src/modsamptend.f90 /^ real, allocatable :: uptm(:,:,:),vptm(:,:,:),wptm(:,:,:),thlptm(/;" v module:modsamptend -thlqcovid src/addon/modheterostats.f90 /^ integer :: thlqcovid$/;" v module:modheterostats thlqcovid src/addon/modnetcdfstats.f90 /^ integer :: thlqcovid$/;" v module:modnetcdfstats thlqcovid src/modheterostats.f90 /^ integer :: thlqcovid$/;" v module:modheterostats thlqtcovl src/modquadrant.f90 /^ real, allocatable, dimension(:,:) :: thlqtcovl$/;" v module:modquadrant @@ -3676,38 +3177,28 @@ thlswtendav src/modradstat.f90 /^ real, allocatable :: thlswtendav(/;" v module thlswtendmn src/modradstat.f90 /^ real, allocatable :: thlswtendmn(/;" v module:modradstat thltendav src/modradstat.f90 /^ real, allocatable :: thltendav(/;" v module:modradstat thltendmn src/modradstat.f90 /^ real, allocatable :: thltendmn(/;" v module:modradstat -thlvarid src/addon/modheterostats.f90 /^ integer :: uvarid, vvarid, wvarid, thlvarid,/;" v module:modheterostats thlvarid src/addon/modnetcdfstats.f90 /^ integer :: uvarid, vvarid, wvarid, thlvarid,/;" v module:modnetcdfstats thlvarid src/modheterostats.f90 /^ integer :: uvarid, vvarid, wvarid, thlvarid,/;" v module:modheterostats thlvarl src/modquadrant.f90 /^ real, allocatable, dimension(:,:) :: uvarl,vvarl,wvarl,utotvarl,thlvarl,/;" v module:modquadrant -thmav src/addon/modgenstat.f90 /^ real, allocatable :: thmav /;" v module:modgenstat thmav src/modgenstat.f90 /^ real, allocatable :: thmav /;" v module:modgenstat -thptav src/addon/modgenstat.f90 /^ real, allocatable :: thptav(/;" v module:modgenstat thptav src/modgenstat.f90 /^ real, allocatable :: thptav(/;" v module:modgenstat thres src/modglobal.f90 /^ real :: thres /;" v module:modglobal thv0 src/modthermodynamics.f90 /^ real, allocatable :: thv0(/;" v module:modthermodynamics thv0h src/modfields.f90 /^ real, allocatable :: thv0h(/;" v module:modfields -thv2mn src/addon/modgenstat.f90 /^ real, allocatable :: thl2mn (:), thv2mn(/;" v module:modgenstat thv2mn src/modgenstat.f90 /^ real, allocatable :: thl2mn (:), thv2mn(/;" v module:modgenstat -thvavgid src/addon/modheterostats.f90 /^ integer :: uavgid, vavgid, wavgid, thlavgid, thvavgid,/;" v module:modheterostats thvavgid src/modheterostats.f90 /^ integer :: uavgid, vavgid, wavgid, thlavgid, thvavgid,/;" v module:modheterostats thvf src/modfields.f90 /^ real, allocatable :: thvf(/;" v module:modfields thvfavl src/modsampling.f90 /^ real, allocatable, dimension(:,:) :: wfavl,thlfavl,thvfavl,/;" v module:modsampling thvh src/modfields.f90 /^ real, allocatable :: thvh(/;" v module:modfields -thvhav src/addon/modgenstat.f90 /^ real, allocatable :: thvhav(/;" v module:modgenstat thvhav src/modgenstat.f90 /^ real, allocatable :: thvhav(/;" v module:modgenstat -thvhavl src/addon/modsampling.f90 /^ duwdxhavl,dtaudxhavl,dtaudzhavl,thvhavl,/;" v module:modsampling thvhavl src/modsampling.f90 /^ duwdxhavl,dtaudxhavl,dtaudzhavl,thvhavl,/;" v module:modsampling -thvmn src/addon/modgenstat.f90 /^ real, allocatable :: thlmn (:) ,thvmn /;" v module:modgenstat thvmn src/modgenstat.f90 /^ real, allocatable :: thlmn (:) ,thvmn /;" v module:modgenstat thvs src/modsurfdata.f90 /^ real :: thvs /;" v module:modsurfdata thvs_patch src/modsurfdata.f90 /^ real, allocatable :: thvs_patch(/;" v module:modsurfdata -thvvarid src/addon/modheterostats.f90 /^ integer :: uvarid, vvarid, wvarid, thlvarid, thvvarid,/;" v module:modheterostats thvvarid src/modheterostats.f90 /^ integer :: uvarid, vvarid, wvarid, thlvarid, thvvarid,/;" v module:modheterostats -tid src/addon/modheterostats.f90 /^ integer :: xid, yid, zid, tid /;" v module:modheterostats tid src/addon/modnetcdfmovie.f90 /^ integer :: xid, yid, zid, tid$/;" v module:modnetcdfmovie tid src/addon/modnetcdfstats.f90 /^ integer :: xid, yid, zid, tid$/;" v module:modnetcdfstats -tid src/modheterostats.f90 /^ integer :: xid, yid, zid, tid /;" v module:modheterostats +tid src/modheterostats.f90 /^ integer :: xid, yid, zid, tid$/;" v module:modheterostats tidfieldqt src/addon/modnetcdfstats.f90 /^ integer :: xidfieldqt, yidfieldqt, zidfieldqt, tidfieldqt$/;" v module:modnetcdfstats tidfieldthl src/addon/modnetcdfstats.f90 /^ integer :: xidfieldthl, yidfieldthl, zidfieldthl, tidfieldthl$/;" v module:modnetcdfstats tidfieldu src/addon/modnetcdfstats.f90 /^ integer :: xidfieldu, yidfieldu, zidfieldu, tidfieldu$/;" v module:modnetcdfstats @@ -3717,16 +3208,8 @@ tidmovie src/addon/modnetcdfstats.f90 /^ integer :: xidmovie, yidmovie, zidmovi tiltedboundary src/addon/modtilt.f90 /^ subroutine tiltedboundary$/;" s module:modtilt tiltedgravity src/addon/modtilt.f90 /^ subroutine tiltedgravity$/;" s module:modtilt tiltstat src/addon/modtilt.f90 /^ subroutine tiltstat$/;" s module:modtilt -timeID src/addon/modstat_nc.f90 /^ integer, save :: timeID=/;" v module:modstat_nc -timeID src/addon/stat_nc_dummy.f90 /^ integer, save :: timeID=/;" v module:modstat_nc timeID src/modstat_nc.f90 /^ integer, save :: timeID=/;" v module:modstat_nc -timeav src/addon/modbudget.f90 /^ real :: dtav, timeav$/;" v module:modbudget -timeav src/addon/modbulkmicrostat.f90 /^ real :: dtav, timeav$/;" v module:modbulkmicrostat -timeav src/addon/modgenstat.f90 /^ real :: dtav, timeav$/;" v module:modgenstat timeav src/addon/modparticles.f90 /^ real :: timeav /;" v module:modparticles -timeav src/addon/modradstat.f90 /^ real :: dtav, timeav$/;" v module:modradstat -timeav src/addon/modsampling.f90 /^ real :: dtav, timeav$/;" v module:modsampling -timeav src/addon/modstattend.f90 /^ real :: dtav, timeav$/;" v module:modstattend timeav src/addon/modstress.f90 /^ real :: dtav, timeav$/;" v module:modstress timeav src/addon/modtilt.f90 /^ real :: dtav, timeav$/;" v module:modtilt timeav src/modbudget.f90 /^ real :: dtav, timeav$/;" v module:modbudget @@ -3751,39 +3234,22 @@ timeflux src/modtimedep.f90 /^ real, allocatable :: timeflux /;" v module:m timekessl src/modmicrodata.f90 /^ ,timekessl=/;" v module:modmicrodata timeleft src/modglobal.f90 /^ integer(kind=longint) :: timeleft$/;" v module:modglobal timels src/modtimedep.f90 /^ real, allocatable :: timels /;" v module:modtimedep -timenudge src/addon/modnudge.f90 /^ real, dimension(:) , allocatable :: timenudge$/;" v module:modnudge timenudge src/modnudge.f90 /^ real, dimension(:) , allocatable :: timenudge$/;" v module:modnudge timerad src/modraddata.f90 /^ real :: timerad /;" v module:modraddata -timestat src/addon/modtimestat.f90 /^ subroutine timestat$/;" s module:modtimestat timestat src/modtimestat.f90 /^ subroutine timestat$/;" s module:modtimestat timesvsurf src/modtimedepsv.f90 /^ real, allocatable :: timesvsurf /;" v module:modtimedepsv timesvz src/modtimedepsv.f90 /^ real, allocatable :: timesvz /;" v module:modtimedepsv -tke_tot src/addon/modtimestat.f90 /^ real :: qlintav, qlintmax, tke_tot$/;" v module:modtimestat tke_tot src/modtimestat.f90 /^ real :: qlintav, qlintmax, tke_tot$/;" v module:modtimestat tke_tot_field src/modtimestat.f90 /^ real,allocatable, dimension(:,:) :: zbase_field, ztop_field, cc_field, qlint_field, tke_tot_field$/;" v module:modtimestat tke_tot_patch src/modtimestat.f90 /^ real,allocatable, dimension(:,:) :: cc_patch, qlint_patch, qlintmax_patch, qlintmax_patchl, tke_tot_patch$/;" v module:modtimestat -tkeav src/addon/modbudget.f90 /^ real, allocatable :: tkeav(/;" v module:modbudget tkeav src/modbudget.f90 /^ real, allocatable :: tkeav(/;" v module:modbudget -tkeb src/addon/modbudget.f90 /^ real, allocatable :: tkeb(/;" v module:modbudget tkeb src/modbudget.f90 /^ real, allocatable :: tkeb(/;" v module:modbudget -tkemn src/addon/modbudget.f90 /^ real, allocatable :: tkemn(/;" v module:modbudget tkemn src/modbudget.f90 /^ real, allocatable :: tkemn(/;" v module:modbudget -tlavl src/addon/modsampling.f90 /^ real, allocatable, dimension(:,:) :: wavl,tlavl,/;" v module:modsampling -tllwtendav src/addon/modradstat.f90 /^ real, allocatable :: tllwtendav(/;" v module:modradstat -tllwtendmn src/addon/modradstat.f90 /^ real, allocatable :: tllwtendmn(/;" v module:modradstat -tlradlsmn src/addon/modradstat.f90 /^ real, allocatable :: tlradlsmn(/;" v module:modradstat -tlswtendav src/addon/modradstat.f90 /^ real, allocatable :: tlswtendav(/;" v module:modradstat -tlswtendmn src/addon/modradstat.f90 /^ real, allocatable :: tlswtendmn(/;" v module:modradstat -tltendav src/addon/modradstat.f90 /^ real, allocatable :: tltendav(/;" v module:modradstat -tltendmn src/addon/modradstat.f90 /^ real, allocatable :: tltendmn(/;" v module:modradstat +tmax src/modfielddump.f90 /^ real :: dtav, tmin, tmax$/;" v module:modfielddump tmelt src/modglobal.f90 /^ real,parameter :: tmelt /;" v module:modglobal tmelt src/modraddata.f90 /^ real, parameter :: tmelt /;" v module:modraddata +tmin src/modfielddump.f90 /^ real :: dtav, tmin,/;" v module:modfielddump tmp0 src/modfields.f90 /^ real, allocatable :: tmp0(/;" v module:modfields -tncname src/addon/modbudget.f90 /^ character(80),dimension(1,4) :: tncname$/;" v module:modbudget -tncname src/addon/modbulkmicrostat.f90 /^ character(80),dimension(1,4) :: tncname$/;" v module:modbulkmicrostat -tncname src/addon/modfielddump.f90 /^ character(80),dimension(1,4) :: tncname$/;" v module:modfielddump -tncname src/addon/modgenstat.f90 /^ character(80),dimension(1,4) :: tncname$/;" v module:modgenstat -tncname src/addon/modstattend.f90 /^ character(80),dimension(1,4) :: tncname$/;" v module:modstattend tncname src/modbulkmicrostat.f90 /^ character(80),dimension(1,4) :: tncname$/;" v module:modbulkmicrostat tncname src/modcape.f90 /^ character(80),dimension(1,4) :: tncname$/;" v module:modcape tncname src/modfielddump.f90 /^ character(80),dimension(1,4) :: tncname$/;" v module:modfielddump @@ -3794,34 +3260,18 @@ tncname src/modsampling.f90 /^ character(80),dimension(1,4) :: tncname$/;" v mo tncname src/modsamptend.f90 /^ character(80),dimension(1,4) :: tncname$/;" v module:modsamptend tncname src/modsimpleicestat.f90 /^ character(80),dimension(1,4) :: tncname$/;" v module:modsimpleicestat tncname src/modstattend.f90 /^ character(80),dimension(1,4) :: tncname$/;" v module:modstattend -tncname1 src/addon/modcrosssection.f90 /^ character(80),dimension(1,4) :: tncname1$/;" v module:modcrosssection tncname1 src/modcrosssection.f90 /^ character(80),dimension(1,4) :: tncname1$/;" v module:modcrosssection tncname1 src/modlsmcrosssection.f90 /^ character(80),dimension(1,4) :: tncname1$/;" v module:modlsmcrosssection -tncname2 src/addon/modcrosssection.f90 /^ character(80),dimension(1,4) :: tncname2$/;" v module:modcrosssection tncname2 src/modcrosssection.f90 /^ character(80),dimension(1,4) :: tncname2$/;" v module:modcrosssection tncname2 src/modlsmcrosssection.f90 /^ character(80),dimension(1,4) :: tncname2$/;" v module:modlsmcrosssection -tncname3 src/addon/modcrosssection.f90 /^ character(80),dimension(1,4) :: tncname3$/;" v module:modcrosssection tncname3 src/modcrosssection.f90 /^ character(80),dimension(1,4) :: tncname3$/;" v module:modcrosssection tncname3 src/modlsmcrosssection.f90 /^ character(80),dimension(1,4) :: tncname3$/;" v module:modlsmcrosssection tncnameAGS src/modAGScross.f90 /^ character(80),dimension(1,4) :: tncnameAGS$/;" v module:modAGScross -tnext src/addon/modbudget.f90 /^ integer(kind=longint) :: idtav, itimeav,tnext,/;" v module:modbudget -tnext src/addon/modbulkmicrostat.f90 /^ integer(kind=longint):: idtav, itimeav, tnext,/;" v module:modbulkmicrostat -tnext src/addon/modchecksim.f90 /^ integer(kind=longint) :: tnext /;" v module:modchecksim -tnext src/addon/modcloudfield.f90 /^ integer(kind=longint) :: idtav,tnext$/;" v module:modcloudfield -tnext src/addon/modcrosssection.f90 /^ integer(kind=longint) :: idtav,tnext$/;" v module:modcrosssection -tnext src/addon/modfielddump.f90 /^ integer(kind=longint) :: idtav,tnext$/;" v module:modfielddump -tnext src/addon/modgenstat.f90 /^ integer(kind=longint) :: idtav,itimeav,tnext,/;" v module:modgenstat -tnext src/addon/modheterostats.f90 /^ integer(kind=longint):: idtav,tnext$/;" v module:modheterostats tnext src/addon/modnetcdfmovie.f90 /^ real :: tnext$/;" v module:modnetcdfmovie tnext src/addon/modnetcdfstats.f90 /^ real :: dtav,tnext$/;" v module:modnetcdfstats tnext src/addon/modparticles.f90 /^ integer(kind=longint) :: itimeav,idtav,itimedump,tnext,/;" v module:modparticles -tnext src/addon/modprojection.f90 /^ integer(kind=longint) :: idtav,tnext$/;" v module:modprojection -tnext src/addon/modradstat.f90 /^ integer(kind=longint) :: idtav,itimeav,tnext,/;" v module:modradstat -tnext src/addon/modsampling.f90 /^ integer(kind=longint) :: idtav,itimeav,tnext,/;" v module:modsampling -tnext src/addon/modstattend.f90 /^ integer(kind=longint) :: idtav,itimeav,tnext,/;" v module:modstattend tnext src/addon/modstress.f90 /^ integer(kind=longint) :: idtav, itimeav,tnext,/;" v module:modstress tnext src/addon/modtilt.f90 /^ integer(kind=longint) :: idtav,itimeav,tnext,/;" v module:modtilt -tnext src/addon/modtimestat.f90 /^ integer(kind=longint) :: idtav,tnext$/;" v module:modtimestat tnext src/modAGScross.f90 /^ integer(kind=longint) :: idtav,tnext$/;" v module:modAGScross tnext src/modbudget.f90 /^ integer(kind=longint) :: idtav, itimeav,tnext,/;" v module:modbudget tnext src/modbulkmicrostat.f90 /^ integer(kind=longint):: idtav, itimeav, tnext,/;" v module:modbulkmicrostat @@ -3829,7 +3279,7 @@ tnext src/modcape.f90 /^ integer(kind=longint) :: idtav,tnext$/;" v module:modc tnext src/modchecksim.f90 /^ integer(kind=longint) :: tnext /;" v module:modchecksim tnext src/modcloudfield.f90 /^ integer(kind=longint) :: idtav,tnext$/;" v module:modcloudfield tnext src/modcrosssection.f90 /^ integer(kind=longint) :: idtav,tnext$/;" v module:modcrosssection -tnext src/modfielddump.f90 /^ integer(kind=longint) :: idtav,tnext$/;" v module:modfielddump +tnext src/modfielddump.f90 /^ integer(kind=longint) :: idtav,tnext,/;" v module:modfielddump tnext src/modgenstat.f90 /^ integer(kind=longint) :: idtav,itimeav,tnext,/;" v module:modgenstat tnext src/modheterostats.f90 /^ integer(kind=longint):: idtav,tnext$/;" v module:modheterostats tnext src/modlsmcrosssection.f90 /^ integer(kind=longint) :: idtav,tnext$/;" v module:modlsmcrosssection @@ -3845,14 +3295,7 @@ tnext src/modstattend.f90 /^ integer(kind=longint) :: idtav,itimeav,tnext,/;" v tnext src/modtimestat.f90 /^ integer(kind=longint) :: idtav,tnext$/;" v module:modtimestat tnextdump src/addon/modparticles.f90 /^ integer(kind=longint) :: itimeav,idtav,itimedump,tnext,tnextwrite,tnextdump$/;" v module:modparticles tnextrestart src/modglobal.f90 /^ integer(kind=longint) :: tnextrestart /;" v module:modglobal -tnextwrite src/addon/modbudget.f90 /^ integer(kind=longint) :: idtav, itimeav,tnext,tnextwrite$/;" v module:modbudget -tnextwrite src/addon/modbulkmicrostat.f90 /^ integer(kind=longint):: idtav, itimeav, tnext, tnextwrite$/;" v module:modbulkmicrostat -tnextwrite src/addon/modchem.f90 /^ integer(kind=longint) :: itimeav,tnextwrite,/;" v module:modchem -tnextwrite src/addon/modgenstat.f90 /^ integer(kind=longint) :: idtav,itimeav,tnext,tnextwrite$/;" v module:modgenstat tnextwrite src/addon/modparticles.f90 /^ integer(kind=longint) :: itimeav,idtav,itimedump,tnext,tnextwrite,/;" v module:modparticles -tnextwrite src/addon/modradstat.f90 /^ integer(kind=longint) :: idtav,itimeav,tnext,tnextwrite$/;" v module:modradstat -tnextwrite src/addon/modsampling.f90 /^ integer(kind=longint) :: idtav,itimeav,tnext,tnextwrite$/;" v module:modsampling -tnextwrite src/addon/modstattend.f90 /^ integer(kind=longint) :: idtav,itimeav,tnext,tnextwrite$/;" v module:modstattend tnextwrite src/addon/modstress.f90 /^ integer(kind=longint) :: idtav, itimeav,tnext,tnextwrite$/;" v module:modstress tnextwrite src/addon/modtilt.f90 /^ integer(kind=longint) :: idtav,itimeav,tnext,tnextwrite$/;" v module:modtilt tnextwrite src/modbudget.f90 /^ integer(kind=longint) :: idtav, itimeav,tnext,tnextwrite$/;" v module:modbudget @@ -3866,11 +3309,9 @@ tnextwrite src/modsampling.f90 /^ integer(kind=longint) :: idtav,itimeav,tnext, tnextwrite src/modsamptend.f90 /^ integer(kind=longint) :: idtav,itimeav,tnext,tnextwrite$/;" v module:modsamptend tnextwrite src/modsimpleicestat.f90 /^ integer(kind=longint):: idtav, itimeav, tnext, tnextwrite$/;" v module:modsimpleicestat tnextwrite src/modstattend.f90 /^ integer(kind=longint) :: idtav,itimeav,tnext,tnextwrite$/;" v module:modstattend -tnor src/addon/modchem.f90 /^ integer tnor,/;" v module:modchem tnor src/modchem.f90 /^ integer tnor,/;" v module:modchem -tnudge src/addon/modnudge.f90 /^ real, dimension(:,:), allocatable :: tnudge,/;" v module:modnudge tnudge src/modnudge.f90 /^ real, dimension(:,:), allocatable :: tnudge,/;" v module:modnudge -tnudgefac src/addon/modnudge.f90 /^ real :: tnudgefac /;" v module:modnudge +tnudge src/modtestbed.f90 /^ real, dimension(:,:), allocatable :: tnudge,/;" v module:modtestbed tnudgefac src/modnudge.f90 /^ real :: tnudgefac /;" v module:modnudge toph src/modboundary.f90 /^ subroutine toph$/;" s module:modboundary topm src/modboundary.f90 /^ subroutine topm$/;" s module:modboundary @@ -3886,7 +3327,6 @@ tref src/rrlw_ref.f90 /^ real(kind=rb) , dimension(59) :: tref$/;" v module tref src/rrsw_ref.f90 /^ real(kind=rb) , dimension(59) :: tref$/;" v module:rrsw_ref tres src/modglobal.f90 /^ real :: tres /;" v module:modglobal trestart src/modglobal.f90 /^ real :: trestart /;" v module:modglobal -trspmn src/addon/modbudget.f90 /^ real, allocatable :: trspmn(/;" v module:modbudget trspmn src/modbudget.f90 /^ real, allocatable :: trspmn(/;" v module:modbudget tsc src/modboundary.f90 /^ real,allocatable :: tsc(/;" v module:modboundary tshr src/addon/modstress.f90 /^ real, allocatable, dimension (:,:,:) :: tshr /;" v module:modstress @@ -3916,20 +3356,15 @@ tttr src/addon/modstress.f90 /^ real, allocatable, dimension (:,:,:) :: tttr /; tup src/modglobal.f90 /^ real,parameter :: tup /;" v module:modglobal tuprsg src/modmicrodata.f90 /^ ,tuprsg=/;" v module:modmicrodata tupsg src/modmicrodata.f90 /^ ,tupsg=/;" v module:modmicrodata -tvavl src/addon/modsampling.f90 /^ real, allocatable, dimension(:,:) :: wavl,tlavl,tvavl,/;" v module:modsampling twist src/rad_rndnmb.f90 /^ elemental function twist(/;" f module:RandomNumbers -twostep src/addon/modchem.f90 /^SUBROUTINE twostep(/;" s module:modchem twostep src/modchem.f90 /^SUBROUTINE twostep(/;" s module:modchem -twostep2 src/addon/modchem.f90 /^SUBROUTINE twostep2(/;" s module:modchem twostep2 src/modchem.f90 /^SUBROUTINE twostep2(/;" s module:modchem u src/modradfull.f90 /^ real, parameter :: u(/;" v module:modradfull u0 src/modfields.f90 /^ real, allocatable :: u0(/;" v module:modfields u0 src/modradfull.f90 /^ real :: ee, u0$/;" v module:modradfull u0av src/modfields.f90 /^ real, allocatable :: u0av(/;" v module:modfields u0av_patch src/modtimestat.f90 /^ real, allocatable :: u0av_patch /;" v module:modtimestat -u2mn src/addon/modgenstat.f90 /^ real, allocatable :: u2mn /;" v module:modgenstat u2mn src/modgenstat.f90 /^ real, allocatable :: u2mn /;" v module:modgenstat -uavgid src/addon/modheterostats.f90 /^ integer :: uavgid,/;" v module:modheterostats uavgid src/addon/modnetcdfstats.f90 /^ integer :: uavgid,/;" v module:modnetcdfstats uavgid src/modheterostats.f90 /^ integer :: uavgid,/;" v module:modheterostats uavl src/modquadrant.f90 /^ real, allocatable, dimension(:,:) :: uavl,/;" v module:modquadrant @@ -3939,27 +3374,19 @@ uid src/addon/modnetcdfmovie.f90 /^ integer :: uid,/;" v module:modnetcdfmovie uidfield src/addon/modnetcdfstats.f90 /^ integer :: uidfield,/;" v module:modnetcdfstats uidmovie src/addon/modnetcdfstats.f90 /^ integer :: uidmovie,/;" v module:modnetcdfstats um src/modfields.f90 /^ real, allocatable :: um(/;" v module:modfields -umav src/addon/modgenstat.f90 /^ real, allocatable :: umav /;" v module:modgenstat umav src/modgenstat.f90 /^ real, allocatable :: umav /;" v module:modgenstat -umn src/addon/modgenstat.f90 /^ real, allocatable :: umn /;" v module:modgenstat umn src/modgenstat.f90 /^ real, allocatable :: umn /;" v module:modgenstat unique src/addon/modparticles.f90 /^ real :: unique,/;" k type:particle_record -unudge src/addon/modnudge.f90 /^ real, dimension(:,:), allocatable :: tnudge,unudge,/;" v module:modnudge unudge src/modglobal.f90 /^ real :: unudge /;" v module:modglobal unudge src/modnudge.f90 /^ real, dimension(:,:), allocatable :: tnudge,unudge,/;" v module:modnudge up src/modfields.f90 /^ real, allocatable :: up(/;" v module:modfields -upav src/addon/modstattend.f90 /^ real, allocatable :: upav(/;" v module:modstattend upav src/modsamptend.f90 /^ real, allocatable :: upav(/;" v module:modsamptend upav src/modstattend.f90 /^ real, allocatable :: upav(/;" v module:modstattend -upmn src/addon/modstattend.f90 /^ real, allocatable :: upmn(/;" v module:modstattend upmn src/modsamptend.f90 /^ real, allocatable :: upmn(/;" v module:modsamptend upmn src/modstattend.f90 /^ real, allocatable :: upmn(/;" v module:modstattend uprof src/modfields.f90 /^ real, allocatable :: uprof(/;" v module:modfields -uptav src/addon/modgenstat.f90 /^ real, allocatable :: uptav(/;" v module:modgenstat uptav src/modgenstat.f90 /^ real, allocatable :: uptav(/;" v module:modgenstat uptm src/modsamptend.f90 /^ real, allocatable :: uptm(/;" v module:modsamptend -uqlcovid src/addon/modheterostats.f90 /^ integer :: uqlcovid,/;" v module:modheterostats -uqtcovid src/addon/modheterostats.f90 /^ integer :: uqtcovid,/;" v module:modheterostats uqtcovid src/addon/modnetcdfstats.f90 /^ integer :: uqtcovid,/;" v module:modnetcdfstats ures src/addon/modparticles.f90 /^ real :: x,x_prev, xstart, ures,/;" k type:particle_record useMcICA src/modraddata.f90 /^ logical :: useMcICA /;" v module:modraddata @@ -3972,44 +3399,28 @@ ustar src/modsurfdata.f90 /^ real, allocatable :: ustar /;" v module:modsurfdat ustin src/modsurfdata.f90 /^ real :: ustin /;" v module:modsurfdata ustin_land src/modsurfdata.f90 /^ real :: ustin_land(/;" v module:modsurfdata ustin_patch src/modsurfdata.f90 /^ real, allocatable :: ustin_patch(/;" v module:modsurfdata -usvcovid src/addon/modheterostats.f90 /^ integer, allocatable :: usvcovid(/;" v module:modheterostats usvcovid src/modheterostats.f90 /^ integer, allocatable :: usvcovid(/;" v module:modheterostats -uthlcovid src/addon/modheterostats.f90 /^ integer :: uthlcovid,/;" v module:modheterostats uthlcovid src/addon/modnetcdfstats.f90 /^ integer :: uthlcovid,/;" v module:modnetcdfstats -uthvcovid src/addon/modheterostats.f90 /^ integer :: uthvcovid,/;" v module:modheterostats utotavl src/modquadrant.f90 /^ real, allocatable, dimension(:,:) :: uavl,vavl,wavl,utotavl,/;" v module:modquadrant utotvarl src/modquadrant.f90 /^ real, allocatable, dimension(:,:) :: uvarl,vvarl,wvarl,utotvarl,/;" v module:modquadrant -uvarid src/addon/modheterostats.f90 /^ integer :: uvarid,/;" v module:modheterostats uvarid src/addon/modnetcdfstats.f90 /^ integer :: uvarid,/;" v module:modnetcdfstats uvarid src/modheterostats.f90 /^ integer :: uvarid,/;" v module:modheterostats uvarl src/modquadrant.f90 /^ real, allocatable, dimension(:,:) :: uvarl,/;" v module:modquadrant -uvcovid src/addon/modheterostats.f90 /^ integer :: uvcovid,/;" v module:modheterostats uvcovid src/addon/modnetcdfstats.f90 /^ integer :: uvcovid,/;" v module:modnetcdfstats -uwavl src/addon/modsampling.f90 /^ wtlavl,wtvavl,wqtavl,wqlavl,uwavl,/;" v module:modsampling -uwcovid src/addon/modheterostats.f90 /^ integer :: uvcovid, uwcovid,/;" v module:modheterostats uwcovid src/addon/modnetcdfstats.f90 /^ integer :: uvcovid, uwcovid,/;" v module:modnetcdfstats uwcovid src/modheterostats.f90 /^ integer :: uwcovid,/;" v module:modheterostats -uwcovsid src/addon/modheterostats.f90 /^ integer :: uwcovsid,/;" v module:modheterostats uwcovsid src/modheterostats.f90 /^ integer :: uwcovsid,/;" v module:modheterostats -uwres src/addon/modgenstat.f90 /^ real, allocatable :: uwres /;" v module:modgenstat uwres src/modgenstat.f90 /^ real, allocatable :: uwres /;" v module:modgenstat -uwrmn src/addon/modgenstat.f90 /^ real, allocatable :: uwrmn /;" v module:modgenstat uwrmn src/modgenstat.f90 /^ real, allocatable :: uwrmn /;" v module:modgenstat -uwsmn src/addon/modgenstat.f90 /^ real, allocatable :: uwsmn /;" v module:modgenstat uwsmn src/modgenstat.f90 /^ real, allocatable :: uwsmn /;" v module:modgenstat -uwsub src/addon/modgenstat.f90 /^ real, allocatable :: uwsub /;" v module:modgenstat uwsub src/modgenstat.f90 /^ real, allocatable :: uwsub /;" v module:modgenstat uwthavl src/modsampling.f90 /^ wthlthavl,wthvthavl,wqtthavl,wqlthavl,uwthavl,/;" v module:modsampling -uwtmn src/addon/modgenstat.f90 /^ real, allocatable :: uwtmn /;" v module:modgenstat uwtmn src/modgenstat.f90 /^ real, allocatable :: uwtmn /;" v module:modgenstat -uwtot src/addon/modgenstat.f90 /^ real, allocatable :: uwtot /;" v module:modgenstat uwtot src/modgenstat.f90 /^ real, allocatable :: uwtot /;" v module:modgenstat v0 src/modfields.f90 /^ real, allocatable :: v0(/;" v module:modfields v0av src/modfields.f90 /^ real, allocatable :: v0av(/;" v module:modfields v0av_patch src/modtimestat.f90 /^ real, allocatable :: v0av_patch /;" v module:modtimestat -v2mn src/addon/modgenstat.f90 /^ real, allocatable :: u2mn (:), v2mn /;" v module:modgenstat v2mn src/modgenstat.f90 /^ real, allocatable :: u2mn (:), v2mn /;" v module:modgenstat -vavgid src/addon/modheterostats.f90 /^ integer :: uavgid, vavgid,/;" v module:modheterostats vavgid src/addon/modnetcdfstats.f90 /^ integer :: uavgid, vavgid,/;" v module:modnetcdfstats vavgid src/modheterostats.f90 /^ integer :: uavgid, vavgid,/;" v module:modheterostats vavl src/modquadrant.f90 /^ real, allocatable, dimension(:,:) :: uavl,vavl,/;" v module:modquadrant @@ -4026,80 +3437,54 @@ vid src/addon/modnetcdfmovie.f90 /^ integer :: uid, vid,/;" v module:modnetcdfm vidfield src/addon/modnetcdfstats.f90 /^ integer :: uidfield, vidfield,/;" v module:modnetcdfstats vidmovie src/addon/modnetcdfstats.f90 /^ integer :: uidmovie, vidmovie,/;" v module:modnetcdfstats vm src/modfields.f90 /^ real, allocatable :: vm(/;" v module:modfields -vmav src/addon/modgenstat.f90 /^ real, allocatable :: vmav /;" v module:modgenstat vmav src/modgenstat.f90 /^ real, allocatable :: vmav /;" v module:modgenstat -vmn src/addon/modgenstat.f90 /^ real, allocatable :: umn (:) ,vmn /;" v module:modgenstat vmn src/modgenstat.f90 /^ real, allocatable :: umn (:) ,vmn /;" v module:modgenstat -vnudge src/addon/modnudge.f90 /^ real, dimension(:,:), allocatable :: tnudge,unudge,vnudge,/;" v module:modnudge vnudge src/modnudge.f90 /^ real, dimension(:,:), allocatable :: tnudge,unudge,vnudge,/;" v module:modnudge vp src/modfields.f90 /^ real, allocatable :: vp(/;" v module:modfields -vpav src/addon/modstattend.f90 /^ real, allocatable :: upav(:,:),vpav(/;" v module:modstattend vpav src/modsamptend.f90 /^ real, allocatable :: upav(:,:,:),vpav(/;" v module:modsamptend vpav src/modstattend.f90 /^ real, allocatable :: upav(:,:),vpav(/;" v module:modstattend -vpmn src/addon/modstattend.f90 /^ real, allocatable :: upmn(:,:),vpmn(/;" v module:modstattend vpmn src/modsamptend.f90 /^ real, allocatable :: upmn(:,:,:),vpmn(/;" v module:modsamptend vpmn src/modstattend.f90 /^ real, allocatable :: upmn(:,:),vpmn(/;" v module:modstattend vprof src/modfields.f90 /^ real, allocatable :: vprof(/;" v module:modfields -vptav src/addon/modgenstat.f90 /^ real, allocatable :: vptav(/;" v module:modgenstat vptav src/modgenstat.f90 /^ real, allocatable :: vptav(/;" v module:modgenstat vptm src/modsamptend.f90 /^ real, allocatable :: uptm(:,:,:),vptm(/;" v module:modsamptend -vqlcovid src/addon/modheterostats.f90 /^ integer :: uqlcovid, vqlcovid,/;" v module:modheterostats -vqtcovid src/addon/modheterostats.f90 /^ integer :: uqtcovid, vqtcovid,/;" v module:modheterostats vqtcovid src/addon/modnetcdfstats.f90 /^ integer :: uqtcovid, vqtcovid,/;" v module:modnetcdfstats vres src/addon/modparticles.f90 /^ real :: y,y_prev, ystart, vres,/;" k type:particle_record vrtqdr_sw src/rrtmg_sw_vrtqdr.f90 /^ subroutine vrtqdr_sw(/;" s module:rrtmg_sw_vrtqdr vsgs src/addon/modparticles.f90 /^ real :: y,y_prev, ystart, vres, vsgs,/;" k type:particle_record vsgs_prev src/addon/modparticles.f90 /^ real :: y,y_prev, ystart, vres, vsgs, vsgs_prev$/;" k type:particle_record vst src/modsamptend.f90 /^ real, allocatable :: ust(:,:),vst(/;" v module:modsamptend -vsvcovid src/addon/modheterostats.f90 /^ integer, allocatable :: usvcovid(:), vsvcovid(/;" v module:modheterostats vsvcovid src/modheterostats.f90 /^ integer, allocatable :: usvcovid(:), vsvcovid(/;" v module:modheterostats -vthlcovid src/addon/modheterostats.f90 /^ integer :: uthlcovid, vthlcovid,/;" v module:modheterostats vthlcovid src/addon/modnetcdfstats.f90 /^ integer :: uthlcovid, vthlcovid,/;" v module:modnetcdfstats -vthvcovid src/addon/modheterostats.f90 /^ integer :: uthvcovid, vthvcovid,/;" v module:modheterostats -vvarid src/addon/modheterostats.f90 /^ integer :: uvarid, vvarid,/;" v module:modheterostats vvarid src/addon/modnetcdfstats.f90 /^ integer :: uvarid, vvarid,/;" v module:modnetcdfstats vvarid src/modheterostats.f90 /^ integer :: uvarid, vvarid,/;" v module:modheterostats vvarl src/modquadrant.f90 /^ real, allocatable, dimension(:,:) :: uvarl,vvarl,/;" v module:modquadrant -vwavl src/addon/modsampling.f90 /^ wtlavl,wtvavl,wqtavl,wqlavl,uwavl,vwavl$/;" v module:modsampling -vwcovid src/addon/modheterostats.f90 /^ integer :: uvcovid, uwcovid, vwcovid$/;" v module:modheterostats vwcovid src/addon/modnetcdfstats.f90 /^ integer :: uvcovid, uwcovid, vwcovid$/;" v module:modnetcdfstats vwcovid src/modheterostats.f90 /^ integer :: uwcovid, vwcovid$/;" v module:modheterostats -vwcovsid src/addon/modheterostats.f90 /^ integer :: uwcovsid, vwcovsid$/;" v module:modheterostats vwcovsid src/addon/modnetcdfstats.f90 /^ integer :: vwcovsid$/;" v module:modnetcdfstats vwcovsid src/modheterostats.f90 /^ integer :: uwcovsid, vwcovsid$/;" v module:modheterostats -vwres src/addon/modgenstat.f90 /^ real, allocatable :: vwres /;" v module:modgenstat vwres src/modgenstat.f90 /^ real, allocatable :: vwres /;" v module:modgenstat -vwrmn src/addon/modgenstat.f90 /^ real, allocatable :: uwrmn (:),vwrmn /;" v module:modgenstat vwrmn src/modgenstat.f90 /^ real, allocatable :: uwrmn (:),vwrmn /;" v module:modgenstat -vwsmn src/addon/modgenstat.f90 /^ real, allocatable :: uwsmn (:),vwsmn /;" v module:modgenstat vwsmn src/modgenstat.f90 /^ real, allocatable :: uwsmn (:),vwsmn /;" v module:modgenstat -vwsub src/addon/modgenstat.f90 /^ real, allocatable :: vwsub /;" v module:modgenstat vwsub src/modgenstat.f90 /^ real, allocatable :: vwsub /;" v module:modgenstat vwthavl src/modsampling.f90 /^ wthlthavl,wthvthavl,wqtthavl,wqlthavl,uwthavl,vwthavl,/;" v module:modsampling -vwtmn src/addon/modgenstat.f90 /^ real, allocatable :: uwtmn (:),vwtmn /;" v module:modgenstat vwtmn src/modgenstat.f90 /^ real, allocatable :: uwtmn (:),vwtmn /;" v module:modgenstat -vwtot src/addon/modgenstat.f90 /^ real, allocatable :: vwtot /;" v module:modgenstat vwtot src/modgenstat.f90 /^ real, allocatable :: vwtot /;" v module:modgenstat w0 src/modfields.f90 /^ real, allocatable :: w0(/;" v module:modfields w0av_patch src/modtimestat.f90 /^ real, allocatable :: w0av_patch /;" v module:modtimestat -w2mn src/addon/modgenstat.f90 /^ real, allocatable :: w2mn /;" v module:modgenstat w2mn src/modgenstat.f90 /^ real, allocatable :: w2mn /;" v module:modgenstat -w2submn src/addon/modgenstat.f90 /^ real, allocatable :: w2submn /;" v module:modgenstat w2submn src/modgenstat.f90 /^ real, allocatable :: w2submn /;" v module:modgenstat -w_el src/addon/modsampling.f90 /^ real,allocatable, dimension(:,:) :: w_el,/;" v module:modsampling wadvhavl src/modsampling.f90 /^ real,allocatable, dimension(:,:) :: wadvhavl,/;" v module:modsampling wavenum1 src/rrlw_wvn.f90 /^ real(kind=rb) :: wavenum1(/;" v module:rrlw_wvn wavenum1 src/rrsw_wvn.f90 /^ real(kind=rb) :: wavenum1(/;" v module:rrsw_wvn wavenum2 src/rrlw_wvn.f90 /^ real(kind=rb) :: wavenum2(/;" v module:rrlw_wvn wavenum2 src/rrsw_wvn.f90 /^ real(kind=rb) :: wavenum2(/;" v module:rrsw_wvn -wavgid src/addon/modheterostats.f90 /^ integer :: uavgid, vavgid, wavgid,/;" v module:modheterostats wavgid src/addon/modnetcdfstats.f90 /^ integer :: uavgid, vavgid, wavgid,/;" v module:modnetcdfstats wavgid src/modheterostats.f90 /^ integer :: uavgid, vavgid, wavgid,/;" v module:modheterostats -wavl src/addon/modsampling.f90 /^ real, allocatable, dimension(:,:) :: wavl,/;" v module:modsampling wavl src/modquadrant.f90 /^ real, allocatable, dimension(:,:) :: uavl,vavl,wavl,/;" v module:modquadrant wco2Field src/modsurfdata.f90 /^ real, allocatable :: wco2Field /;" v module:modsurfdata wco2av src/modsurfdata.f90 /^ real :: wco2av /;" v module:modsurfdata -we src/addon/modtimestat.f90 /^ real :: zi,ziold=-1, we$/;" v module:modtimestat +wctime src/modstartup.f90 /^ real :: wctime=/;" v module:modstartup we src/modtimestat.f90 /^ real :: zi,ziold=-1, we$/;" v module:modtimestat we_patch src/modtimestat.f90 /^ real,allocatable, dimension(:,:) :: zi_patch,ziold_patch,we_patch,/;" v module:modtimestat wfall_Nr src/addon/modbulkmicrodata.f90 /^ ,wfall_Nr /;" v module:modbulkmicrodata @@ -4118,126 +3503,79 @@ winew src/modfft2d.f90 /^ real, dimension(:), allocatable :: winew,/;" v mo wjnew src/modfft2d.f90 /^ real, dimension(:), allocatable :: winew, wjnew$/;" v module:modfft2d wl_patch src/modtimestat.f90 /^ real,allocatable, dimension(:,:) :: cliq_patch, wl_patch,/;" v module:modtimestat wm src/modfields.f90 /^ real, allocatable :: wm(/;" v module:modfields -wmax src/addon/modtimestat.f90 /^ real :: cc, wmax,/;" v module:modtimestat wmax src/modtimestat.f90 /^ real :: cc, wmax,/;" v module:modtimestat wmax_patch src/modtimestat.f90 /^ real,allocatable, dimension(:,:) :: wmax_patch,/;" v module:modtimestat wmax_patchl src/modtimestat.f90 /^ real,allocatable, dimension(:,:) :: wmax_patch, wmax_patchl,/;" v module:modtimestat -wnudge src/addon/modnudge.f90 /^ real, dimension(:,:), allocatable :: tnudge,unudge,vnudge,wnudge,/;" v module:modnudge wnudge src/modnudge.f90 /^ real, dimension(:,:), allocatable :: tnudge,unudge,vnudge,wnudge,/;" v module:modnudge worka src/modfft2d.f90 /^ real, dimension(:,:,:), allocatable :: worka,/;" v module:modfft2d workb src/modfft2d.f90 /^ real, dimension(:,:,:), allocatable :: worka, workb$/;" v module:modfft2d wp src/modfields.f90 /^ real, allocatable :: wp(/;" v module:modfields wp_store src/modfields.f90 /^ real, allocatable :: wp_store(/;" v module:modfields -wpav src/addon/modstattend.f90 /^ real, allocatable :: upav(:,:),vpav(:,:),wpav(/;" v module:modstattend wpav src/modsamptend.f90 /^ real, allocatable :: upav(:,:,:),vpav(:,:,:),wpav(/;" v module:modsamptend wpav src/modstattend.f90 /^ real, allocatable :: upav(:,:),vpav(:,:),wpav(/;" v module:modstattend -wpmn src/addon/modstattend.f90 /^ real, allocatable :: upmn(:,:),vpmn(:,:),wpmn(/;" v module:modstattend wpmn src/modsamptend.f90 /^ real, allocatable :: upmn(:,:,:),vpmn(:,:,:),wpmn(/;" v module:modsamptend wpmn src/modstattend.f90 /^ real, allocatable :: upmn(:,:),vpmn(:,:),wpmn(/;" v module:modstattend wptm src/modsamptend.f90 /^ real, allocatable :: uptm(:,:,:),vptm(:,:,:),wptm(/;" v module:modsamptend wq_land src/modsurfdata.f90 /^ real :: wq_land(/;" v module:modsurfdata wq_patch src/modsurfdata.f90 /^ real, allocatable :: wq_patch(/;" v module:modsurfdata -wqlavl src/addon/modsampling.f90 /^ wtlavl,wtvavl,wqtavl,wqlavl,/;" v module:modsampling -wqlcovid src/addon/modheterostats.f90 /^ integer :: uqlcovid, vqlcovid, wqlcovid$/;" v module:modheterostats wqlcovid src/modheterostats.f90 /^ integer :: wqlcovid$/;" v module:modheterostats -wqlcovsid src/addon/modheterostats.f90 /^ integer :: wqlcovsid$/;" v module:modheterostats wqlcovsid src/modheterostats.f90 /^ integer :: wqlcovsid$/;" v module:modheterostats -wqlres src/addon/modgenstat.f90 /^ real, allocatable :: wqlres(/;" v module:modgenstat wqlres src/modgenstat.f90 /^ real, allocatable :: wqlres(/;" v module:modgenstat -wqlrmn src/addon/modgenstat.f90 /^ real, allocatable :: wqlsmn (:),wqlrmn /;" v module:modgenstat wqlrmn src/modgenstat.f90 /^ real, allocatable :: wqlsmn (:),wqlrmn /;" v module:modgenstat wqls_patch src/modtimestat.f90 /^ real,allocatable, dimension(:,:) :: ust_patch, qst_patch, tst_patch, wthls_patch, wqls_patch,/;" v module:modtimestat -wqlsmn src/addon/modgenstat.f90 /^ real, allocatable :: wqlsmn /;" v module:modgenstat wqlsmn src/modgenstat.f90 /^ real, allocatable :: wqlsmn /;" v module:modgenstat -wqlsub src/addon/modgenstat.f90 /^ real, allocatable :: wqlsub(/;" v module:modgenstat wqlsub src/modgenstat.f90 /^ real, allocatable :: wqlsub(/;" v module:modgenstat wqlthavl src/modsampling.f90 /^ wthlthavl,wthvthavl,wqtthavl,wqlthavl,/;" v module:modsampling -wqltmn src/addon/modgenstat.f90 /^ real, allocatable :: wqlsmn (:),wqlrmn (:),wqltmn(/;" v module:modgenstat wqltmn src/modgenstat.f90 /^ real, allocatable :: wqlsmn (:),wqlrmn (:),wqltmn(/;" v module:modgenstat -wqltot src/addon/modgenstat.f90 /^ real, allocatable :: wqltot(/;" v module:modgenstat wqltot src/modgenstat.f90 /^ real, allocatable :: wqltot(/;" v module:modgenstat wqsurf src/modsurfdata.f90 /^ real :: wqsurf /;" v module:modsurfdata wqsurft src/modtimedep.f90 /^ real, allocatable :: wqsurft /;" v module:modtimedep wqt_alph src/modcanopy.f90 /^ real :: wqt_alph /;" v module:modcanopy wqt_can src/modcanopy.f90 /^ real :: wqt_can /;" v module:modcanopy wqt_total src/modcanopy.f90 /^ logical :: wqt_total /;" v module:modcanopy -wqtavl src/addon/modsampling.f90 /^ wtlavl,wtvavl,wqtavl,/;" v module:modsampling -wqtcovid src/addon/modheterostats.f90 /^ integer :: uqtcovid, vqtcovid, wqtcovid$/;" v module:modheterostats wqtcovid src/addon/modnetcdfstats.f90 /^ integer :: uqtcovid, vqtcovid, wqtcovid$/;" v module:modnetcdfstats wqtcovid src/modheterostats.f90 /^ integer :: wqtcovid$/;" v module:modheterostats -wqtcovsid src/addon/modheterostats.f90 /^ integer :: wqtcovsid$/;" v module:modheterostats wqtcovsid src/addon/modnetcdfstats.f90 /^ integer :: wqtcovsid$/;" v module:modnetcdfstats wqtcovsid src/modheterostats.f90 /^ integer :: wqtcovsid$/;" v module:modheterostats -wqtres src/addon/modgenstat.f90 /^ real, allocatable :: wqtres(/;" v module:modgenstat wqtres src/modgenstat.f90 /^ real, allocatable :: wqtres(/;" v module:modgenstat wqtresl src/modquadrant.f90 /^ real, allocatable, dimension(:,:) :: wuresl,wvresl,wthlresl,wqtresl$/;" v module:modquadrant -wqtrmn src/addon/modgenstat.f90 /^ real, allocatable :: wqtsmn (:),wqtrmn /;" v module:modgenstat wqtrmn src/modgenstat.f90 /^ real, allocatable :: wqtsmn (:),wqtrmn /;" v module:modgenstat -wqtsmn src/addon/modgenstat.f90 /^ real, allocatable :: wqtsmn /;" v module:modgenstat wqtsmn src/modgenstat.f90 /^ real, allocatable :: wqtsmn /;" v module:modgenstat -wqtsub src/addon/modgenstat.f90 /^ real, allocatable :: wqtsub(/;" v module:modgenstat wqtsub src/modgenstat.f90 /^ real, allocatable :: wqtsub(/;" v module:modgenstat wqtsubl src/modquadrant.f90 /^ real, allocatable, dimension(:,:) :: wusubl,wvsubl,wthlsubl,wqtsubl$/;" v module:modquadrant wqtthavl src/modsampling.f90 /^ wthlthavl,wthvthavl,wqtthavl,/;" v module:modsampling -wqttmn src/addon/modgenstat.f90 /^ real, allocatable :: wqtsmn (:),wqtrmn (:),wqttmn(/;" v module:modgenstat wqttmn src/modgenstat.f90 /^ real, allocatable :: wqtsmn (:),wqtrmn (:),wqttmn(/;" v module:modgenstat -wqttot src/addon/modgenstat.f90 /^ real, allocatable :: wqttot(/;" v module:modgenstat wqttot src/modgenstat.f90 /^ real, allocatable :: wqttot(/;" v module:modgenstat wres src/addon/modparticles.f90 /^ real :: z,z_prev, zstart, wres,/;" k type:particle_record -write_chem_scheme src/addon/modchem.f90 /^subroutine write_chem_scheme(/;" s module:modchem write_chem_scheme src/modchem.f90 /^subroutine write_chem_scheme(/;" s module:modchem -writearray src/addon/modchem.f90 /^ real, allocatable :: writearray(/;" v module:modchem writearray src/modchem.f90 /^ real, allocatable :: writearray(/;" v module:modchem -writebudget src/addon/modbudget.f90 /^ subroutine writebudget$/;" s module:modbudget writebudget src/modbudget.f90 /^ subroutine writebudget$/;" s module:modbudget -writebulkmicrostat src/addon/modbulkmicrostat.f90 /^ subroutine writebulkmicrostat$/;" s module:modbulkmicrostat writebulkmicrostat src/modbulkmicrostat.f90 /^ subroutine writebulkmicrostat$/;" s module:modbulkmicrostat writelsmstat src/modlsmstat.f90 /^ subroutine writelsmstat$/;" s module:modlsmstat writeparticles src/addon/modparticles.f90 /^ subroutine writeparticles$/;" s module:modparticles writequadrant src/modquadrant.f90 /^ subroutine writequadrant$/;" s module:modquadrant -writeradstat src/addon/modradstat.f90 /^ subroutine writeradstat$/;" s module:modradstat writeradstat src/modradstat.f90 /^ subroutine writeradstat$/;" s module:modradstat writerestartfiles src/modstartup.f90 /^ subroutine writerestartfiles$/;" s module:modstartup -writesampling src/addon/modsampling.f90 /^ subroutine writesampling$/;" s module:modsampling writesampling src/modsampling.f90 /^ subroutine writesampling$/;" s module:modsampling writesamptend src/modsamptend.f90 /^ subroutine writesamptend$/;" s module:modsamptend writesimpleicestat src/modsimpleicestat.f90 /^ subroutine writesimpleicestat$/;" s module:modsimpleicestat -writestat src/addon/modgenstat.f90 /^ subroutine writestat$/;" s module:modgenstat writestat src/modgenstat.f90 /^ subroutine writestat$/;" s module:modgenstat -writestat_1D_nc src/addon/modstat_nc.f90 /^ subroutine writestat_1D_nc(/;" s module:modstat_nc -writestat_1D_nc src/addon/stat_nc_dummy.f90 /^ subroutine writestat_1D_nc(/;" s module:modstat_nc writestat_1D_nc src/modstat_nc.f90 /^ subroutine writestat_1D_nc(/;" s module:modstat_nc -writestat_2D_nc src/addon/modstat_nc.f90 /^ subroutine writestat_2D_nc(/;" s module:modstat_nc -writestat_2D_nc src/addon/stat_nc_dummy.f90 /^ subroutine writestat_2D_nc(/;" s module:modstat_nc writestat_2D_nc src/modstat_nc.f90 /^ subroutine writestat_2D_nc(/;" s module:modstat_nc -writestat_3D_nc src/addon/modstat_nc.f90 /^ subroutine writestat_3D_nc(/;" s module:modstat_nc -writestat_3D_nc src/addon/stat_nc_dummy.f90 /^ subroutine writestat_3D_nc(/;" s module:modstat_nc writestat_3D_nc src/modstat_nc.f90 /^ subroutine writestat_3D_nc(/;" s module:modstat_nc -writestat_3D_short_nc src/addon/modstat_nc.f90 /^ subroutine writestat_3D_short_nc(/;" s module:modstat_nc -writestat_3D_short_nc src/addon/stat_nc_dummy.f90 /^ subroutine writestat_3D_short_nc(/;" s module:modstat_nc writestat_3D_short_nc src/modstat_nc.f90 /^ subroutine writestat_3D_short_nc(/;" s module:modstat_nc -writestat_dims_nc src/addon/modstat_nc.f90 /^ subroutine writestat_dims_nc(/;" s module:modstat_nc -writestat_dims_nc src/addon/stat_nc_dummy.f90 /^ subroutine writestat_dims_nc(/;" s module:modstat_nc writestat_dims_nc src/modstat_nc.f90 /^ subroutine writestat_dims_nc(/;" s module:modstat_nc writestat_dims_q_nc src/modstat_nc.f90 /^ subroutine writestat_dims_q_nc(/;" s module:modstat_nc -writestat_time_nc src/addon/modstat_nc.f90 /^ subroutine writestat_time_nc(/;" s module:modstat_nc -writestat_time_nc src/addon/stat_nc_dummy.f90 /^ subroutine writestat_time_nc(/;" s module:modstat_nc writestat_time_nc src/modstat_nc.f90 /^ subroutine writestat_time_nc(/;" s module:modstat_nc -writestattend src/addon/modstattend.f90 /^ subroutine writestattend$/;" s module:modstattend writestattend src/modstattend.f90 /^ subroutine writestattend$/;" s module:modstattend writestressbudget src/addon/modstress.f90 /^ subroutine writestressbudget$/;" s module:modstress writethla src/addon/modtilt.f90 /^ subroutine writethla$/;" s module:modtilt writetiltstat src/addon/modtilt.f90 /^ subroutine writetiltstat$/;" s module:modtilt -wrthorz src/addon/modcrosssection.f90 /^ subroutine wrthorz$/;" s module:modcrosssection -wrthorz src/addon/modprojection.f90 /^ subroutine wrthorz$/;" s module:modprojection wrthorz src/modcrosssection.f90 /^ subroutine wrthorz$/;" s module:modcrosssection wrthorz src/modlsmcrosssection.f90 /^ subroutine wrthorz$/;" s module:modlsmcrosssection wrthorz src/modprojection.f90 /^ subroutine wrthorz$/;" s module:modprojection -wrtorth src/addon/modcrosssection.f90 /^ subroutine wrtorth$/;" s module:modcrosssection wrtorth src/modcrosssection.f90 /^ subroutine wrtorth$/;" s module:modcrosssection wrtsurf src/modlsmcrosssection.f90 /^ subroutine wrtsurf$/;" s module:modlsmcrosssection -wrtvert src/addon/modcrosssection.f90 /^ subroutine wrtvert$/;" s module:modcrosssection -wrtvert src/addon/modprojection.f90 /^ subroutine wrtvert$/;" s module:modprojection wrtvert src/modcrosssection.f90 /^ subroutine wrtvert$/;" s module:modcrosssection wrtvert src/modlsmcrosssection.f90 /^ subroutine wrtvert$/;" s module:modlsmcrosssection wsgs src/addon/modparticles.f90 /^ real :: z,z_prev, zstart, wres, wsgs,/;" k type:particle_record @@ -4250,24 +3588,16 @@ wsv_can src/modcanopy.f90 /^ real :: wsv_can(/;" v module:modcanopy wsv_land src/modsurfdata.f90 /^ real :: wsv_land(/;" v module:modsurfdata wsv_patch src/modsurfdata.f90 /^ real, allocatable :: wsv_patch(/;" v module:modsurfdata wsv_total src/modcanopy.f90 /^ logical :: wsv_total(/;" v module:modcanopy -wsvcovid src/addon/modheterostats.f90 /^ integer, allocatable :: usvcovid(:), vsvcovid(:), wsvcovid(/;" v module:modheterostats wsvcovid src/modheterostats.f90 /^ integer, allocatable :: usvcovid(:), vsvcovid(:), wsvcovid(/;" v module:modheterostats -wsvcovsid src/addon/modheterostats.f90 /^ integer, allocatable :: wsvcovsid(/;" v module:modheterostats wsvcovsid src/modheterostats.f90 /^ integer, allocatable :: wsvcovsid(/;" v module:modheterostats -wsvres src/addon/modgenstat.f90 /^ real, allocatable :: wsvres(/;" v module:modgenstat wsvres src/modgenstat.f90 /^ real, allocatable :: wsvres(/;" v module:modgenstat wsvresl src/modquadrant.f90 /^ real, allocatable, dimension(:,:,:) :: wsvresl,/;" v module:modquadrant -wsvrmn src/addon/modgenstat.f90 /^ real, allocatable :: wsvsmn (:,:),wsvrmn(/;" v module:modgenstat wsvrmn src/modgenstat.f90 /^ real, allocatable :: wsvsmn (:,:),wsvrmn(/;" v module:modgenstat -wsvsmn src/addon/modgenstat.f90 /^ real, allocatable :: wsvsmn /;" v module:modgenstat wsvsmn src/modgenstat.f90 /^ real, allocatable :: wsvsmn /;" v module:modgenstat -wsvsub src/addon/modgenstat.f90 /^ real, allocatable :: wsvsub(/;" v module:modgenstat wsvsub src/modgenstat.f90 /^ real, allocatable :: wsvsub(/;" v module:modgenstat wsvsubl src/modquadrant.f90 /^ real, allocatable, dimension(:,:,:) :: wsvresl,wsvsubl$/;" v module:modquadrant wsvsurf src/modsurfdata.f90 /^ real :: wsvsurf(/;" v module:modsurfdata -wsvtmn src/addon/modgenstat.f90 /^ real, allocatable :: wsvsmn (:,:),wsvrmn(:,:),wsvtmn(/;" v module:modgenstat wsvtmn src/modgenstat.f90 /^ real, allocatable :: wsvsmn (:,:),wsvrmn(:,:),wsvtmn(/;" v module:modgenstat -wsvtot src/addon/modgenstat.f90 /^ real, allocatable :: wsvtot(/;" v module:modgenstat wsvtot src/modgenstat.f90 /^ real, allocatable :: wsvtot(/;" v module:modgenstat wt src/rrlw_wvn.f90 /^ real(kind=rb) :: wt(/;" v module:rrlw_wvn wt src/rrsw_wvn.f90 /^ real(kind=rb) :: wt(/;" v module:rrsw_wvn @@ -4276,10 +3606,8 @@ wt_patch src/modsurfdata.f90 /^ real, allocatable :: wt_patch(/;" v module:mods wth_alph src/modcanopy.f90 /^ real :: wth_alph /;" v module:modcanopy wth_can src/modcanopy.f90 /^ real :: wth_can /;" v module:modcanopy wth_total src/modcanopy.f90 /^ logical :: wth_total /;" v module:modcanopy -wthlcovid src/addon/modheterostats.f90 /^ integer :: uthlcovid, vthlcovid, wthlcovid$/;" v module:modheterostats wthlcovid src/addon/modnetcdfstats.f90 /^ integer :: uthlcovid, vthlcovid, wthlcovid$/;" v module:modnetcdfstats wthlcovid src/modheterostats.f90 /^ integer :: wthlcovid$/;" v module:modheterostats -wthlcovsid src/addon/modheterostats.f90 /^ integer :: wthlcovsid$/;" v module:modheterostats wthlcovsid src/addon/modnetcdfstats.f90 /^ integer :: wthlcovsid$/;" v module:modnetcdfstats wthlcovsid src/modheterostats.f90 /^ integer :: wthlcovsid$/;" v module:modheterostats wthlres src/modgenstat.f90 /^ real, allocatable :: wthlres(/;" v module:modgenstat @@ -4292,9 +3620,7 @@ wthlsubl src/modquadrant.f90 /^ real, allocatable, dimension(:,:) :: w wthlthavl src/modsampling.f90 /^ real, allocatable, dimension(:,:) :: wfavl,thlfavl,thvfavl,qtfavl,qlfavl,nrsampfl,massflxhavl, &$/;" v module:modsampling wthltmn src/modgenstat.f90 /^ real, allocatable :: wthlsmn (:),wthlrmn (:),wthltmn(/;" v module:modgenstat wthltot src/modgenstat.f90 /^ real, allocatable :: wthltot(/;" v module:modgenstat -wthvcovid src/addon/modheterostats.f90 /^ integer :: uthvcovid, vthvcovid, wthvcovid$/;" v module:modheterostats wthvcovid src/modheterostats.f90 /^ integer :: wthvcovid$/;" v module:modheterostats -wthvcovsid src/addon/modheterostats.f90 /^ integer :: wthvcovsid$/;" v module:modheterostats wthvcovsid src/modheterostats.f90 /^ integer :: wthvcovsid$/;" v module:modheterostats wthvres src/modgenstat.f90 /^ real, allocatable :: wthvres(/;" v module:modgenstat wthvrmn src/modgenstat.f90 /^ real, allocatable :: wthvsmn (:),wthvrmn /;" v module:modgenstat @@ -4305,31 +3631,15 @@ wthvthavl src/modsampling.f90 /^ wthlthav wthvtmn src/modgenstat.f90 /^ real, allocatable :: wthvsmn (:),wthvrmn (:),wthvtmn(/;" v module:modgenstat wthvtmnlast src/modgenstat.f90 /^ real, allocatable :: wthvtmnlast(/;" v module:modgenstat wthvtot src/modgenstat.f90 /^ real, allocatable :: wthvtot(/;" v module:modgenstat -wtlavl src/addon/modsampling.f90 /^ real, allocatable, dimension(:,:) :: wavl,tlavl,tvavl,qtavl,qlavl,nrsampl,massflxavl, &$/;" v module:modsampling -wtlres src/addon/modgenstat.f90 /^ real, allocatable :: wtlres(/;" v module:modgenstat -wtlrmn src/addon/modgenstat.f90 /^ real, allocatable :: wtlsmn (:),wtlrmn /;" v module:modgenstat -wtlsmn src/addon/modgenstat.f90 /^ real, allocatable :: wtlsmn /;" v module:modgenstat -wtlsub src/addon/modgenstat.f90 /^ real, allocatable :: wtlsub(/;" v module:modgenstat -wtltmn src/addon/modgenstat.f90 /^ real, allocatable :: wtlsmn (:),wtlrmn (:),wtltmn(/;" v module:modgenstat -wtltot src/addon/modgenstat.f90 /^ real, allocatable :: wtltot(/;" v module:modgenstat wtsurf src/modsurfdata.f90 /^ real :: wtsurf /;" v module:modsurfdata wtsurft src/modtimedep.f90 /^ real, allocatable :: wtsurft /;" v module:modtimedep -wtvavl src/addon/modsampling.f90 /^ wtlavl,wtvavl,/;" v module:modsampling -wtvres src/addon/modgenstat.f90 /^ real, allocatable :: wtvres(/;" v module:modgenstat -wtvrmn src/addon/modgenstat.f90 /^ real, allocatable :: wtvsmn (:),wtvrmn /;" v module:modgenstat -wtvsmn src/addon/modgenstat.f90 /^ real, allocatable :: wtvsmn /;" v module:modgenstat -wtvsub src/addon/modgenstat.f90 /^ real, allocatable :: wtvsub(/;" v module:modgenstat -wtvtmn src/addon/modgenstat.f90 /^ real, allocatable :: wtvsmn (:),wtvrmn (:),wtvtmn(/;" v module:modgenstat -wtvtot src/addon/modgenstat.f90 /^ real, allocatable :: wtvtot(/;" v module:modgenstat wuresl src/modquadrant.f90 /^ real, allocatable, dimension(:,:) :: wuresl,/;" v module:modquadrant wusubl src/modquadrant.f90 /^ real, allocatable, dimension(:,:) :: wusubl,/;" v module:modquadrant -wvarid src/addon/modheterostats.f90 /^ integer :: uvarid, vvarid, wvarid,/;" v module:modheterostats wvarid src/addon/modnetcdfstats.f90 /^ integer :: uvarid, vvarid, wvarid,/;" v module:modnetcdfstats wvarid src/modheterostats.f90 /^ integer :: uvarid, vvarid, wvarid,/;" v module:modheterostats wvarl src/modquadrant.f90 /^ real, allocatable, dimension(:,:) :: uvarl,vvarl,wvarl,/;" v module:modquadrant wvresl src/modquadrant.f90 /^ real, allocatable, dimension(:,:) :: wuresl,wvresl,/;" v module:modquadrant wvsubl src/modquadrant.f90 /^ real, allocatable, dimension(:,:) :: wusubl,wvsubl,/;" v module:modquadrant -wwavl src/addon/modsampling.f90 /^ real, allocatable, dimension(:,:) :: wwavl,/;" v module:modsampling wwrhavl src/modsampling.f90 /^ real, allocatable, dimension(:,:) :: wwrhavl,/;" v module:modsampling wwsfavl src/modsampling.f90 /^ real, allocatable, dimension(:,:) :: wwrhavl,wwsfavl,/;" v module:modsampling wz src/modradfull.f90 /^ real, allocatable :: re(:), fl(:), bz(:,:), wz(/;" v module:modradfull @@ -4344,7 +3654,6 @@ xcmax src/modmicrodata.f90 /^ ,xcmax /;" v module:modmicrodata xcmin src/addon/modbulkmicrodata.f90 /^ ,xcmin /;" v module:modbulkmicrodata xcmin src/modmicrodata.f90 /^ ,xcmin /;" v module:modmicrodata xday src/modglobal.f90 /^ real :: xday /;" v module:modglobal -xid src/addon/modheterostats.f90 /^ integer :: xid,/;" v module:modheterostats xid src/addon/modnetcdfmovie.f90 /^ integer :: xid,/;" v module:modnetcdfmovie xid src/addon/modnetcdfstats.f90 /^ integer :: xid,/;" v module:modnetcdfstats xid src/modheterostats.f90 /^ integer :: xid,/;" v module:modheterostats @@ -4357,8 +3666,6 @@ xidmovie src/addon/modnetcdfstats.f90 /^ integer :: xidmovie,/;" v module:modne xk src/modradfull.f90 /^ real, allocatable :: hk(:),sp(:),xk(/;" k type:ckd_properties xlat src/modglobal.f90 /^ real :: xlat /;" v module:modglobal xlon src/modglobal.f90 /^ real :: xlon /;" v module:modglobal -xmID src/addon/modstat_nc.f90 /^ integer, save :: timeID=0, ztID=0, zmID=0, xtID=0, xmID=/;" v module:modstat_nc -xmID src/addon/stat_nc_dummy.f90 /^ integer, save :: timeID=0, ztID=0, zmID=0, xtID=0, xmID=/;" v module:modstat_nc xmID src/modstat_nc.f90 /^ integer, save :: timeID=0, ztID=0, zmID=0, xtID=0, xmID=/;" v module:modstat_nc xpatches src/modsurfdata.f90 /^ integer :: xpatches /;" v module:modsurfdata xr src/addon/modbulkmicrodata.f90 /^ ,xr /;" v module:modbulkmicrodata @@ -4371,14 +3678,11 @@ xrmin src/addon/modbulkmicrodata.f90 /^ ,xrmin /;" v module:modbulk xrmin src/modmicrodata.f90 /^ ,xrmin /;" v module:modmicrodata xsize src/modglobal.f90 /^ real :: xsize /;" v module:modglobal xstart src/addon/modparticles.f90 /^ real :: x,x_prev, xstart,/;" k type:particle_record -xtID src/addon/modstat_nc.f90 /^ integer, save :: timeID=0, ztID=0, zmID=0, xtID=/;" v module:modstat_nc -xtID src/addon/stat_nc_dummy.f90 /^ integer, save :: timeID=0, ztID=0, zmID=0, xtID=/;" v module:modstat_nc xtID src/modstat_nc.f90 /^ integer, save :: timeID=0, ztID=0, zmID=0, xtID=/;" v module:modstat_nc xtime src/modglobal.f90 /^ real :: xtime /;" v module:modglobal xyrt src/modpois.f90 /^ real,allocatable :: xyrt(/;" v module:modpois y src/addon/modparticles.f90 /^ real :: y,/;" k type:particle_record y_prev src/addon/modparticles.f90 /^ real :: y,y_prev,/;" k type:particle_record -yid src/addon/modheterostats.f90 /^ integer :: xid, yid,/;" v module:modheterostats yid src/addon/modnetcdfmovie.f90 /^ integer :: xid, yid,/;" v module:modnetcdfmovie yid src/addon/modnetcdfstats.f90 /^ integer :: xid, yid,/;" v module:modnetcdfstats yid src/modheterostats.f90 /^ integer :: xid, yid,/;" v module:modheterostats @@ -4388,25 +3692,16 @@ yidfieldu src/addon/modnetcdfstats.f90 /^ integer :: xidfieldu, yidfieldu,/;" yidfieldv src/addon/modnetcdfstats.f90 /^ integer :: xidfieldv, yidfieldv,/;" v module:modnetcdfstats yidfieldw src/addon/modnetcdfstats.f90 /^ integer :: xidfieldw, yidfieldw,/;" v module:modnetcdfstats yidmovie src/addon/modnetcdfstats.f90 /^ integer :: xidmovie, yidmovie,/;" v module:modnetcdfstats -yl src/addon/modchem.f90 /^ real, allocatable,target :: yl(/;" v module:modchem yl src/modchem.f90 /^ real, allocatable,target :: yl(/;" v module:modchem -ymID src/addon/modstat_nc.f90 /^ integer, save :: timeID=0, ztID=0, zmID=0, xtID=0, xmID=0, ytID=0, ymID=/;" v module:modstat_nc -ymID src/addon/stat_nc_dummy.f90 /^ integer, save :: timeID=0, ztID=0, zmID=0, xtID=0, xmID=0, ytID=0, ymID=/;" v module:modstat_nc ymID src/modstat_nc.f90 /^ integer, save :: timeID=0, ztID=0, zmID=0, xtID=0, xmID=0, ytID=0, ymID=/;" v module:modstat_nc -ynew src/addon/modchem.f90 /^ real, allocatable :: ynew(/;" v module:modchem ynew src/modchem.f90 /^ real, allocatable :: ynew(/;" v module:modchem -yold src/addon/modchem.f90 /^ real, allocatable :: ynew(:,:,:),yold(/;" v module:modchem yold src/modchem.f90 /^ real, allocatable :: ynew(:,:,:),yold(/;" v module:modchem -yp src/addon/modchem.f90 /^ real, allocatable,target :: yl(:,:,:),yp(/;" v module:modchem yp src/modchem.f90 /^ real, allocatable,target :: yl(:,:,:),yp(/;" v module:modchem ypatches src/modsurfdata.f90 /^ integer :: ypatches /;" v module:modsurfdata ysize src/modglobal.f90 /^ real :: ysize /;" v module:modglobal ysizelocal src/addon/modparticles.f90 /^ real :: ysizelocal$/;" v module:modparticles ystart src/addon/modparticles.f90 /^ real :: y,y_prev, ystart,/;" k type:particle_record -ysum src/addon/modchem.f90 /^ real, allocatable :: ynew(:,:,:),yold(:,:,:),ysum(/;" v module:modchem ysum src/modchem.f90 /^ real, allocatable :: ynew(:,:,:),yold(:,:,:),ysum(/;" v module:modchem -ytID src/addon/modstat_nc.f90 /^ integer, save :: timeID=0, ztID=0, zmID=0, xtID=0, xmID=0, ytID=/;" v module:modstat_nc -ytID src/addon/stat_nc_dummy.f90 /^ integer, save :: timeID=0, ztID=0, zmID=0, xtID=0, xmID=0, ytID=/;" v module:modstat_nc ytID src/modstat_nc.f90 /^ integer, save :: timeID=0, ztID=0, zmID=0, xtID=0, xmID=0, ytID=/;" v module:modstat_nc z src/addon/modparticles.f90 /^ real :: z,/;" k type:particle_record z0 src/modsurfdata.f90 /^ real :: z0 /;" v module:modsurfdata @@ -4421,20 +3716,16 @@ z0mav_patch src/modsurfdata.f90 /^ real, allocatable :: z0mav_patch(/;" v modul z_prev src/addon/modparticles.f90 /^ real :: z,z_prev,/;" k type:particle_record zbase_field src/modtimestat.f90 /^ real,allocatable, dimension(:,:) :: zbase_field,/;" v module:modtimestat zbase_patch src/modtimestat.f90 /^ real,allocatable, dimension(:,:) :: zbase_patch,/;" v module:modtimestat -zbaseav src/addon/modtimestat.f90 /^ real :: zbaseav,/;" v module:modtimestat zbaseav src/modtimestat.f90 /^ real :: zbaseav,/;" v module:modtimestat -zbasemin src/addon/modtimestat.f90 /^ real :: zbaseav, ztopav, ztopmax,zbasemin$/;" v module:modtimestat zbasemin src/modtimestat.f90 /^ real :: zbaseav, ztopav, ztopmax,zbasemin$/;" v module:modtimestat zbasemin_patch src/modtimestat.f90 /^ real,allocatable, dimension(:,:) :: zbase_patch, ztop_patch, zbasemin_patch,/;" v module:modtimestat zbasemin_patchl src/modtimestat.f90 /^ real,allocatable, dimension(:,:) :: zbase_patch, ztop_patch, zbasemin_patch, zbasemin_patchl$/;" v module:modtimestat zenith src/modraddata.f90 /^ real function zenith(/;" f module:modraddata zf src/modglobal.f90 /^ real, allocatable :: zf(/;" v module:modglobal zh src/modglobal.f90 /^ real, allocatable :: zh(/;" v module:modglobal -zi src/addon/modtimestat.f90 /^ real :: zi,/;" v module:modtimestat zi src/modtimestat.f90 /^ real :: zi,/;" v module:modtimestat zi_field src/modtimestat.f90 /^ real,allocatable, dimension(:,:) :: zi_patch,ziold_patch,we_patch, zi_field$/;" v module:modtimestat zi_patch src/modtimestat.f90 /^ real,allocatable, dimension(:,:) :: zi_patch,/;" v module:modtimestat -zid src/addon/modheterostats.f90 /^ integer :: xid, yid, zid,/;" v module:modheterostats zid src/addon/modnetcdfmovie.f90 /^ integer :: xid, yid, zid,/;" v module:modnetcdfmovie zid src/addon/modnetcdfstats.f90 /^ integer :: xid, yid, zid,/;" v module:modnetcdfstats zid src/modheterostats.f90 /^ integer :: xid, yid, zid,/;" v module:modheterostats @@ -4444,26 +3735,19 @@ zidfieldu src/addon/modnetcdfstats.f90 /^ integer :: xidfieldu, yidfieldu, zidfieldv src/addon/modnetcdfstats.f90 /^ integer :: xidfieldv, yidfieldv, zidfieldv,/;" v module:modnetcdfstats zidfieldw src/addon/modnetcdfstats.f90 /^ integer :: xidfieldw, yidfieldw, zidfieldw,/;" v module:modnetcdfstats zidmovie src/addon/modnetcdfstats.f90 /^ integer :: xidmovie, yidmovie, zidmovie,/;" v module:modnetcdfstats -ziold src/addon/modtimestat.f90 /^ real :: zi,ziold=/;" v module:modtimestat ziold src/modtimestat.f90 /^ real :: zi,ziold=/;" v module:modtimestat ziold_patch src/modtimestat.f90 /^ real,allocatable, dimension(:,:) :: zi_patch,ziold_patch,/;" v module:modtimestat zlt src/modsubgriddata.f90 /^ real, allocatable :: zlt(/;" v module:modsubgriddata -zmID src/addon/modstat_nc.f90 /^ integer, save :: timeID=0, ztID=0, zmID=/;" v module:modstat_nc -zmID src/addon/stat_nc_dummy.f90 /^ integer, save :: timeID=0, ztID=0, zmID=/;" v module:modstat_nc zmID src/modstat_nc.f90 /^ integer, save :: timeID=0, ztID=0, zmID=/;" v module:modstat_nc zpad src/modcanopy.f90 /^ real, allocatable :: zpad(/;" v module:modcanopy zqID src/modstat_nc.f90 /^ integer, save :: timeID=0, ztID=0, zmID=0, xtID=0, xmID=0, ytID=0, ymID=0,ztsID=0, zqID=/;" v module:modstat_nc zsoil src/modsurfdata.f90 /^ real, allocatable :: zsoil /;" v module:modsurfdata zsoilc src/modsurfdata.f90 /^ real, allocatable :: zsoilc /;" v module:modsurfdata zstart src/addon/modparticles.f90 /^ real :: z,z_prev, zstart,/;" k type:particle_record -ztID src/addon/modstat_nc.f90 /^ integer, save :: timeID=0, ztID=/;" v module:modstat_nc -ztID src/addon/stat_nc_dummy.f90 /^ integer, save :: timeID=0, ztID=/;" v module:modstat_nc ztID src/modstat_nc.f90 /^ integer, save :: timeID=0, ztID=/;" v module:modstat_nc ztop_field src/modtimestat.f90 /^ real,allocatable, dimension(:,:) :: zbase_field, ztop_field,/;" v module:modtimestat ztop_patch src/modtimestat.f90 /^ real,allocatable, dimension(:,:) :: zbase_patch, ztop_patch,/;" v module:modtimestat -ztopav src/addon/modtimestat.f90 /^ real :: zbaseav, ztopav,/;" v module:modtimestat ztopav src/modtimestat.f90 /^ real :: zbaseav, ztopav,/;" v module:modtimestat -ztopmax src/addon/modtimestat.f90 /^ real :: zbaseav, ztopav, ztopmax,/;" v module:modtimestat ztopmax src/modtimestat.f90 /^ real :: zbaseav, ztopav, ztopmax,/;" v module:modtimestat ztopmax_patch src/modtimestat.f90 /^ real,allocatable, dimension(:,:) :: wmax_patch, wmax_patchl, qlmax_patch, qlmax_patchl, ztopmax_patch,/;" v module:modtimestat ztopmax_patchl src/modtimestat.f90 /^ real,allocatable, dimension(:,:) :: wmax_patch, wmax_patchl, qlmax_patch, qlmax_patchl, ztopmax_patch, ztopmax_patchl$/;" v module:modtimestat diff --git a/utils/doc/input/Namoptions.pdf b/utils/doc/input/Namoptions.pdf index 41bd18ed..69027315 100644 Binary files a/utils/doc/input/Namoptions.pdf and b/utils/doc/input/Namoptions.pdf differ diff --git a/utils/doc/input/Namoptions.tex b/utils/doc/input/Namoptions.tex index 05c61c8b..627e41e4 100644 --- a/utils/doc/input/Namoptions.tex +++ b/utils/doc/input/Namoptions.tex @@ -1,6 +1,6 @@ \documentclass[twoside,11pt,fleqn,a4paper,english,openright]{report} -\usepackage{psfrag} % Hiermee kun je tekst vanuit latex in een eps-figuur zetten (ook gedraaid e.d.) +%\usepackage{psfrag} % Hiermee kun je tekst vanuit latex in een eps-figuur zetten (ook gedraaid e.d.) \usepackage{babel} % Afbreken van woorden in vreemde talen & Engels %\usepackage{psfig, epsfig} % volgens mij onnodig door graphicsx \usepackage{amsfonts} % Nodig om normale tekst in formules te zetten @@ -84,12 +84,13 @@ \chapter{Introduction}\label{chapter:introduction} \pagenumbering{arabic} \setcounter{page}{1} -This document gives an overview of all namelist options in version 4.1 of the Dutch Atmospheric Large Eddy Simulation (DALES) model. Only general information concerning these options is presented. For more detailed information about the model, the reader is referred to \citet{Heus2009}. +This document gives an overview of all namelist options in version 4.2 of the Dutch Atmospheric Large Eddy Simulation (DALES) model. Only general information concerning these options is presented. For more detailed information about the model, the reader is referred to \citet{Heus2009}. \chapter{Namoptions overview}\label{chapter:namoptions} All options that can be set for the LES experiments will be discussed in the following paragraphs. These options are listed in a separate paragraph for all name lists. For all name lists, the options are given with their default values, possible values, a description and the unit. The possible values are denoted by an $x$. The paragraphs are grouped in two sections. In the first section, the main modules are discussed. In the second section an overview of the extra modules is presented. +%\newpage \section{Main modules}\label{par:mainmod} \subsection{Namelist DOMAIN}\label{par:domain} @@ -156,13 +157,14 @@ \subsection{Namelist DYNAMICS}\label{par:dynamics} lqlnr & .true. & $x\in\{\text{.false.},\text{.true.}\}$ & Switch for Newton-Raphson approximation of the liquid water content & -\\ lnoclouds & .false. & $x\in\{\text{.false.},\text{.true.}\}$ & Switch to disable $q_l$ calculations & -\\ \qquad & & & &\\ - \multirow{10}{*}{\begin{tabular}{@{\hspace{0cm}}l}\hypertarget{iadvmom}{iadv\_mom}\\\hypertarget{iadvtke}{iadv\_tke}\\\hypertarget{iadvthl}{iadv\_thl}\\\hypertarget{iadvqt}{iadv\_qt}\\\hypertarget{iadvsv}{iadv\_sv(1:nsv)} \end{tabular}$\left. \begin{tabular}{l} \\ \\ \\ \\ \\ \end{tabular} \right\}$} & \multirow{10}{*}{\begin{tabular}{@{\hspace{0cm}}l}5\\-1\\-1\\-1\\-1 -\end{tabular}} & \multirow{10}{*}{\begin{tabular}{@{\hspace{0cm}}p{4cm}}$x \in \{1,$ $2,$ $5,$ $52,$ $55,$ $6,$ $62,$ $7\}$\end{tabular}} & Advection scheme for momentum, TKE, $\theta_l$, $q_t$ and scalars: & \multirow{10}{*}{-}\\ + \multirow{11}{*}{\begin{tabular}{@{\hspace{0cm}}l}\hypertarget{iadvmom}{iadv\_mom}\\\hypertarget{iadvtke}{iadv\_tke}\\\hypertarget{iadvthl}{iadv\_thl}\\\hypertarget{iadvqt}{iadv\_qt}\\\hypertarget{iadvsv}{iadv\_sv(1:nsv)} \end{tabular}$\left. \begin{tabular}{l} \\ \\ \\ \\ \\ \end{tabular} \right\}$} & \multirow{11}{*}{\begin{tabular}{@{\hspace{0cm}}l}5\\-1\\-1\\-1\\-1 +\end{tabular}} & \multirow{11}{*}{\begin{tabular}{@{\hspace{0cm}}p{4cm}}$x \in \{1,$ $2,$ $5,$ $52,$ $55,$ $6,$ $62,$ $7\}$\end{tabular}} & Advection scheme for momentum, TKE, $\theta_l$, $q_t$ and scalars: & \multirow{11}{*}{-}\\ & & & 1 = 1$^{\text{st}}$ order upwind &\\ & & & 2 = 2$^{\text{nd}}$ order central difference &\\ & & & 5 = Option 6 + 5$^{\text{th}}$ order upwind &\\ & & & 52 = Horizontal 5$^{\text{th}}$ \& vertical 2$^{\text{nd}}$ &\\ & & & 55 = Hybrid scheme &\\ + & & & 555 = Alternative hybrid scheme &\\ & & & 6 = 6$^{\text{th}}$ order central difference &\\ & & & 62 = Horizontal 6$^{\text{th}}$ \& vertical 2$^{\text{nd}}$ &\\ & & & 7 = Kappa scheme &\\ @@ -214,6 +216,7 @@ \subsection{Namelist PHYSICS}\label{par:physics} wsvsurf(1:nsv)& 0 & $x \in \mathbb{R}$ & Flux of scalar n at the surface & ppb m s$^{-1}$\\ &&&&\\ ltimedep & .false. & $x\in\{\text{.false.},\text{.true.}\}$ & Switch for timedependent fluxes and large scale forcings & -\\ + ltimedepsv & .false. & $x\in\{\text{.false.},\text{.true.}\}$ & Switch for timedependent fluxes of scalars & -\\ lcoriol & .true. & $x\in\{\text{.false.},\text{.true.}\}$ & Switch for coriolis force & -\\ &&&&\\ \hypertarget{igrw}{igrw\_damp} & 2 & $x \in \{-1,0,1,2,3\}$ & \begin{tabular}{@{\hspace{0cm}}p{6cm}}Flag for gravity wave damping\\0 = no damping \\1 = fast damping of wind to average wind \& slow damping of average to geowind \\2 = fast damping of wind to geowind \\3 = fast damping of wind to average wind \\ -1 = nudging grid averaged wind to wind field provided by lscale.inp\\\end{tabular} & -\\ @@ -297,7 +300,9 @@ \subsection{Namelist RUN}\label{par:run} \begin{supertabular}{|l|p{1.6cm}|p{4.4cm}|p{6cm}|l|} iexpnr & 0 & $x \in \mathbb{N}, \quad 0 \leq x < 1000$ & Experiment number; every output filename ends with [.iexpnr] & -\\ \hypertarget{dtmax}{dtmax} & 20 & $x \in \mathbb{R}, \quad x>0$ & Maximum timestep that is used by the model & s\\ + wctime & 8640000. & $x \in \mathbb{R}, \quad x>0$ & Maximum wall clock time of a simulation & s\\ runtime & 300 & $x \in \mathbb{R}, \quad x>0$ & Total simulation (or: run) time & s\\ + ltotruntime & .false. & $x\in\{\text{.false.},\text{.true.}\}$ & If true, the runtime is counted since the last cold start instead of the last warm start & -\\ lwarmstart& .false. & $x\in\{\text{.false.},\text{.true.}\}$ & Flag for a ``cold'' or a ``warm'' start & -\\ startfile & - & $x = \text{initd\#\#h\#\#mxxx.\#\#\#}$ & Basis for the name of the restartfiles & -\\ trestart & 3600 & $x \in \mathbb{R}, \quad x>0$ & Each $trestart$ seconds, a restart file is written to disk & s\\ @@ -353,11 +358,16 @@ \subsection{Namelist NAMSUBGRID}\label{par:subgrid} lsmagorinsky & .false.& $x\in\{\text{.false.},\text{.true.}\}$ & Switch for smagorinsky subgrid scheme & -\\ cs & -1 & $x \in \mathbb{R}, \quad x>0$ & Smagorinsky constant & -\\ nmason & 2 & $x \in \mathbb{R}, \quad x>0$ & Exponent in Mason correction function & -\\ - sgs\_surface\_fix & .true. & $x\in\{\text{.false.},\text{.true.}\}$ & Switch to apply a fix to the coupling of SFS TKE to the surface (experimental) & - \\ +% sgs\_surface\_fix & .true. & $x\in\{\text{.false.},\text{.true.}\}$ & Switch to apply a fix to the coupling of SFS TKE to the surface (experimental) & - \\ + ch1 & 1.0 & $x \in \mathbb{R}, \quad x>0$ & Subfilter scale parameter & -\\ + ch2 & 2.0 & $x \in \mathbb{R}, \quad x>0$ & Subfilter scale parameter & -\\ + cm & 0.12 & $x \in \mathbb{R}, \quad x>0$ & Subfilter scale parameter & -\\ + ce1 & 0.19 & $x \in \mathbb{R}, \quad x>0$ & Subfilter scale parameter & -\\ + ce2 & 0.51 & $x \in \mathbb{R}, \quad x>0$ & Subfilter scale parameter & -\\ \end{supertabular} \end{center} -\newpage +%\newpage \section{Extra modules}\label{par:extramod} \subsection{Namelist NAMAGScross}\label{par:agscross} @@ -415,6 +425,7 @@ \subsection{Namelist NAMBUDGET}\label{par:budget} \end{supertabular} \end{center} +\newpage \subsection{Namelist NAMBULKMICROSTAT}\label{par:bulkmicrostat} \begin{center} @@ -458,8 +469,8 @@ \subsection{Namelist NAMCANOPY}\label{par:canopy} } \tabletail{ &&&&\\\hline - \multicolumn{5}{c}{}\\ - \multicolumn{5}{r}{\small \it Continued on next page}\\ +% \multicolumn{5}{c}{}\\ +% \multicolumn{5}{r}{\small \it Continued on next page}\\ } \tablelasttail{ &&&&\\\hline @@ -486,6 +497,7 @@ \subsection{Namelist NAMCANOPY}\label{par:canopy} \end{supertabular} \end{center} +\newpage \subsection{Namelist NAMCAPE}\label{par:cape} \begin{center} @@ -513,7 +525,7 @@ \subsection{Namelist NAMCAPE}\label{par:cape} \end{supertabular} \end{center} -\newpage +%\newpage \subsection{Namelist NAMCHECKSIM}\label{par:checksim} \begin{center} @@ -582,7 +594,7 @@ \subsection{Namelist NAMCHEM}\label{par:chem} \end{supertabular} \end{center} -\newpage +%\newpage \subsection{Namelist NAMCLOUDFIELD}\label{par:cloudfield} \begin{center} @@ -643,6 +655,7 @@ \subsection{Namelist NAMCROSSSECTION}\label{par:crosssection} \end{supertabular} \end{center} +\newpage \subsection{Namelist NAMDE}\label{par:deltaeddington} \begin{center} @@ -674,7 +687,7 @@ \subsection{Namelist NAMDE}\label{par:deltaeddington} \end{supertabular} \end{center} -\newpage +%\newpage \subsection{Namelist NAMFIELDDUMP}\label{par:fielddump} \begin{center} @@ -703,6 +716,9 @@ \subsection{Namelist NAMFIELDDUMP}\label{par:fielddump} ldiracc & .false. & $x\in\{\text{.false.},\text{.true.}\}$ & Switch to dump into binary direct access files instead of Fortran unformatted files & -\\ klow & 1 & $x \in \mathbb{N}, \quad 1 \le x \le \text{khigh}$ & Lowest level of the 3d-field output & -\\ khigh & $kmax$ & $x \in \mathbb{N}, \quad \text{klow} \le x \le \text{kmax}$ & Highest level of the 3d-field output & -\\ + ncoarse & 1 & $x \in \mathbb{N}, \quad x \geq 1 $ & Factor by which to reduce (sample) the 3d-field to be written (in each horizontal direction) & -\\ + tmin & 0.0 & $x \in \mathbb{R}, \quad x \geq 0$ & Start time of field dump; not active yet & s \\ + tmax & $10^8$ & $x \in \mathbb{R}, \quad x \geq 0$ & End time of field dump; not active yet & s \\ \end{supertabular} \end{center} @@ -761,7 +777,7 @@ \subsection{Namelist NAMHETEROSTATS}\label{par:namheterostats} \end{supertabular} \end{center} -\newpage +%\newpage \subsection{Namelist NAMLSMCROSSSECTION}\label{par:lsmcrosssection} \begin{center} \tablefirsthead{ @@ -859,6 +875,7 @@ \subsection{Namelist NAMMICROPHYSICS}\label{par:microphysics} Nc\_0 & 70e6 & $x \in \mathbb{R}, \quad x \ge 0$ & Initial number of cloud droplets & -\\ sig\_g & 1.34 & $x \in \mathbb{R}, \quad x \ge 0$ & Geometric standard deviation of the cloud droplet drop size distribution & -\\ sig\_gr & 1.5 & $x \in \mathbb{R}, \quad x \ge 0$ & Geometric standard deviation of the rain droplet drop size distribution & -\\ + courantp & 1.0 & $x \in \mathbb{R}, \quad x>0$ & CFLmax-criterion for precipitation & -\\ \end{supertabular} \end{center} @@ -917,73 +934,10 @@ \subsection{Namelist NAMNUDGE}\label{par:nudge} \end{supertabular} \end{center} -\newpage -\subsection{Namelist NAMPARTICLES}\label{par:particles} -\begin{center} - \tablefirsthead{ - \multicolumn{1}{c}{Option} & \multicolumn{1}{c}{Default} & \multicolumn{1}{c}{Possible values} & \multicolumn{1}{c}{Description} & \multicolumn{1}{c}{Unit}\\ - \hline &&&&\\ - } - \tablehead{ - \multicolumn{5}{l}{\small \it Continued from previous page}\\ - \multicolumn{5}{c}{}\\ - \multicolumn{1}{c}{Option} & \multicolumn{1}{c}{Default} & \multicolumn{1}{c}{Possible values} & \multicolumn{1}{c}{Description} & \multicolumn{1}{c}{Unit}\\ - \hline &&&&\\ - } - \tabletail{ - &&&&\\\hline - \multicolumn{5}{c}{}\\ - \multicolumn{5}{r}{\small \it Continued on next page}\\ - } - \tablelasttail{ - &&&&\\\hline - } -\begin{supertabular}{|l|p{1.6cm}|p{4cm}|p{6cm}|l|} - lpartic & .false. & $x\in\{\text{.false.},\text{.true.}\}$ & Switch to enable/disable this routine & -\\ - lpartsgs & .true. & $x\in\{\text{.false.},\text{.true.}\}$ & Switch for subgrid diffusion & -\\ - &&&&\\ - \multirow{3}{*}{intmeth} & \multirow{3}{*}{3} & \multirow{3}{*}{$x\in\{0,3\}$} & Flag for time integration scheme & \multirow{3}{*}{-}\\ - & & & 0 = particles stand still & \\ - & & & 3 = Adams-Bashfort second order scheme &\\ - &&&&\\ - lstat & .false. & $x\in\{\text{.false.},\text{.true.}\}$ & Switch for particle statistics & -\\ - dtav & 60 & $x = n \cdot \text{dtmax}, \quad n \in \mathbb{N}^*$ & Time interval for sampling of statistics & s\\ - timeav & 3600 & $x = n \cdot \text{dtav}, \quad n \in \mathbb{N}^*$ & Time interval for writing statistics & s\\ - ldump & .false. & $x\in\{\text{.false.},\text{.true.}\}$ & Switch for dump of particle field & -\\ - timedump & 3600 & $x \in \mathbb{R}, \quad x>0$ & Time interval for particle field dump & s\\ - npartdump & 10 & $x \in \mathbb{N}, \quad 0 \leq x \leq 10$ & Number of variables written at $timedump$, in order: $x$, $y$, $z$, $u$, $v$, $w$, $\theta_l$, $\theta_v$, $q_t$, $q_l$ & -\\ -\end{supertabular} -\end{center} +%\newpage + %\newpage -\subsection{Namelist NAMprojection}\label{par:projection} -Old version of modcrosssection (Paragraph \ref{par:crosssection}). Usage of modprojection is not advised. -\begin{center} - \tablefirsthead{ - \multicolumn{1}{c}{Option} & \multicolumn{1}{c}{Default} & \multicolumn{1}{c}{Possible values} & \multicolumn{1}{c}{Description} & \multicolumn{1}{c}{Unit}\\ - \hline &&&&\\ - } - \tablehead{ - \multicolumn{5}{l}{\small \it Continued from previous page}\\ - \multicolumn{5}{c}{}\\ - \multicolumn{1}{c}{Option} & \multicolumn{1}{c}{Default} & \multicolumn{1}{c}{Possible values} & \multicolumn{1}{c}{Description} & \multicolumn{1}{c}{Unit}\\ - \hline &&&&\\ - } - \tabletail{ - &&&&\\\hline - \multicolumn{5}{c}{}\\ - \multicolumn{5}{r}{\small \it Continued on next page}\\ - } - \tablelasttail{ - &&&&\\\hline - } -\begin{supertabular}{|l|p{1.6cm}|p{4cm}|p{6cm}|l|} - lproject & .false. & $x\in\{\text{.false.},\text{.true.}\}$ & Switch to activate dumping of projections of the field & -\\ - dtav & dtav\_glob & $x = n \cdot \text{dtmax}, \quad n \in \mathbb{N}^*$ & Time interval for sampling of statistics & s\\ - projectheight & 2 & $x \in \mathbb{N}^*, \quad x \le \text{kmax}$ & Height of the xy-projection & -\\ -% projectplane & 2 & $x \in \mathbb{N}^*, \quad x \le \frac{\text{jtot}}{N_{\text{processors}}}$ & Position of the xz-plane on every processor & -\\ -\end{supertabular} -\end{center} \subsection{Namelist NAMquadrant}\label{par:quadrant} @@ -1127,7 +1081,6 @@ \subsection{Namelist NAMRADSTAT}\label{par:radstat} \end{supertabular} \end{center} -%\newpage \subsection{Namelist NAMSAMPLING}\label{par:sampling} \begin{center} \tablefirsthead{ @@ -1160,6 +1113,7 @@ \subsection{Namelist NAMSAMPLING}\label{par:sampling} \end{supertabular} \end{center} +\newpage \subsection{Namelist NAMSIMPLEICESTAT}\label{par:simpleicestat} \begin{center} \tablefirsthead{ @@ -1215,33 +1169,8 @@ \subsection{Namelist NAMSTATTEND}\label{par:stattend} \end{supertabular} \end{center} -\newpage -\subsection{Namelist NAMSTRESS}\label{par:stress} -\begin{center} - \tablefirsthead{ - \multicolumn{1}{c}{Option} & \multicolumn{1}{c}{Default} & \multicolumn{1}{c}{Possible values} & \multicolumn{1}{c}{Description} & \multicolumn{1}{c}{Unit}\\ - \hline &&&&\\ - } - \tablehead{ - \multicolumn{5}{l}{\small \it Continued from previous page}\\ - \multicolumn{5}{c}{}\\ - \multicolumn{1}{c}{Option} & \multicolumn{1}{c}{Default} & \multicolumn{1}{c}{Possible values} & \multicolumn{1}{c}{Description} & \multicolumn{1}{c}{Unit}\\ - \hline &&&&\\ - } - \tabletail{ - &&&&\\\hline - \multicolumn{5}{c}{}\\ - \multicolumn{5}{r}{\small \it Continued on next page}\\ - } - \tablelasttail{ - &&&&\\\hline - } -\begin{supertabular}{|l|p{2cm}|p{4cm}|p{6cm}|l|} - lstress & .false. & $x\in\{\text{.false.},\text{.true.}\}$ & Switch for turbulent stress budget & -\\ - dtav & dtav\_glob & $x = n \cdot \text{dtmax}, \quad n \in \mathbb{N}^*$ & Time interval for sampling of statistics & s\\ - timeav & timeav\_glob & $x = n \cdot \text{dtav}, \quad n \in \mathbb{N}^*$ & Time interval for writing statistics & s\\ -\end{supertabular} -\end{center} +%\newpage + %\newpage \subsection{Namelist NAMSURFACE}\label{par:surface} @@ -1312,13 +1241,14 @@ \subsection{Namelist NAMSURFACE}\label{par:surface} phifc & 0.323 & $x \in \mathbb{R}, \quad x > 0$ & volumetric moisture at field capacity & - \\ phiwp & 0.171 & $x \in \mathbb{R}, \quad x > 0$ & volumetric moisture at wilting point & - \\ R10 & 0.23 & $x \in \mathbb{R}, \quad x > 0$ & Respiration at 10 $^{\circ}$C & mg m$^{-2}$ s$^{-1}$ \\ + lsplitleaf & .false. & $x\in\{\text{.false.},\text{.true.}\}$ & Switch to split $\text{A-}\text{g}_\text{s}$ calculations over different parts of the leaf & - \\ \end{supertabular} \end{center} %\newpage -\subsection{Namelist NAMTILT}\label{par:tilt} +\subsection{Namelist NAMTESTBED}\label{par:testbed} \begin{center} \tablefirsthead{ \multicolumn{1}{c}{Option} & \multicolumn{1}{c}{Default} & \multicolumn{1}{c}{Possible values} & \multicolumn{1}{c}{Description} & \multicolumn{1}{c}{Unit}\\ @@ -1339,14 +1269,15 @@ \subsection{Namelist NAMTILT}\label{par:tilt} &&&&\\\hline } \begin{supertabular}{|l|p{2cm}|p{4cm}|p{6cm}|l|} - ltilted & .false. & $x\in\{\text{.false.},\text{.true.}\}$ & Switch for a tilted boundary layer & -\\ - alfa & 0 & $x \in \mathbb{R}, \quad - \frac{\pi}{2} \le x \le \frac{\pi}{2}$ & Tilt angle & rad\\ - lstat & .true. & $x\in\{\text{.false.},\text{.true.}\}$ & Switch for statistics & -\\ - dtav & dtav\_glob & $x = n \cdot \text{dtmax}, \quad n \in \mathbb{N}^*$ & Time interval for sampling of statistics & s\\ - timeav & timeav\_glob & $x = n \cdot \text{dtav}, \quad n \in \mathbb{N}^*$ & Time interval for writing statistics & s\\ + ltestbed & .false. & $x\in\{\text{.false.},\text{.true.}\}$ & Switch for testbed functionality & -\\ + ltb\_nudge & .false. & $x\in\{\text{.false.},\text{.true.}\}$ & Switch for testbed nudging & -\\ + tb\_taunudge & 10800. & $x \in \mathbb{R}, \quad x > 0$ & Nudging timescale & s\\ \end{supertabular} \end{center} +\newpage + + \subsection{Namelist NAMTIMESTAT}\label{par:timestat} \begin{center} \tablefirsthead{ @@ -1386,6 +1317,130 @@ \subsection{Namelist NAMTIMESTAT}\label{par:timestat} \end{supertabular} \end{center} +\section{Addon modules}\label{par:addonmod} + +\subsection{Namelist NAMPARTICLES}\label{par:particles} +\begin{center} + \tablefirsthead{ + \multicolumn{1}{c}{Option} & \multicolumn{1}{c}{Default} & \multicolumn{1}{c}{Possible values} & \multicolumn{1}{c}{Description} & \multicolumn{1}{c}{Unit}\\ + \hline &&&&\\ + } + \tablehead{ + \multicolumn{5}{l}{\small \it Continued from previous page}\\ + \multicolumn{5}{c}{}\\ + \multicolumn{1}{c}{Option} & \multicolumn{1}{c}{Default} & \multicolumn{1}{c}{Possible values} & \multicolumn{1}{c}{Description} & \multicolumn{1}{c}{Unit}\\ + \hline &&&&\\ + } + \tabletail{ + &&&&\\\hline + \multicolumn{5}{c}{}\\ + \multicolumn{5}{r}{\small \it Continued on next page}\\ + } + \tablelasttail{ + &&&&\\\hline + } +\begin{supertabular}{|l|p{1.6cm}|p{4cm}|p{6cm}|l|} + lpartic & .false. & $x\in\{\text{.false.},\text{.true.}\}$ & Switch to enable/disable this routine & -\\ + lpartsgs & .true. & $x\in\{\text{.false.},\text{.true.}\}$ & Switch for subgrid diffusion & -\\ + &&&&\\ + \multirow{3}{*}{intmeth} & \multirow{3}{*}{3} & \multirow{3}{*}{$x\in\{0,3\}$} & Flag for time integration scheme & \multirow{3}{*}{-}\\ + & & & 0 = particles stand still & \\ + & & & 3 = Adams-Bashfort second order scheme &\\ + &&&&\\ + lstat & .false. & $x\in\{\text{.false.},\text{.true.}\}$ & Switch for particle statistics & -\\ + dtav & 60 & $x = n \cdot \text{dtmax}, \quad n \in \mathbb{N}^*$ & Time interval for sampling of statistics & s\\ + timeav & 3600 & $x = n \cdot \text{dtav}, \quad n \in \mathbb{N}^*$ & Time interval for writing statistics & s\\ + ldump & .false. & $x\in\{\text{.false.},\text{.true.}\}$ & Switch for dump of particle field & -\\ + timedump & 3600 & $x \in \mathbb{R}, \quad x>0$ & Time interval for particle field dump & s\\ + npartdump & 10 & $x \in \mathbb{N}, \quad 0 \leq x \leq 10$ & Number of variables written at $timedump$, in order: $x$, $y$, $z$, $u$, $v$, $w$, $\theta_l$, $\theta_v$, $q_t$, $q_l$ & -\\ +\end{supertabular} +\end{center} + +\subsection{Namelist NAMprojection}\label{par:projection} +Old version of modcrosssection (Paragraph \ref{par:crosssection}). Usage of modprojection is not advised. +\begin{center} + \tablefirsthead{ + \multicolumn{1}{c}{Option} & \multicolumn{1}{c}{Default} & \multicolumn{1}{c}{Possible values} & \multicolumn{1}{c}{Description} & \multicolumn{1}{c}{Unit}\\ + \hline &&&&\\ + } + \tablehead{ + \multicolumn{5}{l}{\small \it Continued from previous page}\\ + \multicolumn{5}{c}{}\\ + \multicolumn{1}{c}{Option} & \multicolumn{1}{c}{Default} & \multicolumn{1}{c}{Possible values} & \multicolumn{1}{c}{Description} & \multicolumn{1}{c}{Unit}\\ + \hline &&&&\\ + } + \tabletail{ + &&&&\\\hline + \multicolumn{5}{c}{}\\ + \multicolumn{5}{r}{\small \it Continued on next page}\\ + } + \tablelasttail{ + &&&&\\\hline + } +\begin{supertabular}{|l|p{1.6cm}|p{4cm}|p{6cm}|l|} + lproject & .false. & $x\in\{\text{.false.},\text{.true.}\}$ & Switch to activate dumping of projections of the field & -\\ + dtav & dtav\_glob & $x = n \cdot \text{dtmax}, \quad n \in \mathbb{N}^*$ & Time interval for sampling of statistics & s\\ + projectheight & 2 & $x \in \mathbb{N}^*, \quad x \le \text{kmax}$ & Height of the xy-projection & -\\ +% projectplane & 2 & $x \in \mathbb{N}^*, \quad x \le \frac{\text{jtot}}{N_{\text{processors}}}$ & Position of the xz-plane on every processor & -\\ +\end{supertabular} +\end{center} + +\subsection{Namelist NAMSTRESS}\label{par:stress} +\begin{center} + \tablefirsthead{ + \multicolumn{1}{c}{Option} & \multicolumn{1}{c}{Default} & \multicolumn{1}{c}{Possible values} & \multicolumn{1}{c}{Description} & \multicolumn{1}{c}{Unit}\\ + \hline &&&&\\ + } + \tablehead{ + \multicolumn{5}{l}{\small \it Continued from previous page}\\ + \multicolumn{5}{c}{}\\ + \multicolumn{1}{c}{Option} & \multicolumn{1}{c}{Default} & \multicolumn{1}{c}{Possible values} & \multicolumn{1}{c}{Description} & \multicolumn{1}{c}{Unit}\\ + \hline &&&&\\ + } + \tabletail{ + &&&&\\\hline + \multicolumn{5}{c}{}\\ + \multicolumn{5}{r}{\small \it Continued on next page}\\ + } + \tablelasttail{ + &&&&\\\hline + } +\begin{supertabular}{|l|p{2cm}|p{4cm}|p{6cm}|l|} + lstress & .false. & $x\in\{\text{.false.},\text{.true.}\}$ & Switch for turbulent stress budget & -\\ + dtav & dtav\_glob & $x = n \cdot \text{dtmax}, \quad n \in \mathbb{N}^*$ & Time interval for sampling of statistics & s\\ + timeav & timeav\_glob & $x = n \cdot \text{dtav}, \quad n \in \mathbb{N}^*$ & Time interval for writing statistics & s\\ +\end{supertabular} +\end{center} + +\subsection{Namelist NAMTILT}\label{par:tilt} +\begin{center} + \tablefirsthead{ + \multicolumn{1}{c}{Option} & \multicolumn{1}{c}{Default} & \multicolumn{1}{c}{Possible values} & \multicolumn{1}{c}{Description} & \multicolumn{1}{c}{Unit}\\ + \hline &&&&\\ + } + \tablehead{ + \multicolumn{5}{l}{\small \it Continued from previous page}\\ + \multicolumn{5}{c}{}\\ + \multicolumn{1}{c}{Option} & \multicolumn{1}{c}{Default} & \multicolumn{1}{c}{Possible values} & \multicolumn{1}{c}{Description} & \multicolumn{1}{c}{Unit}\\ + \hline &&&&\\ + } + \tabletail{ + &&&&\\\hline + \multicolumn{5}{c}{}\\ + \multicolumn{5}{r}{\small \it Continued on next page}\\ + } + \tablelasttail{ + &&&&\\\hline + } +\begin{supertabular}{|l|p{2cm}|p{4cm}|p{6cm}|l|} + ltilted & .false. & $x\in\{\text{.false.},\text{.true.}\}$ & Switch for a tilted boundary layer & -\\ + alfa & 0 & $x \in \mathbb{R}, \quad - \frac{\pi}{2} \le x \le \frac{\pi}{2}$ & Tilt angle & rad\\ + lstat & .true. & $x\in\{\text{.false.},\text{.true.}\}$ & Switch for statistics & -\\ + dtav & dtav\_glob & $x = n \cdot \text{dtmax}, \quad n \in \mathbb{N}^*$ & Time interval for sampling of statistics & s\\ + timeav & timeav\_glob & $x = n \cdot \text{dtav}, \quad n \in \mathbb{N}^*$ & Time interval for writing statistics & s\\ +\end{supertabular} +\end{center} + \bibliographystyle{plainnat} \bibliography{literaturenam} diff --git a/utils/doc/input/header.tex b/utils/doc/input/header.tex index 08d0e3ee..1f3f0df1 100644 --- a/utils/doc/input/header.tex +++ b/utils/doc/input/header.tex @@ -46,6 +46,10 @@ \newcommand{\rese}{E} \newcommand{\iftwocol}[2]{\if\else #2\fi} \newcommand{\CFL}{\mr{CFL}} +\newcommand{\+}{\discretionary{\mbox{\scriptsize$\hookleftarrow$}}{}{}} +\newcommand{\clearemptydoublepage}{% + \newpage{\pagestyle{empty}\cleardoublepage}% +} \setcounter{tocdepth}{1} @@ -69,4 +73,4 @@ \chapter{General Introduction} % \includepdf[pages=-]{dales-article.pdf} % \includepdf[pages=-]{dales-manual.pdf} -% \includepdf[pages=-]{git_dales.pdf} \ No newline at end of file +% \includepdf[pages=-]{git_dales.pdf}