67 |
zu_old_si(i,j,bi,bj) = 0. _d 0 |
zu_old_si(i,j,bi,bj) = 0. _d 0 |
68 |
zv_old_si(i,j,bi,bj) = 0. _d 0 |
zv_old_si(i,j,bi,bj) = 0. _d 0 |
69 |
h_after_uflux_si(i,j,bi,bj) = 0. _d 0 |
h_after_uflux_si(i,j,bi,bj) = 0. _d 0 |
70 |
|
#ifdef STREAMICE_HYBRID_STRESS |
71 |
|
streamice_taubx (i,j,bi,bj) = 0. _d 0 |
72 |
|
streamice_tauby (i,j,bi,bj) = 0. _d 0 |
73 |
|
#endif |
74 |
ENDDO |
ENDDO |
75 |
ENDDO |
ENDDO |
76 |
ENDDO |
ENDDO |
78 |
|
|
79 |
#endif |
#endif |
80 |
|
|
|
! 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 ) |
|
81 |
|
|
|
|
|
|
|
|
|
! if (time_step_int .gt. 1000) then |
|
82 |
|
|
83 |
WRITE(msgBuf,'(A,I10.10,E9.2,A)') |
WRITE(msgBuf,'(A,I10.10,E9.2,A)') |
84 |
& 'streamice solo_time_step: nIter', |
& 'streamice solo_time_step: nIter', |
85 |
& myIter, myTime/86400.0/365.0, 'seconds' |
& myIter, myTime/86400.0/365.0, 'seconds' |
|
|
|
86 |
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
87 |
& SQUEEZE_RIGHT , 1) |
& SQUEEZE_RIGHT , 1) |
88 |
|
|
89 |
CALL STREAMICE_VELMASK_UPD (myThid) |
CALL STREAMICE_DUMP( mytime, myiter, myThid ) |
90 |
|
|
91 |
|
! NEW DIRECTIVES - DNG |
92 |
|
!#ifdef ALLOW_AUTODIFF_TAMC |
93 |
|
!CADJ STORE float_frac_streamice = comlev1, key = ikey_dynamics, |
94 |
|
!CADJ & kind = isbyte |
95 |
|
!CADJ STORE surf_el_streamice = comlev1, key = ikey_dynamics, |
96 |
|
!CADJ & kind = isbyte |
97 |
|
!CADJ STORE base_el_streamice = comlev1, key = ikey_dynamics, |
98 |
|
!CADJ & kind = isbyte |
99 |
|
!#endif |
100 |
|
! NEW DIRECTIVES - DNG |
101 |
|
|
102 |
|
if (myIter.eq.0) then |
103 |
CALL STREAMICE_UPD_FFRAC_UNCOUPLED ( myThid ) |
CALL STREAMICE_UPD_FFRAC_UNCOUPLED ( myThid ) |
104 |
|
endif |
105 |
|
CALL STREAMICE_VELMASK_UPD (myThid) |
106 |
CALL STREAMICE_VEL_SOLVE( myThid ) |
CALL STREAMICE_VEL_SOLVE( myThid ) |
107 |
! endif |
|
108 |
|
if(.not.STREAMICE_diagnostic_only) THEN |
109 |
|
|
110 |
|
CALL STREAMICE_ADVECT_THICKNESS ( myThid, deltaT ) |
111 |
|
|
112 |
! enddo |
endif |
113 |
|
|
114 |
|
! CALL AT END INSTEAD OF BEGINNING - DNG |
115 |
|
CALL STREAMICE_UPD_FFRAC_UNCOUPLED ( myThid ) |
116 |
|
|
|
! modelEnd = myTime.EQ.endTime .OR. myIter.EQ.nEndIter |
|
117 |
|
|
|
! #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) |
|
118 |
|
|
119 |
|
|
120 |
#endif |
#endif |