My Project
fct_q2l.f90
Go to the documentation of this file.
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 !/===========================================================================/
13 ! Copyright (c) 2007, The University of Massachusetts Dartmouth
14 ! Produced at the School of Marine Science & Technology
15 ! Marine Ecosystem Dynamics Modeling group
16 ! All rights reserved.
17 !
18 ! FVCOM has been developed by the joint UMASSD-WHOI research team. For
19 ! details of authorship and attribution of credit please see the FVCOM
20 ! technical manual or contact the MEDM group.
21 !
22 !
23 ! This file is part of FVCOM. For details, see http://fvcom.smast.umassd.edu
24 ! The full copyright notice is contained in the file COPYRIGHT located in the
25 ! root directory of the FVCOM code. This original header must be maintained
26 ! in all distributed versions.
27 !
28 ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
29 ! AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
30 ! THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
31 ! PURPOSE ARE DISCLAIMED.
32 !
33 !/---------------------------------------------------------------------------/
34 ! CVS VERSION INFORMATION
35 ! $Id$
36 ! $Name$
37 ! $Revision$
38 !/===========================================================================/
39 
40 !==============================================================================|
41 ! FLUX CONTROL FOR SALINITY |
42 !==============================================================================|
43 
44  SUBROUTINE fct_q2l
45 !# if defined (1)
46 
47 !==============================================================================|
48  USE all_vars
49  USE bcs
50  USE mod_utils
51  USE mod_obcs
52  IMPLICIT NONE
53  REAL(SP):: Q2LMAX,Q2LMIN
54  INTEGER :: I,J,K
55 !==============================================================================|
56 
57  IF(heating_type == 'body') return
58 
59  IF(dbg_set(dbg_sbr)) write(ipt,*) "Start: fct_q2"
60 
61 nodes:DO i=1,m
62 
63  IF(iobcn > 0)THEN
64  DO j=1,iobcn
65  IF(i == i_obc_n(j)) cycle nodes
66  END DO
67  END IF
68  IF(numqbc > 0)THEN
69  DO j=1,numqbc
70  IF(river_inflow_location == 'node')THEN
71  IF(i == inodeq(j)) cycle nodes
72  END IF
73  IF(river_inflow_location == 'edge')THEN
74  IF(i == n_icellq(j,1) .OR. i == n_icellq(j,2)) cycle nodes
75  END IF
76  END DO
77  END IF
78  DO k=2,kbm1
79  q2lmax = maxval(q2l(nbsn(i,1:ntsn(i)),k))
80  q2lmin = minval(q2l(nbsn(i,1:ntsn(i)),k))
81 
82  IF(k == 2)THEN
83  q2lmax = max(q2lmax,(q2l(i,k)*dzz(i,k)+q2l(i,k+1)*dzz(i,k-1))/ &
84  (dzz(i,k)+dzz(i,k-1)))
85  q2lmin = min(q2lmin,(q2l(i,k)*dzz(i,k)+q2l(i,k+1)*dzz(i,k-1))/ &
86  (dzz(i,k)+dzz(i,k-1)))
87  ELSE IF(k == kbm1)THEN
88  q2lmax = max(q2lmax,(q2l(i,k)*dzz(i,k-2)+q2l(i,k-1)*dzz(i,k-1))/ &
89  (dzz(i,k-1)+dzz(i,k-2)))
90  q2lmin = min(q2lmin,(q2l(i,k)*dzz(i,k-2)+q2l(i,k-1)*dzz(i,k-1))/ &
91  (dzz(i,k-1)+dzz(i,k-2)))
92  ELSE
93  q2lmax = max(q2lmax,(q2l(i,k)*dzz(i,k-2)+q2l(i,k-1)*dzz(i,k-1))/ &
94  (dzz(i,k-1)+dzz(i,k-2)), &
95  (q2l(i,k)*dzz(i,k)+q2l(i,k+1)*dzz(i,k-1))/ &
96  (dzz(i,k)+dzz(i,k-1)))
97  q2lmin = min(q2lmin,(q2l(i,k)*dzz(i,k-2)+q2l(i,k-1)*dzz(i,k-1))/ &
98  (dzz(i,k-1)+dzz(i,k-2)), &
99  (q2l(i,k)*dzz(i,k)+q2l(i,k+1)*dzz(i,k-1))/ &
100  (dzz(i,k)+dzz(i,k-1)))
101  END IF
102 
103  IF(q2lmin-q2lf(i,k) > 0.0_sp)q2lf(i,k) = q2lmin
104  IF(q2lf(i,k)-q2lmax > 0.0_sp)q2lf(i,k) = q2lmax
105 
106  END DO
107 
108  END DO nodes
109 
110  IF(dbg_set(dbg_sbr)) write(ipt,*) "End: fct_q2"
111 
112  END SUBROUTINE fct_q2l
113 !==============================================================================|
114 
115 
integer, dimension(:), allocatable, target ntsn
Definition: mod_main.f90:1023
real(sp), dimension(:,:), allocatable, target q2lf
Definition: mod_main.f90:1298
logical function dbg_set(vrb)
Definition: mod_utils.f90:182
real(sp), dimension(:,:), allocatable, target q2l
Definition: mod_main.f90:1292
integer iobcn
Definition: mod_main.f90:1777
integer, dimension(:), allocatable i_obc_n
Definition: mod_main.f90:1779
integer, dimension(:,:), allocatable, target n_icellq
Definition: mod_main.f90:1216
real(sp), dimension(:,:), allocatable, target dzz
Definition: mod_main.f90:1093
subroutine fct_q2l
Definition: fct_q2l.f90:45
integer, dimension(:,:), allocatable, target nbsn
Definition: mod_main.f90:1030
integer, parameter dbg_sbr
Definition: mod_utils.f90:69
integer, dimension(:), allocatable, target inodeq
Definition: mod_main.f90:1214