#include "STREAMICE_OPTIONS.h" subroutine template() use OAD_cp use OAD_tape use OAD_rev !$TEMPLATE_PRAGMA_DECLARATIONS integer myi ! Temporaries to hold the stack pointers integer temp_double_tape_pointer, temp_integer_tape_pointer, temp_logical_tape_pointer, temp_character_tape_pointer, temp_string_tape_pointer type(modeType) :: our_orig_mode integer iaddr external iaddr !<------------------Begin user declarations ---------------------->! ! Insert declarations of dummy variables for calling adjoint computation ! without side effects, and storing adjoint variable iterates #if (defined (ALLOW_OPENAD) && defined (ALLOW_STREAMICE_OAD_FP)) #ifdef STREAMICE_ALLOW_FRIC_CONTROL Real*8 C_basal_dummy_d (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) #endif #ifdef STREAMICE_ALLOW_BGLEN_CONTROL Real*8 B_glen_dummy_d (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) #endif Real*8 H_streamice_dummy_d (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) Real*8 taudx_dummy_d (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) Real*8 taudy_dummy_d (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) Real*8 u_dummy_d (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) Real*8 v_dummy_d (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) Real*8 u_new_dummy_d (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) Real*8 v_new_dummy_d (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) #ifdef STREAMICE_HYBRID_STRESS Real*8 taubx_dummy_d (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) Real*8 tauby_dummy_d (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) Real*8 visc_full_dummy_d (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy) Real*8 taubx_new_dummy (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) Real*8 tauby_new_dummy (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) Real*8 visc_new_dummy (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy) #endif !<------------------End user declarations ------------------------>! if (our_rev_mode%plain) then our_orig_mode=our_rev_mode IF(ISINLOOP .eq. 0) THEN CONVERGED = .FALSE. ADJ_CONVERGED = .FALSE. !ERR_LAST_CHANGE = 10. end if IF(ISINLOOP .ne. 0) THEN IF(.NOT. CONVERGED) THEN NL_ITER = (NL_ITER + 1) CALL OpenAD_streamice_vel_phi(MYTHID,MAXNLITER,MAXCGITER,CGTOL +,CG_ITERS,err_max) WRITE(MSGBUF,'(A,I5,A,I4,A)') 'streamice linear solve number', +NL_ITER,' ',CG_ITERS,' iterations ' CALL print_message(MSGBUF,STANDARDMESSAGEUNIT,'R',1) !!!!!!!!!!!! conv check if (STREAMICE_chkresidconvergence) then WRITE(msgBuf,'(A,E15.7)') 'err/err_init', & err_max/err_init CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, & SQUEEZE_RIGHT , 1) IF (err_max .LE. streamice_nonlin_tol * err_init) THEN CONVERGED = .true. ENDIF IF (err_max