1 |
C $Header: /u/gcmpack/MITgcm/pkg/generic_advdiff/gad_som_fill_cs_corner.F,v 1.2 2008/05/09 21:43:16 jmc Exp $ |
2 |
C $Name: $ |
3 |
|
4 |
#include "GAD_OPTIONS.h" |
5 |
|
6 |
CBOP |
7 |
C !ROUTINE: GAD_SOM_FILL_CS_CORNER |
8 |
C !INTERFACE: |
9 |
SUBROUTINE GAD_SOM_FILL_CS_CORNER( |
10 |
I fill4dirX, |
11 |
U sm_v, sm_o, sm_x, sm_y, sm_z, |
12 |
U sm_xx, sm_yy, sm_zz, sm_xy, sm_xz, sm_yz, |
13 |
I bi, bj, myThid ) |
14 |
|
15 |
C !DESCRIPTION: \bv |
16 |
C *==========================================================* |
17 |
C | SUBROUTINE GAD_SOM_FILL_CS_CORNER |
18 |
C | o Wraper S/R to fill the corner-halo region of CS-grid, |
19 |
C | for all moments of a 1 tracer field |
20 |
C *==========================================================* |
21 |
C | o the corner halo region is filled with valid values |
22 |
C | in order to compute (later on) gradient in X or Y |
23 |
C | direction, on a wide stencil. |
24 |
C *==========================================================* |
25 |
C \ev |
26 |
C !USES: |
27 |
IMPLICIT NONE |
28 |
|
29 |
C === Global variables === |
30 |
#include "SIZE.h" |
31 |
#include "EEPARAMS.h" |
32 |
#include "PARAMS.h" |
33 |
#include "GAD.h" |
34 |
|
35 |
C !INPUT/OUTPUT PARAMETERS: |
36 |
C === Routine arguments === |
37 |
C fill4dirX :: True = prepare for X direction calculations |
38 |
C otherwise, prepare for Y direction |
39 |
C sm_v :: volume of grid cell |
40 |
C sm_o :: tracer content of grid cell (zero order moment) |
41 |
C sm_x,y,z :: 1rst order moment of tracer distribution, in x,y,z direction |
42 |
C sm_xx,yy,zz :: 2nd order moment of tracer distribution, in x,y,z direction |
43 |
C sm_xy,xz,yz :: 2nd order moment of tracer distr., in cross direction xy,xz,yz |
44 |
C bi,bj :: tile indices |
45 |
C myThid :: my Thread Id. number |
46 |
LOGICAL fill4dirX |
47 |
_RL sm_v (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
48 |
_RL sm_o (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
49 |
_RL sm_x (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
50 |
_RL sm_y (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
51 |
_RL sm_z (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
52 |
_RL sm_xx (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
53 |
_RL sm_yy (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
54 |
_RL sm_zz (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
55 |
_RL sm_xy (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
56 |
_RL sm_xz (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
57 |
_RL sm_yz (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
58 |
INTEGER bi,bj |
59 |
INTEGER myThid |
60 |
|
61 |
C !LOCAL VARIABLES: |
62 |
C == Local variables == |
63 |
INTEGER selectDir |
64 |
CEOP |
65 |
|
66 |
IF (useCubedSphereExchange) THEN |
67 |
IF ( fill4dirX ) THEN |
68 |
selectDir = 1 |
69 |
ELSE |
70 |
selectDir = 2 |
71 |
ENDIF |
72 |
CALL FILL_CS_CORNER_TR_RL( selectDir, .FALSE., |
73 |
& sm_v , bi,bj, myThid ) |
74 |
CALL FILL_CS_CORNER_TR_RL( selectDir, .FALSE., |
75 |
& sm_o , bi,bj, myThid ) |
76 |
CALL FILL_CS_CORNER_AG_RL( fill4dirX, .TRUE., |
77 |
& sm_x , sm_y , bi,bj, myThid ) |
78 |
CALL FILL_CS_CORNER_TR_RL( selectDir, .FALSE., |
79 |
& sm_z , bi,bj, myThid ) |
80 |
CALL FILL_CS_CORNER_AG_RL( fill4dirX, .FALSE., |
81 |
& sm_xx, sm_yy, bi,bj, myThid ) |
82 |
CALL FILL_CS_CORNER_TR_RL( selectDir, .FALSE., |
83 |
& sm_zz, bi,bj, myThid ) |
84 |
CALL FILL_CS_CORNER_TR_RL( selectDir, .TRUE., |
85 |
& sm_xy, bi,bj, myThid ) |
86 |
CALL FILL_CS_CORNER_AG_RL( fill4dirX, .TRUE., |
87 |
& sm_xz, sm_yz, bi,bj, myThid ) |
88 |
ENDIF |
89 |
|
90 |
RETURN |
91 |
END |