My Project
mod_types.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 MODULE mod_types
41  USE mod_prec
42  IMPLICIT NONE
43  TYPE map
44  INTEGER :: nsize ! SIZE OF LOCAL DATA (Size of Local data)
45  INTEGER :: gsize ! GLOBAL SIZE (SIZE OF GLOBAL DATA)
46  INTEGER :: lsize ! SIZE OF LOCAL ARRAY (Usually ==nsize or MT,NT)
47  ! INDEX FROM LOCAL ARRAY TO GLOBAL ARRAY
48  INTEGER, POINTER, DIMENSION(:) :: loc_2_gl
49  ! INDEX FROM LOCAL ARRAY TO LOCAL GRID
50  INTEGER, POINTER, DIMENSION(:) :: loc_2_grid
51  END TYPE map
52 
53  TYPE comm
54  !----------------------------------------------------------
55  ! SND: TRUE IF YOU ARE TO SEND TO PROCESSOR |
56  ! RCV: TRUE IF YOU ARE TO RECEIVE FROM PROCESSOR |
57  ! NSND: NUMBER OF DATA TO SEND TO PROCESSOR |
58  ! NRCV: NUMBER OF DATA TO RECEIVE FROM PROCESSOR |
59  ! SNDP: ARRAY POINTING TO LOCATIONS TO SEND TO PROCESSOR |
60  ! RCVP: ARRAY POINTING TO LOCATIONS RECEIVED FROM PROCESS |
61  ! RCPT: POINTER TO LOCATION IN RECEIVE BUFFER |
62  !----------------------------------------------------------
63 
64  ! LOGICAL :: SND,RCV
65  INTEGER nsnd,nrcv,rcpt
66  INTEGER, POINTER, DIMENSION(:) :: sndp,rcvp
67  REAL(sp), POINTER, DIMENSION(:) :: mltp
68  END TYPE comm
69 
70  TYPE bc
71  INTEGER ntimes
72  REAL(sp), POINTER, DIMENSION(:) :: times
73  CHARACTER(LEN=80) :: label
74  END TYPE bc
75 
76 
77  ! THIS IS NOT REALLY A GRID - IT ONLY HOLDS INTEGER INDEX DATA THAT
78  ! IS GRID DEPENDENT
79  TYPE grid
80  CHARACTER(len=80):: units
81  CHARACTER(len=160):: name
82  INTEGER :: m =0
83  INTEGER :: n =0
84  INTEGER :: mt =0
85  INTEGER :: nt =0
86  INTEGER :: mgl =0
87  INTEGER :: ngl =0
88  INTEGER :: kb =0
89  INTEGER :: kbm1=0
90  INTEGER :: kbm2=0
91 
92 
93  ! PARALLEL STUFF
94 ! INTEGER, POINTER :: EL_PID(:) !!PROCESSOR OWNER OF GLOBAL ELEMENT
95 
96  INTEGER, POINTER :: egid(:) !!GLOBAL ID OF LOCAL ELEMENT
97  INTEGER, POINTER :: ngid(:) !!GLOBAL ID OF LOCAL NODE
98  INTEGER, POINTER :: elid(:) !!LOCAL ID OF GLOBAL ELEMENT
99  INTEGER, POINTER :: nlid(:) !!LOCAL ID OF GLOBAL NODE
100 
101  ! TRANSFER INDEX INCLUDING HALO
102  INTEGER, POINTER :: egid_x(:)
103  INTEGER, POINTER :: ngid_x(:)
104  INTEGER, POINTER :: elid_x(:)
105  INTEGER, POINTER :: nlid_x(:)
106 
107  ! GRID DATA POINTERS
108 
109  INTEGER, POINTER :: nv(:,:)
110 
111 
112  REAL(sp),POINTER :: xm(:)
113  REAL(sp),POINTER :: ym(:)
114  REAL(sp),POINTER :: lon(:)
115  REAL(sp),POINTER :: lat(:)
116 
117  REAL(sp),POINTER :: xmc(:)
118  REAL(sp),POINTER :: ymc(:)
119  REAL(sp),POINTER :: lonc(:)
120  REAL(sp),POINTER :: latc(:)
121 
122  ! NOTES: SHOULD MAKE AN ARRAY TO STORE 1/ART, 1/ART2 and 1/ART2
123  ! IT is faster and safer
124 
125 ! REAL(SP), POINTER :: ART(:) !!AREA OF ELEMENT
126 ! REAL(SP), POINTER :: ART1(:) !!AREA OF NODE-BASE CONTROl VOLUME
127 ! REAL(SP), POINTER :: ART2(:) !!AREA OF ELEMENTS AROUND NODE
128 
129  !----------------Node, Boundary Condition, and Control Volume-----------------------!
130 
131 
132  INTEGER, POINTER :: nbe(:,:) !!INDICES OF ELMNT NEIGHBORS
133  ! INTEGER, POINTER :: NTVE(:) !! NUMBER OF ELEMENTS SURROUNDING EACH NODE
134  ! INTEGER, POINTER :: NTSN(:) !! NUMBER OF NODES SURROUNDING EACH NODE
135  ! INTEGER, POINTER :: ISONB(:) !!NODE MARKER = 0,1,2
136  ! INTEGER, POINTER :: ISBC(:)
137  ! INTEGER, POINTER :: ISBCE(:)
138  ! INTEGER, POINTER :: IEC(:,:)
139  ! INTEGER, POINTER :: IENODE(:,:)
140  INTEGER, POINTER :: nbsn(:,:) !! INDICES OF NODES SURROUNDING EACH NODE
141 ! INTEGER, POINTER :: NIEC(:,:)
142 ! INTEGER, POINTER :: NTRG(:)
143  INTEGER, POINTER :: nbve(:,:) !! INDICIES OF ELEMENTS SURROUNDING EACH NODE
144 ! INTEGER, POINTER :: NBVT(:,:)
145 
146  !----------------2-d arrays for the general vertical coordinate -------------------------------!
147 
148  REAL(sp), POINTER :: h(:) !!BATHYMETRY
149  REAL(sp), POINTER :: z(:,:) !!SIGMA COORDINATE VALUE
150  REAL(sp), POINTER :: zz(:,:) !!INTRA LEVEL SIGMA VALUE
151  REAL(sp), POINTER :: h1(:) !!BATHYMETRY
152  REAL(sp), POINTER :: z1(:,:) !!SIGMA COORDINATE VALUE
153  REAL(sp), POINTER :: zz1(:,:) !!INTRA LEVEL SIGMA VALUE
154 
155  !------------shape coefficient arrays and control volume metrics--------------------!
156 
157 ! REAL(SP), POINTER :: A1U(:,:)
158 ! REAL(SP), POINTER :: A2U(:,:)
159 ! REAL(SP), POINTER :: AWX(:,:)
160 ! REAL(SP), POINTER :: AWY(:,:)
161 ! REAL(SP), POINTER :: AW0(:,:)
162 ! REAL(SP), POINTER :: ALPHA(:)
163 
164 
165  ! OBC DATA
166 
167 ! INTEGER :: IOBCN =0
168 ! INTEGER, POINTER :: I_OBC_N(:)
169 ! INTEGER, POINTER :: TYPE_OBC(:)
170 
171  ! END DATA POINTERS FOR GRID TYPE
172 
173  END TYPE grid
174 
175  CONTAINS
176 
177  SUBROUTINE kill_grid(G)
178  IMPLICIT NONE
179  TYPE(grid), POINTER :: G
180 
181 
182  IF(.NOT. ASSOCIATED(g)) RETURN
183 
184 ! IF(ASSOCIATED(G%EL_PID)) DEALLOCATE(G%EL_PID)
185 
186  IF(ASSOCIATED(g%egid)) DEALLOCATE(g%egid)
187  IF(ASSOCIATED(g%ngid)) DEALLOCATE(g%ngid)
188  IF(ASSOCIATED(g%elid)) DEALLOCATE(g%elid)
189  IF(ASSOCIATED(g%nlid)) DEALLOCATE(g%nlid)
190 
191  IF(ASSOCIATED(g%egid_X)) DEALLOCATE(g%egid_X)
192  IF(ASSOCIATED(g%elid_X)) DEALLOCATE(g%elid_X)
193  IF(ASSOCIATED(g%ngid_X)) DEALLOCATE(g%ngid_X)
194  IF(ASSOCIATED(g%nlid_X)) DEALLOCATE(g%nlid_X)
195 
196  IF(ASSOCIATED(g%NV)) DEALLOCATE(g%NV)
197 
198  IF(ASSOCIATED(g%XM)) DEALLOCATE(g%XM)
199  IF(ASSOCIATED(g%YM)) DEALLOCATE(g%YM)
200  IF(ASSOCIATED(g%LON)) DEALLOCATE(g%LON)
201  IF(ASSOCIATED(g%LAT)) DEALLOCATE(g%LAT)
202 
203  IF(ASSOCIATED(g%XMC)) DEALLOCATE(g%XMC)
204  IF(ASSOCIATED(g%YMC)) DEALLOCATE(g%YMC)
205  IF(ASSOCIATED(g%LONC)) DEALLOCATE(g%LONC)
206  IF(ASSOCIATED(g%LATC)) DEALLOCATE(g%LATC)
207 
208 ! IF(ASSOCIATED(G%ART)) DEALLOCATE(G%ART)
209 ! IF(ASSOCIATED(G%ART1)) DEALLOCATE(G%ART1)
210 ! IF(ASSOCIATED(G%ART2)) DEALLOCATE(G%ART2)
211 
212  IF(ASSOCIATED(g%NBE)) DEALLOCATE(g%NBE)
213 ! IF(ASSOCIATED(G%NTVE)) DEALLOCATE(G%NTVE)
214 ! IF(ASSOCIATED(G%NTSN)) DEALLOCATE(G%NTSN)
215 ! IF(ASSOCIATED(G%ISONB)) DEALLOCATE(G%ISONB)
216 ! IF(ASSOCIATED(G%ISBC)) DEALLOCATE(G%ISBC)
217 ! IF(ASSOCIATED(G%IEC)) DEALLOCATE(G%IEC)
218 ! IF(ASSOCIATED(G%IENODE)) DEALLOCATE(G%IENODE)
219  IF(ASSOCIATED(g%NBSN)) DEALLOCATE(g%NBSN)
220 ! IF(ASSOCIATED(G%NIEC)) DEALLOCATE(G%NIEC)
221 ! IF(ASSOCIATED(G%NTRG)) DEALLOCATE(G%NTRG)
222  IF(ASSOCIATED(g%NBVE)) DEALLOCATE(g%NBVE)
223 ! IF(ASSOCIATED(G%NBVT)) DEALLOCATE(G%NBVT)
224 
225 ! IF(ASSOCIATED(G%Z)) DEALLOCATE(G%Z)
226 ! IF(ASSOCIATED(G%ZZ)) DEALLOCATE(G%ZZ)
227 
228 ! IF(ASSOCIATED(G%A1U)) DEALLOCATE(G%A1U)
229 ! IF(ASSOCIATED(G%A2U)) DEALLOCATE(G%A2U)
230 ! IF(ASSOCIATED(G%AWX)) DEALLOCATE(G%AWX)
231 ! IF(ASSOCIATED(G%AWY)) DEALLOCATE(G%AWY)
232 ! IF(ASSOCIATED(G%AW0)) DEALLOCATE(G%AW0)
233 ! IF(ASSOCIATED(G%ALPHA)) DEALLOCATE(G%ALPHA)
234 
235 ! IF(ASSOCIATED(G%I_OBC_N)) DEALLOCATE(G%I_OBC_N)
236 ! IF(ASSOCIATED(G%TYPE_OBC)) DEALLOCATE(G%TYPE_OBC)
237 
238 
239  DEALLOCATE(g)
240 
241 
242  END SUBROUTINE kill_grid
243 
244 
245 END MODULE mod_types
246 
subroutine kill_grid(G)
Definition: mod_types.f90:178
integer, parameter sp
Definition: mod_prec.f90:48