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) |
|
character*(10) itername |
|
|
|
|
|
COMMON /FFIELDS_tmp/ fu_tmp, fv_tmp, Qnet_tmp, Qsw_tmp, EmPmR_tmp |
|
|
_RS fu_tmp (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
|
|
_RS fv_tmp (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
|
|
_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) |
|
61 |
|
|
62 |
# ifdef CPL_DEBUG |
# ifdef CPL_DEBUG |
63 |
|
character*(10) itername |
64 |
write(itername,'(i10.10)') myIter |
write(itername,'(i10.10)') myIter |
65 |
# endif /* CPL_DEBUG */ |
# endif /* CPL_DEBUG */ |
66 |
|
|
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 |
862 |
CALL PLOT_FIELD_XYRL( HSNOW, 'snow thickness', myIter, myThid ) |
CALL PLOT_FIELD_XYRL( HSNOW, 'snow thickness', myIter, myThid ) |
863 |
# endif /* CPL_DEBUG */ |
# endif /* CPL_DEBUG */ |
864 |
|
|
865 |
|
C Receive u ice velocity |
866 |
|
# ifdef CPL_COUPLED |
867 |
|
_BEGIN_MASTER( myThid ) |
868 |
|
IF ( myworldid .EQ. local_ocean_leader ) THEN |
869 |
|
buffsize = Nx*Ny |
870 |
|
CALL MPI_RECV(xfer_array,buffsize,MPI_DOUBLE_PRECISION, |
871 |
|
& local_ice_leader,UiceTag,MPI_COMM_WORLD,mpistatus,mpierr) |
872 |
|
ENDIF |
873 |
|
_END_MASTER( myThid ) |
874 |
|
CALL SCATTER_2D( xfer_array, local, myThid ) |
875 |
|
DO bj=1,nSy |
876 |
|
DO bi=1,nSx |
877 |
|
DO j=1,sNy |
878 |
|
DO i=1,sNx |
879 |
|
UICE(i,j,bi,bj) = local(i,j,bi,bj) |
880 |
|
ENDDO |
881 |
|
ENDDO |
882 |
|
ENDDO |
883 |
|
ENDDO |
884 |
|
# ifdef CPL_DEBUG |
885 |
|
CALL PLOT_FIELD_XYRL( local, 'uice', myIter, myThid ) |
886 |
|
# endif /* CPL_DEBUG */ |
887 |
|
# endif /* CPL_COUPLED */ |
888 |
|
# ifdef CPL_DEBUG |
889 |
|
CALL PLOT_FIELD_XYRL( UICE, 'uice', myIter, myThid ) |
890 |
|
# endif /* CPL_DEBUG */ |
891 |
|
|
892 |
|
C Receive v ice velocity |
893 |
|
# ifdef CPL_COUPLED |
894 |
|
_BEGIN_MASTER( myThid ) |
895 |
|
IF ( myworldid .EQ. local_ocean_leader ) THEN |
896 |
|
buffsize = Nx*Ny |
897 |
|
CALL MPI_RECV(xfer_array,buffsize,MPI_DOUBLE_PRECISION, |
898 |
|
& local_ice_leader,ViceTag,MPI_COMM_WORLD,mpistatus,mpierr) |
899 |
|
ENDIF |
900 |
|
_END_MASTER( myThid ) |
901 |
|
CALL SCATTER_2D( xfer_array, local, myThid ) |
902 |
|
DO bj=1,nSy |
903 |
|
DO bi=1,nSx |
904 |
|
DO j=1,sNy |
905 |
|
DO i=1,sNx |
906 |
|
VICE(i,j,bi,bj) = local(i,j,bi,bj) |
907 |
|
ENDDO |
908 |
|
ENDDO |
909 |
|
ENDDO |
910 |
|
ENDDO |
911 |
|
# ifdef CPL_DEBUG |
912 |
|
CALL PLOT_FIELD_XYRL( local, 'vice', myIter, myThid ) |
913 |
|
# endif /* CPL_DEBUG */ |
914 |
|
# endif /* CPL_COUPLED */ |
915 |
|
# ifdef CPL_DEBUG |
916 |
|
CALL PLOT_FIELD_XYRL( VICE, 'vice', myIter, myThid ) |
917 |
|
# endif /* CPL_DEBUG */ |
918 |
|
|
919 |
C Receive u surface stress |
C Receive u surface stress |
920 |
# ifdef CPL_COUPLED |
# ifdef CPL_COUPLED |
921 |
_BEGIN_MASTER( myThid ) |
_BEGIN_MASTER( myThid ) |
930 |
DO bi=1,nSx |
DO bi=1,nSx |
931 |
DO j=1,sNy |
DO j=1,sNy |
932 |
DO i=1,sNx |
DO i=1,sNx |
933 |
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) + |
934 |
& (1.-AREA(i,j,bi,bj)) * fu_tmp(i,j,bi,bj) |
& (1.-AREA(i,j,bi,bj)) * fu (i,j,bi,bj) |
935 |
ENDDO |
ENDDO |
936 |
ENDDO |
ENDDO |
937 |
ENDDO |
ENDDO |
958 |
DO bi=1,nSx |
DO bi=1,nSx |
959 |
DO j=1,sNy |
DO j=1,sNy |
960 |
DO i=1,sNx |
DO i=1,sNx |
961 |
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) + |
962 |
& (1.-AREA(i,j,bi,bj)) * fv_tmp(i,j,bi,bj) |
& (1.-AREA(i,j,bi,bj)) * fv (i,j,bi,bj) |
963 |
ENDDO |
ENDDO |
964 |
ENDDO |
ENDDO |
965 |
ENDDO |
ENDDO |
986 |
DO bi=1,nSx |
DO bi=1,nSx |
987 |
DO j=1,sNy |
DO j=1,sNy |
988 |
DO i=1,sNx |
DO i=1,sNx |
989 |
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) + |
990 |
& (1.-AREA(i,j,bi,bj)) * Qsw_tmp(i,j,bi,bj) |
& (1.-AREA(i,j,bi,bj)) * Qsw(i,j,bi,bj) |
991 |
ENDDO |
ENDDO |
992 |
ENDDO |
ENDDO |
993 |
ENDDO |
ENDDO |
1015 |
DO j=1,sNy |
DO j=1,sNy |
1016 |
DO i=1,sNx |
DO i=1,sNx |
1017 |
Qnet(i,j,bi,bj) = Qsw(i,j,bi,bj) - |
Qnet(i,j,bi,bj) = Qsw(i,j,bi,bj) - |
1018 |
& AREA(i,j,bi,bj) * local(i,j,bi,bj) + |
& AREA(i,j,bi,bj) * local(i,j,bi,bj) + |
1019 |
& (1.-AREA(i,j,bi,bj)) * Qnet_tmp(i,j,bi,bj) |
& (1.-AREA(i,j,bi,bj)) * Qnet(i,j,bi,bj) |
1020 |
ENDDO |
ENDDO |
1021 |
ENDDO |
ENDDO |
1022 |
ENDDO |
ENDDO |
1043 |
DO bi=1,nSx |
DO bi=1,nSx |
1044 |
DO j=1,sNy |
DO j=1,sNy |
1045 |
DO i=1,sNx |
DO i=1,sNx |
1046 |
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) + |
1047 |
& ( 1. - AREA(i,j,bi,bj)) * EmPmR_tmp(i,j,bi,bj) |
& ( 1. - AREA(i,j,bi,bj)) * EmPmR(i,j,bi,bj) |
1048 |
ENDDO |
ENDDO |
1049 |
ENDDO |
ENDDO |
1050 |
ENDDO |
ENDDO |