My Project
baropg.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 ! CALCULATE THE BAROCLINIC PRESSURE GRADIENT IN SIGMA COORDINATES |
42 !==============================================================================|
43 
44  SUBROUTINE baropg
45 
46 !==============================================================================|
47  USE all_vars
48  USE mod_spherical
49  USE mod_northpole
50  USE mod_wd
51 
52  IMPLICIT NONE
53  REAL(SP) :: RIJK(0:N,3,KBM1), DRIJK1(0:N,3,KBM1), DRIJK2(0:N,KBM1)
54  REAL(SP) :: TEMP,DIJ,DRHO1,DRHO2
55  INTEGER :: I,K,J,J1,J2,IJK
56 !==============================================================================|
57 
58  IF(dbg_set(dbg_sbr)) WRITE(ipt,*) "Start: baropg.F"
59 
60  ! USE RAMP CALCULATED IN 'internal_step.F'
61 
62 !----------SUBTRACT MEAN DENSITY TO MINIMIZE ROUNDOFF ERROR--------------------!
63 
64  rho1(:,1:kbm1) = rho1(:,1:kbm1) - rmean1(:,1:kbm1)
65  rho = rho - rmean
66 
67 !----------INITIALIZE ARRAYS---------------------------------------------------!
68 
69  drhox = 0.0_sp
70  drhoy = 0.0_sp
71  rmean(0,:) = 0.0_sp
72  rho(0,:) = 0.0_sp
73  rijk = 0.0_sp
74  drijk1 = 0.0_sp
75  drijk2 = 0.0_sp
76 
77 !----------CALCULATE AVERAGE DENSITY ON EACH EDGE------------------------------!
78 
79  DO k=1,kbm1
80  DO i=1,n
81  DO j=1,3
82  j1=j+1-int((j+1)/4)*3
83  j2=j+2-int((j+2)/4)*3
84  rijk(i,j,k) = 0.5_sp*(rho1(nv(i,j1),k)+rho1(nv(i,j2),k))
85  END DO
86  END DO
87  END DO
88 
89  DO i=1,n
90  DO j=1,3
91  drijk1(i,j,1)=rijk(i,j,1)*(-zz1(i,1))
92  DO k=2,kbm1
93  drijk1(i,j,k)=0.5_sp*(rijk(i,j,k-1)+rijk(i,j,k))*(zz1(i,k-1)-zz1(i,k))
94  drijk1(i,j,k)=drijk1(i,j,k)+drijk1(i,j,k-1)
95  END DO
96  END DO
97  END DO
98 
99  DO i=1,n
100  drijk2(i,1)=0.0_sp
101  DO k=2,kbm1
102  drijk2(i,k)=0.5_sp*(zz1(i,k-1)+zz1(i,k))*(rho(i,k)-rho(i,k-1))
103  drijk2(i,k)=drijk2(i,k-1)+drijk2(i,k)
104  END DO
105  END DO
106 
107  DO i = 1, n
108  IF(iswetct(i)*iswetc(i) == 1 .AND. &
109  (h(nv(i,1)) > static_ssh_adj .OR. h(nv(i,2)) > static_ssh_adj .OR. h(nv(i,3)) > static_ssh_adj))THEN
110  DO k=1,kbm1
111  DO j = 1, 3
112  j1=j+1-int((j+1)/4)*3
113  j2=j+2-int((j+2)/4)*3
114  ijk=nbe(i,j)
115  dij=0.5_sp*(dt(nv(i,j1))+dt(nv(i,j2)))
116 
117  drho1=(vy(nv(i,j1))-vy(nv(i,j2)))*drijk1(i,j,k)*dt1(i)
118  drho2=(vy(nv(i,j1))-vy(nv(i,j2)))*dij*drijk2(i,k)
119  drhox(i,k)=drhox(i,k)+drho1+drho2
120 
121  drho1=(vx(nv(i,j2))-vx(nv(i,j1)))*drijk1(i,j,k)*dt1(i)
122  drho2=(vx(nv(i,j2))-vx(nv(i,j1)))*dij*drijk2(i,k)
123  drhoy(i,k)=drhoy(i,k)+drho1+drho2
124 
125  END DO
126  END DO
127  END IF
128  END DO
129 
130 
131 
132 !----------MULTIPLY BY GRAVITY AND ELEMENT DEPTH-------------------------------!
133 
134  DO k=1,kbm1
135  drhox(:,k)=drhox(:,k)*dt1(:)*dz1(:,k)*grav_e(:)*ramp
136  drhoy(:,k)=drhoy(:,k)*dt1(:)*dz1(:,k)*grav_e(:)*ramp
137  END DO
138 
139 !----------ADD MEAN DENSITY BACK ON--------------------------------------------!
140 
141  rho1 = rho1 + rmean1
142  rho = rho + rmean
143 
144  IF(dbg_set(dbg_sbr)) WRITE(ipt,*) "End: baropg.F"
145 
146  RETURN
147  END SUBROUTINE baropg
148 !==============================================================================|
real(sp), dimension(:), allocatable, target h
Definition: mod_main.f90:1131
real(sp), dimension(:,:), allocatable, target rho1
Definition: mod_main.f90:1309
real(sp), dimension(:,:), allocatable, target rho
Definition: mod_main.f90:1284
integer, dimension(:), allocatable iswetct
Definition: mod_wd.f90:54
real(sp), dimension(:,:), allocatable, target drhox
Definition: mod_main.f90:1326
real(sp), dimension(:), allocatable, target vx
Definition: mod_main.f90:1001
real(sp), dimension(:), allocatable, target grav_e
Definition: mod_main.f90:1013
real(sp), dimension(:), allocatable, target vy
Definition: mod_main.f90:1002
integer, dimension(:,:), allocatable, target nbe
Definition: mod_main.f90:1020
integer, dimension(:,:), allocatable, target nv
Definition: mod_main.f90:1018
real(sp), dimension(:,:), allocatable, target zz1
Definition: mod_main.f90:1095
real(sp), dimension(:,:), allocatable, target drhoy
Definition: mod_main.f90:1327
integer, dimension(:), allocatable iswetc
Definition: mod_wd.f90:52
real(sp), dimension(:), allocatable, target dt1
Definition: mod_main.f90:1117
real(sp), dimension(:,:), allocatable, target dz1
Definition: mod_main.f90:1096
subroutine baropg
Definition: baropg.f90:45
real(sp), dimension(:,:), allocatable, target rmean
Definition: mod_main.f90:1285
real(sp), dimension(:), allocatable, target dt
Definition: mod_main.f90:1133
real(sp), dimension(:,:), allocatable, target rmean1
Definition: mod_main.f90:1320