C $Header: /u/gcmpack/MITgcm/pkg/generic_advdiff/gad_som_fill_cs_corner.F,v 1.3 2008/10/22 00:28:47 jmc Exp $ C $Name: $ #include "GAD_OPTIONS.h" CBOP C !ROUTINE: GAD_SOM_FILL_CS_CORNER C !INTERFACE: SUBROUTINE GAD_SOM_FILL_CS_CORNER( I fill4dirX, U sm_v, sm_o, sm_x, sm_y, sm_z, U sm_xx, sm_yy, sm_zz, sm_xy, sm_xz, sm_yz, I bi, bj, myThid ) C !DESCRIPTION: \bv C *==========================================================* C | SUBROUTINE GAD_SOM_FILL_CS_CORNER C | o Wraper S/R to fill the corner-halo region of CS-grid, C | for all moments of a 1 tracer field C *==========================================================* C | o the corner halo region is filled with valid values C | in order to compute (later on) gradient in X or Y C | direction, on a wide stencil. C *==========================================================* C \ev C !USES: IMPLICIT NONE C === Global variables === #include "SIZE.h" #include "EEPARAMS.h" #include "PARAMS.h" #include "GAD.h" C !INPUT/OUTPUT PARAMETERS: C === Routine arguments === C fill4dirX :: True = prepare for X direction calculations C otherwise, prepare for Y direction C sm_v :: volume of grid cell C sm_o :: tracer content of grid cell (zero order moment) C sm_x,y,z :: 1rst order moment of tracer distribution, in x,y,z direction C sm_xx,yy,zz :: 2nd order moment of tracer distribution, in x,y,z direction C sm_xy,xz,yz :: 2nd order moment of tracer distr., in cross direction xy,xz,yz C bi,bj :: tile indices C myThid :: my Thread Id. number LOGICAL fill4dirX _RL sm_v (1-OLx:sNx+OLx,1-OLy:sNy+OLy) _RL sm_o (1-OLx:sNx+OLx,1-OLy:sNy+OLy) _RL sm_x (1-OLx:sNx+OLx,1-OLy:sNy+OLy) _RL sm_y (1-OLx:sNx+OLx,1-OLy:sNy+OLy) _RL sm_z (1-OLx:sNx+OLx,1-OLy:sNy+OLy) _RL sm_xx (1-OLx:sNx+OLx,1-OLy:sNy+OLy) _RL sm_yy (1-OLx:sNx+OLx,1-OLy:sNy+OLy) _RL sm_zz (1-OLx:sNx+OLx,1-OLy:sNy+OLy) _RL sm_xy (1-OLx:sNx+OLx,1-OLy:sNy+OLy) _RL sm_xz (1-OLx:sNx+OLx,1-OLy:sNy+OLy) _RL sm_yz (1-OLx:sNx+OLx,1-OLy:sNy+OLy) INTEGER bi,bj INTEGER myThid C !LOCAL VARIABLES: C == Local variables == INTEGER selectDir CEOP IF (useCubedSphereExchange) THEN IF ( fill4dirX ) THEN selectDir = 1 ELSE selectDir = 2 ENDIF CALL FILL_CS_CORNER_TR_RL( selectDir, .FALSE., & sm_v , bi,bj, myThid ) CALL FILL_CS_CORNER_TR_RL( selectDir, .FALSE., & sm_o , bi,bj, myThid ) CALL FILL_CS_CORNER_AG_RL( fill4dirX, .TRUE., & sm_x , sm_y , bi,bj, myThid ) CALL FILL_CS_CORNER_TR_RL( selectDir, .FALSE., & sm_z , bi,bj, myThid ) CALL FILL_CS_CORNER_AG_RL( fill4dirX, .FALSE., & sm_xx, sm_yy, bi,bj, myThid ) CALL FILL_CS_CORNER_TR_RL( selectDir, .FALSE., & sm_zz, bi,bj, myThid ) CALL FILL_CS_CORNER_TR_RL( selectDir, .TRUE., & sm_xy, bi,bj, myThid ) CALL FILL_CS_CORNER_AG_RL( fill4dirX, .TRUE., & sm_xz, sm_yz, bi,bj, myThid ) ENDIF RETURN END