C $Header: /home/ubuntu/mnt/e9_copy/MITgcm_contrib/dgoldberg/streamice/streamice_init_fixed.F,v 1.2 2012/09/18 17:06:48 dgoldberg Exp $ C $Name: $ #include "STREAMICE_OPTIONS.h" C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| CBOP 0 C !ROUTINE: STREAMICE_INIT_FIXED C !INTERFACE: SUBROUTINE STREAMICE_INIT_FIXED( myThid ) C !DESCRIPTION: C Initialize STREAMICE variables that are kept fixed during the run. C !USES: IMPLICIT NONE #include "EEPARAMS.h" #include "SIZE.h" #include "PARAMS.h" #include "STREAMICE.h" #include "STREAMICE_CG.h" #include "STREAMICE_BDRY.h" #include "GRID.h" C myThid :: my Thread Id number INTEGER myThid CEOP C !LOCAL VARIABLES: C === Local variables === INTEGER bi, bj, i, j, Gi, Gj, m _RL x, y CHARACTER*(MAX_LEN_MBUF) msgBuf #ifdef ALLOW_STREAMICE #ifdef ALLOW_MNC IF ( useMNC .AND. (streamice_tave_mnc.OR.streamice_dump_mnc) & ) THEN C CALL STREAMICE_MNC_INIT( myThid ) ENDIF #endif /* ALLOW_MNC */ #ifdef ALLOW_DIAGNOSTICS IF ( useDiagnostics ) THEN CALL STREAMICE_INIT_DIAGNOSTICS( myThid ) ENDIF #endif IF ( STREAMICE_calve_to_mask ) THEN IF ( STREAMICEcalveMaskFile .NE. ' ') THEN _BARRIER C The 0 is the "iteration" argument. The ' ' is an empty suffix CALL READ_FLD_XY_RL( STREAMICEcalveMaskFile, ' ', & STREAMICE_calve_mask, 0, myThid ) ELSE WRITE(msgBuf,'(A)') 'INIT CALVE MASK - NOT IMPLENTED' CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, & SQUEEZE_RIGHT , 1) ENDIF ENDIF ! INITIALIZE SIGMA COORD IF (STREAMICEsigcoordInit.eq.'FILE') THEN WRITE(msgBuf,'(A)') 'SIG FROM FILE - NOT IMPLENTED' CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, & SQUEEZE_RIGHT , 1) ELSEIF (STREAMICEsigcoordInit.eq.'UNIFORM') THEN do m=1,Nr streamice_sigma_coord (m) = 1./Nr * (m-0.5) streamice_delsigma (m) = 1./Nr enddo ELSE WRITE(msgBuf,'(A)') 'SIG COORD INIT - NOT IMPLENTED' CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, & SQUEEZE_RIGHT , 1) ENDIF !!!!!!!!!!!!!!!!!!!!!!!!! C- fill in the overlap (+ BARRIER): _EXCH_XY_RL(STREAMICE_calve_mask, myThid ) DO bj = myByLo(myThid), myByHi(myThid) DO bi = myBxLo(myThid), myBxHi(myThid) DO j=1,sNy DO i=1,sNx C INIT VALUES FOR METRIC TERMS k1AtC_str(i,j,bi,bj) = recip_rA(i,j,bi,bj) * & (dxG(i+1,j,bi,bj)-dxG(i,j,bi,bj)) k2AtC_str(i,j,bi,bj) = recip_rA(i,j,bi,bj) * & (dyG(i,j+1,bi,bj)-dyG(i,j,bi,bj)) #ifdef STREAMICE_HYBRID_STRESS streamice_basal_geom (i,j,bi,bj) = 1.0 #endif C INIT BDRY CONDITIONS Gi = (myXGlobalLo-1)+(bi-1)*sNx+i Gj = (myYGlobalLo-1)+(bj-1)*sNy+j x = xC(i,j,bi,bj) y = yC(i,j,bi,bj) STREAMICE_ufacemask_bdry (i,j,bi,bj) = -1.0 STREAMICE_vfacemask_bdry (i,j,bi,bj) = -1.0 IF (Gi.EQ.1 .AND. .NOT. STREAMICE_EW_periodic) THEN C INITIALIZE BOUNDARY CONDS AT WEST IF ((y .gt. min_y_noflow_WEST) .AND. & (y .le. max_y_noflow_WEST)) THEN STREAMICE_ufacemask_bdry (i,j,bi,bj) = 0.0 ENDIF IF ((y .gt. min_y_noStress_WEST) .AND. & (y .le. max_y_noStress_WEST)) THEN STREAMICE_ufacemask_bdry (i,j,bi,bj) = 1.0 ENDIF IF ((y .gt. min_y_FluxBdry_WEST) .AND. & (y .le. max_y_FluxBdry_WEST)) THEN STREAMICE_ufacemask_bdry (i,j,bi,bj) = 4.0 u_flux_bdry_SI (i,j,bi,bj) = flux_bdry_val_WEST ENDIF IF ((y .gt. min_y_Dirich_WEST) .AND. & (y .le. max_y_Dirich_WEST)) THEN STREAMICE_ufacemask_bdry (i,j,bi,bj) = 3.0 u_bdry_values_SI (i,j,bi,bj) = 0.0 ENDIF IF ((y .gt. min_y_CFBC_WEST) .AND. & (y .le. max_y_CFBC_WEST)) THEN STREAMICE_ufacemask_bdry (i,j,bi,bj) = 2.0 ENDIF ENDIF IF (Gi.EQ.Nx .AND. .NOT. STREAMICE_EW_periodic) THEN C INITIALIZE BOUNDARY CONDS AT EAST IF ((y .gt. min_y_noflow_EAST) .AND. & (y .le. max_y_noflow_EAST)) THEN STREAMICE_ufacemask_bdry (i,j,bi,bj) = 0.0 ENDIF IF ((y .gt. min_y_noStress_EAST) .AND. & (y .le. max_y_noStress_EAST)) THEN STREAMICE_ufacemask_bdry (i,j,bi,bj) = 1.0 ENDIF IF ((y .gt. min_y_FluxBdry_EAST) .AND. & (y .le. max_y_FluxBdry_EAST)) THEN STREAMICE_ufacemask_bdry (i,j,bi,bj) = 4.0 u_flux_bdry_SI (i,j,bi,bj) = flux_bdry_val_EAST ENDIF IF ((y .gt. min_y_Dirich_EAST) .AND. & (y .le. max_y_Dirich_EAST)) THEN STREAMICE_ufacemask_bdry (i,j,bi,bj) = 3.0 u_bdry_values_SI (i,j,bi,bj) = 0. _d 0 ENDIF IF ((y .gt. min_y_CFBC_EAST) .AND. & (y .le. max_y_CFBC_EAST)) THEN STREAMICE_ufacemask_bdry (i,j,bi,bj) = 2.0 ENDIF ENDIF IF (Gj.EQ.1 .AND. .NOT. STREAMICE_NS_periodic) THEN C INITIALIZE BOUNDARY CONDS AT SOUTH IF ((x .gt. min_x_noflow_SOUTH) .AND. & (x .le. max_x_noflow_SOUTH)) THEN STREAMICE_vfacemask_bdry (i,j,bi,bj) = 0.0 ENDIF IF ((x .gt. min_x_noStress_SOUTH) .AND. & (x .le. max_x_noStress_SOUTH)) THEN STREAMICE_vfacemask_bdry (i,j,bi,bj) = 1.0 ENDIF IF ((x .gt. min_x_FluxBdry_SOUTH) .AND. & (x .le. max_x_FluxBdry_SOUTH)) THEN STREAMICE_vfacemask_bdry (i,j,bi,bj) = 4.0 u_flux_bdry_SI (i,j,bi,bj) = flux_bdry_val_SOUTH ENDIF IF ((x .gt. min_x_Dirich_SOUTH) .AND. & (x .le. max_x_Dirich_SOUTH)) THEN STREAMICE_vfacemask_bdry (i,j,bi,bj) = 3.0 u_bdry_values_SI (i,j,bi,bj) = 0. _d 0 ENDIF IF ((x .gt. min_x_CFBC_SOUTH) .AND. & (x .le. max_x_CFBC_SOUTH)) THEN STREAMICE_vfacemask_bdry (i,j,bi,bj) = 2.0 ENDIF ENDIF IF (Gj.EQ.Ny .AND. .NOT. STREAMICE_NS_periodic) THEN C INITIALIZE BOUNDARY CONDS AT NORTH IF ((x .gt. min_x_noflow_NORTH) .AND. & (x .le. max_x_noflow_NORTH)) THEN STREAMICE_vfacemask_bdry (i,j,bi,bj) = 0. _d 0 ENDIF IF ((x .gt. min_x_noStress_NORTH) .AND. & (x .le. max_x_noStress_NORTH)) THEN STREAMICE_vfacemask_bdry (i,j,bi,bj) = 1.0 ENDIF IF ((x .gt. min_x_FluxBdry_NORTH) .AND. & (x .le. max_x_FluxBdry_NORTH)) THEN STREAMICE_vfacemask_bdry (i,j,bi,bj) = 4.0 v_flux_bdry_SI (i,j,bi,bj) = flux_bdry_val_NORTH ENDIF IF ((x .gt. min_x_Dirich_NORTH) .AND. & (x .le. max_x_Dirich_NORTH)) THEN STREAMICE_vfacemask_bdry (i,j,bi,bj) = 3.0 v_bdry_values_SI (i,j,bi,bj) = 0. _d 0 ENDIF IF ((x .gt. min_x_CFBC_NORTH) .AND. & (x .le. max_x_CFBC_NORTH)) THEN STREAMICE_vfacemask_bdry (i,j,bi,bj) = 2.0 ENDIF ENDIF ENDDO ENDDO ENDDO ENDDO _EXCH_XY_RL(k1AtC_str, myThid ) _EXCH_XY_RL(k2AtC_str, myThid ) _EXCH_XY_RL(STREAMICE_ufacemask_bdry, myThid ) _EXCH_XY_RL(STREAMICE_vfacemask_bdry, myThid ) _EXCH_XY_RL(u_bdry_values_SI, myThid ) _EXCH_XY_RL(v_bdry_values_SI, myThid ) _EXCH_XY_RL(u_flux_bdry_SI, myThid ) _EXCH_XY_RL(v_flux_bdry_SI, myThid ) Xquad (1) = .5 * (1.-1./sqrt(3.)) Xquad (2) = .5 * (1.+1./sqrt(3.)) CALL STREAMICE_INIT_PHI( myThid ) #endif RETURN END