23 |
#include "DYNVARS.h" |
#include "DYNVARS.h" |
24 |
#include "GRID.h" |
#include "GRID.h" |
25 |
#include "FFIELDS.h" |
#include "FFIELDS.h" |
26 |
|
#include "SEAICE_OPTIONS.h" |
27 |
|
#include "SEAICE_SIZE.h" |
28 |
|
#include "SEAICE.h" |
29 |
#ifdef ALLOW_EXF |
#ifdef ALLOW_EXF |
30 |
# include "EXF_OPTIONS.h" |
# include "EXF_OPTIONS.h" |
31 |
# include "EXF_FIELDS.h" |
# include "EXF_FIELDS.h" |
32 |
#endif |
#endif |
|
#ifdef ALLOW_SEAICE |
|
|
# include "SEAICE_OPTIONS.h" |
|
|
# include "SEAICE_SIZE.h" |
|
|
# include "SEAICE.h" |
|
|
#endif |
|
33 |
|
|
34 |
LOGICAL DIFFERENT_MULTIPLE |
LOGICAL DIFFERENT_MULTIPLE |
35 |
EXTERNAL DIFFERENT_MULTIPLE |
EXTERNAL DIFFERENT_MULTIPLE |
58 |
Real*8 xfer_bc_tracer(2*(Nx+Ny)-4) |
Real*8 xfer_bc_tracer(2*(Nx+Ny)-4) |
59 |
Real*8 xfer_bc_veloc(2*(Nx+Ny)-6) |
Real*8 xfer_bc_veloc(2*(Nx+Ny)-6) |
60 |
_RL local(1:sNx,1:sNy,nSx,nSy) |
_RL local(1:sNx,1:sNy,nSx,nSy) |
61 |
|
character*(10) itername |
62 |
|
|
63 |
COMMON /FFIELDS_tmp/ fu_tmp, fv_tmp, Qnet_tmp, Qsw_tmp, EmPmR_tmp |
# ifdef CPL_DEBUG |
64 |
_RS fu_tmp (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
write(itername,'(i10.10)') myIter |
65 |
_RS fv_tmp (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
# endif /* CPL_DEBUG */ |
|
_RS Qnet_tmp (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
|
|
_RS Qsw_tmp (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
|
|
_RS EmPmR_tmp (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
|
66 |
|
|
67 |
IF( myTime .EQ. startTime ) THEN |
IF( myTime .EQ. startTime ) THEN |
68 |
|
|
195 |
|
|
196 |
ENDIF ! ( myTime .EQ. startTime ) |
ENDIF ! ( myTime .EQ. startTime ) |
197 |
|
|
198 |
|
C-- Apply ice open boundary conditions |
199 |
|
#ifdef ALLOW_OBCS |
200 |
|
IF ( useOBCS ) THEN |
201 |
|
CALL OBCS_APPLY_SEAICE( myThid ) |
202 |
|
CALL OBCS_APPLY_UVICE( uice, vice, myThid ) |
203 |
|
ENDIF |
204 |
|
#endif /* ALLOW_OBCS */ |
205 |
|
|
206 |
C Send ocean model time |
C Send ocean model time |
207 |
_BEGIN_MASTER( myThid ) |
_BEGIN_MASTER( myThid ) |
208 |
xfer_scalar = myTime |
xfer_scalar = myTime |
246 |
idx = idx + 1 |
idx = idx + 1 |
247 |
xfer_bc_tracer(idx) = xfer_array(1,j) |
xfer_bc_tracer(idx) = xfer_array(1,j) |
248 |
ENDDO |
ENDDO |
249 |
|
buffsize = 2*(Nx+Ny)-4 |
250 |
# ifdef CPL_DEBUG |
# ifdef CPL_DEBUG |
251 |
CALL PLOT_FIELD_XYRL( AREA, 'AREA obcs', myIter, myThid ) |
CALL PLOT_FIELD_XYRL( AREA, 'AREA obcs', myIter, myThid ) |
252 |
|
CALL WRITE_GLVEC_RS ( 'AREAobcs.', itername, |
253 |
|
& xfer_bc_tracer, buffsize, myIter, myThid ) |
254 |
# endif /* CPL_DEBUG */ |
# endif /* CPL_DEBUG */ |
255 |
# ifdef CPL_COUPLED |
# ifdef CPL_COUPLED |
256 |
_BEGIN_MASTER( myThid ) |
_BEGIN_MASTER( myThid ) |
257 |
IF ( myworldid .EQ. local_ocean_leader ) THEN |
IF ( myworldid .EQ. local_ocean_leader ) THEN |
|
buffsize = 2*(Nx+Ny)-4 |
|
258 |
cdb print*,'MITgcm is about to send AreaBcTag',buffsize |
cdb print*,'MITgcm is about to send AreaBcTag',buffsize |
259 |
CALL MPI_SEND(xfer_bc_tracer,buffsize,MPI_DOUBLE_PRECISION, |
CALL MPI_SEND(xfer_bc_tracer,buffsize,MPI_DOUBLE_PRECISION, |
260 |
& local_ice_leader,AreaBcTag,MPI_COMM_WORLD,mpierr) |
& local_ice_leader,AreaBcTag,MPI_COMM_WORLD,mpierr) |
291 |
idx = idx + 1 |
idx = idx + 1 |
292 |
xfer_bc_tracer(idx) = xfer_array(1,j) |
xfer_bc_tracer(idx) = xfer_array(1,j) |
293 |
ENDDO |
ENDDO |
294 |
|
buffsize = 2*(Nx+Ny)-4 |
295 |
# ifdef CPL_DEBUG |
# ifdef CPL_DEBUG |
296 |
CALL PLOT_FIELD_XYRL( HEFF, 'HEFF obcs', myIter, myThid ) |
CALL PLOT_FIELD_XYRL( HEFF, 'HEFF obcs', myIter, myThid ) |
297 |
|
CALL WRITE_GLVEC_RS ( 'HEFFobcs.', itername, |
298 |
|
& xfer_bc_tracer, buffsize, myIter, myThid ) |
299 |
# endif /* CPL_DEBUG */ |
# endif /* CPL_DEBUG */ |
300 |
# ifdef CPL_COUPLED |
# ifdef CPL_COUPLED |
301 |
_BEGIN_MASTER( myThid ) |
_BEGIN_MASTER( myThid ) |
302 |
IF ( myworldid .EQ. local_ocean_leader ) THEN |
IF ( myworldid .EQ. local_ocean_leader ) THEN |
|
buffsize = 2*(Nx+Ny)-4 |
|
303 |
CALL MPI_SEND(xfer_bc_tracer,buffsize,MPI_DOUBLE_PRECISION, |
CALL MPI_SEND(xfer_bc_tracer,buffsize,MPI_DOUBLE_PRECISION, |
304 |
& local_ice_leader,HeffBcTag,MPI_COMM_WORLD,mpierr) |
& local_ice_leader,HeffBcTag,MPI_COMM_WORLD,mpierr) |
305 |
ENDIF |
ENDIF |
334 |
idx = idx + 1 |
idx = idx + 1 |
335 |
xfer_bc_tracer(idx) = xfer_array(1,j) |
xfer_bc_tracer(idx) = xfer_array(1,j) |
336 |
ENDDO |
ENDDO |
337 |
|
buffsize = 2*(Nx+Ny)-4 |
338 |
# ifdef CPL_DEBUG |
# ifdef CPL_DEBUG |
339 |
CALL PLOT_FIELD_XYRL( HSALT, 'HSALT obcs', myIter, myThid ) |
CALL PLOT_FIELD_XYRL( HSALT, 'HSALT obcs', myIter, myThid ) |
340 |
|
CALL WRITE_GLVEC_RS ( 'HSALTobcs.', itername, |
341 |
|
& xfer_bc_tracer, buffsize, myIter, myThid ) |
342 |
# endif /* CPL_DEBUG */ |
# endif /* CPL_DEBUG */ |
343 |
# ifdef CPL_COUPLED |
# ifdef CPL_COUPLED |
344 |
_BEGIN_MASTER( myThid ) |
_BEGIN_MASTER( myThid ) |
345 |
IF ( myworldid .EQ. local_ocean_leader ) THEN |
IF ( myworldid .EQ. local_ocean_leader ) THEN |
|
buffsize = 2*(Nx+Ny)-4 |
|
346 |
CALL MPI_SEND(xfer_bc_tracer,buffsize,MPI_DOUBLE_PRECISION, |
CALL MPI_SEND(xfer_bc_tracer,buffsize,MPI_DOUBLE_PRECISION, |
347 |
& local_ice_leader,HsaltBcTag,MPI_COMM_WORLD,mpierr) |
& local_ice_leader,HsaltBcTag,MPI_COMM_WORLD,mpierr) |
348 |
ENDIF |
ENDIF |
377 |
idx = idx + 1 |
idx = idx + 1 |
378 |
xfer_bc_tracer(idx) = xfer_array(1,j) |
xfer_bc_tracer(idx) = xfer_array(1,j) |
379 |
ENDDO |
ENDDO |
380 |
|
buffsize = 2*(Nx+Ny)-4 |
381 |
# ifdef CPL_DEBUG |
# ifdef CPL_DEBUG |
382 |
CALL PLOT_FIELD_XYRL( HSNOW, 'HSNOW obcs', myIter, myThid ) |
CALL PLOT_FIELD_XYRL( HSNOW, 'HSNOW obcs', myIter, myThid ) |
383 |
|
CALL WRITE_GLVEC_RS ( 'HSNOWobcs.', itername, |
384 |
|
& xfer_bc_tracer, buffsize, myIter, myThid ) |
385 |
# endif /* CPL_DEBUG */ |
# endif /* CPL_DEBUG */ |
386 |
# ifdef CPL_COUPLED |
# ifdef CPL_COUPLED |
387 |
_BEGIN_MASTER( myThid ) |
_BEGIN_MASTER( myThid ) |
388 |
IF ( myworldid .EQ. local_ocean_leader ) THEN |
IF ( myworldid .EQ. local_ocean_leader ) THEN |
|
buffsize = 2*(Nx+Ny)-4 |
|
389 |
CALL MPI_SEND(xfer_bc_tracer,buffsize,MPI_DOUBLE_PRECISION, |
CALL MPI_SEND(xfer_bc_tracer,buffsize,MPI_DOUBLE_PRECISION, |
390 |
& local_ice_leader,HsnowBcTag,MPI_COMM_WORLD,mpierr) |
& local_ice_leader,HsnowBcTag,MPI_COMM_WORLD,mpierr) |
391 |
ENDIF |
ENDIF |
420 |
idx = idx + 1 |
idx = idx + 1 |
421 |
xfer_bc_veloc(idx) = xfer_array(2,j) |
xfer_bc_veloc(idx) = xfer_array(2,j) |
422 |
ENDDO |
ENDDO |
423 |
|
buffsize = 2*(Nx+Ny)-6 |
424 |
# ifdef CPL_DEBUG |
# ifdef CPL_DEBUG |
425 |
CALL PLOT_FIELD_XYRL( UICE, 'UICE obcs', myIter, myThid ) |
CALL PLOT_FIELD_XYRL( UICE, 'UICE obcs', myIter, myThid ) |
426 |
|
CALL WRITE_GLVEC_RS ( 'UICEobcs.', itername, |
427 |
|
& xfer_bc_veloc, buffsize, myIter, myThid ) |
428 |
# endif /* CPL_DEBUG */ |
# endif /* CPL_DEBUG */ |
429 |
# ifdef CPL_COUPLED |
# ifdef CPL_COUPLED |
430 |
_BEGIN_MASTER( myThid ) |
_BEGIN_MASTER( myThid ) |
431 |
IF ( myworldid .EQ. local_ocean_leader ) THEN |
IF ( myworldid .EQ. local_ocean_leader ) THEN |
|
buffsize = 2*(Nx+Ny)-6 |
|
432 |
CALL MPI_SEND(xfer_bc_veloc,buffsize,MPI_DOUBLE_PRECISION, |
CALL MPI_SEND(xfer_bc_veloc,buffsize,MPI_DOUBLE_PRECISION, |
433 |
& local_ice_leader,UiceBcTag,MPI_COMM_WORLD,mpierr) |
& local_ice_leader,UiceBcTag,MPI_COMM_WORLD,mpierr) |
434 |
ENDIF |
ENDIF |
463 |
idx = idx + 1 |
idx = idx + 1 |
464 |
xfer_bc_veloc(idx) = xfer_array(1,j) |
xfer_bc_veloc(idx) = xfer_array(1,j) |
465 |
ENDDO |
ENDDO |
466 |
|
buffsize = 2*(Nx+Ny)-6 |
467 |
# ifdef CPL_DEBUG |
# ifdef CPL_DEBUG |
468 |
CALL PLOT_FIELD_XYRL( VICE, 'VICE obcs', myIter, myThid ) |
CALL PLOT_FIELD_XYRL( VICE, 'VICE obcs', myIter, myThid ) |
469 |
|
CALL WRITE_GLVEC_RS ( 'VICEobcs.', itername, |
470 |
|
& xfer_bc_veloc, buffsize, myIter, myThid ) |
471 |
# endif /* CPL_DEBUG */ |
# endif /* CPL_DEBUG */ |
472 |
# ifdef CPL_COUPLED |
# ifdef CPL_COUPLED |
473 |
_BEGIN_MASTER( myThid ) |
_BEGIN_MASTER( myThid ) |
474 |
IF ( myworldid .EQ. local_ocean_leader ) THEN |
IF ( myworldid .EQ. local_ocean_leader ) THEN |
|
buffsize = 2*(Nx+Ny)-6 |
|
475 |
CALL MPI_SEND(xfer_bc_veloc,buffsize,MPI_DOUBLE_PRECISION, |
CALL MPI_SEND(xfer_bc_veloc,buffsize,MPI_DOUBLE_PRECISION, |
476 |
& local_ice_leader,ViceBcTag,MPI_COMM_WORLD,mpierr) |
& local_ice_leader,ViceBcTag,MPI_COMM_WORLD,mpierr) |
477 |
ENDIF |
ENDIF |
876 |
DO bi=1,nSx |
DO bi=1,nSx |
877 |
DO j=1,sNy |
DO j=1,sNy |
878 |
DO i=1,sNx |
DO i=1,sNx |
879 |
fu(i,j,bi,bj) = AREA(i,j,bi,bj) * local(i,j,bi,bj) + |
fu(i,j,bi,bj) = AREA(i,j,bi,bj) * local(i,j,bi,bj) + |
880 |
& (1.-AREA(i,j,bi,bj)) * fu_tmp(i,j,bi,bj) |
& (1.-AREA(i,j,bi,bj)) * fu (i,j,bi,bj) |
881 |
ENDDO |
ENDDO |
882 |
ENDDO |
ENDDO |
883 |
ENDDO |
ENDDO |
904 |
DO bi=1,nSx |
DO bi=1,nSx |
905 |
DO j=1,sNy |
DO j=1,sNy |
906 |
DO i=1,sNx |
DO i=1,sNx |
907 |
fv(i,j,bi,bj) = AREA(i,j,bi,bj) * local(i,j,bi,bj) + |
fv(i,j,bi,bj) = AREA(i,j,bi,bj) * local(i,j,bi,bj) + |
908 |
& (1.-AREA(i,j,bi,bj)) * fv_tmp(i,j,bi,bj) |
& (1.-AREA(i,j,bi,bj)) * fv (i,j,bi,bj) |
909 |
ENDDO |
ENDDO |
910 |
ENDDO |
ENDDO |
911 |
ENDDO |
ENDDO |
932 |
DO bi=1,nSx |
DO bi=1,nSx |
933 |
DO j=1,sNy |
DO j=1,sNy |
934 |
DO i=1,sNx |
DO i=1,sNx |
935 |
Qsw(i,j,bi,bj) = -AREA(i,j,bi,bj) * local(i,j,bi,bj) + |
Qsw(i,j,bi,bj) = -AREA(i,j,bi,bj) * local(i,j,bi,bj) + |
936 |
& (1.-AREA(i,j,bi,bj)) * Qsw_tmp(i,j,bi,bj) |
& (1.-AREA(i,j,bi,bj)) * Qsw(i,j,bi,bj) |
937 |
ENDDO |
ENDDO |
938 |
ENDDO |
ENDDO |
939 |
ENDDO |
ENDDO |
961 |
DO j=1,sNy |
DO j=1,sNy |
962 |
DO i=1,sNx |
DO i=1,sNx |
963 |
Qnet(i,j,bi,bj) = Qsw(i,j,bi,bj) - |
Qnet(i,j,bi,bj) = Qsw(i,j,bi,bj) - |
964 |
& AREA(i,j,bi,bj) * local(i,j,bi,bj) + |
& AREA(i,j,bi,bj) * local(i,j,bi,bj) + |
965 |
& (1.-AREA(i,j,bi,bj)) * Qnet_tmp(i,j,bi,bj) |
& (1.-AREA(i,j,bi,bj)) * Qnet(i,j,bi,bj) |
966 |
ENDDO |
ENDDO |
967 |
ENDDO |
ENDDO |
968 |
ENDDO |
ENDDO |
989 |
DO bi=1,nSx |
DO bi=1,nSx |
990 |
DO j=1,sNy |
DO j=1,sNy |
991 |
DO i=1,sNx |
DO i=1,sNx |
992 |
EmPmR(i,j,bi,bj) = - AREA(i,j,bi,bj) * local (i,j,bi,bj) + |
EmPmR(i,j,bi,bj) = - AREA(i,j,bi,bj) * local(i,j,bi,bj) + |
993 |
& ( 1. - AREA(i,j,bi,bj)) * EmPmR_tmp(i,j,bi,bj) |
& ( 1. - AREA(i,j,bi,bj)) * EmPmR(i,j,bi,bj) |
994 |
ENDDO |
ENDDO |
995 |
ENDDO |
ENDDO |
996 |
ENDDO |
ENDDO |