Browse Source

avc_pre_iow: isolated changes from avc6

master
Knut 2 years ago
parent
commit
02dc206111
  1. 1
      include/cppdefs.h
  2. 26
      schemas/getm-2.5.defaults
  3. 28
      schemas/getm-2.5.schema
  4. 1
      src/3d/Makefile
  5. 15
      src/3d/adaptive_coordinates.F90
  6. 1332
      src/3d/adaptive_coordinates_6.F90
  7. 32
      src/3d/check_h.F90
  8. 3
      src/3d/dynamic_allocations_3d.h
  9. 2
      src/3d/dynamic_declarations_3d.h
  10. 2
      src/3d/static_3d.h
  11. 7
      src/3d/variables_3d.F90
  12. 8
      src/3d/vertical_coordinates.F90
  13. 1
      src/CMakeLists.txt
  14. 2
      src/futils/getm_version.F90
  15. 2
      src/futils/parameters.F90
  16. 2
      src/getm/register_all_variables.F90
  17. 2
      src/ncdf/init_grid_ncdf.F90
  18. 4
      src/ncdf/save_grid_ncdf.F90
  19. 2
      src/output/output.F90

1
include/cppdefs.h

@ -182,6 +182,7 @@
#define _GENERAL_COORDS_ 3
#define _HYBRID_COORDS_ 4
#define _ADAPTIVE_COORDS_ 5
#define _ADAPTIVE6_COORDS_ 6
! Definition to write NetCDF output reals as single or double precision:
#ifdef _NCDF_SAVE_DOUBLE_

26
schemas/getm-2.5.defaults

@ -767,6 +767,32 @@
<preadapt>0</preadapt>
</adapt_coord>
</adaptcoord>
<adaptcoord6>
<adapt_coord>
<csig>0.01</csig>
<cgvc>0.0</cgvc>
<chsurf>0.5</chsurf>
<chbott>0.3</chbott>
<chmidd>0.2</chmidd>
<cneigh>0.1</cneigh>
<hsurf>0.5</hsurf>
<hbott>-0.25</hbott>
<hmidd>-4.0</hmidd>
<hwallmult>0.8</hwallmult>
<rneigh>0.25</rneigh>
<hpow>3</hpow>
<cNN>0.5</cNN>
<cSS>0.25</cSS>
<d_dens>0.3</d_dens>
<d_vel>0.1</d_vel>
<nfiltvert>2</nfiltvert>
<wfiltvert>0.3</wfiltvert>
<wfilthorz>0.4</wfilthorz>
<hmin>0.3</hmin>
<tgrid>14400.0</tgrid>
<split>1</split>
</adapt_coord>
</adaptcoord6>
<getm_fabm>
<getm_fabm_nml>
<fabm_init_method>1</fabm_init_method>

28
schemas/getm-2.5.schema

@ -46,6 +46,7 @@
<option value="2" label="z-level"/>
<option value="3" label="general vertical coordinates (gvc)"/>
<option value="5" label="adaptive coordinates"/>
<option value="6" label="adaptive coordinates (rewrite)"/>
</options>
</element>
<element name="maxdepth" type="float" label="maximum depth in active calculation domain" unit="m">
@ -1109,6 +1110,33 @@
<element name="preadapt" type="int" label="pre-adaptation iterations"/>
</element>
</element>
<element name="adaptcoord6" optional="True">
<condition type="eq" variable="getm/domain/vert_cord" value="6"/>
<element name="adapt_coord" label="adaptive coordinates 6 parameters">
<element name="csig" type="float" label="tendency to uniform sigma, aka background" minInclusive="0"/>
<element name="cgvc" type="float" label="tendency to standard gvc (w/ ddu, ddl, D_gamma)" minInclusive="0"/>
<element name="chsurf" type="float" label="tendency to keep surface layer bounded" minInclusive="0"/>
<element name="chbott" type="float" label="tendency to keep bottom layer bounded" minInclusive="0"/>
<element name="chmidd" type="float" label="tendency to keep all layers bounded" minInclusive="0"/>
<element name="cneigh" type="float" label="tendency to keep neighbors of similar size" minInclusive="0"/>
<element name="hsurf" type="float" label="reference thickness of surface layer (if negative: relative to avg cell)" unit="m (or 1)"/>
<element name="hbott" type="float" label="reference thickness of bottom layer (if negative: relative to avg cell)" unit="m (or 1)"/>
<element name="hmidd" type="float" label="reference thickness of other layers (if negative: relative to avg cell)" unit="m (or 1)"/>
<element name="hwallmult" type="float" label="surface/bottom effect - decay by layer" minInclusive="0" maxExclusive="1"/>
<element name="rneigh" type="float" label="reference relative growth between neighbors" minInclusive="0"/>
<element name="hpow" type="int" label="exponent for growth of Dgrid (ramp between 0 and c* tendencies)" minInclusive="1"/>
<element name="cNN" type="float" label="dependence on NN (density zooming)" minInclusive="0"/>
<element name="cSS" type="float" label="dependence on SS (shear zooming)" minInclusive="0"/>
<element name="d_dens" type="float" label="density difference between neighbor cells for reference NN" unit="kg/m³"/>
<element name="d_vel" type="float" label="velocity difference between neighbor cells for reference SS" unit="m/s"/>
<element name="nfiltvert" type="int" label="Number of vertical Dgrid filter iterations" minInclusive="0"/>
<element name="wfiltvert" type="float" label="Strength of vertical filter-of-Dgrid [0:~0.5]" minInclusive="0" maxInclusive="1"/>
<element name="wfilthorz" type="float" label="Strength of horizontal filter-of-Dgrid [0:~0.5]"/>
<element name="hmin" type="float" label="minimum thickness" unit="m" minExclusive="0"/>
<element name="tgrid" type="float" label="Time scale of grid adaptation" unit="s" minExclusive="0"/>
<element name="split" type="int" label="Take this many partial-steps for diffusion eq." minInclusive="1"/>
</element>
</element>
<element name="getm_fabm" optional="True">
<element name="getm_fabm_nml" label="parameters related to treatment of fabm quantities inside getm">
<element name="fabm_init_method" type="int" label="fabm init method">

1
src/3d/Makefile

@ -58,6 +58,7 @@ $(LIB)(sigma_coordinates.o) \
$(LIB)(general_coordinates.o) \
$(LIB)(hybrid_coordinates.o) \
$(LIB)(adaptive_coordinates.o) \
$(LIB)(adaptive_coordinates_6.o) \
$(LIB)(preadapt_coordinates.o) \
$(LIB)(uu_momentum_3d.o) \
$(LIB)(vv_momentum_3d.o) \

15
src/3d/adaptive_coordinates.F90

@ -55,6 +55,7 @@
use variables_3d, only: Dn,Dun,Dvn,sseo,ssen
use variables_3d, only: kmin_pmz,kumin_pmz,kvmin_pmz
use variables_3d, only: preadapt
use variables_3d, only: Dgrid
use vertical_coordinates,only: hcheck
use vertical_coordinates,only: restart_with_ho,restart_with_hn
@ -452,13 +453,21 @@ STDERR 'adaptive_coordinates()'
! Calculation of grid diffusivity
do k=1,kmax
aav(k)=H(i,j)/tgrid*(c1ad*avn(k)+c2ad*avs(k)+ &
c3ad*avd(k)+c4ad/H(i,j))
aav(k)=aav(k)*dtgrid*kmax**2/100.
c3ad*avd(k)+c4ad/H(i,j)) * (kmax**2/100.)
end do
do k=1,kmax
! Minimum layer thickness
if ((gaa(k)-gaa(k-1)).lt.0.001/float(kmax)) aav(k)=0.
! if (hn(i,j,k).le.depthmin) aav(k)=0.
end do
!
! Store grid diffusivity in global array for output purposes:
Dgrid(i,j,:) = aav(:)
! Add dt for final tridiag term:
do k=1,kmax
aav(k)=aav(k)*dtgrid
end do
!
do k=1,kmax-1
aau(k)=-aav(k)
cu(k)=-aav(k+1)

1332
src/3d/adaptive_coordinates_6.F90

File diff suppressed because it is too large Load Diff

32
src/3d/check_h.F90

@ -5,17 +5,20 @@
! !DESCRIPTION:
!
! !USES:
use domain, only: imin,imax,jmin,jmax,kmax,H
use domain, only: imin,imax,jmin,jmax,kmax,H,az
IMPLICIT NONE
REALTYPE :: zpos(I3DFIELD),hn(I3DFIELD),depthmin
integer :: i,j,k
do k=1,kmax
do j=jmin-HALO,jmax+HALO
do i=imin-HALO,imax+HALO
hn(i,j,k)= zpos(i,j,k)-zpos(i,j,k-1)
hn(i,j,k)=max(hn(i,j,k),depthmin)
enddo
enddo
do i=imin-HALO,imax+HALO
! TODO/BJB: If hn is initialized everywhere, then this if- may not be necessary?:
if (az(i,j) .ge. 1) then
hn(i,j,k)= zpos(i,j,k)-zpos(i,j,k-1)
hn(i,j,k)=max(hn(i,j,k),depthmin)
end if
enddo
enddo
enddo
! End Back to layer thickness
return
@ -26,18 +29,21 @@
! !DESCRIPTION:
!
! !USES:
use domain, only: imin,imax,jmin,jmax,kmax,H
use domain, only: imin,imax,jmin,jmax,kmax,H,az
IMPLICIT NONE
REALTYPE :: zpos(I3DFIELD),hn(I3DFIELD),depthmin
integer :: i,j,k
! write(6,*) 'htoz',imax,hn(imax/2,2,kmax/2),H(imax/2,2)
do j=jmin-HALO,jmax+HALO
do i=imin-HALO,imax+HALO
zpos(i,j,0)=-H(i,j)
do k=1,kmax
zpos(i,j,k)=zpos(i,j,k-1)+hn(i,j,k)
enddo
enddo
do i=imin-HALO,imax+HALO
! TODO/BJB: If hn is initialized everywhere, then this if- may not be necessary?:
if (az(i,j) .ge. 1) then
zpos(i,j,0)=-H(i,j)
do k=1,kmax
zpos(i,j,k)=zpos(i,j,k-1)+hn(i,j,k)
enddo
end if
enddo
enddo
return
end

3
src/3d/dynamic_allocations_3d.h

@ -274,3 +274,6 @@
allocate(bioshade(I3DFIELD),stat=rc)
if (rc /= 0) stop 'init_3d: Error allocating memory (bioshade)'
allocate(Dgrid(I3DFIELD),stat=rc)
if (rc /= 0) stop 'init_3d: Error allocating memory (Dgrid)'

2
src/3d/dynamic_declarations_3d.h

@ -66,3 +66,5 @@
! attenuation
REALTYPE, dimension(:,:), allocatable :: A,g1,g2
REALTYPE, allocatable, dimension(:,:,:), target :: bioshade
REALTYPE, dimension(:,:,:), allocatable, target :: Dgrid

2
src/3d/static_3d.h

@ -100,3 +100,5 @@
REALTYPE,target :: g1(I2DFIELD)
REALTYPE,target :: g2(I2DFIELD)
REALTYPE,target :: bioshade(I3DFIELD)
REALTYPE, dimension(I3DFIELD), target :: Dgrid

7
src/3d/variables_3d.F90

@ -343,6 +343,11 @@
g1 = -9999._rk
g2 = -9999._rk
Dgrid = -9999._rk
forall(i=imin-HALO:imax+HALO, j=jmin-HALO:jmax+HALO, az(i,j).ne.0)
Dgrid(i,j,1:kmax) = _ZERO_
end forall
#ifdef STRUCTURE_FRICTION
sf = _ZERO_
#endif
@ -642,6 +647,8 @@
call fm%register('numdis_3d', 'm*W/kg', 'numerical dissipation content (3D)', standard_name='', dimensions=(/id_dim_z/), category='3d', output_level=output_level_debug, used=save_numdis_3d)
call fm%register('phydis_3d', 'W/kg', 'physical dissipation (3D)' , standard_name='', dimensions=(/id_dim_z/), category='3d', output_level=output_level_debug, used=save_phydis_3d)
call fm%register('Dgrid', '1/s', 'grid diffusivity' , standard_name='', dimensions=(/id_dim_z/), data3d=Dgrid(_3D_W_), category='3d', fill_value=-9999.0_rk, output_level=output_level_debug)
if (associated(taubmax_3d)) then
call fm%register('taubmax_3d', 'm2/s2', 'max. bottom stress', standard_name='', data2d=taubmax_3d(_2D_W_), category='3d', fill_value=-9999.0_rk, output_level=output_level_debug)
end if

8
src/3d/vertical_coordinates.F90

@ -99,6 +99,8 @@ STDERR 'init_vertical_coordinates(): hybrid_coordinates not coded yet'
stop
case (_ADAPTIVE_COORDS_) ! adaptive vertical coordinates
LEVEL3 'using adaptive vertical coordinates:',kmax,' adaptive layers'
case (_ADAPTIVE6_COORDS_) ! adaptive vertical coordinates
LEVEL3 'using adaptive vertical coordinates (rewrite):',kmax,' adaptive layers'
case default
end select
@ -182,6 +184,8 @@ STDERR 'coordinates(): hybrid_coordinates not coded yet'
stop
case (_ADAPTIVE_COORDS_) ! adaptive vertical coordinates
call adaptive_coordinates(.true.,hotstart)
case (_ADAPTIVE6_COORDS_) ! adaptive vertical coordinates
call adaptive_coordinates_6(.true.,hotstart)
case default
end select
if (.not. hotstart) then
@ -202,6 +206,8 @@ stop
call hybrid_coordinates(.false.)
case (_ADAPTIVE_COORDS_) ! adaptive vertical coordinates
call adaptive_coordinates(.false.,hotstart)
case (_ADAPTIVE6_COORDS_) ! adaptive vertical coordinates
call adaptive_coordinates_6(.false.,hotstart)
case default
end select
end if ! first
@ -300,7 +306,7 @@ stop
do j=jmin-HALO,jmax+HALO
do i=imin-HALO,imax+HALO
if (mask(i,j) .ne. 0) then
HH=0.
HH=_ZERO_
do k=1,kmax
HH=HH+hn(i,j,k)
end do

1
src/CMakeLists.txt

@ -168,6 +168,7 @@ set_property(TARGET 2d APPEND PROPERTY INCLUDE_DIRECTORIES "${PROJECT_SOURCE_DIR
add_library(3d OBJECT
3d/adaptive_coordinates.F90
3d/adaptive_coordinates_6.F90
3d/advection_3d.F90
3d/adv_split_w.F90
3d/bdy_3d.F90

2
src/futils/getm_version.F90

@ -1,4 +1,4 @@
module getm_version
character(len=*),parameter :: git_commit_id = "2.5.0"
character(len=*),parameter :: git_branch_name = "REAL_4B"
character(len=*),parameter :: git_branch_name = "avc6_pre_iow"
end module

2
src/futils/parameters.F90

@ -17,6 +17,8 @@
IMPLICIT NONE
!
! !PUBLIC DATA MEMBERS:
integer, parameter :: rk = kind(_ONE_)
! Physical Constants
REALTYPE :: g = 9.81d0
REALTYPE :: rho_0 = 1025.0d0

2
src/getm/register_all_variables.F90

@ -116,7 +116,7 @@
zname = 'z'
zlongname = 'geopotential'
zunits = 'm'
case (3,4,5)
case (3,4,5,6)
zname = 'level'
zlongname = 'general vertical coordinates'
zunits = 'level'

2
src/ncdf/init_grid_ncdf.F90

@ -112,7 +112,7 @@
case (2)
zname = 'z'
zunits = 'm'
case (3,4,5)
case (3,4,5,6)
zname = 'level'
zunits = 'level'
case default

4
src/ncdf/save_grid_ncdf.F90

@ -407,7 +407,7 @@
zname = 'sigma'
case (2)
zname = 'z'
case (3,4,5)
case (3,4,5,6)
zname = 'level'
case default
end select
@ -416,7 +416,7 @@
if (status .ne. NF90_NOERR) call netcdf_error(status, &
"save_grid_ncdf()","z_id -")
select case (vert_cord)
case (1,2,3,4,5)
case (1,2,3,4,5,6)
status = nf90_put_var(ncid,id,ga)
if (status .ne. NF90_NOERR) call netcdf_error(status, &
"save_grid_ncdf()","ga -")

2
src/output/output.F90

@ -231,7 +231,7 @@
if (.not.save_h .and. (save_3d .or. save_mean)) then
select case (vert_cord)
case (_GENERAL_COORDS_,_HYBRID_COORDS_,_ADAPTIVE_COORDS_)
case (_GENERAL_COORDS_,_HYBRID_COORDS_,_ADAPTIVE_COORDS_,_ADAPTIVE6_COORDS_)
save_h = .true.
case default
end select

Loading…
Cancel
Save