/[MITgcm]/MITgcm_contrib/MPMice/beaufort/code/cpl_mpmice.F
ViewVC logotype

Diff of /MITgcm_contrib/MPMice/beaufort/code/cpl_mpmice.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.1 by dimitri, Sun May 31 03:41:36 2009 UTC revision 1.11 by dimitri, Thu Feb 9 20:49:24 2012 UTC
# Line 23  C     == Global variables == Line 23  C     == Global variables ==
23  #include "PARAMS.h"  #include "PARAMS.h"
24  #include "DYNVARS.h"  #include "DYNVARS.h"
25  #include "GRID.h"  #include "GRID.h"
26    #include "FFIELDS.h"
27  #ifdef ALLOW_EXF  #ifdef ALLOW_EXF
28  # include "EXF_OPTIONS.h"  # include "EXF_OPTIONS.h"
29  # include "EXF_FIELDS.h"  # include "EXF_FIELDS.h"
# Line 57  CEOP Line 58  CEOP
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    
62          COMMON /FFIELDS_tmp/ fu_tmp, fv_tmp, Qnet_tmp, Qsw_tmp, EmPmR_tmp
63          _RS  fu_tmp       (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
64          _RS  fv_tmp       (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
65          _RS  Qnet_tmp     (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
66          _RS  Qsw_tmp      (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
67          _RS  EmPmR_tmp    (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
68    
69    #ifdef CPL_DEBUG
70        _RL ScatArray(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)        _RL ScatArray(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
71          DO bj=1,nSy
72           DO bi=1,nSx
73            DO j=1-OLy,sNy+OLy
74             DO i=1-OLx,sNx+OLx
75              ScatArray(i,j,bi,bj) = 0.0 _d 0
76             ENDDO
77            ENDDO
78           ENDDO
79          ENDDO
80    #endif
81    
82        IF( myTime .EQ. startTime ) THEN        IF( myTime .EQ. startTime ) THEN
83    
# Line 93  C     Send ice area Line 113  C     Send ice area
113          DO bi=1,nSx          DO bi=1,nSx
114           DO j=1,sNy           DO j=1,sNy
115            DO i=1,sNx            DO i=1,sNx
116             local(i,j,bi,bj) = AREA(i,j,1,bi,bj)             local(i,j,bi,bj) = AREA(i,j,bi,bj)
117            ENDDO            ENDDO
118           ENDDO           ENDDO
119          ENDDO          ENDDO
# Line 115  C     Send ice thickness Line 135  C     Send ice thickness
135          DO bi=1,nSx          DO bi=1,nSx
136           DO j=1,sNy           DO j=1,sNy
137            DO i=1,sNx            DO i=1,sNx
138             local(i,j,bi,bj) = HEFF(i,j,1,bi,bj)             local(i,j,bi,bj) = HEFF(i,j,bi,bj)
139            ENDDO            ENDDO
140           ENDDO           ENDDO
141          ENDDO          ENDDO
# Line 196  C     Send boundary ice area Line 216  C     Send boundary ice area
216         DO bi=1,nSx         DO bi=1,nSx
217          DO j=1,sNy          DO j=1,sNy
218           DO i=1,sNx           DO i=1,sNx
219            local(i,j,bi,bj) = AREA(i,j,1,bi,bj)            local(i,j,bi,bj) = AREA(i,j,bi,bj)
220           ENDDO           ENDDO
221          ENDDO          ENDDO
222         ENDDO         ENDDO
# Line 211  C     Send boundary ice area Line 231  C     Send boundary ice area
231         idx = idx + 1         idx = idx + 1
232         xfer_bc_tracer(idx) = xfer_array(Nx,j)         xfer_bc_tracer(idx) = xfer_array(Nx,j)
233        ENDDO        ENDDO
234        DO i = (Nx-1), -1, 1        DO i = (Nx-1), 1, -1
235         idx = idx + 1         idx = idx + 1
236         xfer_bc_tracer(idx) = xfer_array(i,Ny)         xfer_bc_tracer(idx) = xfer_array(i,Ny)
237        ENDDO        ENDDO
238        DO j = (Ny-1), -1, 2        DO j = (Ny-1), 2, -1
239         idx = idx + 1         idx = idx + 1
240         xfer_bc_tracer(idx) = xfer_array(1,j)         xfer_bc_tracer(idx) = xfer_array(1,j)
241        ENDDO        ENDDO
# Line 234  C     Send boundary ice thickness Line 254  C     Send boundary ice thickness
254         DO bi=1,nSx         DO bi=1,nSx
255          DO j=1,sNy          DO j=1,sNy
256           DO i=1,sNx           DO i=1,sNx
257            local(i,j,bi,bj) = HEFF(i,j,1,bi,bj)            local(i,j,bi,bj) = HEFF(i,j,bi,bj)
258           ENDDO           ENDDO
259          ENDDO          ENDDO
260         ENDDO         ENDDO
# Line 249  C     Send boundary ice thickness Line 269  C     Send boundary ice thickness
269         idx = idx + 1         idx = idx + 1
270         xfer_bc_tracer(idx) = xfer_array(Nx,j)         xfer_bc_tracer(idx) = xfer_array(Nx,j)
271        ENDDO        ENDDO
272        DO i = (Nx-1), -1, 1        DO i = (Nx-1), 1, -1
273         idx = idx + 1         idx = idx + 1
274         xfer_bc_tracer(idx) = xfer_array(i,Ny)         xfer_bc_tracer(idx) = xfer_array(i,Ny)
275        ENDDO        ENDDO
276        DO j = (Ny-1), -1, 2        DO j = (Ny-1), 2, -1
277         idx = idx + 1         idx = idx + 1
278         xfer_bc_tracer(idx) = xfer_array(1,j)         xfer_bc_tracer(idx) = xfer_array(1,j)
279        ENDDO        ENDDO
# Line 285  C     Send boundary ice salinity Line 305  C     Send boundary ice salinity
305         idx = idx + 1         idx = idx + 1
306         xfer_bc_tracer(idx) = xfer_array(Nx,j)         xfer_bc_tracer(idx) = xfer_array(Nx,j)
307        ENDDO        ENDDO
308        DO i = (Nx-1), -1, 1        DO i = (Nx-1), 1, -1
309         idx = idx + 1         idx = idx + 1
310         xfer_bc_tracer(idx) = xfer_array(i,Ny)         xfer_bc_tracer(idx) = xfer_array(i,Ny)
311        ENDDO        ENDDO
312        DO j = (Ny-1), -1, 2        DO j = (Ny-1), 2, -1
313         idx = idx + 1         idx = idx + 1
314         xfer_bc_tracer(idx) = xfer_array(1,j)         xfer_bc_tracer(idx) = xfer_array(1,j)
315        ENDDO        ENDDO
# Line 321  C     Send boundary snow thickness Line 341  C     Send boundary snow thickness
341         idx = idx + 1         idx = idx + 1
342         xfer_bc_tracer(idx) = xfer_array(Nx,j)         xfer_bc_tracer(idx) = xfer_array(Nx,j)
343        ENDDO        ENDDO
344        DO i = (Nx-1), -1, 1        DO i = (Nx-1), 1, -1
345         idx = idx + 1         idx = idx + 1
346         xfer_bc_tracer(idx) = xfer_array(i,Ny)         xfer_bc_tracer(idx) = xfer_array(i,Ny)
347        ENDDO        ENDDO
348        DO j = (Ny-1), -1, 2        DO j = (Ny-1), 2, -1
349         idx = idx + 1         idx = idx + 1
350         xfer_bc_tracer(idx) = xfer_array(1,j)         xfer_bc_tracer(idx) = xfer_array(1,j)
351        ENDDO        ENDDO
# Line 342  C     Send boundary u ice Line 362  C     Send boundary u ice
362         DO bi=1,nSx         DO bi=1,nSx
363          DO j=1,sNy          DO j=1,sNy
364           DO i=1,sNx           DO i=1,sNx
365            local(i,j,bi,bj) = UICE(i,j,1,bi,bj)            local(i,j,bi,bj) = UICE(i,j,bi,bj)
366           ENDDO           ENDDO
367          ENDDO          ENDDO
368         ENDDO         ENDDO
# Line 357  C     Send boundary u ice Line 377  C     Send boundary u ice
377         idx = idx + 1         idx = idx + 1
378         xfer_bc_veloc(idx) = xfer_array(Nx,j)         xfer_bc_veloc(idx) = xfer_array(Nx,j)
379        ENDDO        ENDDO
380        DO i = (Nx-1), -1, 2        DO i = (Nx-1), 2, -1
381         idx = idx + 1         idx = idx + 1
382         xfer_bc_veloc(idx) = xfer_array(i,Ny)         xfer_bc_veloc(idx) = xfer_array(i,Ny)
383        ENDDO        ENDDO
384        DO j = (Ny-1), -1, 2        DO j = (Ny-1), 2, -1
385         idx = idx + 1         idx = idx + 1
386         xfer_bc_veloc(idx) = xfer_array(2,j)         xfer_bc_veloc(idx) = xfer_array(2,j)
387        ENDDO        ENDDO
# Line 378  C     Send boundary v ice Line 398  C     Send boundary v ice
398         DO bi=1,nSx         DO bi=1,nSx
399          DO j=1,sNy          DO j=1,sNy
400           DO i=1,sNx           DO i=1,sNx
401            local(i,j,bi,bj) = VICE(i,j,1,bi,bj)            local(i,j,bi,bj) = VICE(i,j,bi,bj)
402           ENDDO           ENDDO
403          ENDDO          ENDDO
404         ENDDO         ENDDO
# Line 393  C     Send boundary v ice Line 413  C     Send boundary v ice
413         idx = idx + 1         idx = idx + 1
414         xfer_bc_veloc(idx) = xfer_array(Nx,j)         xfer_bc_veloc(idx) = xfer_array(Nx,j)
415        ENDDO        ENDDO
416        DO i = (Nx-1), -1, 1        DO i = (Nx-1), 1, -1
417         idx = idx + 1         idx = idx + 1
418         xfer_bc_veloc(idx) = xfer_array(i,Ny)         xfer_bc_veloc(idx) = xfer_array(i,Ny)
419        ENDDO        ENDDO
420        DO j = (Ny-1), -1, 3        DO j = (Ny-1), 3, -1
421         idx = idx + 1         idx = idx + 1
422         xfer_bc_veloc(idx) = xfer_array(1,j)         xfer_bc_veloc(idx) = xfer_array(1,j)
423        ENDDO        ENDDO
# Line 571  C     Send ocean surface temperature Line 591  C     Send ocean surface temperature
591        ENDIF        ENDIF
592        _END_MASTER( myThid )        _END_MASTER( myThid )
593    
594    C     Send ocean surface salinity
595          DO bj=1,nSy
596           DO bi=1,nSx
597            DO j=1,sNy
598             DO i=1,sNx
599              local(i,j,bi,bj) = salt(i,j,1,bi,bj)
600             ENDDO
601            ENDDO
602           ENDDO
603          ENDDO
604          CALL GATHER_2D( xfer_array, local, myThid )
605          _BEGIN_MASTER( myThid )
606          IF ( myworldid .EQ. local_ocean_leader ) THEN
607           buffsize = Nx*Ny
608           CALL MPI_SEND(xfer_array,buffsize,MPI_DOUBLE_PRECISION,
609         &    local_ice_leader,SssTag,MPI_COMM_WORLD,mpierr)
610          ENDIF
611          _END_MASTER( myThid )
612    
613  C     Send surface u current  C     Send surface u current
614        DO bj=1,nSy        DO bj=1,nSy
615         DO bi=1,nSx         DO bi=1,nSx
# Line 637  C     Receive ice area Line 676  C     Receive ice area
676         DO bi=1,nSx         DO bi=1,nSx
677          DO j=1,sNy          DO j=1,sNy
678           DO i=1,sNx           DO i=1,sNx
679            ScatArray(i,j,bi,bj) = local(i,j,bi,bj)            AREA(i,j,bi,bj) = local(i,j,bi,bj)
680           ENDDO           ENDDO
681          ENDDO          ENDDO
682         ENDDO         ENDDO
683        ENDDO        ENDDO
684        
685  #ifdef CPL_DEBUG  #ifdef CPL_DEBUG
686          DO bj=1,nSy
687           DO bi=1,nSx
688            DO j=1,sNy
689             DO i=1,sNx
690              ScatArray(i,j,bi,bj) = local(i,j,bi,bj)
691             ENDDO
692            ENDDO
693           ENDDO
694          ENDDO
695        CALL PLOT_FIELD_XYRL( ScatArray, 'ice area', myIter, myThid )        CALL PLOT_FIELD_XYRL( ScatArray, 'ice area', myIter, myThid )
696  #endif  #endif
697    
# Line 659  C     Receive ice thickness Line 708  C     Receive ice thickness
708         DO bi=1,nSx         DO bi=1,nSx
709          DO j=1,sNy          DO j=1,sNy
710           DO i=1,sNx           DO i=1,sNx
711            ScatArray(i,j,bi,bj) = local(i,j,bi,bj)            HEFF(i,j,bi,bj) = local(i,j,bi,bj)
712           ENDDO           ENDDO
713          ENDDO          ENDDO
714         ENDDO         ENDDO
715        ENDDO        ENDDO
716  #ifdef CPL_DEBUG  #ifdef CPL_DEBUG
717          DO bj=1,nSy
718           DO bi=1,nSx
719            DO j=1,sNy
720             DO i=1,sNx
721              ScatArray(i,j,bi,bj) = local(i,j,bi,bj)
722             ENDDO
723            ENDDO
724           ENDDO
725          ENDDO
726        CALL PLOT_FIELD_XYRL( ScatArray, 'ice thickness', myIter, myThid )        CALL PLOT_FIELD_XYRL( ScatArray, 'ice thickness', myIter, myThid )
727  #endif  #endif
728    
# Line 681  C     Receive ice salinity Line 739  C     Receive ice salinity
739         DO bi=1,nSx         DO bi=1,nSx
740          DO j=1,sNy          DO j=1,sNy
741           DO i=1,sNx           DO i=1,sNx
742            ScatArray(i,j,bi,bj) = local(i,j,bi,bj)            HSALT(i,j,bi,bj) = local(i,j,bi,bj)
743           ENDDO           ENDDO
744          ENDDO          ENDDO
745         ENDDO         ENDDO
746        ENDDO        ENDDO
747  #ifdef CPL_DEBUG  #ifdef CPL_DEBUG
748          DO bj=1,nSy
749           DO bi=1,nSx
750            DO j=1,sNy
751             DO i=1,sNx
752              ScatArray(i,j,bi,bj) = local(i,j,bi,bj)
753             ENDDO
754            ENDDO
755           ENDDO
756          ENDDO
757        CALL PLOT_FIELD_XYRL( ScatArray, 'ice salinity', myIter, myThid )        CALL PLOT_FIELD_XYRL( ScatArray, 'ice salinity', myIter, myThid )
758  #endif  #endif
759    
# Line 703  C     Receive snow thickness Line 770  C     Receive snow thickness
770         DO bi=1,nSx         DO bi=1,nSx
771          DO j=1,sNy          DO j=1,sNy
772           DO i=1,sNx           DO i=1,sNx
773            ScatArray(i,j,bi,bj) = local(i,j,bi,bj)            HSNOW(i,j,bi,bj) = local(i,j,bi,bj)
774           ENDDO           ENDDO
775          ENDDO          ENDDO
776         ENDDO         ENDDO
777        ENDDO        ENDDO
778  #ifdef CPL_DEBUG  #ifdef CPL_DEBUG
779          DO bj=1,nSy
780           DO bi=1,nSx
781            DO j=1,sNy
782             DO i=1,sNx
783              ScatArray(i,j,bi,bj) = local(i,j,bi,bj)
784             ENDDO
785            ENDDO
786           ENDDO
787          ENDDO
788        CALL PLOT_FIELD_XYRL( ScatArray, 'ice thickness', myIter, myThid )        CALL PLOT_FIELD_XYRL( ScatArray, 'ice thickness', myIter, myThid )
789  #endif  #endif
790    
# Line 725  C     Receive u surface stress Line 801  C     Receive u surface stress
801         DO bi=1,nSx         DO bi=1,nSx
802          DO j=1,sNy          DO j=1,sNy
803           DO i=1,sNx           DO i=1,sNx
804            ScatArray(i,j,bi,bj) = local(i,j,bi,bj)            fu(i,j,bi,bj) = AREA(i,j,bi,bj) * local(i,j,bi,bj) +
805         &                (1.-AREA(i,j,bi,bj)) * fu_tmp(i,j,bi,bj)
806           ENDDO           ENDDO
807          ENDDO          ENDDO
808         ENDDO         ENDDO
809        ENDDO        ENDDO
810  #ifdef CPL_DEBUG  #ifdef CPL_DEBUG
811          DO bj=1,nSy
812           DO bi=1,nSx
813            DO j=1,sNy
814             DO i=1,sNx
815              ScatArray(i,j,bi,bj) = local(i,j,bi,bj)
816             ENDDO
817            ENDDO
818           ENDDO
819          ENDDO
820        CALL PLOT_FIELD_XYRL( ScatArray, 'u stress', myIter, myThid )        CALL PLOT_FIELD_XYRL( ScatArray, 'u stress', myIter, myThid )
821  #endif  #endif
822    
# Line 747  C     Receive v surface stress Line 833  C     Receive v surface stress
833         DO bi=1,nSx         DO bi=1,nSx
834          DO j=1,sNy          DO j=1,sNy
835           DO i=1,sNx           DO i=1,sNx
836            ScatArray(i,j,bi,bj) = local(i,j,bi,bj)            fv(i,j,bi,bj) = AREA(i,j,bi,bj) * local(i,j,bi,bj) +
837         &                (1.-AREA(i,j,bi,bj)) * fv_tmp(i,j,bi,bj)
838           ENDDO           ENDDO
839          ENDDO          ENDDO
840         ENDDO         ENDDO
841        ENDDO        ENDDO
842  #ifdef CPL_DEBUG  #ifdef CPL_DEBUG
843          DO bj=1,nSy
844           DO bi=1,nSx
845            DO j=1,sNy
846             DO i=1,sNx
847              ScatArray(i,j,bi,bj) = local(i,j,bi,bj)
848             ENDDO
849            ENDDO
850           ENDDO
851          ENDDO
852        CALL PLOT_FIELD_XYRL( ScatArray, 'v stress', myIter, myThid )        CALL PLOT_FIELD_XYRL( ScatArray, 'v stress', myIter, myThid )
853  #endif  #endif
854    
# Line 769  C     Receive residual shortwave Line 865  C     Receive residual shortwave
865         DO bi=1,nSx         DO bi=1,nSx
866          DO j=1,sNy          DO j=1,sNy
867           DO i=1,sNx           DO i=1,sNx
868            ScatArray(i,j,bi,bj) = local(i,j,bi,bj)            Qsw(i,j,bi,bj) = -AREA(i,j,bi,bj) * local(i,j,bi,bj) +
869         &                  (1.-AREA(i,j,bi,bj)) * Qsw_tmp(i,j,bi,bj)
870           ENDDO           ENDDO
871          ENDDO          ENDDO
872         ENDDO         ENDDO
873        ENDDO        ENDDO
874  #ifdef CPL_DEBUG  #ifdef CPL_DEBUG
875          DO bj=1,nSy
876           DO bi=1,nSx
877            DO j=1,sNy
878             DO i=1,sNx
879              ScatArray(i,j,bi,bj) = local(i,j,bi,bj)
880             ENDDO
881            ENDDO
882           ENDDO
883          ENDDO
884        CALL PLOT_FIELD_XYRL( ScatArray, 'shortwave', myIter, myThid )        CALL PLOT_FIELD_XYRL( ScatArray, 'shortwave', myIter, myThid )
885  #endif  #endif
886    
# Line 791  C     Receive heat flux Line 897  C     Receive heat flux
897         DO bi=1,nSx         DO bi=1,nSx
898          DO j=1,sNy          DO j=1,sNy
899           DO i=1,sNx           DO i=1,sNx
900            ScatArray(i,j,bi,bj) = local(i,j,bi,bj)            Qnet(i,j,bi,bj) = Qsw(i,j,bi,bj) -
901         &                   AREA(i,j,bi,bj) * local(i,j,bi,bj) +
902         &               (1.-AREA(i,j,bi,bj)) * Qnet_tmp(i,j,bi,bj)
903           ENDDO           ENDDO
904          ENDDO          ENDDO
905         ENDDO         ENDDO
906        ENDDO        ENDDO
907  #ifdef CPL_DEBUG  #ifdef CPL_DEBUG
908          DO bj=1,nSy
909           DO bi=1,nSx
910            DO j=1,sNy
911             DO i=1,sNx
912              ScatArray(i,j,bi,bj) = local(i,j,bi,bj)
913             ENDDO
914            ENDDO
915           ENDDO
916          ENDDO
917        CALL PLOT_FIELD_XYRL( ScatArray, 'heat flux', myIter, myThid )        CALL PLOT_FIELD_XYRL( ScatArray, 'heat flux', myIter, myThid )
918  #endif  #endif
919    
# Line 813  C     Receive freshwater flux Line 930  C     Receive freshwater flux
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            ScatArray(i,j,bi,bj) = local(i,j,bi,bj)            EmPmR(i,j,bi,bj) = - AREA(i,j,bi,bj)  * local    (i,j,bi,bj) +
934         &                  ( 1. - AREA(i,j,bi,bj)) * EmPmR_tmp(i,j,bi,bj)
935           ENDDO           ENDDO
936          ENDDO          ENDDO
937         ENDDO         ENDDO
938        ENDDO        ENDDO
939  #ifdef CPL_DEBUG  #ifdef CPL_DEBUG
940          DO bj=1,nSy
941           DO bi=1,nSx
942            DO j=1,sNy
943             DO i=1,sNx
944              ScatArray(i,j,bi,bj) = local(i,j,bi,bj)
945             ENDDO
946            ENDDO
947           ENDDO
948          ENDDO
949        CALL PLOT_FIELD_XYRL( ScatArray, 'freshwater', myIter, myThid )        CALL PLOT_FIELD_XYRL( ScatArray, 'freshwater', myIter, myThid )
950  #endif  #endif
951    
# Line 835  C     Receive salt flux Line 962  C     Receive salt flux
962         DO bi=1,nSx         DO bi=1,nSx
963          DO j=1,sNy          DO j=1,sNy
964           DO i=1,sNx           DO i=1,sNx
965            ScatArray(i,j,bi,bj) = local(i,j,bi,bj)            saltFlux(i,j,bi,bj) = - AREA(i,j,bi,bj) * local(i,j,bi,bj)
966           ENDDO           ENDDO
967          ENDDO          ENDDO
968         ENDDO         ENDDO
969        ENDDO        ENDDO
970  #ifdef CPL_DEBUG  #ifdef CPL_DEBUG
971          DO bj=1,nSy
972           DO bi=1,nSx
973            DO j=1,sNy
974             DO i=1,sNx
975              ScatArray(i,j,bi,bj) = local(i,j,bi,bj)
976             ENDDO
977            ENDDO
978           ENDDO
979          ENDDO
980        CALL PLOT_FIELD_XYRL( ScatArray, 'salt flux', myIter, myThid )        CALL PLOT_FIELD_XYRL( ScatArray, 'salt flux', myIter, myThid )
981  #endif  #endif
982    

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.11

  ViewVC Help
Powered by ViewVC 1.1.22