C $Header: /home/ubuntu/mnt/e9_copy/MITgcm_contrib/dgoldberg/streamice/streamice_solo_timestep.F,v 1.1 2012/03/29 15:59:21 heimbach Exp $ C $Name: $ #include "STREAMICE_OPTIONS.h" C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| CBOP SUBROUTINE STREAMICE_SOLO_TIMESTEP ( myThid, myIter, & iLoop, myTime ) C /============================================================\ C | SUBROUTINE | C | o | C |============================================================| C | | C \============================================================/ IMPLICIT NONE C === Global variables === #include "SIZE.h" #include "GRID.h" #include "EEPARAMS.h" #include "PARAMS.h" #include "STREAMICE.h" #ifdef ALLOW_AUTODIFF_TAMC # include "tamc.h" # include "STREAMICE_ADV.h" # include "STREAMICE_BDRY.h" # include "STREAMICE_CG.h" #endif INTEGER myThid, myIter, iLoop _RL myTime #ifdef ALLOW_STREAMICE INTEGER i, j, bi, bj, ki, kj ! _RL Iratio, Imin_ratio, time_step_remain, local_u_max ! _RL ratio, min_ratio ! _RL local_v_max, time_step_int, min_time_step CHARACTER*(MAX_LEN_MBUF) msgBuf ! LOGICAL modelEnd #ifdef ALLOW_AUTODIFF_TAMC c************************************** #include "streamice_ad_check_lev1_dir.h" c************************************** #endif ! time_step_remain = deltaT ! min_time_step = 1000.0 ! n_interm = 0 #ifdef ALLOW_AUTODIFF_TAMC DO bj=myByLo(myThid),myByHi(myThid) DO bi=myBxLo(myThid),myBxHi(myThid) DO j=1-OLy,sNy+OLy DO i=1-OLx,sNx+OLx STREAMICE_ufacemask(i,j,bi,bj) = 0. _d 0 STREAMICE_vfacemask(i,j,bi,bj) = 0. _d 0 ru_old_si(i,j,bi,bj) = 0. _d 0 rv_old_si(i,j,bi,bj) = 0. _d 0 zu_old_si(i,j,bi,bj) = 0. _d 0 zv_old_si(i,j,bi,bj) = 0. _d 0 h_after_uflux_si(i,j,bi,bj) = 0. _d 0 ENDDO ENDDO ENDDO ENDDO #endif ! PRINT *, "ICE STREAM TIMESTEP ", iLoop, "; ", ! & Time/86400/365, " years" ! do while (time_step_remain .gt. 0. _d 0) ! ! n_interm = n_interm + 1 ! Imin_ratio = 1.0e-16 ! ! DO bj = myByLo(myThid), myByHi(myThid) ! DO bi = myBxLo(myThid), myBxHi(myThid) ! DO j=1,sNy ! DO i=1,sNx ! ! local_u_max = 0 ! local_v_max = 0 ! ! if (STREAMICE_hmask (i,j,bi,bj) .eq. 1.0) then ! do ki = 0,1 ! do kj = 0,1 ! local_u_max = ! & max (local_u_max, abs(U_streamice(i+ki,j+kj,bi,bj))) ! local_v_max = ! & max (local_v_max, abs(V_streamice(i+ki,j+kj,bi,bj))) ! enddo ! enddo ! ! Iratio = max (local_u_max/dxF(i,j,bi,bj) , ! & local_v_max/dyF(i,j,bi,bj)) ! Imin_ratio = max (Imin_ratio, Iratio) ! endif ! ! enddo ! enddo ! enddo ! enddo ! ! CALL GLOBAL_MAX_R8 (Imin_ratio, myThid) ! min_ratio = 1./(Imin_ratio+1.e-12) ! time_step_int = ! & min(streamice_CFL_factor*min_ratio*(365*86400), ! & deltaT) ! ! if (time_step_int .lt. min_time_step) then ! WRITE(msgBuf,'(A,A,E9.2)') 'streamice solo_time_step:', ! & ' abnormally small timestep ', ! & streamice_CFL_factor*min_ratio*(365*86400) ! CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, ! & SQUEEZE_RIGHT , 1) ! endif ! ! if (time_step_int .ge. time_step_remain) then ! time_step_int = time_step_remain ! time_step_remain = 0.0 ! else ! time_step_remain = time_step_remain - time_step_int ! endif CALL STREAMICE_ADVECT_THICKNESS ( myThid, deltaT ) ! if (time_step_int .gt. 1000) then WRITE(msgBuf,'(A,I10.10,E9.2,A)') & 'streamice solo_time_step: nIter', & myIter, myTime/86400.0/365.0, 'seconds' CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, & SQUEEZE_RIGHT , 1) CALL STREAMICE_VELMASK_UPD (myThid) CALL STREAMICE_UPD_FFRAC_UNCOUPLED ( myThid ) CALL STREAMICE_VEL_SOLVE( myThid ) ! endif ! enddo ! modelEnd = myTime.EQ.endTime .OR. myIter.EQ.nEndIter ! #ifdef ALLOW_DIAGNOSTICS ! ! ! this stuff was to replace what is in forward_step, but not ! ! forward_step will be called ! ! ! IF ( useDiagnostics ) THEN ! ! CALL DIAGNOSTICS_SWITCH_ONOFF( myTime, myiter, myThid ) ! ! ! C-- State-variables diagnostics ! ! ! CALL TIMER_START('DO_STATEVARS_DIAGS [FORWARD_STEP]',myThid) ! ! ! CALL DO_STATEVARS_DIAGS( myTime, 0, myIter, myThid ) ! ! ! CALL TIMER_STOP ('DO_STATEVARS_DIAGS [FORWARD_STEP]',myThid) ! ! ENDIF ! ! ! IF ( useDiagnostics ) THEN ! PRINT *, "CALLING FILL DIAGNOSTICS" ! CALL DIAGNOSTICS_FILL(U_streamice,'SI_Uvel ', ! & 0,1,0,1,1,myThid) ! CALL DIAGNOSTICS_FILL(V_streamice,'SI_Vvel ', ! & 0,1,0,1,1,myThid) ! CALL DIAGNOSTICS_FILL(H_streamice,'SI_Thick', ! & 0,1,0,1,1,myThid) ! CALL DIAGNOSTICS_FILL(area_shelf_streamice,'SI_area ', ! & 0,1,0,1,1,myThid) ! CALL DIAGNOSTICS_FILL(float_frac_streamice,'SI_float', ! & 0,1,0,1,1,myThid) ! ! ENDIF ! ! ! IF ( useDiagnostics ) THEN ! ! CALL TIMER_START('DO_STATEVARS_DIAGS [FORWARD_STEP]',myThid) ! ! CALL DO_STATEVARS_DIAGS( myTime, 2, myIter, myThid ) ! ! CALL TIMER_STOP ('DO_STATEVARS_DIAGS [FORWARD_STEP]',myThid) ! ! ENDIF ! ! #endif /* ALLOW_DIAGNOSTICS */ ! myIter = nIter0 + iLoop ! myTime = startTime + deltaTClock * float(iLoop) ! ! CALL TIMER_START('DO_THE_MODEL_IO [FORWARD_STEP]',myThid) ! CALL DO_THE_MODEL_IO( modelEnd, myTime, myIter, myThid ) ! CALL TIMER_STOP ('DO_THE_MODEL_IO [FORWARD_STEP]',myThid) #endif RETURN END