My Project
Functions/Subroutines | Variables
scalar Module Reference

Functions/Subroutines

subroutine adv_scal (f, f0, f2, fn, d_fdis, fdis, d_fflux, fflux_obc, deltat, source)
 
subroutine vdif_scal (f, deltat)
 
subroutine bcond_scal_ptsource (f, fn, fdis)
 
subroutine bcond_scal_obc (f, fn, fflux_obc, f_obc, deltat, alpha_nudge)
 
subroutine fct_sed (f, fn)
 
subroutine calc_vflux (n, c, w, zk, flux)
 
real(sp) function lim (a, b)
 
subroutine limit_hor_flux_scal (fka, fkb, ia, ib, Da, Db, ele_num, delt, exflux)
 

Variables

logical, parameter debug = .true.
 

Function/Subroutine Documentation

◆ adv_scal()

subroutine scalar::adv_scal ( real(sp), dimension(0:mt,kb), intent(in)  f,
real(sp), dimension(0:mt,kb), intent(in)  f0,
real(sp), dimension(0:mt,kb), intent(in)  f2,
real(sp), dimension(0:mt,kb), intent(out)  fn,
integer, intent(in)  d_fdis,
real(sp), dimension(d_fdis), intent(in)  fdis,
integer, intent(in)  d_fflux,
real(sp), dimension(d_fflux,kbm1), intent(out)  fflux_obc,
real(sp), intent(in)  deltat,
logical, intent(in)  source 
)

Definition at line 60 of file mod_scal.f90.

60 !J. Ge for tracer advection
61 
62 !------------------------------------------------------------------------------|
63 
64  use all_vars
65  use lims, only: m,mt,n,nt,kbm1,kb
66  use bcs
67  use mod_obcs
68  use mod_wd
69 
70 
71  implicit none
72  real(sp), intent(in ), dimension(0:mt,kb) :: f
73 !J. Ge for tracer advection
74  real(sp), intent(in ), dimension(0:mt,kb) :: f0,f2
75 !J. Ge for tracer advection
76  real(sp), intent(out), dimension(0:mt,kb) :: fn
77  integer , intent(in ) :: d_fdis
78  real(sp), intent(in ), dimension(d_fdis) :: fdis
79  integer , intent(in ) :: d_fflux
80  real(sp), intent(out), dimension(d_fflux,kbm1) :: fflux_obc
81  real(sp), intent(in ) :: deltat
82  logical , intent(in ) :: source
83 
84  !----------------local--------------------------------------
85  real(sp), dimension(0:mt,kb) :: xflux,xflux_adv
86  real(sp), dimension(m) :: pupx,pupy,pvpx,pvpy
87  real(sp), dimension(m) :: pfpx,pfpy,pfpxd,pfpyd,viscoff
88  real(sp), dimension(3*nt,kb) :: dtij
89  real(sp), dimension(3*nt,kbm1) :: uvn
90  real(sp), dimension(kb) :: vflux
91  real(sp) :: utmp,vtmp,sitai,ffd,ff1,x11,y11,x22,y22,x33,y33
92  real(sp) :: tmp1,tmp2,xi,yi
93  real(sp) :: dxa,dya,dxb,dyb,fij1,fij2,un
94  real(sp) :: txx,tyy,fxx,fyy,viscof,exflux,temp,fpoint
95  real(sp) :: fact,fm1,fmean
96  integer :: i,i1,i2,ia,ib,j,j1,j2,k,jtmp,jj
97 !J. Ge for tracer advectio
98  real(sp),dimension(kb) :: ftmp
99 !J. Ge for tracer advection
100 
101  real(sp) :: da,db,ds
102 
103 
104 
105 !------------------------------------------------------------------------------!
106 
107 !-------------------------------------------------------
108 !Calculate Mean Values
109 !-------------------------------------------------------
110 
111  fmean = sum(f(1:m,1:kbm1))/float(m*kbm1)
112 
113 !-------------------------------------------------------
114 !Initialize Multipliers to Control Horizontal Diff
115 !-------------------------------------------------------
116 
117  fact = 0.0_sp
118  fm1 = 1.0_sp
119  if(horizontal_mixing_type == 'closure') then
120  fact = 1.0_sp
121  fm1 = 0.0_sp
122  end if
123 
124 !-------------------------------------------------------
125 !Initialize Fluxes
126 !-------------------------------------------------------
127  xflux = 0.0_sp
128  xflux_adv = 0.0_sp
129 
130 !-------------------------------------------------------
131 !Calculate Normal Velocity on Control Volume Edges
132 !-------------------------------------------------------
133 !!# if !defined (1)
134  do i=1,ncv
135  i1=ntrg(i)
136  !dtij(i)=dt1(i1)
137  do k=1,kbm1
138  dtij(i,k)=dt1(i1)*dz1(i1,k)
139  uvn(i,k) = v(i1,k)*dltxe(i) - u(i1,k)*dltye(i)
140 
141 
142  end do
143  end do
144 !!# else
145 !! do i=1,ncv
146 !! i1=ntrg(i)
147 !! dtij(i)=dt1(i1)
148 !! do k=1,kbm1
149 !! uvn(i,k) = vs(i1,k)*dltxe(i) - us(i1,k)*dltye(i)
150 !! end do
151 !! end do
152 !!# endif
153 
154 !
155 !--Calculate the Advection and Horizontal Diffusion Terms----------------------!
156 !
157 
158  do k=1,kbm1
159  pfpx = 0.0_sp
160  pfpy = 0.0_sp
161  pfpxd = 0.0_sp
162  pfpyd = 0.0_sp
163  do i=1,m
164  do j=1,ntsn(i)-1
165  i1=nbsn(i,j)
166  i2=nbsn(i,j+1)
167 
168 ! IF(ISWETN(I1) == 0 .AND. ISWETN(I2) == 1)THEN
169 ! FFD=0.5_SP*(f(I,K)+f(I2,K))
170 ! FF1=0.5_SP*(f(I,K)+f(I2,K))
171 ! ELSE IF(ISWETN(I1) == 1 .AND. ISWETN(I2) == 0)THEN
172 ! FFD=0.5_SP*(f(I1,K)+f(I,K))
173 ! FF1=0.5_SP*(f(I1,K)+f(I,K))
174 ! ELSE IF(ISWETN(I1) == 0 .AND. ISWETN(I2) == 0)THEN
175 ! FFD=0.5_SP*(f(I,K)+f(I,K))
176 ! FF1=0.5_SP*(f(I,K)+f(I,K))
177 ! ELSE
178 ! FFD=0.5_SP*(f(I1,K)+f(I2,K))
179 ! FF1=0.5_SP*(f(I1,K)+f(I2,K))
180 ! END IF
181 
182 !J. Ge for tracer advection
183  IF(backward_advection/=.true.)THEN
184  IF(iswetn(i1) == 0 .AND. iswetn(i2) == 1)THEN
185  ffd=0.5_sp*(f(i,k)+f(i2,k))
186  ff1=0.5_sp*(f(i,k)+f(i2,k))
187  ELSE IF(iswetn(i1) == 1 .AND. iswetn(i2) == 0)THEN
188  ffd=0.5_sp*(f(i1,k)+f(i,k))
189  ff1=0.5_sp*(f(i1,k)+f(i,k))
190  ELSE IF(iswetn(i1) == 0 .AND. iswetn(i2) == 0)THEN
191  ffd=0.5_sp*(f(i,k)+f(i,k))
192  ff1=0.5_sp*(f(i,k)+f(i,k))
193  ELSE
194  ffd=0.5_sp*(f(i1,k)+f(i2,k))
195  ff1=0.5_sp*(f(i1,k)+f(i2,k))
196  END IF
197  ELSE
198  IF(backward_step==1)THEN
199  IF(iswetn(i1) == 0 .AND. iswetn(i2) == 1)THEN
200  ffd=0.5_sp*((f0(i,k)+f(i,k))*0.5+(f0(i2,k)+f(i2,k))*0.5)
201  ff1=0.5_sp*((f0(i,k)+f(i,k))*0.5+(f0(i2,k)+f(i2,k))*0.5)
202  ELSE IF(iswetn(i1) == 1 .AND. iswetn(i2) == 0)THEN
203  ffd=0.5_sp*((f0(i1,k)+f(i1,k))*0.5+(f0(i,k)+f(i,k))*0.5)
204  ff1=0.5_sp*((f0(i1,k)+f(i1,k))*0.5+(f0(i,k)+f(i,k))*0.5)
205  ELSE IF(iswetn(i1) == 0 .AND. iswetn(i2) == 0)THEN
206  ffd=0.5_sp*((f0(i,k)+f(i,k))*0.5+(f0(i,k)+f(i,k))*0.5)
207  ff1=0.5_sp*((f0(i,k)+f(i,k))*0.5+(f0(i,k)+f(i,k))*0.5)
208  ELSE
209  ffd=0.5_sp*((f0(i1,k)+f(i1,k))*0.5+(f0(i2,k)+f(i2,k))*0.5)
210  ff1=0.5_sp*((f0(i1,k)+f(i1,k))*0.5+(f0(i2,k)+f(i2,k))*0.5)
211  END IF
212  ELSEIF(backward_step==2)THEN
213  IF(iswetn(i1) == 0 .AND. iswetn(i2) == 1)THEN
214  ffd=0.5_sp*((f2(i,k)+f0(i,k)+f(i,k))/3.0_sp+(f2(i2,k)+f0(i2,k)+f(i2,k))/3.0_sp)
215  ff1=0.5_sp*((f2(i,k)+f0(i,k)+f(i,k))/3.0_sp+(f2(i2,k)+f0(i2,k)+f(i2,k))/3.0_sp)
216  ELSE IF(iswetn(i1) == 1 .AND. iswetn(i2) == 0)THEN
217  ffd=0.5_sp*((f2(i1,k)+f0(i1,k)+f(i1,k))/3.0_sp+(f2(i,k)+f0(i,k)+f(i,k))/3.0_sp)
218  ff1=0.5_sp*((f2(i1,k)+f0(i1,k)+f(i1,k))/3.0_sp+(f2(i,k)+f0(i,k)+f(i,k))/3.0_sp)
219  ELSE IF(iswetn(i1) == 0 .AND. iswetn(i2) == 0)THEN
220  ffd=0.5_sp*((f2(i,k)+f0(i,k)+f(i,k))/3.0_sp+(f2(i,k)+f0(i,k)+f(i,k))/3.0_sp)
221  ff1=0.5_sp*((f2(i,k)+f0(i,k)+f(i,k))/3.0_sp+(f2(i,k)+f0(i,k)+f(i,k))/3.0_sp)
222  ELSE
223  ffd=0.5_sp*((f2(i1,k)+f0(i1,k)+f(i1,k))/3.0_sp+(f2(i2,k)+f0(i2,k)+f(i2,k))/3.0_sp)
224  ff1=0.5_sp*((f2(i1,k)+f0(i1,k)+f(i1,k))/3.0_sp+(f2(i2,k)+f0(i2,k)+f(i2,k))/3.0_sp)
225  END IF
226  ENDIF
227 
228  END IF
229 !J. Ge for tracer advection
230 
231  pfpx(i) = pfpx(i) +ff1*(vy(i1)-vy(i2))
232  pfpy(i) = pfpy(i) +ff1*(vx(i2)-vx(i1))
233  pfpxd(i)= pfpxd(i)+ffd*(vy(i1)-vy(i2))
234  pfpyd(i)= pfpyd(i)+ffd*(vx(i2)-vx(i1))
235  end do
236 
237 ! gather all neighboring control volumes connecting at dam node
238 
239  pfpx(i) =pfpx(i )/art2(i)
240  pfpy(i) =pfpy(i )/art2(i)
241  pfpxd(i) =pfpxd(i)/art2(i)
242  pfpyd(i) =pfpyd(i)/art2(i)
243 
244  end do
245 
246  if(k == kbm1)then
247  do i=1,m
248  pfpxb(i) = pfpx(i)
249  pfpyb(i) = pfpy(i)
250  end do
251  end if
252 
253  do i=1,m
254  pupx(i)=0.0_sp
255  pupy(i)=0.0_sp
256  pvpx(i)=0.0_sp
257  pvpy(i)=0.0_sp
258  j=1
259  i1=nbve(i,j)
260  jtmp=nbvt(i,j)
261  j1=jtmp+1-(jtmp+1)/4*3
262  j2=jtmp+2-(jtmp+2)/4*3
263  x11=0.5_sp*(vx(i)+vx(nv(i1,j1)))
264  y11=0.5_sp*(vy(i)+vy(nv(i1,j1)))
265  x22=xc(i1)
266  y22=yc(i1)
267  x33=0.5_sp*(vx(i)+vx(nv(i1,j2)))
268  y33=0.5_sp*(vy(i)+vy(nv(i1,j2)))
269 
270  pupx(i)=pupx(i)+u(i1,k)*(y11-y33)
271  pupy(i)=pupy(i)+u(i1,k)*(x33-x11)
272  pvpx(i)=pvpx(i)+v(i1,k)*(y11-y33)
273  pvpy(i)=pvpy(i)+v(i1,k)*(x33-x11)
274 
275  if(isonb(i) /= 0) then
276  pupx(i)=pupx(i)+u(i1,k)*(vy(i)-y11)
277  pupy(i)=pupy(i)+u(i1,k)*(x11-vx(i))
278  pvpx(i)=pvpx(i)+v(i1,k)*(vy(i)-y11)
279  pvpy(i)=pvpy(i)+v(i1,k)*(x11-vx(i))
280  end if
281 
282  do j=2,ntve(i)-1
283  i1=nbve(i,j)
284  jtmp=nbvt(i,j)
285  j1=jtmp+1-(jtmp+1)/4*3
286  j2=jtmp+2-(jtmp+2)/4*3
287  x11=0.5_sp*(vx(i)+vx(nv(i1,j1)))
288  y11=0.5_sp*(vy(i)+vy(nv(i1,j1)))
289  x22=xc(i1)
290  y22=yc(i1)
291  x33=0.5_sp*(vx(i)+vx(nv(i1,j2)))
292  y33=0.5_sp*(vy(i)+vy(nv(i1,j2)))
293 
294  pupx(i)=pupx(i)+u(i1,k)*(y11-y33)
295  pupy(i)=pupy(i)+u(i1,k)*(x33-x11)
296  pvpx(i)=pvpx(i)+v(i1,k)*(y11-y33)
297  pvpy(i)=pvpy(i)+v(i1,k)*(x33-x11)
298  end do
299  j=ntve(i)
300  i1=nbve(i,j)
301  jtmp=nbvt(i,j)
302  j1=jtmp+1-(jtmp+1)/4*3
303  j2=jtmp+2-(jtmp+2)/4*3
304  x11=0.5_sp*(vx(i)+vx(nv(i1,j1)))
305  y11=0.5_sp*(vy(i)+vy(nv(i1,j1)))
306  x22=xc(i1)
307  y22=yc(i1)
308  x33=0.5_sp*(vx(i)+vx(nv(i1,j2)))
309  y33=0.5_sp*(vy(i)+vy(nv(i1,j2)))
310 
311  pupx(i)=pupx(i)+u(i1,k)*(y11-y33)
312  pupy(i)=pupy(i)+u(i1,k)*(x33-x11)
313  pvpx(i)=pvpx(i)+v(i1,k)*(y11-y33)
314  pvpy(i)=pvpy(i)+v(i1,k)*(x33-x11)
315 
316  if(isonb(i) /= 0) then
317  pupx(i)=pupx(i)+u(i1,k)*(y11-vy(i))
318  pupy(i)=pupy(i)+u(i1,k)*(vx(i)-x11)
319  pvpx(i)=pvpx(i)+v(i1,k)*(y11-vy(i))
320  pvpy(i)=pvpy(i)+v(i1,k)*(vx(i)-x11)
321  end if
322  pupx(i)=pupx(i)/art1(i)
323  pupy(i)=pupy(i)/art1(i)
324  pvpx(i)=pvpx(i)/art1(i)
325  pvpy(i)=pvpy(i)/art1(i)
326  tmp1=pupx(i)**2+pvpy(i)**2
327  tmp2=0.5_sp*(pupy(i)+pvpx(i))**2
328  viscoff(i)=sqrt(tmp1+tmp2)*art1(i)
329  end do
330 ! if(k == kbm1) then
331 ! ah_bottom(1:m) = horcon*(fact*viscoff(1:m) + fm1)
332 ! end if
333 
334 
335  do i=1,ncv_i
336  ia=niec(i,1)
337  ib=niec(i,2)
338  xi=0.5_sp*(xije(i,1)+xije(i,2))
339  yi=0.5_sp*(yije(i,1)+yije(i,2))
340  dxa=xi-vx(ia)
341  dya=yi-vy(ia)
342  dxb=xi-vx(ib)
343  dyb=yi-vy(ib)
344 
345 ! fij1=f(ia,k)+dxa*pfpx(ia)+dya*pfpy(ia)
346 ! fij2=f(ib,k)+dxb*pfpx(ib)+dyb*pfpy(ib)
347 !J. Ge for tracer advection
348  IF(backward_advection/=.true.)THEN
349  fij1=f(ia,k)+dxa*pfpx(ia)+dya*pfpy(ia)
350  fij2=f(ib,k)+dxb*pfpx(ib)+dyb*pfpy(ib)
351  ELSE
352  IF(backward_step==1)THEN
353  fij1=(f0(ia,k)+f(ia,k))*0.5+dxa*pfpx(ia)+dya*pfpy(ia)
354  fij2=(f0(ib,k)+f(ib,k))*0.5+dxb*pfpx(ib)+dyb*pfpy(ib)
355  ELSEIF(backward_step==2)THEN
356  fij1=(f2(ia,k)+f0(ia,k)+f(ia,k))/3.0_sp+dxa*pfpx(ia)+dya*pfpy(ia)
357  fij2=(f2(ib,k)+f0(ib,k)+f(ib,k))/3.0_sp+dxb*pfpx(ib)+dyb*pfpy(ib)
358  ENDIF
359  ENDIF
360 !J. Ge for tracer advection
361  un=uvn(i,k)
362 
363 ! viscof=horcon*(fact*(viscoff(ia)+viscoff(ib))*0.5_sp + fm1)
364  viscof=(fact*0.5_sp*(viscoff(ia)*nn_hvc(ia)+viscoff(ib)*nn_hvc(ib)) + fm1*0.5_sp*(nn_hvc(ia)+nn_hvc(ib)))
365 
366  txx=0.5_sp*(pfpxd(ia)+pfpxd(ib))*viscof
367  tyy=0.5_sp*(pfpyd(ia)+pfpyd(ib))*viscof
368 
369  fxx=-dtij(i,k)*txx*dltye(i)
370  fyy= dtij(i,k)*tyy*dltxe(i)
371 
372 
373  exflux=-un*dtij(i,k)* &
374  ((1.0_sp+sign(1.0_sp,un))*fij2+(1.0_sp-sign(1.0_sp,un))*fij1)*0.5_sp+fxx+fyy
375 
376 
377  ! --------- new: 14-02-2012 ,K.Lettmann ------
378  ! Limit the total flux according to the amount
379  ! of mass within the respective neigbour control volumnes
380 
381  da = dz(ia,k)*dt(ia)
382  db = dz(ib,k)*dt(ib)
383  ds = 0.5_sp*( dz(ia,k) + dz(ib,k) ) ! Approximation of water depth for segment in sigma units
384 
385  exflux = exflux / ds ! trafo to old eflux unit (FVCOM 2.7)
386  call limit_hor_flux_scal(f(ia,k),f(ib,k),ia,ib,da,db,ntrg(i),deltat,exflux)
387  exflux = exflux * ds ! trafo back to new eflux unit (>FVCOM 3.1.4)
388  ! --------------------------------------------
389 
390 
391  xflux(ia,k)=xflux(ia,k)+exflux
392  xflux(ib,k)=xflux(ib,k)-exflux
393 
394  xflux_adv(ia,k)=xflux_adv(ia,k)+(exflux-fxx-fyy)
395  xflux_adv(ib,k)=xflux_adv(ib,k)-(exflux-fxx-fyy)
396 
397  end do
398  end do !!sigma loop
399 
400 !---------------------------------------------------------------------------------
401 ! Accumulate Fluxes at Boundary Nodes
402 !---------------------------------------------------------------------------------
403 
404 
405 !---------------------------------------------------------------------------------
406 ! Store Advective Fluxes at the Boundary
407 !---------------------------------------------------------------------------------
408  do k=1,kbm1
409  if(iobcn > 0) then
410  do i=1,iobcn
411  i1=i_obc_n(i)
412  fflux_obc(i,k)=xflux_adv(i1,k)
413  end do
414  end if
415  end do
416 
417 !---------------------------------------------------------------------------------
418 ! Calculate Vertical Advection Terms
419 !---------------------------------------------------------------------------------
420 
421  do i=1,m
422  if(iswetn(i)*iswetnt(i) == 1) then
423 !J. Ge for tracer advection
424  !w_tmp = wts(i,1:kb)
425  !dz_tmp= dz(i,1:kbm1)
426  IF(backward_advection/=.true.)THEN
427  !ftmp = f(i,1:kbm1)
428  !call calc_vflux(kbm1,ftmp,w_tmp,dz_tmp,vflux)
429  call calc_vflux(kbm1,f(i,1:kbm1),wts(i,1:kb),dz(i,1:kbm1),vflux)
430  ELSE
431  IF(backward_step==1)THEN
432  ftmp=(f0(i,1:kbm1)+f(i,1:kbm1))*0.5
433  ELSEIF(backward_step==2)THEN
434  ftmp=(f2(i,1:kbm1)+f0(i,1:kbm1)+f(i,1:kbm1))/3.0_sp
435  ENDIF
436  !call calc_vflux(kbm1,ftmp,w_tmp,dz_tmp,vflux)
437  call calc_vflux(kbm1,ftmp,wts(i,1:kb),dz(i,1:kbm1),vflux)
438  ENDIF
439 !J. Ge for tracer advection
440 !!! vflux = 0.0_SP
441 
442  do k=1,kbm1
443  if(isonb(i) == 2) then
444  xflux(i,k)= vflux(k)*art1(i) !/dz(i,k)
445 !JQI xflux(i,k)= (vflux(k)-vflux(k+1))*art1(i)/dz(i,k)
446  else
447 !JQI xflux(i,k)=xflux(i,k)+ (vflux(k)-vflux(k+1))*art1(i)/dz(i,k)
448  xflux(i,k)=xflux(i,k)+ vflux(k)*art1(i) !/dz(i,k)
449  end if
450  end do
451  end if
452  end do
453 
454 !-------------------------------------------------------
455 !Point Source
456 !-------------------------------------------------------
457  if(source)then !!user specified
458 
459  if(river_ts_setting == 'calculated') then
460  if(river_inflow_location == 'node') then
461  do j=1,numqbc
462  jj=inodeq(j)
463  fpoint=fdis(j)
464  do k=1,kbm1
465  xflux(jj,k)=xflux(jj,k) - qdis(j)*vqdist(j,k)*fpoint !/dz(jj,k)
466  end do
467  end do
468  else if(river_inflow_location == 'edge') then
469  write(*,*)'scalar advection not setup for "edge" point source'
470  stop
471  end if
472  end if
473 
474  else
475 
476  if(river_ts_setting == 'calculated')then
477  if(river_inflow_location == 'node') then
478  do j=1,numqbc
479  jj=inodeq(j)
480  do k=1,kbm1
481  fpoint = f(jj,k)
482 !J. Ge for tracer advection
483  IF(backward_advection/=.true.)THEN
484  fpoint = f(jj,k)
485  ELSE
486  IF(backward_step==1)THEN
487  fpoint = (f0(jj,k)+f(jj,k))*0.5
488  ELSEIF(backward_step==2)THEN
489  fpoint = (f2(jj,k)+f0(jj,k)+f(jj,k))/3.0_sp
490  ENDIF
491  ENDIF
492 !J. Ge for tracer advection
493  xflux(jj,k)=xflux(jj,k) - qdis(j)*vqdist(j,k)*fpoint! /dz(jj,k)
494  end do
495  end do
496  else if(river_inflow_location == 'edge') then
497  write(*,*)'scalar advection not setup for "edge" point source'
498  stop
499  end if
500  end if
501 
502  endif
503 !------------------------------------------------------------------------
504 !Update Scalar Quantity
505 !------------------------------------------------------------------------
506 
507  do i=1,m
508  if(iswetn(i)*iswetnt(i) == 1 )then
509  do k=1,kbm1
510  !fn(i,k)=(f(i,k)-xflux(i,k)/art1(i)*(deltat/dt(i)))*(dt(i)/dtfa(i))
511  fn(i,k)=(f(i,k)-xflux(i,k)/art1(i)*(deltat/(dt(i)*dz(i,k))))*(dt(i)/dtfa(i))
512  end do
513  else
514  do k=1,kbm1
515  fn(i,k)=f(i,k)
516  end do
517  end if
518  end do
519 
520  return
integer, dimension(:), allocatable, target ntsn
Definition: mod_main.f90:1023
real(sp), dimension(:,:), allocatable, target yije
Definition: mod_main.f90:1048
integer mt
Definition: mod_main.f90:78
real(sp), dimension(:), allocatable, target dtfa
Definition: mod_main.f90:1124
real(sp), dimension(:,:), allocatable, target v
Definition: mod_main.f90:1269
real(sp), dimension(:,:), allocatable, target vqdist
Definition: mod_main.f90:1217
real(sp), dimension(:), allocatable, target pfpxb
Definition: mod_main.f90:1342
real(sp), dimension(:), allocatable, target art1
Definition: mod_main.f90:1010
real(sp), dimension(:), allocatable, target qdis
Definition: mod_main.f90:1220
real(sp), dimension(:), allocatable, target yc
Definition: mod_main.f90:1004
real(sp), dimension(:,:), allocatable, target xije
Definition: mod_main.f90:1047
integer m
Definition: mod_main.f90:56
real(sp), dimension(:), allocatable, target pfpyb
Definition: mod_main.f90:1343
real(sp), dimension(:,:), allocatable un
Definition: mod_obcs2.f90:67
real(sp), dimension(:), allocatable, target art2
Definition: mod_main.f90:1011
integer, dimension(:), allocatable, target ntrg
Definition: mod_main.f90:1033
logical backward_advection
Definition: mod_main.f90:388
real(sp), dimension(:,:), allocatable, target u
Definition: mod_main.f90:1268
integer, dimension(:,:), allocatable, target niec
Definition: mod_main.f90:1032
integer, dimension(:,:), allocatable, target nbvt
Definition: mod_main.f90:1036
real(sp), dimension(:), allocatable, target vx
Definition: mod_main.f90:1001
real(sp), dimension(:), allocatable, target dltye
Definition: mod_main.f90:1051
integer iobcn
Definition: mod_main.f90:1777
integer kb
Definition: mod_main.f90:64
real(sp), dimension(:), allocatable nn_hvc
Definition: mod_main.f90:1303
integer n
Definition: mod_main.f90:55
real(sp), dimension(:), allocatable, target vy
Definition: mod_main.f90:1002
integer, dimension(:), allocatable, target ntve
Definition: mod_main.f90:1022
integer, dimension(:), allocatable i_obc_n
Definition: mod_main.f90:1779
integer, dimension(:,:), allocatable, target nv
Definition: mod_main.f90:1018
real(sp), dimension(:,:), allocatable, target dz
Definition: mod_main.f90:1092
integer, dimension(:), allocatable iswetnt
Definition: mod_wd.f90:53
integer, dimension(:,:), allocatable, target nbve
Definition: mod_main.f90:1034
real(sp), dimension(:), allocatable, target dt1
Definition: mod_main.f90:1117
real(sp), dimension(:), allocatable, target xc
Definition: mod_main.f90:1003
real(sp), dimension(:,:), allocatable, target dz1
Definition: mod_main.f90:1096
integer backward_step
Definition: mod_main.f90:389
character(len=80) horizontal_mixing_type
Definition: mod_main.f90:351
integer, dimension(:,:), allocatable, target nbsn
Definition: mod_main.f90:1030
real(sp), dimension(:,:), allocatable, target wts
Definition: mod_main.f90:1321
character(len=80) river_ts_setting
Definition: mod_main.f90:538
real(sp), dimension(:), allocatable, target dltxe
Definition: mod_main.f90:1050
character(len=80) river_inflow_location
Definition: mod_main.f90:540
integer kbm1
Definition: mod_main.f90:65
integer, dimension(:), allocatable, target inodeq
Definition: mod_main.f90:1214
integer, dimension(:), allocatable, target isonb
Definition: mod_main.f90:1024
integer nt
Definition: mod_main.f90:77
real(sp), dimension(:), allocatable, target dt
Definition: mod_main.f90:1133
integer, dimension(:), allocatable iswetn
Definition: mod_wd.f90:51
Here is the call graph for this function:

◆ bcond_scal_obc()

subroutine scalar::bcond_scal_obc ( real(sp), dimension(0:mt,kb), intent(in)  f,
real(sp), dimension(0:mt,kb), intent(inout)  fn,
real(sp), dimension(iobcn+1,kbm1), intent(in)  fflux_obc,
real(sp), dimension(iobcn ), intent(in)  f_obc,
real(sp), intent(in)  deltat,
real(sp), intent(in)  alpha_nudge 
)

Definition at line 650 of file mod_scal.f90.

650 
651 !------------------------------------------------------------------------------|
652  use all_vars
653  use bcs
654  use mod_obcs
655  implicit none
656  real(sp), intent(in ), dimension(0:mt,kb) :: f
657  real(sp), intent(inout), dimension(0:mt,kb) :: fn
658  real(sp), intent(in ), dimension(iobcn+1,kbm1) :: fflux_obc
659  real(sp), intent(in ), dimension(iobcn ) :: f_obc
660  real(sp), intent(in ) :: deltat
661  real(sp), intent(in ) :: alpha_nudge
662 !--local-------------------------------------------
663  real(sp) :: f2d,f2d_next,f2d_obc,xflux2d,tmp
664  integer :: i,j,k,j1,j11,j22
665 !------------------------------------------------------------------------------|
666 
667 !--------------------------------------------
668 ! Set Scalar Value on Open Boundary
669 !--------------------------------------------
670  if(iobcn > 0) then
671  do i=1,iobcn
672  j=i_obc_n(i)
673  j1=next_obc(i)
674  f2d=0.0_sp
675  f2d_next=0.0_sp
676  xflux2d=0.0_sp
677  do k=1,kbm1
678  f2d=f2d+f(j,k)*dz(j,k)
679  f2d_next=f2d_next+fn(j1,k)*dz(j1,k)
680  xflux2d=xflux2d+fflux_obc(i,k)*dz(j,k)
681  end do
682 
683  if(uard_obcn(i) > 0.0_sp) then
684  tmp=xflux2d+f2d*uard_obcn(i)
685  f2d_obc=(f2d*dt(j)-tmp*deltat/art1(j))/d(j)
686  do k=1,kbm1
687  fn(j,k)=fn(j1,k) !f2d_obc+(fn(j1,k)-f2d_next)
688  end do
689  else
690  do k=1,kbm1
691  fn(j,k) = f(j,k)-alpha_nudge*(f(j,k)-f_obc(i))
692  end do
693  end if
694  end do
695  endif
696 
697  return
real(sp), dimension(:), allocatable, target d
Definition: mod_main.f90:1132
real(sp), dimension(:), allocatable, target art1
Definition: mod_main.f90:1010
integer, dimension(:), allocatable next_obc
Definition: mod_obcs.f90:78
integer iobcn
Definition: mod_main.f90:1777
real(sp), dimension(:), allocatable uard_obcn
Definition: mod_obcs.f90:112
integer, dimension(:), allocatable i_obc_n
Definition: mod_main.f90:1779
real(sp), dimension(:,:), allocatable, target dz
Definition: mod_main.f90:1092
integer kbm1
Definition: mod_main.f90:65
real(sp), dimension(:), allocatable, target dt
Definition: mod_main.f90:1133

◆ bcond_scal_ptsource()

subroutine scalar::bcond_scal_ptsource ( real(sp), dimension(0:mt,kb), intent(in)  f,
real(sp), dimension(0:mt,kb), intent(out)  fn,
real(sp), dimension(numqbc ), intent(in)  fdis 
)

Definition at line 601 of file mod_scal.f90.

601 
602 !------------------------------------------------------------------------------|
603  use all_vars
604  use bcs
605  use mod_obcs
606  implicit none
607  real(sp), intent(in ), dimension(0:mt,kb) :: f
608  real(sp), intent(out), dimension(0:mt,kb) :: fn
609  real(sp), intent(in ), dimension(numqbc ) :: fdis
610 !--local-------------------------------------------
611  integer :: i,j,k,j1,j11,j22
612 !------------------------------------------------------------------------------|
613 
614 
615 !--------------------------------------------
616 ! Set Source Terms
617 !--------------------------------------------
618  if(river_ts_setting == 'specified') then
619  if(numqbc > 0) then
620  if(river_inflow_location == 'node') then
621  do i=1,numqbc
622  j11=inodeq(i)
623  do k=1,kbm1
624  fn(j11,k)=fdis(i)
625  end do
626  end do
627  else if(river_inflow_location == 'edge') then
628  do i=1,numqbc
629  j11=n_icellq(i,1)
630  j22=n_icellq(i,2)
631  do k=1,kbm1
632  fn(j11,k)=fdis(i)
633  fn(j22,k)=fdis(i)
634  end do
635  end do
636  end if
637  end if
638  end if
639 
640  return
integer, dimension(:,:), allocatable, target n_icellq
Definition: mod_main.f90:1216
character(len=80) river_ts_setting
Definition: mod_main.f90:538
character(len=80) river_inflow_location
Definition: mod_main.f90:540
integer kbm1
Definition: mod_main.f90:65
integer, dimension(:), allocatable, target inodeq
Definition: mod_main.f90:1214

◆ calc_vflux()

subroutine scalar::calc_vflux ( integer, intent(in)  n,
real(sp), dimension(n), intent(in)  c,
real(sp), dimension(n+1), intent(in)  w,
real(sp), dimension(n), intent(in)  zk,
real(sp), dimension(n+1), intent(out)  flux 
)

Definition at line 790 of file mod_scal.f90.

790  use mod_prec
791  use mod_utils, only : limled2
792  implicit none
793  integer , intent(in ) :: n
794  real(sp), intent(in ) :: c(n)
795  real(sp), intent(in ) :: w(n+1)
796  real(sp), intent(in ) :: zk(n)
797  real(sp), intent(out) :: flux(n+1)
798  real(sp) :: conv(n+1),diss(n+1)
799  real(sp) :: cin(0:n+1)
800  real(sp) :: sl_h(0:n+1)
801  real(sp) :: dis4,sl_u,sl_f
802  integer :: i
803 
804  !transfer to working array
805  cin(1:n) = c(1:n)
806  sl_h(1:n) = zk(1:n)
807 
808  !surface bcs (no flux)
809  cin(0) = -cin(1)
810 ! cin(-1) = -cin(2)
811  sl_h(0) = zk(1)
812 
813  !bottom bcs (no flux)
814  cin(n+1) = -cin(n)
815 ! cin(n+2) = -cin(n-1)
816  sl_h(n+1) = zk(n)
817 
818  !flux computation
819  do i=2,n
820  dis4 = .5*abs(w(i))
821  conv(i) = w(i)*(cin(i)+cin(i-1))*0.5_sp
822  sl_u = 2.0_sp*(cin(i)-cin(i+1))/(sl_h(i)+sl_h(i+1))
823  sl_f = 2.0_sp*(cin(i-2)-cin(i-1))/(sl_h(i-2)+sl_h(i-1))
824  diss(i) = dis4*(cin(i-1)-cin(i)-0.5_sp*limled2(sl_u,sl_f,2.0_sp)*(sl_h(i-1)+sl_h(i)))
825 !! flux(i) = conv(i)+diss(i)
826  end do
827  conv(1) = 0.0_sp
828  diss(1) = 0.0_sp
829  conv(n+1) = 0.0_sp
830  diss(n+1) = 0.0_sp
831 
832  do i=1,n
833  flux(i) = conv(i)-conv(i+1)+diss(i+1)-diss(i)
834  end do
835 
real(sp), dimension(:,:), allocatable, target w
Definition: mod_main.f90:1279
integer n
Definition: mod_main.f90:55
real(sp) function limled2(a, b, alpha)
Definition: mod_utils.f90:2244
Here is the call graph for this function:
Here is the caller graph for this function:

◆ fct_sed()

subroutine scalar::fct_sed ( real(sp), dimension(0:mt,kb), intent(in)  f,
real(sp), dimension(0:mt,kb), intent(inout)  fn 
)

Definition at line 703 of file mod_scal.f90.

703  !==============================================================================|
704  USE all_vars
705  USE mod_utils
706  USE bcs
707  USE mod_obcs
708  IMPLICIT NONE
709  real(sp), intent(inout), dimension(0:mt,kb) :: fn
710  real(sp), intent(in), dimension(0:mt,kb) :: f
711  REAL(SP):: SMAX,SMIN
712  INTEGER :: I,J,K,K1
713  !==============================================================================|
714  IF(dbg_set(dbg_sbr)) WRITE(ipt,*)"Start: fct_sed"
715 
716  nodes: DO i=1,m
717 
718  ! SKIP OPEN BOUNDARY NODES
719  IF(iobcn > 0)THEN
720  DO j=1,iobcn
721  IF(i == i_obc_n(j)) cycle nodes
722  END DO
723  END IF
724 
725  ! SKIP RIVER INFLOW POINTS
726  IF(numqbc > 0)THEN
727  DO j=1,numqbc
728  IF(river_inflow_location == 'node')THEN
729  IF(i == inodeq(j)) cycle nodes
730  END IF
731  IF(river_inflow_location == 'edge')THEN
732  IF(i == n_icellq(j,1) .OR. i == n_icellq(j,2)) cycle nodes
733  END IF
734  END DO
735  END IF
736 
737  ! SKIP GROUND WATER INFLOW POINTS
738  IF(bfwdis(i) .GT. 0.0_sp .and. groundwater_salt_on) cycle nodes
739 
740  k1 = 1
741  IF(precipitation_on) k1 = 2
742 ! DO K=1,KBM1
743  DO k=k1,kbm1
744  smax = maxval(f(nbsn(i,1:ntsn(i)),k))
745  smin = minval(f(nbsn(i,1:ntsn(i)),k))
746 
747  IF(k == 1)THEN
748  smax = max(smax,(f(i,k)*dz(i,k+1)+f(i,k+1)*dz(i,k))/ &
749  (dz(i,k)+dz(i,k+1)))
750  smin = min(smin,(f(i,k)*dz(i,k+1)+f(i,k+1)*dz(i,k))/ &
751  (dz(i,k)+dz(i,k+1)))
752  ELSE IF(k == kbm1)THEN
753  smax = max(smax,(f(i,k)*dz(i,k-1)+f(i,k-1)*dz(i,k))/ &
754  (dz(i,k)+dz(i,k-1)))
755  smin = min(smin,(f(i,k)*dz(i,k-1)+f(i,k-1)*dz(i,k))/ &
756  (dz(i,k)+dz(i,k-1)))
757  ELSE
758  smax = max(smax,(f(i,k)*dz(i,k-1)+f(i,k-1)*dz(i,k))/ &
759  (dz(i,k)+dz(i,k-1)), &
760  (f(i,k)*dz(i,k+1)+f(i,k+1)*dz(i,k))/ &
761  (dz(i,k)+dz(i,k+1)))
762  smin = min(smin,(f(i,k)*dz(i,k-1)+f(i,k-1)*dz(i,k))/ &
763  (dz(i,k)+dz(i,k-1)), &
764  (f(i,k)*dz(i,k+1)+f(i,k+1)*dz(i,k))/ &
765  (dz(i,k)+dz(i,k+1)))
766  END IF
767 
768  IF(smin-fn(i,k) > 0.0_sp)fn(i,k) = smin
769  IF(fn(i,k)-smax > 0.0_sp)fn(i,k) = smax
770 
771  END DO
772  END DO nodes
773 
774  WHERE(fn < 0.0_sp)fn=0.0_sp
775 
776  IF(dbg_set(dbg_sbr)) WRITE(ipt,*)"End: fct_sed"
integer, dimension(:), allocatable, target ntsn
Definition: mod_main.f90:1023
logical function dbg_set(vrb)
Definition: mod_utils.f90:182
integer m
Definition: mod_main.f90:56
integer iobcn
Definition: mod_main.f90:1777
logical groundwater_salt_on
Definition: mod_main.f90:656
integer, dimension(:), allocatable i_obc_n
Definition: mod_main.f90:1779
real(sp), dimension(:), allocatable, target bfwdis
Definition: mod_main.f90:1196
logical precipitation_on
Definition: mod_main.f90:466
integer, dimension(:,:), allocatable, target n_icellq
Definition: mod_main.f90:1216
real(sp), dimension(:,:), allocatable, target dz
Definition: mod_main.f90:1092
integer, dimension(:,:), allocatable, target nbsn
Definition: mod_main.f90:1030
integer ipt
Definition: mod_main.f90:922
integer, parameter dbg_sbr
Definition: mod_utils.f90:69
character(len=80) river_inflow_location
Definition: mod_main.f90:540
integer kbm1
Definition: mod_main.f90:65
integer, dimension(:), allocatable, target inodeq
Definition: mod_main.f90:1214
Here is the call graph for this function:

◆ lim()

real(sp) function scalar::lim ( real(sp)  a,
real(sp)  b 
)

Definition at line 842 of file mod_scal.f90.

842  use mod_prec
843  real(sp) lim,a,b
844  real(sp) q,R
845  real(sp) eps
846  eps = epsilon(eps)
847 
848  q = 0. !1st order
849  q = 1. !minmod
850  q = 2. !van leer
851 
852  r = abs( (a-b)/(abs(a)+abs(b)+eps) )**q
853  lim = .5*(1-r)*(a+b)
854 

◆ limit_hor_flux_scal()

subroutine scalar::limit_hor_flux_scal ( real(sp), intent(in)  fka,
real(sp), intent(in)  fkb,
integer, intent(in)  ia,
integer, intent(in)  ib,
real(sp), intent(in)  Da,
real(sp), intent(in)  Db,
integer, intent(in)  ele_num,
real(sp), intent(in)  delt,
real(sp), intent(inout)  exflux 
)

Definition at line 871 of file mod_scal.f90.

871 !
872 ! This subroutine limits the total flux about a control volume segment
873 ! in case there is not enough tracer in the source element,
874 ! the flux is coming from.
875 !------------------------------------------------------------------------------|
876 
877  use all_vars
878  use lims, only: m,mt,n,nt,kbm1,kb
879  use bcs
880  use mod_obcs
881 
882  implicit none
883  real(sp), intent(in ) :: fka ! scalar quantity on k-sigma level in cv a
884  real(sp), intent(in ) :: fkb ! scalar quantity on k-sigma level in cv b
885  integer , intent(in ) :: ele_num ! The element/triangle we are working
886  integer , intent(in ) :: ia,ib ! Index of the left and right node to the SCV side S
887  real(sp), intent(in ) :: delt ! time step for diffusion equation
888  real(sp), intent(in ) :: Da ! water depth of sigma layer [m] on side a of interface
889  real(sp), intent(in ) :: Db ! water depth of sigma layer [m] on side b of interface
890  real(sp), intent(inout) :: exflux ! total flux over side S (diffusion + advection) []
891 
892  !----------------local--------------------------------------
893  integer :: i_source
894  real(sp) :: x_ce,xa,xb,y_ce,ya,yb !coordinates of triangle nodes
895  real(sp) :: f_source !concentrations in source element
896  real(sp) :: A_cv !area of part of control volume
897  real(sp) :: delh !hight of sigma-layer
898  real(sp) :: D_source !water depth of sigma layer [m] at source node
899  real(sp) :: amount_source !amount of tracer in source node control volume
900  real(sp) :: flux_max !maximal possible outflux of tracer from source node control volume
901 !------------------------------------------------------------------------------!
902 
903  ! ----- the coordinates of the corner points of the double control volume ---
904  x_ce = xc(ele_num) ; y_ce = yc(ele_num) ! center node
905  xa = vx(ia) ; ya = vy(ia) ! left node
906  xb = vx(ib) ; yb = vy(ib) ! right node
907  !print*,'center node: ',x_ce,y_ce
908  ! ---------------------------------------------------------------------------
909 
910 
911  ! -------- calculate the area of the tracer control volume -------------------
912  ! it is only the small part of the total control volume / not art1
913  ! area for cartesian triangle on a plane
914  a_cv = 0.5* abs( 0.5*( (xb-xa)*(y_ce-ya) - (x_ce-xa)*(yb-ya) ) )
915  ! ----------------------------------------------------------------------------
916 
917  ! ------- find the source element, where the flux comes from -----------------
918  if (exflux >= 0.0) then
919  i_source = ia
920  f_source = fka
921  d_source = da
922  else
923  i_source = ib
924  f_source = fkb
925  d_source = db
926  end if
927  !print*,'source node:',i_source
928  ! -----------------------------------------------------------------------------
929 
930  ! ------- calculate the maximal possible outflow from source element ---------
931  ! it cannot flow out more tracer than being in the element
932  !print*,'f_source',f_source
933  !print*,'D:',Dn(ia),Dn(ib)
934 
935  amount_source = f_source * a_cv
936  flux_max = amount_source*d_source/delt
937 
938  !print*,'flux_max:',flux_max
939  ! -----------------------------------------------------------------------------
940 
941 
942  ! ------ limit the exflux if necessary ----------------------------------------
943  if (exflux >= 0.0) then
944  exflux = min(flux_max,exflux)
945  else
946  exflux = max(-flux_max,exflux)
947  end if
948  ! -----------------------------------------------------------------------------
949 
950 
951  return
integer mt
Definition: mod_main.f90:78
real(sp), dimension(:), allocatable, target yc
Definition: mod_main.f90:1004
integer m
Definition: mod_main.f90:56
real(sp), dimension(:), allocatable, target vx
Definition: mod_main.f90:1001
integer kb
Definition: mod_main.f90:64
integer n
Definition: mod_main.f90:55
real(sp), dimension(:), allocatable, target vy
Definition: mod_main.f90:1002
real(sp), dimension(:), allocatable, target xc
Definition: mod_main.f90:1003
integer kbm1
Definition: mod_main.f90:65
integer nt
Definition: mod_main.f90:77
Here is the caller graph for this function:

◆ vdif_scal()

subroutine scalar::vdif_scal ( real(sp), dimension(0:mt,kb), intent(inout)  f,
real(sp), intent(in)  deltat 
)

Definition at line 528 of file mod_scal.f90.

528 
530  use all_vars
531 
532  Implicit None
533  Real(sp), intent(inout) :: f(0:mt,kb)
534  Real(sp), intent(in ) :: deltat
535  !--local--------------------
536  integer :: i,k,ll
537  real(sp) :: dsqrd,dfdz,visb
538  real(sp) :: fsol(0:kb)
539 
540 
542 
543  Do i=1,m
544  dsqrd = d(i)*d(i)
545 
546  !----------------------------------------------------------------
547  ! Set up Diagonals of Matrix (lower=au,diag=bu,upper=cu)
548  !----------------------------------------------------------------
549 
550 
551  !Surface
552  au(1) = 0.0
553  cu(1)= - deltat*(kh(i,2)+umol)/(dzz(i,1)*dz(i,1)*dsqrd)
554  bu(1)= 1.0 - cu(1)
555 
556  !Interior
557  do k=2,kbm1-1
558  au(k) = - deltat*(kh(i,k )+umol)/(dzz(i,k-1)*dz(i,k)*dsqrd)
559  cu(k) = - deltat*(kh(i,k+1)+umol)/(dzz(i,k )*dz(i,k)*dsqrd)
560  bu(k) = 1.0 - cu(k) - au(k)
561  end do
562 
563  !Bottom
564  au(kbm1) = - deltat*(kh(i,kbm1)+umol)/(dzz(i,kbm1-1)*dz(i,kbm1)*dsqrd)
565  cu(kbm1) = 0.0
566  bu(kbm1) = 1.0 - au(kbm1)
567 
568  !----------------------------------------------------------------
569  ! Set up RHS forcing vector and boundary conditions
570  !----------------------------------------------------------------
571  do k=1,kbm1
572  du(k) = f(i,k)
573  end do
574 
575  !Free Surface: No flux
576 
577  !Bottom: No flux
578 
579 
580  !----------------------------------------------------------------
581  ! Solve
582  !----------------------------------------------------------------
583 
584  call tridiagonal_scal(kb,1,kbm1,fsol)
585 
586  !Transfer
587  f(i,1:kbm1) = fsol(1:kbm1)
588 
589  End Do
590 
591 
592 
real(sp), dimension(:), allocatable, target d
Definition: mod_main.f90:1132
subroutine tridiagonal_scal(N, fi, lt, value)
real(sp), dimension(:), allocatable bu
Definition: mod_tridiag.f90:37
real(sp), dimension(:), allocatable cu
Definition: mod_tridiag.f90:37
real(sp) umol
Definition: mod_main.f90:365
subroutine init_tridiagonal_scal(N)
Definition: mod_tridiag.f90:94
integer m
Definition: mod_main.f90:56
real(sp), dimension(:), allocatable du
Definition: mod_tridiag.f90:37
integer kb
Definition: mod_main.f90:64
real(sp), dimension(:,:), allocatable, target dzz
Definition: mod_main.f90:1093
real(sp), dimension(:,:), allocatable, target dz
Definition: mod_main.f90:1092
real(sp), dimension(:), allocatable au
Definition: mod_tridiag.f90:37
real(sp), dimension(:,:), allocatable, target kh
Definition: mod_main.f90:1294
integer kbm1
Definition: mod_main.f90:65
Here is the call graph for this function:

Variable Documentation

◆ debug

logical, parameter scalar::debug = .true.

Definition at line 51 of file mod_scal.f90.

51  logical, parameter :: debug = .true.