My Project
adjust_ts.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 ! ADJUST TEMPERATURE NEAR RIVER MOUTHS USING ADJACENT NODES |
42 ! ADJUST SALINITY AT RIVER MOUTHS
43 !==============================================================================|
44 
45  SUBROUTINE adjust_ts
46 
47 !==============================================================================|
48  USE all_vars
49  USE mod_utils
50  use mod_par
51  USE bcs
52  IMPLICIT NONE
53  REAL(SP) :: TAVE,TAVE1,TAVE2
54  INTEGER :: I,K,JJ,I1,J,J1,J2,NUM_TAVE,NUM_TAVE1,NUM_TAVE2
55 !==============================================================================|
56 
57  IF (dbg_set(dbg_sbr)) WRITE(ipt,*) "Start: adjust_ts"
58 
59  IF(numqbc > 0)THEN
60 
61 ! IF(RIVER_INFLOW_LOCATION == 'node')THEN
62 ! DO K=1,KBM1
63 ! DO I=1,NUMQBC
64 ! JJ=INODEQ(I)
65 ! TAVE = 0.0_SP
66 ! NUM_TAVE = 0
67 ! DO J=2,NTSN(JJ)-1
68 ! I1=NBSN(JJ,J)
69 ! IF(NUMQBC == 1)THEN
70 ! NUM_TAVE = NUM_TAVE + 1
71 ! TAVE = TAVE + T1(I1,K)
72 ! ELSE
73 ! IF(I == 1)THEN
74 ! IF(I1 /= INODEQ(I+1))THEN
75 ! NUM_TAVE = NUM_TAVE + 1
76 ! TAVE = TAVE + T1(I1,K)
77 ! END IF
78 ! ELSE IF(I == NUMQBC)THEN
79 ! IF(I1 /= INODEQ(I-1))THEN
80 ! NUM_TAVE = NUM_TAVE + 1
81 ! TAVE = TAVE + T1(I1,K)
82 ! END IF
83 ! ELSE IF(I1 /= INODEQ(I-1) .AND. I1 /= INODEQ(I+1))THEN
84 ! NUM_TAVE = NUM_TAVE + 1
85 ! TAVE = TAVE + T1(I1,K)
86 ! END IF
87 ! END IF
88 ! END DO
89 ! T1(JJ,K) = TAVE/FLOAT(NUM_TAVE)
90 ! END DO
91 ! END DO
92 ! ELSE IF(RIVER_INFLOW_LOCATION == 'edge')THEN
93 ! DO K=1,KBM1
94 ! DO I=1,NUMQBC
95 ! J1=N_ICELLQ(I,1)
96 ! J2=N_ICELLQ(I,2)
97 ! TAVE1 = 0.0_SP
98 ! TAVE2 = 0.0_SP
99 ! NUM_TAVE1 = 0
100 ! NUM_TAVE2 = 0
101 
102 ! DO J=2,NTSN(J1)-1
103 ! I1=NBSN(J1,J)
104 ! IF(NUMQBC == 1)THEN
105 ! IF(I1 /= J2)THEN
106 ! NUM_TAVE1 = NUM_TAVE1 + 1
107 ! TAVE1 = TAVE1 + T1(I1,K)
108 ! END IF
109 ! ELSE IF(I == 1)THEN
110 ! IF(I1 /= J2 .AND. I1 /= N_ICELLQ(I+1,1) .AND. &
111 ! I1 /= N_ICELLQ(I+1,2))THEN
112 ! NUM_TAVE1 = NUM_TAVE1 + 1
113 ! TAVE1 = TAVE1 + T1(I1,K)
114 ! END IF
115 ! ELSE IF(I == NUMQBC)THEN
116 ! IF(I1 /= J2 .AND. I1 /= N_ICELLQ(I-1,1) .AND. &
117 ! I1 /= N_ICELLQ(I-1,2))THEN
118 ! NUM_TAVE1 = NUM_TAVE1 + 1
119 ! TAVE1 = TAVE1 + T1(I1,K)
120 ! END IF
121 ! ELSE IF(I1 /= J2 .AND. &
122 ! I1 /= N_ICELLQ(I-1,1) .AND. I1 /= N_ICELLQ(I-1,2) .AND. &
123 ! I1 /= N_ICELLQ(I+1,1) .AND. I1 /= N_ICELLQ(I+1,2))THEN
124 ! NUM_TAVE1 = NUM_TAVE1 + 1
125 ! TAVE1 = TAVE1 + T1(I1,K)
126 ! END IF
127 ! END DO
128 ! T1(J1,K) = TAVE1/FLOAT(NUM_TAVE1)
129 
130 ! DO J=2,NTSN(J2)-1
131 ! I1=NBSN(J2,J)
132 ! IF(NUMQBC == 1)THEN
133 ! IF(I1 /= J1)THEN
134 ! NUM_TAVE2 = NUM_TAVE2 + 1
135 ! TAVE2 = TAVE2 + T1(I1,K)
136 ! END IF
137 ! ELSE IF(I == 1)THEN
138 ! IF(I1 /= J1 .AND. I1 /= N_ICELLQ(I+1,1) .AND. &
139 ! I1 /= N_ICELLQ(I+1,2))THEN
140 ! NUM_TAVE2 = NUM_TAVE2 + 1
141 ! TAVE2 = TAVE2 + T1(I1,K)
142 ! END IF
143 ! ELSE IF(I == NUMQBC)THEN
144 ! IF(I1 /= J1 .AND. I1 /= N_ICELLQ(I-1,1) .AND. &
145 ! I1 /= N_ICELLQ(I-1,2))THEN
146 ! NUM_TAVE2 = NUM_TAVE2 + 1
147 ! TAVE2 = TAVE2 + T1(I1,K)
148 ! END IF
149 ! ELSE IF(I1 /= J1 .AND. &
150 ! I1 /= N_ICELLQ(I-1,1) .AND. I1 /= N_ICELLQ(I-1,2) .AND. &
151 ! I1 /= N_ICELLQ(I+1,1) .AND. I1 /= N_ICELLQ(I+1,2))THEN
152 ! NUM_TAVE2 = NUM_TAVE2 + 1
153 ! TAVE2 = TAVE2 + T1(I1,K)
154 ! END IF
155 ! END DO
156 ! T1(J2,K) = TAVE2/FLOAT(NUM_TAVE2)
157 !
158 ! END DO
159 ! END DO
160 ! END IF
161 
162  DO i=1,numqbc
163  IF(river_inflow_location == 'node')THEN
164  j = inodeq(i)
165  DO k=1,kbm1
166  t1(j,k) = max(t1(j,k),tdis(i))
167  s1(j,k) = max(s1(j,k),sdis(i))
168  END DO
169  ELSE IF(river_inflow_location == 'edge')THEN
170  j1 = n_icellq(i,1)
171  j2 = n_icellq(i,2)
172  DO k=1,kbm1
173  t1(j1,k) = max(t1(j1,k),tdis(i))
174  t1(j2,k) = max(t1(j2,k),tdis(i))
175  s1(j1,k) = max(s1(j1,k),sdis(i))
176  s1(j2,k) = max(s1(j2,k),sdis(i))
177  END DO
178  END IF
179  END DO
180 
181  CALL n2e3d(t1,t)
182  CALL n2e3d(s1,s)
183 
184  END IF
185 
186  IF (dbg_set(dbg_sbr)) WRITE(ipt,*) "End: adjust_ts"
187 
188 
189  RETURN
190  END SUBROUTINE adjust_ts
191 !==============================================================================|
192 
real(sp), dimension(:,:), allocatable, target s
Definition: mod_main.f90:1288
logical function dbg_set(vrb)
Definition: mod_utils.f90:182
real(sp), dimension(:,:), allocatable, target t1
Definition: mod_main.f90:1307
real(sp), dimension(:,:), allocatable, target s1
Definition: mod_main.f90:1308
real(sp), dimension(:), allocatable, target sdis
Definition: mod_main.f90:1225
integer, dimension(:,:), allocatable, target n_icellq
Definition: mod_main.f90:1216
subroutine adjust_ts
Definition: adjust_ts.f90:46
subroutine n2e3d(NVAR, EVAR)
Definition: mod_main.f90:1370
real(sp), dimension(:,:), allocatable, target t
Definition: mod_main.f90:1286
real(sp), dimension(:), allocatable, target tdis
Definition: mod_main.f90:1224
integer, parameter dbg_sbr
Definition: mod_utils.f90:69
integer, dimension(:), allocatable, target inodeq
Definition: mod_main.f90:1214