197 |
ENDDO |
ENDDO |
198 |
|
|
199 |
#ifdef SEAICE_ALLOW_DYNAMICS |
#ifdef SEAICE_ALLOW_DYNAMICS |
200 |
|
|
201 |
IF ( SEAICEuseDYNAMICS ) THEN |
IF ( SEAICEuseDYNAMICS ) THEN |
202 |
|
|
203 |
|
#ifdef ALLOW_AUTODIFF_TAMC |
204 |
|
CADJ STORE uice = comlev1, key=ikey_dynamics |
205 |
|
CADJ STORE vice = comlev1, key=ikey_dynamics |
206 |
|
#endif /* ALLOW_AUTODIFF_TAMC */ |
207 |
|
|
208 |
C DO PSEUDO-TIMESTEPS TO OBTAIN AN ACCURATE VISCOUS-PLASTIC SOLUTION |
C DO PSEUDO-TIMESTEPS TO OBTAIN AN ACCURATE VISCOUS-PLASTIC SOLUTION |
209 |
C 1 PSEUDO-TIMESTEP IS SUGGESTED FOR LSR SLOVER |
C 1 PSEUDO-TIMESTEP IS SUGGESTED FOR LSR SLOVER |
210 |
C A RANGE OF 5-200 PSEUDO-TIMESTEPS IS SUGGESTED FOR ADI SLOVER |
C A RANGE OF 5-200 PSEUDO-TIMESTEPS IS SUGGESTED FOR ADI SLOVER |
217 |
|
|
218 |
crg later c$taf loop = iteration uice,vice |
crg later c$taf loop = iteration uice,vice |
219 |
|
|
220 |
|
#ifndef ALLOW_AUTODIFF_TAMC |
221 |
DO 5000 KII=1,NPSEUDO |
DO 5000 KII=1,NPSEUDO |
222 |
|
#else |
223 |
|
IF ( NPSEUDO .GT. 1 ) THEN |
224 |
|
STOP 'S/R DYNSOLVER: NPSEUDO NEEDS TO BE = 1 FOR ADJOINT' |
225 |
|
ENDIF |
226 |
|
#endif /* ALLOW_AUTODIFF_TAMC */ |
227 |
|
|
228 |
cdm c$taf store uice,vice = comlev1_seaice_ds, |
cdm c$taf store uice,vice = comlev1_seaice_ds, |
229 |
cdm c$taf& key = kii + (ikey_dynamics-1)*NPSEUDO |
cdm c$taf& key = kii + (ikey_dynamics-1)*NPSEUDO |
|
|
|
230 |
C NOW DO PREDICTOR TIME STEP |
C NOW DO PREDICTOR TIME STEP |
231 |
DO bj=myByLo(myThid),myByHi(myThid) |
DO bj=myByLo(myThid),myByHi(myThid) |
232 |
DO bi=myBxLo(myThid),myBxHi(myThid) |
DO bi=myBxLo(myThid),myBxHi(myThid) |
330 |
C NOW LSR SCHEME (ZHANG-J/HIBLER 1997) |
C NOW LSR SCHEME (ZHANG-J/HIBLER 1997) |
331 |
C OR ADI SCHEME (ZHANG-J/ROTHROCK 1999) |
C OR ADI SCHEME (ZHANG-J/ROTHROCK 1999) |
332 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
333 |
CALL LSR( myThid ) |
CADJ STORE uice = comlev1, key=ikey_dynamics |
334 |
|
CADJ STORE vice = comlev1, key=ikey_dynamics |
335 |
|
CALL LSR( 1, myThid ) |
336 |
|
CADJ STORE uice = comlev1, key=ikey_dynamics |
337 |
|
CADJ STORE vice = comlev1, key=ikey_dynamics |
338 |
#else /* ALLOW_AUTODIFF_TAMC */ |
#else /* ALLOW_AUTODIFF_TAMC */ |
339 |
IF ( SEAICEuseADI ) THEN |
IF ( SEAICEuseADI ) THEN |
340 |
CALL ADI( myThid ) |
CALL ADI( myThid ) |
341 |
ELSE |
ELSE |
342 |
CALL LSR( myThid ) |
CALL LSR( 1, myThid ) |
343 |
ENDIF |
ENDIF |
344 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
345 |
|
|
460 |
C NOW LSR SCHEME (ZHANG-J/HIBLER 1997) |
C NOW LSR SCHEME (ZHANG-J/HIBLER 1997) |
461 |
C OR ADI SCHEME (ZHANG-J/ROTHROCK 1999) |
C OR ADI SCHEME (ZHANG-J/ROTHROCK 1999) |
462 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
463 |
CALL LSR( myThid ) |
CALL LSR( 2, myThid ) |
464 |
#else /* ALLOW_AUTODIFF_TAMC */ |
#else /* ALLOW_AUTODIFF_TAMC */ |
465 |
IF ( SEAICEuseADI ) THEN |
IF ( SEAICEuseADI ) THEN |
466 |
CALL ADI( myThid ) |
CALL ADI( myThid ) |
467 |
ELSE |
ELSE |
468 |
CALL LSR( myThid ) |
CALL LSR( 2, myThid ) |
469 |
ENDIF |
ENDIF |
470 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
471 |
|
|
472 |
|
#ifndef ALLOW_AUTODIFF_TAMC |
473 |
5000 CONTINUE |
5000 CONTINUE |
474 |
|
#endif /* ALLOW_AUTODIFF_TAMC */ |
475 |
|
|
476 |
cdm c$taf store uice,vice = comlev1, key=ikey_dynamics |
cdm c$taf store uice,vice = comlev1, key=ikey_dynamics |
477 |
|
|
482 |
CALL OSTRES ( DWATN, COR_ICE, myThid ) |
CALL OSTRES ( DWATN, COR_ICE, myThid ) |
483 |
|
|
484 |
#ifdef SEAICE_ALLOW_DYNAMICS |
#ifdef SEAICE_ALLOW_DYNAMICS |
485 |
|
|
486 |
IF ( SEAICEuseDYNAMICS ) THEN |
IF ( SEAICEuseDYNAMICS ) THEN |
487 |
|
|
488 |
|
#ifdef ALLOW_AUTODIFF_TAMC |
489 |
|
CADJ STORE uice = comlev1, key=ikey_dynamics |
490 |
|
CADJ STORE vice = comlev1, key=ikey_dynamics |
491 |
|
#endif /* ALLOW_AUTODIFF_TAMC */ |
492 |
c Put a cap on ice velocity |
c Put a cap on ice velocity |
493 |
c limit velocity to 0.40 m s-1 to avoid potential CFL violations |
c limit velocity to 0.40 m s-1 to avoid potential CFL violations |
494 |
c in open water areas (drift of zero thickness ice) |
c in open water areas (drift of zero thickness ice) |
506 |
#endif /* SEAICE_DEBUG */ |
#endif /* SEAICE_DEBUG */ |
507 |
UICE(i,j,1,bi,bj)=min(UICE(i,j,1,bi,bj),0.40 _d +00) |
UICE(i,j,1,bi,bj)=min(UICE(i,j,1,bi,bj),0.40 _d +00) |
508 |
VICE(i,j,1,bi,bj)=min(VICE(i,j,1,bi,bj),0.40 _d +00) |
VICE(i,j,1,bi,bj)=min(VICE(i,j,1,bi,bj),0.40 _d +00) |
509 |
|
ENDDO |
510 |
|
ENDDO |
511 |
|
ENDDO |
512 |
|
ENDDO |
513 |
|
#ifdef ALLOW_AUTODIFF_TAMC |
514 |
|
CADJ STORE uice = comlev1, key=ikey_dynamics |
515 |
|
CADJ STORE vice = comlev1, key=ikey_dynamics |
516 |
|
#endif /* ALLOW_AUTODIFF_TAMC */ |
517 |
|
DO bj=myByLo(myThid),myByHi(myThid) |
518 |
|
DO bi=myBxLo(myThid),myBxHi(myThid) |
519 |
|
DO j=1-OLy,sNy+OLy |
520 |
|
DO i=1-OLx,sNx+OLx |
521 |
UICE(i,j,1,bi,bj)=max(UICE(i,j,1,bi,bj),-0.40 _d +00) |
UICE(i,j,1,bi,bj)=max(UICE(i,j,1,bi,bj),-0.40 _d +00) |
522 |
VICE(i,j,1,bi,bj)=max(VICE(i,j,1,bi,bj),-0.40 _d +00) |
VICE(i,j,1,bi,bj)=max(VICE(i,j,1,bi,bj),-0.40 _d +00) |
523 |
ENDDO |
ENDDO |