diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOS_PhysicsGridComp.F90 b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOS_PhysicsGridComp.F90 index b62c303ab..67fd246ec 100644 --- a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOS_PhysicsGridComp.F90 +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOS_PhysicsGridComp.F90 @@ -1894,17 +1894,148 @@ subroutine SetServices ( GC, RC ) !EOP -! Disable connectivities of Surface imports that are filled manually from -! turbulence bundles. +! Disable connectivities of Surface imports that are not supplied by +! turbulence. !------------------------------------------------------------------------ call MAPL_TerminateImport ( GC, & - SHORT_NAME = (/'SH ','TAUX ','TAUY ','EVAP ','DEWL ','FRSL ', & - 'DSH ','DFU ','DFV ','DEVAP','DDEWL','DFRSL'/), & + SHORT_NAME = (/'DEWL ','FRSL ','DDEWL','DFRSL'/), & CHILD = SURF, & RC=STATUS ) VERIFY_(STATUS) +! Surface values and their changes: SURF -> TURBL +!------------------------------------------------ + call MAPL_AddConnectivity ( GC, & + SRC_NAME = 'SHAT', & + DST_NAME = 'SHAT', & + SRC_ID = SURF, & + DST_ID = TURBL, & + RC=STATUS ) + VERIFY_(STATUS) + + call MAPL_AddConnectivity ( GC, & + SRC_NAME = 'UHAT', & + DST_NAME = 'UHAT', & + SRC_ID = SURF, & + DST_ID = TURBL, & + RC=STATUS ) + VERIFY_(STATUS) + + call MAPL_AddConnectivity ( GC, & + SRC_NAME = 'VHAT', & + DST_NAME = 'VHAT', & + SRC_ID = SURF, & + DST_ID = TURBL, & + RC=STATUS ) + VERIFY_(STATUS) + + call MAPL_AddConnectivity ( GC, & + SRC_NAME = 'QHAT', & + DST_NAME = 'QHAT', & + SRC_ID = SURF, & + DST_ID = TURBL, & + RC=STATUS ) + VERIFY_(STATUS) + + call MAPL_AddConnectivity ( GC, & + SRC_NAME = 'DELSS', & + DST_NAME = 'SDEL', & + SRC_ID = SURF, & + DST_ID = TURBL, & + RC=STATUS ) + VERIFY_(STATUS) + + call MAPL_AddConnectivity ( GC, & + SRC_NAME = 'DELUS', & + DST_NAME = 'UDEL', & + SRC_ID = SURF, & + DST_ID = TURBL, & + RC=STATUS ) + VERIFY_(STATUS) + + call MAPL_AddConnectivity ( GC, & + SRC_NAME = 'DELVS', & + DST_NAME = 'VDEL', & + SRC_ID = SURF, & + DST_ID = TURBL, & + RC=STATUS ) + VERIFY_(STATUS) + + call MAPL_AddConnectivity ( GC, & + SRC_NAME = 'DELQS', & + DST_NAME = 'QDEL', & + SRC_ID = SURF, & + DST_ID = TURBL, & + RC=STATUS ) + VERIFY_(STATUS) + +! Surface fluxes and their derivatives: TURBL -> SURF +!------------------------------------------------ + call MAPL_AddConnectivity ( GC, & + SRC_NAME = 'SFLX', & + DST_NAME = 'SH', & + SRC_ID = TURBL, & + DST_ID = SURF, & + RC=STATUS ) + VERIFY_(STATUS) + + call MAPL_AddConnectivity ( GC, & + SRC_NAME = 'UFLX', & + DST_NAME = 'TAUX', & + SRC_ID = TURBL, & + DST_ID = SURF, & + RC=STATUS ) + VERIFY_(STATUS) + + call MAPL_AddConnectivity ( GC, & + SRC_NAME = 'VFLX', & + DST_NAME = 'TAUY', & + SRC_ID = TURBL, & + DST_ID = SURF, & + RC=STATUS ) + VERIFY_(STATUS) + + call MAPL_AddConnectivity ( GC, & + SRC_NAME = 'QFLX', & + DST_NAME = 'EVAP', & + SRC_ID = TURBL, & + DST_ID = SURF, & + RC=STATUS ) + VERIFY_(STATUS) + + call MAPL_AddConnectivity ( GC, & + SRC_NAME = 'SDFL', & + DST_NAME = 'DSH', & + SRC_ID = TURBL, & + DST_ID = SURF, & + RC=STATUS ) + VERIFY_(STATUS) + + call MAPL_AddConnectivity ( GC, & + SRC_NAME = 'UDFL', & + DST_NAME = 'DFU', & + SRC_ID = TURBL, & + DST_ID = SURF, & + RC=STATUS ) + VERIFY_(STATUS) + + call MAPL_AddConnectivity ( GC, & + SRC_NAME = 'VDFL', & + DST_NAME = 'DFV', & + SRC_ID = TURBL, & + DST_ID = SURF, & + RC=STATUS ) + VERIFY_(STATUS) + + call MAPL_AddConnectivity ( GC, & + SRC_NAME = 'QDFL', & + DST_NAME = 'DEVAP', & + SRC_ID = TURBL, & + DST_ID = SURF, & + RC=STATUS ) + VERIFY_(STATUS) + ! terminate imports to SURF for SYNCUV if ( SYNCUV.ge.1.) then call MAPL_TerminateImport ( GC, & @@ -1939,7 +2070,7 @@ subroutine SetServices ( GC, RC ) endif call MAPL_TerminateImport ( GC, & - SHORT_NAME = (/'TR ','TRG','DTG' /), & + SHORT_NAME = (/'TR ' /), & CHILD = TURBL, & RC=STATUS ) VERIFY_(STATUS) @@ -2310,113 +2441,6 @@ subroutine Initialize ( GC, IMPORT, EXPORT, CLOCK, RC ) if ( MAPL_am_I_root() ) call ESMF_FieldBundlePrint ( BUNDLE, rc=STATUS ) #endif -! Fill the turbulence bundle of surface skin values -!-------------------------------------------------- - - call ESMF_StateGet ( GIM(TURBL), 'TRG', BUNDLE, RC=STATUS ) - VERIFY_(STATUS) - - do I=1,NUM_TRACERS - iNAME = trim(NAMES(I)) // 'HAT' - call ESMFL_StateGetField (GEX(SURF), (/iNAME/), BUNDLE, RC=STATUS ) - VERIFY_(STATUS) - end do - -#ifdef PRINT_STATES - call WRITE_PARALLEL ( trim(Iam)//": Turbulence Surface Bundle" ) - if ( MAPL_am_I_root() ) call ESMF_FieldBundlePrint ( BUNDLE, rc=STATUS ) -#endif - -! Fill the turbulence bundle of changes of surface skin values -!------------------------------------------------------------- - - call ESMF_StateGet ( GIM(TURBL), 'DTG', BUNDLE, RC=STATUS ) - VERIFY_(STATUS) - - do I=1,NUM_TRACERS - select case (trim(NAMES(I))) - case('S') - iNAME = 'DELSS' - case('U') - iNAME = 'DELUS' - case('V') - iNAME = 'DELVS' - case('Q') - iNAME = 'DELQS' - case default - iNAME = NAMES(I) - end select - - call ESMFL_StateGetField (GEX(SURF), (/iNAME/), & - BUNDLE, (/trim(NAMES(I))//'DEL'/), RC=STATUS ) - VERIFY_(STATUS) - end do - -#ifdef PRINT_STATES - call WRITE_PARALLEL ( trim(Iam)//": Turbulence DTG Bundle" ) - if ( MAPL_am_I_root() ) call ESMF_FieldBundlePrint ( BUNDLE, rc=STATUS ) -#endif - -! Fill the turbulence FSTAR bundle (surface fluxes) -!----------------------------------- - - call ESMF_StateGet ( GEX(TURBL), 'FSTAR', BUNDLE, RC=STATUS ) - VERIFY_(STATUS) - - do I=1,NUM_TRACERS - select case (trim(NAMES(I))) - case('S') - iNAME = 'SH' - case('U') - iNAME = 'TAUX' - case('V') - iNAME = 'TAUY' - case('Q') - iNAME = 'EVAP' - case default - iNAME = NAMES(I) - end select - - call ESMFL_StateGetField (GIM(SURF), (/iNAME/), & - BUNDLE, (/trim(NAMES(I))//'FLX'/), RC=STATUS ) - VERIFY_(STATUS) - end do - -#ifdef PRINT_STATES - call WRITE_PARALLEL ( trim(Iam)//": Surface Flux Bundle" ) - if ( MAPL_am_I_root() ) call ESMF_FieldBundlePrint ( BUNDLE, rc=STATUS ) -#endif - -! Fill the turbulence DFSTAR bundle d(surface fluxes)/d(TG) -!---------------------------------------------------------- - - call ESMF_StateGet ( GEX(TURBL), 'DFSTAR', BUNDLE, RC=STATUS ) - VERIFY_(STATUS) - - do I=1,NUM_TRACERS - select case (trim(NAMES(I))) - case('S') - iNAME = 'DSH' - case('U') - iNAME = 'DFU' - case('V') - iNAME = 'DFV' - case('Q') - iNAME = 'DEVAP' - case default - iNAME = NAMES(I) - end select - - call ESMFL_StateGetField (GIM(SURF), (/iNAME/), & - BUNDLE, (/trim(NAMES(I))//'DFL'/), RC=STATUS ) - VERIFY_(STATUS) - end do - -#ifdef PRINT_STATES - call WRITE_PARALLEL ( trim(Iam)//": Surface Flux Derivative Bundle" ) - if ( MAPL_am_I_root() ) call ESMF_FieldBundlePrint ( BUNDLE, rc=STATUS ) -#endif - deallocate(NAMES) ! Fill export bundle of child quantities to be advected diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSturbulence_GridComp/GEOS_TurbulenceGridComp.F90 b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSturbulence_GridComp/GEOS_TurbulenceGridComp.F90 index 7a06b1023..f2d39b6ab 100644 --- a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSturbulence_GridComp/GEOS_TurbulenceGridComp.F90 +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSturbulence_GridComp/GEOS_TurbulenceGridComp.F90 @@ -97,37 +97,12 @@ module GEOS_TurbulenceGridCompMod ! same order in all bundles. Some of these fields, however, ! may be ``empty'' in the sense that the data pointer has not been allocated. ! -! {\tt GEOS\_TurbulenceGridComp} works with six bundles; three in the import -! state and three in the export state. The import bundles are: -! \begin{itemize} -! \item[] -! \makebox[1in][l]{\bf TR} -! \parbox[t]{4in}{The quantity being diffused.} -! \item[] -! \makebox[1in][l]{\bf TRG} -! \parbox[t]{4in}{The surface (ground) value of the quantity being diffused. -! (Used only by Run2)} -! \item[] -! \makebox[1in][l]{\bf DTG} -! \parbox[t]{4in}{The change of TRG during the time step. (Used only by Run2)} -! \end{itemize} -! -! The export bundles are: -! \begin{itemize} -! \item[] -! \makebox[1in][l]{\bf TRI} -! \parbox[t]{4in}{The tendency of the quantity being diffused. -! (Produced by Run1, updated by Run2.) } -! \item[] -! \makebox[1in][l]{\bf FSTAR} -! \parbox[t]{4in}{After Run1, the ``preliminary'' (i.e., at the original surface -! value) surface flux of the diffused quantity; after Run2, its final value. -! (Produced by Run1, updated by Run2)} -! \item[] -! \makebox[1in][l]{\bf DFSTAR} -! \parbox[t]{4in}{The change of preliminary FSTAR per unit change in the -! surface value. (Produced by Run1)} -! \end{itemize} +! {\tt GEOS\_TurbulenceGridComp} works with two bundles; TR in the import +! state and TRI in the export state. The surface values (SHAT, UHAT, VHAT, QHAT) +! and their changes (SDEL, UDEL, VDEL, QDEL) are explicit imports, and the +! surface fluxes (SFLX, UFLX, VFLX, QFLX) and their sensitivities to the surface +! value (SDFL, UDFL, VDFL, QDFL) are explicit exports. Quantities other than +! S, U, V and Q have zero surface flux. ! ! All fields in the export bundles are checked for associated pointers before being ! updated. @@ -572,24 +547,82 @@ subroutine SetServices ( GC, RC ) VERIFY_(STATUS) call MAPL_AddImportSpec(GC, & - SHORT_NAME = 'TRG', & - LONG_NAME = 'surface_values_of_diffused_quantity',& - UNITS = 'X', & + SHORT_NAME = 'SHAT', & + LONG_NAME = 'surface_value_of_dry_static_energy',& + UNITS = 'm+2 s-2',& DIMS = MAPL_DimsHorzOnly, & VLOCATION = MAPL_VLocationNone, & - DATATYPE = MAPL_BundleItem, & - RESTART = MAPL_RestartSkip, & + RESTART = MAPL_RestartSkip, & RC=STATUS ) VERIFY_(STATUS) call MAPL_AddImportSpec(GC, & - SHORT_NAME = 'DTG', & - LONG_NAME = 'change_of_surface_values_of_diffused_quantity',& - UNITS = 'X', & + SHORT_NAME = 'UHAT', & + LONG_NAME = 'surface_value_of_eastward_wind',& + UNITS = 'm s-1',& DIMS = MAPL_DimsHorzOnly, & VLOCATION = MAPL_VLocationNone, & - DATATYPE = MAPL_BundleItem, & - RESTART = MAPL_RestartSkip, & + RESTART = MAPL_RestartSkip, & + RC=STATUS ) + VERIFY_(STATUS) + + call MAPL_AddImportSpec(GC, & + SHORT_NAME = 'VHAT', & + LONG_NAME = 'surface_value_of_northward_wind',& + UNITS = 'm s-1',& + DIMS = MAPL_DimsHorzOnly, & + VLOCATION = MAPL_VLocationNone, & + RESTART = MAPL_RestartSkip, & + RC=STATUS ) + VERIFY_(STATUS) + + call MAPL_AddImportSpec(GC, & + SHORT_NAME = 'QHAT', & + LONG_NAME = 'surface_value_of_specific_humidity',& + UNITS = 'kg kg-1',& + DIMS = MAPL_DimsHorzOnly, & + VLOCATION = MAPL_VLocationNone, & + RESTART = MAPL_RestartSkip, & + RC=STATUS ) + VERIFY_(STATUS) + + call MAPL_AddImportSpec(GC, & + SHORT_NAME = 'SDEL', & + LONG_NAME = 'change_of_surface_value_of_dry_static_energy',& + UNITS = 'm+2 s-2',& + DIMS = MAPL_DimsHorzOnly, & + VLOCATION = MAPL_VLocationNone, & + RESTART = MAPL_RestartSkip, & + RC=STATUS ) + VERIFY_(STATUS) + + call MAPL_AddImportSpec(GC, & + SHORT_NAME = 'UDEL', & + LONG_NAME = 'change_of_surface_value_of_eastward_wind',& + UNITS = 'm s-1',& + DIMS = MAPL_DimsHorzOnly, & + VLOCATION = MAPL_VLocationNone, & + RESTART = MAPL_RestartSkip, & + RC=STATUS ) + VERIFY_(STATUS) + + call MAPL_AddImportSpec(GC, & + SHORT_NAME = 'VDEL', & + LONG_NAME = 'change_of_surface_value_of_northward_wind',& + UNITS = 'm s-1',& + DIMS = MAPL_DimsHorzOnly, & + VLOCATION = MAPL_VLocationNone, & + RESTART = MAPL_RestartSkip, & + RC=STATUS ) + VERIFY_(STATUS) + + call MAPL_AddImportSpec(GC, & + SHORT_NAME = 'QDEL', & + LONG_NAME = 'change_of_surface_value_of_specific_humidity',& + UNITS = 'kg kg-1',& + DIMS = MAPL_DimsHorzOnly, & + VLOCATION = MAPL_VLocationNone, & + RESTART = MAPL_RestartSkip, & RC=STATUS ) VERIFY_(STATUS) @@ -1138,22 +1171,74 @@ subroutine SetServices ( GC, RC ) VERIFY_(STATUS) call MAPL_AddExportSpec(GC, & - SHORT_NAME = 'FSTAR', & - LONG_NAME = 'surface_fluxes', & - UNITS = 'X kg m-2 s-1', & + SHORT_NAME = 'SFLX', & + LONG_NAME = 'surface_sensible_heat_flux_from_turbulence',& + UNITS = 'W m-2',& DIMS = MAPL_DimsHorzOnly, & VLOCATION = MAPL_VLocationNone, & - DATATYPE = MAPL_BundleItem, & RC=STATUS ) VERIFY_(STATUS) call MAPL_AddExportSpec(GC, & - SHORT_NAME = 'DFSTAR', & - LONG_NAME = 'change_of_surface_fluxes_for_unit_change_of_surface_value',& - UNITS = 'kg m-2 s-1', & + SHORT_NAME = 'UFLX', & + LONG_NAME = 'surface_eastward_surface_stress_from_turbulence',& + UNITS = 'N m-2',& + DIMS = MAPL_DimsHorzOnly, & + VLOCATION = MAPL_VLocationNone, & + RC=STATUS ) + VERIFY_(STATUS) + + call MAPL_AddExportSpec(GC, & + SHORT_NAME = 'VFLX', & + LONG_NAME = 'surface_northward_surface_stress_from_turbulence',& + UNITS = 'N m-2',& + DIMS = MAPL_DimsHorzOnly, & + VLOCATION = MAPL_VLocationNone, & + RC=STATUS ) + VERIFY_(STATUS) + + call MAPL_AddExportSpec(GC, & + SHORT_NAME = 'QFLX', & + LONG_NAME = 'surface_evaporation_from_turbulence',& + UNITS = 'kg m-2 s-1',& + DIMS = MAPL_DimsHorzOnly, & + VLOCATION = MAPL_VLocationNone, & + RC=STATUS ) + VERIFY_(STATUS) + + call MAPL_AddExportSpec(GC, & + SHORT_NAME = 'SDFL', & + LONG_NAME = 'change_of_surface_flux_of_dry_static_energy_for_unit_change_of_surface_value',& + UNITS = 'm s-1',& + DIMS = MAPL_DimsHorzOnly, & + VLOCATION = MAPL_VLocationNone, & + RC=STATUS ) + VERIFY_(STATUS) + + call MAPL_AddExportSpec(GC, & + SHORT_NAME = 'UDFL', & + LONG_NAME = 'change_of_surface_flux_of_eastward_wind_for_unit_change_of_surface_value',& + UNITS = 'N s m-3',& + DIMS = MAPL_DimsHorzOnly, & + VLOCATION = MAPL_VLocationNone, & + RC=STATUS ) + VERIFY_(STATUS) + + call MAPL_AddExportSpec(GC, & + SHORT_NAME = 'VDFL', & + LONG_NAME = 'change_of_surface_flux_of_northward_wind_for_unit_change_of_surface_value',& + UNITS = 'N s m-3',& + DIMS = MAPL_DimsHorzOnly, & + VLOCATION = MAPL_VLocationNone, & + RC=STATUS ) + VERIFY_(STATUS) + + call MAPL_AddExportSpec(GC, & + SHORT_NAME = 'QDFL', & + LONG_NAME = 'change_of_surface_flux_of_specific_humidity_for_unit_change_of_surface_value',& + UNITS = 'kg m-2 s-1',& DIMS = MAPL_DimsHorzOnly, & VLOCATION = MAPL_VLocationNone, & - DATATYPE = MAPL_BundleItem, & RC=STATUS ) VERIFY_(STATUS) @@ -5243,9 +5328,6 @@ subroutine DIFFUSE(IM,JM,LM,RC) type (ESMF_Array) :: ARRAY type (ESMF_FieldBundle) :: TR type (ESMF_FieldBundle) :: TRI - type (ESMF_FieldBundle) :: TRG - type (ESMF_FieldBundle) :: FSTAR - type (ESMF_FieldBundle) :: DFSTAR real, dimension(:,:,:), pointer :: S, SOI, SOD real, dimension(:,:), pointer :: SG, SF, SDF, CX, SRG real, dimension(:,:,:), pointer :: DX @@ -5321,7 +5403,6 @@ subroutine DIFFUSE(IM,JM,LM,RC) !---------------------------------------------------------- call ESMF_StateGet(IMPORT, 'TR' , TR, RC=STATUS); VERIFY_(STATUS) - call ESMF_StateGet(IMPORT, 'TRG', TRG, RC=STATUS); VERIFY_(STATUS) if (DO_WAVES/=0 .and. DO_SEA_SPRAY/=0) then call MAPL_GetPointer(IMPORT, SH_SPRAY_, 'SHFX_SPRAY', RC=STATUS) @@ -5341,8 +5422,6 @@ subroutine DIFFUSE(IM,JM,LM,RC) end if call ESMF_StateGet(EXPORT, 'TRI', TRI, RC=STATUS); VERIFY_(STATUS) - call ESMF_StateGet(EXPORT, 'FSTAR', FSTAR, RC=STATUS); VERIFY_(STATUS) - call ESMF_StateGet(EXPORT, 'DFSTAR', DFSTAR, RC=STATUS); VERIFY_(STATUS) ! Get pointers to exports of U,V and S that diffuse sees ! Required for SYNCTQ (ALLOC=.TRUE.) @@ -5368,15 +5447,6 @@ subroutine DIFFUSE(IM,JM,LM,RC) call ESMF_FieldBundleGet(TRI, FieldCount=K , RC=STATUS) VERIFY_(STATUS) _ASSERT(KM==K,'needs informative message') - call ESMF_FieldBundleGet(TRG, FieldCount=K , RC=STATUS) - VERIFY_(STATUS) - _ASSERT(KM==K,'needs informative message') - call ESMF_FieldBundleGet(FSTAR, FieldCount=K , RC=STATUS) - VERIFY_(STATUS) - _ASSERT(KM==K,'needs informative message') - call ESMF_FieldBundleGet(DFSTAR, FieldCount=K , RC=STATUS) - VERIFY_(STATUS) - _ASSERT(KM==K,'needs informative message') ! Pressure thickness of layers !----------------------------- @@ -5427,12 +5497,20 @@ subroutine DIFFUSE(IM,JM,LM,RC) VERIFY_(STATUS) call ESMFL_BundleGetPointerToData(TRI , trim(NAME)//'IT' , SOI, RC=STATUS) VERIFY_(STATUS) - call ESMFL_BundleGetPointerToData(TRG , trim(NAME)//'HAT', SRG, RC=STATUS) - VERIFY_(STATUS) - call ESMFL_BundleGetPointerToData(FSTAR , trim(NAME)//'FLX', SF , RC=STATUS) - VERIFY_(STATUS) - call ESMFL_BundleGetPointerToData(DFSTAR, trim(NAME)//'DFL', SDF, RC=STATUS) - VERIFY_(STATUS) + +! Surface values, fluxes and sensitivities exist only for S, U, V and Q; +! all other quantities are left unassociated (zero flux). +!------------------------------------------------------------------ + nullify(SRG, SF, SDF) + select case (trim(NAME)) + case ('S','U','V','Q') + call MAPL_GetPointer(IMPORT, SRG, trim(NAME)//'HAT', RC=STATUS) + VERIFY_(STATUS) + call MAPL_GetPointer(EXPORT, SF , trim(NAME)//'FLX', RC=STATUS) + VERIFY_(STATUS) + call MAPL_GetPointer(EXPORT, SDF, trim(NAME)//'DFL', RC=STATUS) + VERIFY_(STATUS) + end select ! The quantity must exist; others are optional. !---------------------------------------------- @@ -5797,9 +5875,6 @@ subroutine UPDATE(IM,JM,LM,LATS,RC) type (ESMF_Field) :: FIELD type (ESMF_FieldBundle) :: TR type (ESMF_FieldBundle) :: TRI - type (ESMF_FieldBundle) :: DTG - type (ESMF_FieldBundle) :: FSTAR - type (ESMF_FieldBundle) :: DFSTAR real, dimension(:,:,:), pointer :: PLE real, dimension(:,:,:), pointer :: ZLE real, dimension(:,:,:), pointer :: S, SOI, SINC, INTDIS, TOPDIS @@ -5967,11 +6042,8 @@ subroutine UPDATE(IM,JM,LM,LATS,RC) !---------------------------------------------------------- call ESMF_StateGet(IMPORT, 'TR' , TR, RC=STATUS); VERIFY_(STATUS) - call ESMF_StateGet(IMPORT, 'DTG', DTG, RC=STATUS); VERIFY_(STATUS) call ESMF_StateGet(EXPORT, 'TRI', TRI, RC=STATUS); VERIFY_(STATUS) - call ESMF_StateGet(EXPORT, 'FSTAR' , FSTAR, RC=STATUS); VERIFY_(STATUS) - call ESMF_StateGet(EXPORT, 'DFSTAR', DFSTAR, RC=STATUS); VERIFY_(STATUS) ! Count them... !-------------- @@ -5982,10 +6054,6 @@ subroutine UPDATE(IM,JM,LM,LATS,RC) ! and make sure the other bundles are the same. !---------------------------------------------- - call ESMF_FieldBundleGet(DTG, FieldCount=K , RC=STATUS) - VERIFY_(STATUS) - - _ASSERT(KM==K,'needs informative message') ! KK gives the order in which quantities will be process. !-------------------------------------------------------- @@ -6195,12 +6263,16 @@ subroutine UPDATE(IM,JM,LM,LATS,RC) VERIFY_(STATUS) call ESMFL_BundleGetPointerToData(TRI , trim(NAME)//'IT' , SOI, RC=STATUS) VERIFY_(STATUS) - call ESMFL_BundleGetPointerToData(DTG , trim(NAME)//'DEL', DSG, RC=STATUS) - VERIFY_(STATUS) - call ESMFL_BundleGetPointerToData(FSTAR , trim(NAME)//'FLX', SF , RC=STATUS) - VERIFY_(STATUS) - call ESMFL_BundleGetPointerToData(DFSTAR, trim(NAME)//'DFL', SDF, RC=STATUS) - VERIFY_(STATUS) + nullify(DSG, SF, SDF) + select case (trim(NAME)) + case ('S','U','V','Q') + call MAPL_GetPointer(IMPORT, DSG, trim(NAME)//'DEL', RC=STATUS) + VERIFY_(STATUS) + call MAPL_GetPointer(EXPORT, SF , trim(NAME)//'FLX', RC=STATUS) + VERIFY_(STATUS) + call MAPL_GetPointer(EXPORT, SDF, trim(NAME)//'DFL', RC=STATUS) + VERIFY_(STATUS) + end select ! Point to the appropriate sensitivity !--------------------------------------