@@ -282,6 +282,10 @@ SUBROUTINE DO_TEND( Input_Opt, State_Chm, State_Diag, State_Grid, &
282282 ! Strings
283283 CHARACTER (LEN= 255 ) :: ErrMsg, ErrorMsg, ThisLoc
284284
285+ #ifdef ADJOINT
286+ LOGICAL :: IS_ADJ
287+ #endif
288+
285289 ! =================================================================
286290 ! DO_TEND begins here!
287291 ! =================================================================
@@ -338,13 +342,34 @@ SUBROUTINE DO_TEND( Input_Opt, State_Chm, State_Diag, State_Grid, &
338342 ENDIF
339343 ENDIF
340344
345+ #if defined( ADJOINT ) && defined ( DEBUG )
346+ IF (Input_Opt% is_adjoint .and. Input_Opt% IS_FD_SPOT_THIS_PET) THEN
347+ WRITE (* ,* ) ' SpcAdj(IFD,JFD) before unit converstion: ' , &
348+ State_Chm% SpeciesAdj(Input_Opt% IFD, Input_Opt% JFD, &
349+ Input_Opt% LFD, Input_Opt% NFD)
350+ WRITE (* ,* ) ' Spc(IFD,JFD) before unit converstion: ' , &
351+ State_Chm% Species(Input_Opt% IFD, Input_Opt% JFD, &
352+ Input_Opt% LFD, Input_Opt% NFD)
353+ ENDIF
354+ #endif
341355 ! DO_TEND previously operated in units of kg. The species arrays are in
342356 ! v/v for mixing, hence needed to convert before and after.
343357 ! Now use units kg/m2 as State_Chm%SPECIES units in DO_TEND to
344358 ! remove area-dependency (ewl, 9/30/15)
345359 CALL Convert_Spc_Units( Input_Opt, State_Chm, State_Grid, State_Met, &
346360 ' kg/m2' , RC, OrigUnit= OrigUnit )
347361
362+ #if defined( ADJOINT ) && defined ( DEBUG )
363+ IF (Input_Opt% is_adjoint .and. Input_Opt% IS_FD_SPOT_THIS_PET) THEN
364+ WRITE (* ,* ) ' SpcAdj(IFD,JFD) after unit converstion: ' , &
365+ State_Chm% SpeciesAdj(Input_Opt% IFD, Input_Opt% JFD, &
366+ Input_Opt% LFD, Input_Opt% NFD)
367+ WRITE (* ,* ) ' Spc(IFD,JFD) after unit converstion: ' , &
368+ State_Chm% Species(Input_Opt% IFD, Input_Opt% JFD, &
369+ Input_Opt% LFD, Input_Opt% NFD)
370+ ENDIF
371+ #endif
372+
348373 ! Trap potential error
349374 IF ( RC /= GC_SUCCESS ) THEN
350375 ErrMsg = ' Unit conversion error!'
@@ -358,6 +383,11 @@ SUBROUTINE DO_TEND( Input_Opt, State_Chm, State_Diag, State_Grid, &
358383 ELSE
359384 TS = GET_TS_DYN()
360385 ENDIF
386+ #ifdef ADJOINT
387+ if (Input_Opt% Is_Adjoint) then
388+ TS = TS * - 1
389+ endif
390+ #endif
361391
362392 ! First-time setup
363393 IF ( FIRST ) THEN
@@ -473,7 +503,7 @@ SUBROUTINE DO_TEND( Input_Opt, State_Chm, State_Diag, State_Grid, &
473503 ! dry deposition and/or emissions
474504 !- -------------------------------------------------------------------
475505 IF ( .NOT. DryDepSpec .AND. .NOT. EmisSpec ) CYCLE
476-
506+
477507 ! Loop over all grid boxes
478508 DO J = 1 , State_Grid% NY
479509 DO I = 1 , State_Grid% NX
@@ -606,6 +636,12 @@ SUBROUTINE DO_TEND( Input_Opt, State_Chm, State_Diag, State_Grid, &
606636 State_Chm% Species(I,J,L,N) = FRAC * &
607637 State_Chm% Species(I,J,L,N)
608638
639+ #ifdef ADJOINT
640+ if (Input_Opt% Is_Adjoint) then
641+ State_Chm% SpeciesAdj(I,J,L,N) = FRAC * &
642+ State_Chm% SpeciesAdj(I,J,L,N)
643+ endif
644+ #endif
609645 ! Eventually add PARANOX loss. PNOXLOSS is in kg/m2/s.
610646 ! Make sure PARANOx loss is applied to tracers. (ckeller,
611647 ! 3/29/16).
@@ -682,6 +718,15 @@ SUBROUTINE DO_TEND( Input_Opt, State_Chm, State_Diag, State_Grid, &
682718
683719 ! Flux: [kg/m2] = [kg m-2 s-1 ] x [s]
684720 FLUX = TMP * TS
721+ #ifdef ADJOINT
722+ IF ( I .eq. Input_Opt% IFD .and. J .eq. Input_Opt% JFD .and. &
723+ L .eq. Input_Opt% LFD .and. N .eq. Input_Opt% NFD) THEN
724+ WRITE (* ,* ) ' GetHcoVal(IFD,JFD) = ' , TMP, ' FLUX = ' , FLUX
725+ IF ( Input_Opt% is_adjoint ) THEN
726+ WRITE (* ,* ) ' SpeciesAdj(FD) = ' , State_Chm% SpeciesAdj(I,J,L,N)
727+ ENDIF
728+ ENDIF
729+ #endif
685730
686731 ! Add to species array
687732 State_Chm% Species(I,J,L,N) = State_Chm% Species(I,J,L,N) &
@@ -820,6 +865,17 @@ SUBROUTINE DO_TEND( Input_Opt, State_Chm, State_Diag, State_Grid, &
820865
821866 ENDIF
822867
868+ #if defined( ADJOINT ) && defined ( DEBUG )
869+ IF (Input_Opt% is_adjoint .and. Input_Opt% IS_FD_SPOT_THIS_PET) THEN
870+ WRITE (* ,* ) ' SpcAdj(IFD,JFD) before unit converstion: ' , &
871+ State_Chm% SpeciesAdj(Input_Opt% IFD, Input_Opt% JFD, &
872+ Input_Opt% LFD, Input_Opt% NFD)
873+ WRITE (* ,* ) ' Spc(IFD,JFD) before unit converstion: ' , &
874+ State_Chm% Species(Input_Opt% IFD, Input_Opt% JFD, &
875+ Input_Opt% LFD, Input_Opt% NFD)
876+ ENDIF
877+
878+ #endif
823879 ! Convert State_Chm%Species back to original units
824880 CALL Convert_Spc_Units( Input_Opt, State_Chm, State_Grid, State_Met, &
825881 OrigUnit, RC )
@@ -828,6 +884,17 @@ SUBROUTINE DO_TEND( Input_Opt, State_Chm, State_Diag, State_Grid, &
828884 CALL GC_Error( ErrMsg, RC, ThisLoc )
829885 RETURN
830886 ENDIF
887+ #if defined( ADJOINT ) && defined ( DEBUG )
888+ IF (Input_Opt% is_adjoint .and. Input_Opt% IS_FD_SPOT_THIS_PET) THEN
889+ WRITE (* ,* ) ' SpcAdj(IFD,JFD) after unit converstion: ' , &
890+ State_Chm% SpeciesAdj(Input_Opt% IFD, Input_Opt% JFD, &
891+ Input_Opt% LFD, Input_Opt% NFD)
892+ WRITE (* ,* ) ' Spc(IFD,JFD) after unit converstion: ' , &
893+ State_Chm% Species(Input_Opt% IFD, Input_Opt% JFD, &
894+ Input_Opt% LFD, Input_Opt% NFD)
895+ ENDIF
896+
897+ #endif
831898
832899 !- -----------------------------------------------------------------------
833900 ! Emissions/dry deposition budget diagnostics - Part 2 of 2
@@ -869,5 +936,6 @@ SUBROUTINE DO_TEND( Input_Opt, State_Chm, State_Diag, State_Grid, &
869936 DepFreq = > NULL ()
870937
871938 END SUBROUTINE DO_TEND
939+
872940! EOC
873941END MODULE MIXING_MOD
0 commit comments