! +-======-+ ! Copyright (c) 2003-2007 United States Government as represented by ! the Admistrator of the National Aeronautics and Space Administration. ! All Rights Reserved. ! ! THIS OPEN SOURCE AGREEMENT ("AGREEMENT") DEFINES THE RIGHTS OF USE, ! REPRODUCTION, DISTRIBUTION, MODIFICATION AND REDISTRIBUTION OF CERTAIN ! COMPUTER SOFTWARE ORIGINALLY RELEASED BY THE UNITED STATES GOVERNMENT AS ! REPRESENTED BY THE GOVERNMENT AGENCY LISTED BELOW ("GOVERNMENT AGENCY"). ! THE UNITED STATES GOVERNMENT, AS REPRESENTED BY GOVERNMENT AGENCY, IS AN ! INTENDED THIRD-PARTY BENEFICIARY OF ALL SUBSEQUENT DISTRIBUTIONS OR ! REDISTRIBUTIONS OF THE SUBJECT SOFTWARE. ANYONE WHO USES, REPRODUCES, ! DISTRIBUTES, MODIFIES OR REDISTRIBUTES THE SUBJECT SOFTWARE, AS DEFINED ! HEREIN, OR ANY PART THEREOF, IS, BY THAT ACTION, ACCEPTING IN FULL THE ! RESPONSIBILITIES AND OBLIGATIONS CONTAINED IN THIS AGREEMENT. ! ! Government Agency: National Aeronautics and Space Administration ! Government Agency Original Software Designation: GSC-15354-1 ! Government Agency Original Software Title: GEOS-5 GCM Modeling Software ! User Registration Requested. Please Visit http://opensource.gsfc.nasa.gov ! Government Agency Point of Contact for Original Software: ! Dale Hithon, SRA Assistant, (301) 286-2691 ! ! +-======-+ ! $Id: GEOS_OgcmGridComp.F90,v 1.68.2.26.2.1.2.1.12.1.72.1 2015-08-11 19:49:05 atrayano Exp $ #include "MAPL_Generic.h" #if defined(USE_GUEST_OCEAN) #define OCEAN_MODULE GuestOcean_GridCompMod #else #define OCEAN_MODULE GEOS_DataSeaGridCompMod #endif #if defined(USE_CICE) #define SEAICE_MODULE GEOS_CICEDynaGridCompMod #elif defined(USE_SIMPLEICE) #define SEAICE_MODULE GEOS_SimpleIceGridCompMod #else #define SEAICE_MODULE GEOS_DataSeaIceGridCompMod #endif #ifdef USE_GUEST_OCEAN # if defined(USE_OBIO) # define OBIO_MODULE GEOS_OceanBioGeoChemGridCompMod # define ORAD_MODULE GEOS_OradBioGridCompMod # else # define OBIO_MODULE GEOS_OceanBioGridCompMod # define ORAD_MODULE GEOS_OradGridCompMod # endif #else # define OBIO_MODULE GEOS_OceanBioGeoChemGridCompMod # define ORAD_MODULE GEOS_OradGridCompMod #endif !============================================================================= !BOP ! !MODULE: GEOS_Ogcm -- A composite component for the ogcm components. ! !INTERFACE: module GEOS_OgcmGridCompMod ! !USES: use ESMF use MAPL_Mod use OBIO_MODULE, only : ObioSetServices => SetServices use ORAD_MODULE, only : OradSetServices => SetServices use OCEAN_MODULE, only : OceanSetServices => SetServices use SEAICE_MODULE, only : SeaIceSetServices => SetServices implicit none private ! !PUBLIC MEMBER FUNCTIONS: public SetServices ! !DESCRIPTION: ! ! {\tt GEOS\_Ogcm} is a light-weight gridded component that implements the ! interface to the ogcm components. The ogcm computational components ! (Poseidon, OceanRadiation, OceanBioGeochemistry, etc) are its children. ! This component currently serves as an interface between the exchange ! grid and the ocean's grid. Its ``natural'' grid is the ocean part of the ! exchange grid, and all its imports and exports are on this grid. The natural ! grid of all of its children is currently the ocean's rectangular grid. ! The ESMF grid that is in the gridded component is created by the parent ! and it is the ocean's rectangular grid. At present the exchange grid information ! is kept in the generic state. ! ! The fact that some of these are friendlies---all the ``skin'' ! components---means that it cannot be a ``no-work-no-change'' component. ! The interpolation of these to the ocean grid leave an ocean grid imprint ! on them. No such happens on the atmospheric side. So we should think of these ! exchange grid friendlies as ocean variables. ! !EOP #if defined(USE_CICE) integer, parameter :: NUM_3D_ICE_TRACERS=3 integer, parameter :: NUM_ICE_CATEGORIES=5 integer, parameter :: NUM_ICE_LAYERS=4 integer, parameter :: NUM_SNOW_LAYERS=1 #endif integer, parameter :: NUM_DUDP = 5 integer, parameter :: NUM_DUWT = 5 integer, parameter :: NUM_DUSD = 5 integer, parameter :: NUM_BCDP = 2 integer, parameter :: NUM_BCWT = 2 integer, parameter :: NUM_OCDP = 2 integer, parameter :: NUM_OCWT = 2 integer, parameter :: NB_CHOU_UV = 5 ! Number of UV bands integer, parameter :: NB_CHOU_NIR = 3 ! Number of near-IR bands integer, parameter :: NB_CHOU = NB_CHOU_UV + NB_CHOU_NIR ! Total number of bands !============================================================================= integer :: OBIO integer :: ORAD integer :: SEAICE integer :: OCEAN !ALT: if next statement needs to be changed, attention is required ! for the size of the array, and length of the string character(len=2) :: FRIENDLY_IMPORTS(3) = (/'TW', & 'HW', & 'SW'/) contains !BOP ! !IROUTINE: SetServices -- Sets ESMF services for this component ! !INTERFACE: subroutine SetServices ( GC, RC ) ! !ARGUMENTS: type(ESMF_GridComp), intent(INOUT) :: GC ! gridded component integer, optional :: RC ! return code ! !DESCRIPTION: This version uses the MAPL\_GenericSetServices, which in addition ! to setting default IRF methods, also allocates ! our instance of a generic state and puts it in the ! gridded component (GC). Here we override the Initialize and Run methods. !EOP !============================================================================= ! ! ErrLog Variables character(len=ESMF_MAXSTR) :: IAm integer :: STATUS character(len=ESMF_MAXSTR) :: COMP_NAME ! Locals !============================================================================= ! Begin... ! Get my name and set-up traceback handle ! --------------------------------------- Iam = 'SetServices' call ESMF_GridCompGet( GC, NAME=COMP_NAME, RC=STATUS ) VERIFY_(STATUS) Iam = trim(COMP_NAME) // Iam ! Set the Run and initialize entry points !---------------------------------------- call MAPL_GridCompSetEntryPoint ( GC, ESMF_METHOD_INITIALIZE, Initialize, RC=STATUS ) VERIFY_(STATUS) call MAPL_GridCompSetEntryPoint ( GC, ESMF_METHOD_RUN, Run , RC=STATUS ) VERIFY_(STATUS) ! Create childrens gridded components and invoke their SetServices ! ---------------------------------------------------------------- OBIO = MAPL_AddChild(GC, NAME='OBIO', SS=ObioSetServices, RC=STATUS) VERIFY_(STATUS) ORAD = MAPL_AddChild(GC, NAME='ORAD', SS=OradSetServices, RC=STATUS) VERIFY_(STATUS) SEAICE = MAPL_AddChild(GC, NAME='SEAICE', SS=SeaIceSetServices, RC=STATUS) VERIFY_(STATUS) OCEAN = MAPL_AddChild(GC, NAME='OCEAN', SS=OceanSetServices, RC=STATUS) VERIFY_(STATUS) ! Set the state variable specs. ! ----------------------------- !BOS ! !IMPORT STATE: call MAPL_AddImportSpec(GC, & LONG_NAME = 'eastward_stress_on_ocean' ,& UNITS = 'N m-2' ,& SHORT_NAME = 'TAUXW' ,& DIMS = MAPL_DimsTileOnly ,& VLOCATION = MAPL_VLocationNone ,& RC=STATUS ) VERIFY_(STATUS) call MAPL_AddImportSpec(GC, & LONG_NAME = 'northward_stress_on_ocean', & UNITS = 'N m-2' ,& SHORT_NAME = 'TAUYW' ,& DIMS = MAPL_DimsTileOnly ,& VLOCATION = MAPL_VLocationNone ,& RC=STATUS ) VERIFY_(STATUS) call MAPL_AddImportSpec(GC, & LONG_NAME = 'eastward_stress_on_ice' ,& UNITS = 'N m-2' ,& SHORT_NAME = 'TAUXI' ,& DIMS = MAPL_DimsTileOnly ,& VLOCATION = MAPL_VLocationNone ,& RC=STATUS ) VERIFY_(STATUS) call MAPL_AddImportSpec(GC, & LONG_NAME = 'northward_stress_on_ice', & UNITS = 'N m-2' ,& SHORT_NAME = 'TAUYI' ,& DIMS = MAPL_DimsTileOnly ,& VLOCATION = MAPL_VLocationNone ,& RC=STATUS ) VERIFY_(STATUS) call MAPL_AddImportSpec(GC, & LONG_NAME = 'ocean_ustar_cubed', & UNITS = 'm+3 s-3' ,& SHORT_NAME = 'OUSTAR3' ,& DIMS = MAPL_DimsTileOnly ,& VLOCATION = MAPL_VLocationNone ,& RC=STATUS ) VERIFY_(STATUS) call MAPL_AddImportSpec(GC, & LONG_NAME = 'surface_wind_speed' ,& UNITS = 'm s-1' ,& SHORT_NAME = 'UU' ,& DIMS = MAPL_DimsTileOnly ,& VLOCATION = MAPL_VLocationNone ,& RC=STATUS ) VERIFY_(STATUS) call MAPL_AddImportSpec(GC, & LONG_NAME = 'surface_air_pressure', & UNITS = 'Pa', & SHORT_NAME = 'PS', & DIMS = MAPL_DimsTileOnly, & VLOCATION = MAPL_VLocationNone, & DEFAULT = 100000., & RC=STATUS ) VERIFY_(STATUS) call MAPL_AddImportSpec(GC, & SHORT_NAME = 'PENUVR', & LONG_NAME = 'net_downward_penetrating_direct_UV_flux', & UNITS = 'W m-2', & DIMS = MAPL_DimsTileOnly, & VLOCATION = MAPL_VLocationNone, & RC=STATUS ) VERIFY_(STATUS) call MAPL_AddImportSpec(GC, & SHORT_NAME = 'PENPAR', & LONG_NAME = 'net_downward_penetrating_direct_PAR_flux', & UNITS = 'W m-2', & DIMS = MAPL_DimsTileOnly, & VLOCATION = MAPL_VLocationNone, & RC=STATUS ) VERIFY_(STATUS) call MAPL_AddImportSpec(GC, & SHORT_NAME = 'PENUVF', & LONG_NAME = 'net_downward_penetrating_diffuse_UV_flux', & UNITS = 'W m-2', & DIMS = MAPL_DimsTileOnly, & VLOCATION = MAPL_VLocationNone, & RC=STATUS ) VERIFY_(STATUS) call MAPL_AddImportSpec(GC, & SHORT_NAME = 'PENPAF', & LONG_NAME = 'net_downward_penetrating_diffuse_PAR_flux', & UNITS = 'W m-2', & DIMS = MAPL_DimsTileOnly, & VLOCATION = MAPL_VLocationNone, & RC=STATUS ) VERIFY_(STATUS) call MAPL_AddImportSpec(GC, & LONG_NAME = 'river_discharge_at_ocean_points',& UNITS = 'kg m-2 s-1' ,& SHORT_NAME = 'DISCHRG' ,& DIMS = MAPL_DimsTileOnly ,& VLOCATION = MAPL_VLocationNone ,& RESTART = MAPL_RestartSkip ,& RC=STATUS ) VERIFY_(STATUS) call MAPL_AddImportSpec(GC, & LONG_NAME = 'CO2 Surface Concentration Bin 001', & UNITS = '1e-6' ,& SHORT_NAME = 'CO2SC' ,& DIMS = MAPL_DimsTileOnly ,& VLOCATION = MAPL_VLocationNone ,& RESTART = MAPL_RestartSkip ,& RC=STATUS ) VERIFY_(STATUS) call MAPL_AddImportSpec(GC, & LONG_NAME = 'Dust Dry Deposition' ,& UNITS = 'kg m-2 s-1' ,& SHORT_NAME = 'DUDP' ,& DIMS = MAPL_DimsTileOnly ,& UNGRIDDED_DIMS = (/NUM_DUDP/) ,& VLOCATION = MAPL_VLocationNone ,& RESTART = MAPL_RestartSkip ,& RC=STATUS ) VERIFY_(STATUS) call MAPL_AddImportSpec(GC, & LONG_NAME = 'Dust Wet Deposition' ,& UNITS = 'kg m-2 s-1' ,& SHORT_NAME = 'DUWT' ,& DIMS = MAPL_DimsTileOnly ,& UNGRIDDED_DIMS = (/NUM_DUWT/) ,& VLOCATION = MAPL_VLocationNone ,& RESTART = MAPL_RestartSkip ,& RC=STATUS ) VERIFY_(STATUS) call MAPL_AddImportSpec(GC, & LONG_NAME = 'Dust Sedimentation' ,& UNITS = 'kg m-2 s-1' ,& SHORT_NAME = 'DUSD' ,& DIMS = MAPL_DimsTileOnly ,& UNGRIDDED_DIMS = (/NUM_DUSD/) ,& VLOCATION = MAPL_VLocationNone ,& RESTART = MAPL_RestartSkip ,& RC=STATUS ) VERIFY_(STATUS) call MAPL_AddImportSpec(GC, & LONG_NAME = 'Black Carbon Dry Deposition',& UNITS = 'kg m-2 s-1' ,& SHORT_NAME = 'BCDP' ,& DIMS = MAPL_DimsTileOnly ,& UNGRIDDED_DIMS = (/NUM_BCDP/) ,& VLOCATION = MAPL_VLocationNone ,& RESTART = MAPL_RestartSkip ,& RC=STATUS ) VERIFY_(STATUS) call MAPL_AddImportSpec(GC, & LONG_NAME = 'Black Carbon Wet Deposition',& UNITS = 'kg m-2 s-1' ,& SHORT_NAME = 'BCWT' ,& DIMS = MAPL_DimsTileOnly ,& UNGRIDDED_DIMS = (/NUM_BCWT/) ,& VLOCATION = MAPL_VLocationNone ,& RESTART = MAPL_RestartSkip ,& RC=STATUS ) VERIFY_(STATUS) call MAPL_AddImportSpec(GC, & LONG_NAME = 'Organic Carbon Dry Deposition',& UNITS = 'kg m-2 s-1' ,& SHORT_NAME = 'OCDP' ,& DIMS = MAPL_DimsTileOnly ,& UNGRIDDED_DIMS = (/NUM_OCDP/) ,& VLOCATION = MAPL_VLocationNone ,& RESTART = MAPL_RestartSkip ,& RC=STATUS ) VERIFY_(STATUS) call MAPL_AddImportSpec(GC, & LONG_NAME = 'Organic Carbon Wet Deposition',& UNITS = 'kg m-2 s-1' ,& SHORT_NAME = 'OCWT' ,& DIMS = MAPL_DimsTileOnly ,& UNGRIDDED_DIMS = (/NUM_OCWT/) ,& VLOCATION = MAPL_VLocationNone ,& RESTART = MAPL_RestartSkip ,& RC=STATUS ) VERIFY_(STATUS) call MAPL_AddImportSpec(GC, & LONG_NAME = 'net_surface_downward_shortwave_flux_per_band_in_air',& UNITS = 'W m-2' ,& SHORT_NAME = 'FSWBAND' ,& DIMS = MAPL_DimsTileOnly ,& UNGRIDDED_DIMS = (/NB_CHOU/) ,& VLOCATION = MAPL_VLocationNone ,& RESTART = MAPL_RestartSkip ,& RC=STATUS ) VERIFY_(STATUS) call MAPL_AddImportSpec(GC, & LONG_NAME = 'net_surface_downward_shortwave_flux_per_band_in_air_assuming_no_aerosol',& UNITS = 'W m-2' ,& SHORT_NAME = 'FSWBANDNA' ,& DIMS = MAPL_DimsTileOnly ,& UNGRIDDED_DIMS = (/NB_CHOU/) ,& VLOCATION = MAPL_VLocationNone ,& RESTART = MAPL_RestartSkip ,& RC=STATUS ) VERIFY_(STATUS) ! These six are supposed to be friendly to us !---------------------------------------------- call MAPL_AddImportSpec(GC, & SHORT_NAME = 'HW', & LONG_NAME = 'water_skin_layer_mass', & UNITS = 'kg', & DIMS = MAPL_DimsTileOnly, & VLOCATION = MAPL_VLocationNone, & DEFAULT = 5.0, & RC=STATUS ) VERIFY_(STATUS) call MAPL_AddImportSpec(GC, & SHORT_NAME = 'TW', & LONG_NAME = 'water_skin_temperature', & UNITS = 'K', & DIMS = MAPL_DimsTileOnly, & VLOCATION = MAPL_VLocationNone, & DEFAULT = 280.0, & RC=STATUS ) VERIFY_(STATUS) call MAPL_AddImportSpec(GC, & SHORT_NAME = 'SW', & LONG_NAME = 'water_skin_salinity', & UNITS = 'psu', & DIMS = MAPL_DimsTileOnly, & VLOCATION = MAPL_VLocationNone, & DEFAULT = 30.0, & RC=STATUS ) VERIFY_(STATUS) call MAPL_AddImportSpec(GC, & SHORT_NAME = 'HI', & LONG_NAME = 'seaice_skin_layer_mass', & UNITS = 'kg', & DIMS = MAPL_DimsTileOnly, & VLOCATION = MAPL_VLocationNone, & DEFAULT = 0.0, & RC=STATUS ) VERIFY_(STATUS) call MAPL_AddImportSpec(GC, & SHORT_NAME = 'SI', & LONG_NAME = 'seaice_skin_salinity', & UNITS = 'psu', & DIMS = MAPL_DimsTileOnly, & VLOCATION = MAPL_VLocationNone, & DEFAULT = 0.0, & RC=STATUS ) VERIFY_(STATUS) #ifdef USE_CICE call MAPL_AddImportSpec(GC, & SHORT_NAME = 'FRACICE', & LONG_NAME = 'fractional_cover_of_seaice', & UNITS = '1', & DIMS = MAPL_DimsTileOnly, & UNGRIDDED_DIMS = (/NUM_ICE_CATEGORIES/), & VLOCATION = MAPL_VLocationNone, & RC=STATUS ) VERIFY_(STATUS) call MAPL_AddImportSpec(GC, & SHORT_NAME = 'TI', & LONG_NAME = 'seaice_skin_temperature', & UNITS = 'K', & DIMS = MAPL_DimsTileOnly, & UNGRIDDED_DIMS = (/NUM_ICE_CATEGORIES/), & VLOCATION = MAPL_VLocationNone, & DEFAULT = MAPL_TICE, & RC=STATUS ) VERIFY_(STATUS) call MAPL_AddImportSpec(GC, & SHORT_NAME = 'VOLICE', & LONG_NAME = 'ice_category_volume_per_unit_area_of_grid_cell',& UNITS = 'm', & DIMS = MAPL_DimsTileOnly, & UNGRIDDED_DIMS = (/NUM_ICE_CATEGORIES/), & VLOCATION = MAPL_VLocationNone, & DEFAULT = 0.0, & RC=STATUS ) VERIFY_(STATUS) call MAPL_AddImportSpec(GC, & SHORT_NAME = 'VOLSNO', & LONG_NAME = 'sno_category_volume_per_unit_area_of_grid_cell',& UNITS = 'm', & DIMS = MAPL_DimsTileOnly, & UNGRIDDED_DIMS = (/NUM_ICE_CATEGORIES/), & VLOCATION = MAPL_VLocationNone, & DEFAULT = 0.0, & RC=STATUS ) VERIFY_(STATUS) call MAPL_AddImportSpec(GC, & SHORT_NAME = 'ERGICE', & LONG_NAME = 'ice_category_layer_internal_energy',& UNITS = 'J m-2', & DIMS = MAPL_DimsTileOnly, & VLOCATION = MAPL_VLocationNone, & UNGRIDDED_DIMS = (/NUM_ICE_LAYERS,NUM_ICE_CATEGORIES/),& DEFAULT = 0.0, & RC=STATUS ) VERIFY_(STATUS) call MAPL_AddImportSpec(GC, & SHORT_NAME = 'ERGSNO', & LONG_NAME = 'snow_category_layer_internal_energy',& UNITS = 'J m-2', & DIMS = MAPL_DimsTileOnly, & VLOCATION = MAPL_VLocationNone, & UNGRIDDED_DIMS = (/NUM_SNOW_LAYERS,NUM_ICE_CATEGORIES/),& DEFAULT = 0.0, & RC=STATUS ) VERIFY_(STATUS) call MAPL_AddImportSpec(GC, & SHORT_NAME = 'TAUAGE', & LONG_NAME = 'volume_weighted_mean_ice_age', & UNITS = 's', & UNGRIDDED_DIMS = (/NUM_ICE_CATEGORIES/), & DIMS = MAPL_DimsTileOnly, & VLOCATION = MAPL_VLocationNone, & DEFAULT = 0.0, & RC=STATUS ) VERIFY_(STATUS) call MAPL_AddImportSpec(GC, & SHORT_NAME = 'MPOND', & LONG_NAME = 'pond_volume', & UNITS = 'm', & UNGRIDDED_DIMS = (/NUM_ICE_CATEGORIES/), & DIMS = MAPL_DimsTileOnly, & VLOCATION = MAPL_VLocationNone, & DEFAULT = 0.0, & RC=STATUS ) VERIFY_(STATUS) #ifndef DATAATM call MAPL_AddImportSpec(GC, & SHORT_NAME = 'DAIDTD', & LONG_NAME = 'ice_area_tendency_dueto_dynamics', & UNITS = '% day-1', & DIMS = MAPL_DimsTileOnly, & VLOCATION = MAPL_VLocationNone, & DEFAULT = 0.0, & RC=STATUS ) VERIFY_(STATUS) call MAPL_AddImportSpec(GC, & SHORT_NAME = 'DVIDTD', & LONG_NAME = 'ice_volume_tendency_dueto_dynamics', & UNITS = 'cm day-1', & DIMS = MAPL_DimsTileOnly, & VLOCATION = MAPL_VLocationNone, & DEFAULT = 0.0, & RC=STATUS ) VERIFY_(STATUS) #endif #else call MAPL_AddImportSpec(GC, & SHORT_NAME = 'TI', & LONG_NAME = 'seaice_skin_temperature', & UNITS = 'K', & DIMS = MAPL_DimsTileOnly, & VLOCATION = MAPL_VLocationNone, & DEFAULT = MAPL_TICE, & RC=STATUS ) VERIFY_(STATUS) #endif ! !EXPORT STATE: call MAPL_AddExportSpec(GC, & SHORT_NAME = 'UW', & LONG_NAME = 'zonal_velocity_of_surface_water', & UNITS = 'm s-1 ', & DIMS = MAPL_DimsTileOnly, & VLOCATION = MAPL_VLocationNone, & RC=STATUS ) VERIFY_(STATUS) call MAPL_AddExportSpec(GC, & SHORT_NAME = 'VW', & LONG_NAME = 'meridional_velocity_of_surface_water',& UNITS = 'm s-1 ', & DIMS = MAPL_DimsTileOnly, & VLOCATION = MAPL_VLocationNone, & RC=STATUS ) VERIFY_(STATUS) call MAPL_AddExportSpec(GC, & SHORT_NAME = 'UI', & LONG_NAME = 'zonal_velocity_of_surface_seaice', & UNITS = 'm s-1 ', & DIMS = MAPL_DimsTileOnly, & VLOCATION = MAPL_VLocationNone, & RC=STATUS ) VERIFY_(STATUS) call MAPL_AddExportSpec(GC, & SHORT_NAME = 'VI', & LONG_NAME = 'meridional_velocity_of_surface_seaice',& UNITS = 'm s-1 ', & DIMS = MAPL_DimsTileOnly, & VLOCATION = MAPL_VLocationNone, & RC=STATUS ) VERIFY_(STATUS) call MAPL_AddExportSpec(GC, & SHORT_NAME = 'TILELONS', & LONG_NAME = 'longitude', & UNITS = 'degrees', & DIMS = MAPL_DimsTileOnly, & VLOCATION = MAPL_VLocationNone, & RC=STATUS ) VERIFY_(STATUS) call MAPL_AddExportSpec(GC, & SHORT_NAME = 'TILELATS', & LONG_NAME = 'latitude', & UNITS = 'degrees', & DIMS = MAPL_DimsTileOnly, & VLOCATION = MAPL_VLocationNone, & RC=STATUS ) VERIFY_(STATUS) call MAPL_AddExportSpec(GC, & SHORT_NAME = 'KPAR', & LONG_NAME = 'PAR_extinction_coefficient', & UNITS = 'm-1 ', & DIMS = MAPL_DimsTileOnly, & VLOCATION = MAPL_VLocationNone, & RC=STATUS ) VERIFY_(STATUS) call MAPL_AddExportSpec(GC, & SHORT_NAME = 'TS_FOUND', & LONG_NAME = 'foundation_temperature_for_interface_layer',& UNITS = 'K', & DIMS = MAPL_DimsTileOnly, & VLOCATION = MAPL_VLocationNone, & RC=STATUS ) VERIFY_(STATUS) #ifndef USE_CICE call MAPL_AddExportSpec(GC, & SHORT_NAME = 'FRACICE', & LONG_NAME = 'fractional_cover_of_seaice', & UNITS = '1', & DIMS = MAPL_DimsTileOnly, & VLOCATION = MAPL_VLocationNone, & RC=STATUS ) VERIFY_(STATUS) #else call MAPL_AddExportSpec(GC, & SHORT_NAME = 'TAUXIBOT', & LONG_NAME = 'eastward_stress_at_base_of_ice', & UNITS = 'N m-2', & DIMS = MAPL_DimsTileOnly, & VLOCATION = MAPL_VLocationNone, & RC=STATUS ) VERIFY_(STATUS) call MAPL_AddExportSpec(GC, & SHORT_NAME = 'TAUYIBOT', & LONG_NAME = 'northward_stress_at_base_of_ice', & UNITS = 'N m-2', & DIMS = MAPL_DimsTileOnly, & VLOCATION = MAPL_VLocationNone, & RC=STATUS ) VERIFY_(STATUS) #endif #ifdef USE_ODAS call MAPL_AddExportSpec ( GC , & SHORT_NAME = 'MOM_3D_MASK', & CHILD_ID = OCEAN, & RC=STATUS ) VERIFY_(STATUS) call MAPL_AddExportSpec ( GC , & SHORT_NAME = 'T', & CHILD_ID = OCEAN, & RC=STATUS ) VERIFY_(STATUS) call MAPL_AddExportSpec ( GC , & SHORT_NAME = 'S', & CHILD_ID = OCEAN, & RC=STATUS ) VERIFY_(STATUS) call MAPL_AddExportSpec ( GC , & SHORT_NAME = 'U', & CHILD_ID = OCEAN, & RC=STATUS ) VERIFY_(STATUS) call MAPL_AddExportSpec ( GC , & SHORT_NAME = 'V', & CHILD_ID = OCEAN, & RC=STATUS ) VERIFY_(STATUS) call MAPL_AddExportSpec ( GC , & SHORT_NAME = 'Z', & CHILD_ID = OCEAN, & RC=STATUS ) VERIFY_(STATUS) call MAPL_AddExportSpec ( GC , & SHORT_NAME = 'RHO', & CHILD_ID = OCEAN, & RC=STATUS ) VERIFY_(STATUS) call MAPL_AddExportSpec ( GC , & SHORT_NAME = 'SSH', & CHILD_ID = OCEAN, & RC=STATUS ) VERIFY_(STATUS) call MAPL_AddExportSpec ( GC , & SHORT_NAME = 'TX', & CHILD_ID = OCEAN, & RC=STATUS ) VERIFY_(STATUS) call MAPL_AddExportSpec ( GC , & SHORT_NAME = 'TY', & CHILD_ID = OCEAN, & RC=STATUS ) VERIFY_(STATUS) call MAPL_AddExportSpec ( GC , & SHORT_NAME = 'MLD', & CHILD_ID = OCEAN, & RC=STATUS ) VERIFY_(STATUS) call MAPL_AddExportSpec ( GC , & SHORT_NAME = 'PSI', & CHILD_ID = OCEAN, & RC=STATUS ) VERIFY_(STATUS) #ifdef USE_CICE call MAPL_AddExportSpec(GC, & SHORT_NAME = 'AICE', & CHILD_ID = SEAICE, & RC=STATUS ) VERIFY_(STATUS) call MAPL_AddExportSpec(GC, & SHORT_NAME = 'HICE', & CHILD_ID = SEAICE, & RC=STATUS ) VERIFY_(STATUS) call MAPL_AddExportSpec(GC, & SHORT_NAME = 'CICE_2D_MASK', & CHILD_ID = SEAICE, & RC=STATUS ) VERIFY_(STATUS) !EOS #endif #endif ! Connections between the children !--------------------------------- #ifdef USE_GUEST_OCEAN ! Radiation to Ocean call MAPL_AddConnectivity ( GC, & SHORT_NAME = (/'SWHEAT'/), & DST_ID = OCEAN, & SRC_ID = ORAD, & RC=STATUS ) VERIFY_(STATUS) ! Ocean to Radiation call MAPL_AddConnectivity ( GC, & #ifdef USE_OBIO SHORT_NAME = (/'DH'/), & #else DST_NAME = (/'H'/), & SRC_NAME = (/'DH'/), & #endif DST_ID = ORAD, & SRC_ID = OCEAN, & RC=STATUS ) VERIFY_(STATUS) #ifdef USE_OBIO ! Ocean to OceanBio call MAPL_AddConnectivity ( GC, & SHORT_NAME = (/'DH', 'T', 'S'/), & DST_ID = OBIO, & SRC_ID = OCEAN, & RC=STATUS ) VERIFY_(STATUS) ! OceanRad to OceanBio call MAPL_AddConnectivity ( GC, & SHORT_NAME = (/'TIRRQ'/), & DST_ID = OBIO, & SRC_ID = ORAD, & RC=STATUS ) VERIFY_(STATUS) ! OceanBio to OceanRad call MAPL_AddConnectivity ( GC, & SHORT_NAME = (/'DIATOM','CHLORO','CYANO','COCCO', 'AVGQ', 'IHRA'/), & DST_ID = ORAD, & SRC_ID = OBIO, & RC=STATUS ) VERIFY_(STATUS) #ifdef USE_CICE ! Seaice to OceanBio call MAPL_AddConnectivity ( GC, & SHORT_NAME = (/'FRACICE'/), & DST_ID = OBIO, & SRC_ID = SEAICE, & RC=STATUS ) VERIFY_(STATUS) #endif #endif #endif !EOP #ifdef USE_CICE call MAPL_AddConnectivity ( GC, & SHORT_NAME = (/'UWB','VWB','UW ','VW ','SSH'/), & SRC_ID = OCEAN, & DST_ID = SEAICE, & RC=STATUS ) VERIFY_(STATUS) call MAPL_AddConnectivity ( GC, & SHORT_NAME = (/'TAUXBOT','TAUYBOT','FRACICE'/), & DST_ID = OCEAN, & SRC_ID = SEAICE, & RC=STATUS ) VERIFY_(STATUS) #endif !EOP ! Children's imports are in the ocean grid and are all satisfied ! by OGCM from exchange grid quantities. #ifdef USE_ODAS call MAPL_TerminateImport ( GC, CHILD=OBIO, RC=STATUS ) VERIFY_(STATUS) call MAPL_TerminateImport ( GC, CHILD=ORAD, RC=STATUS ) VERIFY_(STATUS) call MAPL_TerminateImport(GC, SHORT_NAME = ['FRACICE', 'TI', 'SI', 'VOLICE', 'VOLSNO', 'ERGICE', 'ERGSNO', 'MPOND', 'HW', 'TW', 'SW', 'TAUAGE'], CHILD = SEAICE, RC=STATUS) VERIFY_(STATUS) call MAPL_TerminateImport(GC, SHORT_NAME = ['PENUVR', 'PENPAR', 'PENUVF', 'PENPAF', 'TR', 'TRFLUX', 'HW', 'TW', 'SW', 'PS', 'VOLICE', 'VOLSNO', 'DISCHARGE'], CHILD = OCEAN, RC=STATUS) VERIFY_(STATUS) #else call MAPL_TerminateImport ( GC, ALL=.true., RC=STATUS ) #endif ! Set the Profiling timers ! ------------------------ call MAPL_TimerAdd(GC, name="INITIALIZE" ,RC=STATUS) VERIFY_(STATUS) call MAPL_TimerAdd(GC, name="RUN" ,RC=STATUS) VERIFY_(STATUS) call MAPL_TimerAdd(GC, name="InitChild" ,RC=STATUS) VERIFY_(STATUS) ! Call SetServices !------------------ call MAPL_GenericSetServices ( GC, RC=STATUS ) VERIFY_(STATUS) RETURN_(ESMF_SUCCESS) end subroutine SetServices !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! !IROUTINE: Initialize -- Initialize method for the GEOS Ogcm component ! !INTERFACE: subroutine Initialize ( GC, IMPORT, EXPORT, CLOCK, RC ) ! !ARGUMENTS: type(ESMF_GridComp), intent(inout) :: GC ! Gridded component type(ESMF_State), intent(inout) :: IMPORT ! Import state type(ESMF_State), intent(inout) :: EXPORT ! Export state type(ESMF_Clock), intent(inout) :: CLOCK ! The clock integer, optional, intent( out) :: RC ! Error code ! !DESCRIPTION: The Initialize method of the Ogcm Composite Gridded Component. ! It reads the tiling file that defines the exchange grid ! It then does a Generic\_Initialize !EOP ! ErrLog Variables character(len=ESMF_MAXSTR) :: IAm integer :: STATUS character(len=ESMF_MAXSTR) :: COMP_NAME ! Local derived type aliases type (MAPL_MetaComp ), pointer :: MAPL type (MAPL_LocStream ) :: LOCSTREAM type (MAPL_LocStream ) :: EXCH type (ESMF_State ), pointer :: GIM(:) type (ESMF_GridComp ), pointer :: GCS(:) #ifdef USE_GUEST_OCEAN type(ESMF_FIELDBUNDLE ) :: BUNDLE #endif type(ESMF_FIELD ) :: FIELD type(ESMF_Grid ) :: grid integer, pointer, dimension(:) :: TYPE integer :: I integer :: J integer :: N_CHILDREN integer :: COUNTS(3) real, pointer :: FROCEAN (:,:) real, pointer :: LONS (: ) real, pointer :: LATS (: ) real, pointer :: TLONS (: ) real, pointer :: TLATS (: ) real, pointer :: FRTILE (: ) real, pointer :: PTR2d (:,:) logical :: found logical, allocatable :: hasThisImport(:) !============================================================================= ! Begin... ! Get the target components name and set-up traceback handle. ! ----------------------------------------------------------- Iam = "Initialize" call ESMF_GridCompGet ( GC, name=COMP_NAME, RC=STATUS ) VERIFY_(STATUS) Iam = trim(COMP_NAME) // Iam ! Get my internal MAPL_Generic state !----------------------------------- call MAPL_GetObjectFromGC ( GC, MAPL, RC=STATUS) VERIFY_(STATUS) call MAPL_TimerOn(MAPL,"TOTAL" ) call MAPL_TimerOn(MAPL,"INITIALIZE") ! Get the Ocean part of the Xchg grid !------------------------------------ call MAPL_GenericMakeXchgNatural(MAPL, RC=STATUS) VERIFY_(STATUS) call MAPL_Get(MAPL, GCS = GCS, RC=STATUS ) VERIFY_(STATUS) N_CHILDREN = size(GCS) DO I = 1,N_CHILDREN DO J = 1, size(FRIENDLY_IMPORTS) call MAPL_DoNotAllocateImport(GCS(I), NAME=FRIENDLY_IMPORTS(J)) !ALT we do not pass nor check status since we allow this call for fail ! for children that do not have this particular import END DO END DO ! Call Initialize for every Child !-------------------------------- call MAPL_TimerOff(MAPL,"TOTAL" ) call MAPL_TimerOn(MAPL,"InitChild") call MAPL_GenericInitialize ( GC, IMPORT, EXPORT, CLOCK, RC=STATUS) VERIFY_(STATUS) call MAPL_TimerOff(MAPL,"InitChild") call MAPL_TimerOn (MAPL,"TOTAL" ) ! Get info from the Generic state !-------------------------------- call MAPL_Get(MAPL, & TILETYPES = TYPE, & TILELONS = LONS, & TILELATS = LATS, & GIM = GIM, & RC=STATUS ) VERIFY_(STATUS) ! These are static exports !------------------------- call MAPL_GetPointer(EXPORT, TLONS, 'TILELONS', RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(EXPORT, TLATS, 'TILELATS', RC=STATUS) VERIFY_(STATUS) if(associated(TLONS)) TLONS = LONS if(associated(TLATS)) TLATS = LATS ! Manipulate friendly imports ! get grid and sizes call ESMF_GridCompGet(GC, grid=grid, RC=status) VERIFY_(STATUS) call MAPL_GridGet(grid, localCellCountPerDim=COUNTS, RC=STATUS) VERIFY_(STATUS) allocate(hasThisImport(N_CHILDREN), stat=status) VERIFY_(STATUS) DO J = 1, size(FRIENDLY_IMPORTS) ! check if this Friendly Import exists in at least one component found = .false. hasThisImport = .false. DO I = 1,N_CHILDREN call ESMF_StateGet(GIM(I), FRIENDLY_IMPORTS(J), FIELD, RC=STATUS) if (status == ESMF_SUCCESS) then found = .true. hasThisImport(I) = .true. end if END DO if (.not. found) cycle allocate(PTR2D(COUNTS(1), COUNTS(2)), stat=status) VERIFY_(STATUS) DO I = 1,N_CHILDREN if (hasThisImport(I)) then call MAPL_SetPointer(GIM(I), PTR2D, NAME=FRIENDLY_IMPORTS(J), RC=STATUS) VERIFY_(STATUS) end if END DO END DO deallocate(hasThisImport) ! Tag ocean's friendly imports !----------------------------- call ESMF_StateGet (GIM(OCEAN), 'TW', FIELD, RC=STATUS) VERIFY_(STATUS) call ESMF_AttributeSet (FIELD, NAME="FriendlyToOCEAN" , VALUE=.true., RC=STATUS) VERIFY_(STATUS) call ESMF_StateGet (GIM(OCEAN), 'HW', FIELD, RC=STATUS) VERIFY_(STATUS) call ESMF_AttributeSet (FIELD, NAME="FriendlyToOCEAN" , VALUE=.true., RC=STATUS) VERIFY_(STATUS) call ESMF_StateGet (GIM(OCEAN), 'SW', FIELD, RC=STATUS) VERIFY_(STATUS) call ESMF_AttributeSet (FIELD, NAME="FriendlyToOCEAN" , VALUE=.true., RC=STATUS) VERIFY_(STATUS) #ifdef USE_CICE call ESMF_StateGet (GIM(OCEAN), 'FRACICE', FIELD, RC=STATUS) VERIFY_(STATUS) call ESMF_AttributeSet (FIELD, NAME="FriendlyToOCEAN", VALUE=.true., RC=STATUS) VERIFY_(STATUS) #endif ! Tag seaice's friendly imports !----------------------------- call ESMF_StateGet (GIM(SEAICE), 'TI', FIELD, RC=STATUS) VERIFY_(STATUS) call ESMF_AttributeSet (FIELD, NAME="FriendlyToSEAICE", VALUE=.true., RC=STATUS) VERIFY_(STATUS) #ifdef USE_CICE call ESMF_StateGet (GIM(SEAICE), 'FRACICE', FIELD, RC=STATUS) VERIFY_(STATUS) call ESMF_AttributeSet (FIELD, NAME="FriendlyToSEAICE", VALUE=.true., RC=STATUS) VERIFY_(STATUS) call ESMF_StateGet (GIM(SEAICE), 'VOLICE', FIELD, RC=STATUS) VERIFY_(STATUS) call ESMF_AttributeSet (FIELD, NAME="FriendlyToSEAICE", VALUE=.true., RC=STATUS) VERIFY_(STATUS) call ESMF_StateGet (GIM(SEAICE), 'VOLSNO', FIELD, RC=STATUS) VERIFY_(STATUS) call ESMF_AttributeSet (FIELD, NAME="FriendlyToSEAICE", VALUE=.true., RC=STATUS) VERIFY_(STATUS) call ESMF_StateGet (GIM(SEAICE), 'ERGICE', FIELD, RC=STATUS) VERIFY_(STATUS) call ESMF_AttributeSet (FIELD, NAME="FriendlyToSEAICE", VALUE=.true., RC=STATUS) VERIFY_(STATUS) call ESMF_StateGet (GIM(SEAICE), 'ERGSNO', FIELD, RC=STATUS) VERIFY_(STATUS) call ESMF_AttributeSet (FIELD, NAME="FriendlyToSEAICE", VALUE=.true., RC=STATUS) VERIFY_(STATUS) call ESMF_StateGet (GIM(SEAICE), 'TAUAGE', FIELD, RC=STATUS) VERIFY_(STATUS) call ESMF_AttributeSet (FIELD, NAME="FriendlyToSEAICE", VALUE=.true., RC=STATUS) VERIFY_(STATUS) call ESMF_StateGet (GIM(SEAICE), 'MPOND', FIELD, RC=STATUS) VERIFY_(STATUS) call ESMF_AttributeSet (FIELD, NAME="FriendlyToSEAICE", VALUE=.true., RC=STATUS) VERIFY_(STATUS) #else call ESMF_StateGet (GIM(SEAICE), 'HI', FIELD, RC=STATUS) VERIFY_(STATUS) call ESMF_AttributeSet (FIELD, NAME="FriendlyToSEAICE", VALUE=.true., RC=STATUS) VERIFY_(STATUS) call ESMF_StateGet (GIM(SEAICE), 'TW', FIELD, RC=STATUS) VERIFY_(STATUS) call ESMF_AttributeSet (FIELD, NAME="FriendlyToSEAICE", VALUE=.true., RC=STATUS) VERIFY_(STATUS) call ESMF_StateGet (GIM(SEAICE), 'HW', FIELD, RC=STATUS) VERIFY_(STATUS) call ESMF_AttributeSet (FIELD, NAME="FriendlyToSEAICE", VALUE=.true., RC=STATUS) VERIFY_(STATUS) call ESMF_StateGet (GIM(SEAICE), 'SW', FIELD, RC=STATUS) VERIFY_(STATUS) call ESMF_AttributeSet (FIELD, NAME="FriendlyToSEAICE", VALUE=.true., RC=STATUS) VERIFY_(STATUS) #endif call ESMF_StateGet (GIM(SEAICE), 'SI', FIELD, RC=STATUS) VERIFY_(STATUS) call ESMF_AttributeSet (FIELD, NAME="FriendlyToSEAICE", VALUE=.true., RC=STATUS) VERIFY_(STATUS) ! Fill the ocean fraction exposed to atmosphere (skin area) ! in the childrens import, if they want it !---------------------------------------------------------- call MAPL_Get (MAPL, ExchangeGrid=EXCH, RC=STATUS ) VERIFY_(STATUS) do I = 1, size(GIM) call ESMF_StateGet(GIM(I), 'FROCEAN', FIELD, RC=STATUS) if (STATUS == ESMF_SUCCESS) then call MAPL_GetPointer(GIM(I), FROCEAN, 'FROCEAN', RC=STATUS) VERIFY_(STATUS) call MAPL_LocStreamFracArea( EXCH, MAPL_OCEAN, FROCEAN, RC=STATUS) VERIFY_(STATUS) end if end do ! Put OBIO tracers into the OCEAN's tracer bundle. !------------------------------------------------- #ifdef USE_GUEST_OCEAN call ESMF_StateGet(GIM(OCEAN), 'TR', BUNDLE, RC=STATUS) VERIFY_(STATUS) call MAPL_GridCompGetFriendlies(GCS(OBIO),"OCEAN", BUNDLE, RC=STATUS ) VERIFY_(STATUS) #endif ! All Done !--------- call MAPL_TimerOff(MAPL,"INITIALIZE") call MAPL_TimerOff(MAPL,"TOTAL" ) RETURN_(ESMF_SUCCESS) end subroutine Initialize !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !BOP ! !IROUTINE: RUN -- Run method for the Ogcm component ! !INTERFACE: subroutine RUN ( GC, IMPORT, EXPORT, CLOCK, RC ) ! !ARGUMENTS: type(ESMF_GridComp), intent(inout) :: GC ! Gridded component type(ESMF_State), intent(inout) :: IMPORT ! Import state type(ESMF_State), intent(inout) :: EXPORT ! Export state type(ESMF_Clock), intent(inout) :: CLOCK ! The clock integer, optional, intent( out) :: RC ! Error code: ! !DESCRIPTION: Periodically refreshes the ozone mixing ratios. !EOP ! ErrLog Variables character(len=ESMF_MAXSTR) :: IAm integer :: STATUS character(len=ESMF_MAXSTR) :: COMP_NAME ! Locals type (MAPL_MetaComp), pointer :: MAPL type (ESMF_GridComp), pointer :: GCS(:) type (ESMF_State), pointer :: GIM(:) type (ESMF_State), pointer :: GEX(:) type (MAPL_LocStream) :: EXCHGrid logical :: FRIENDLY type(ESMF_FIELD) :: FIELD ! Pointers to imports (All tiled) real, pointer, dimension(:) :: TAUXW real, pointer, dimension(:) :: TAUYW real, pointer, dimension(:) :: TAUXI real, pointer, dimension(:) :: TAUYI real, pointer, dimension(:) :: USTR3 real, pointer, dimension(:) :: UU real, pointer, dimension(:) :: PS real, pointer, dimension(:) :: PENUVR real, pointer, dimension(:) :: PENUVF real, pointer, dimension(:) :: PENPAR real, pointer, dimension(:) :: PENPAF real, pointer, dimension(:) :: TW real, pointer, dimension(:) :: HW real, pointer, dimension(:) :: SW real, pointer, dimension(:) :: HI real, pointer, dimension(:) :: SI real, pointer, dimension(:) :: DISCHARGE real, pointer, dimension(:) :: CO2SC real, pointer, dimension(:,:) :: DUDP real, pointer, dimension(:,:) :: DUWT real, pointer, dimension(:,:) :: DUSD real, pointer, dimension(:,:) :: BCDP real, pointer, dimension(:,:) :: BCWT real, pointer, dimension(:,:) :: OCDP real, pointer, dimension(:,:) :: OCWT real, pointer, dimension(:,:) :: FSWBAND real, pointer, dimension(:,:) :: FSWBANDNA #ifndef USE_CICE real, pointer, dimension(:) :: TI #else #ifndef DATAATM real, pointer, dimension(:) :: DAIDTD real, pointer, dimension(:) :: DVIDTD #endif real, pointer, dimension(:,:) :: TI real, pointer, dimension(:,:) :: FR real, pointer, dimension(:,:) :: VOLICE real, pointer, dimension(:,:) :: VOLSNO real, pointer, dimension(:,:) :: TAUAGE real, pointer, dimension(:,:) :: MPOND real, pointer, dimension(:,:,:) :: ERGICE real, pointer, dimension(:,:,:) :: ERGSNO real, pointer, dimension(:) :: TAUXIBOT real, pointer, dimension(:) :: TAUYIBOT #endif ! Pointers to ocn grid versions real, pointer, dimension(:,:) :: TAUXIO => null() real, pointer, dimension(:,:) :: TAUYIO => null() real, pointer, dimension(:,:) :: TAUXWO => null() real, pointer, dimension(:,:) :: TAUYWO => null() real, pointer, dimension(:,:) :: USTR3O => null() real, pointer, dimension(:,:) :: PSO => null() real, pointer, dimension(:,:) :: USTR3B => null() real, pointer, dimension(:,:) :: UUB => null() real, pointer, dimension(:,:) :: PSB => null() real, pointer, dimension(:,:) :: CO2SCB => null() real, pointer, dimension(:,:,:) :: DUDPB => null() real, pointer, dimension(:,:,:) :: DUWTB => null() real, pointer, dimension(:,:,:) :: DUSDB => null() real, pointer, dimension(:,:,:) :: BCDPB => null() real, pointer, dimension(:,:,:) :: BCWTB => null() real, pointer, dimension(:,:,:) :: OCDPB => null() real, pointer, dimension(:,:,:) :: OCWTB => null() real, pointer, dimension(:,:,:) :: FSWBANDR => null() real, pointer, dimension(:,:,:) :: FSWBANDNAR => null() real, pointer, dimension(:,:) :: PENUVRO real, pointer, dimension(:,:) :: PENUVFO real, pointer, dimension(:,:) :: PENPARO real, pointer, dimension(:,:) :: PENPAFO #ifdef USE_GUEST_OCEAN real, pointer, dimension(:,:) :: PENUVRM real, pointer, dimension(:,:) :: PENUVFM real, pointer, dimension(:,:) :: PENPARM real, pointer, dimension(:,:) :: PENPAFM real, pointer, dimension(:,:) :: DISCHARGEO #endif #ifdef USE_CICE real, pointer, dimension(:,:) :: TWI real, pointer, dimension(:,:) :: HWI real, pointer, dimension(:,:) :: SWI #endif real, pointer, dimension(:,:) :: TWO real, pointer, dimension(:,:) :: HWO real, pointer, dimension(:,:) :: SWO real, pointer, dimension(:,:) :: UWO real, pointer, dimension(:,:) :: VWO real, pointer, dimension(:,:) :: HIO real, pointer, dimension(:,:) :: SIO real, pointer, dimension(:,:) :: UIO real, pointer, dimension(:,:) :: VIO real, pointer, dimension(:,:) :: KPARO real, pointer, dimension(:,:) :: TS_FOUNDO #ifndef USE_CICE real, pointer, dimension(:,:) :: FRO real, pointer, dimension(:,:) :: TIO #else real, pointer, dimension(:,:) :: TAUXIBOTO real, pointer, dimension(:,:) :: TAUYIBOTO real, pointer, dimension(:,:) :: UWBO real, pointer, dimension(:,:) :: VWBO #ifndef DATAATM real, pointer, dimension(:,:) :: DAIDTDO real, pointer, dimension(:,:) :: DVIDTDO #endif real, pointer, dimension(:,:,:) :: TIO real, pointer, dimension(:,:,:) :: FRI real, pointer, dimension(:,:,:) :: FRO real, pointer, dimension(:,:,:) :: VOLICEO real, pointer, dimension(:,:,:) :: VOLSNOO real, pointer, dimension(:,:,:) :: TAUAGEO real, pointer, dimension(:,:,:) :: MPONDO real, pointer, dimension(:,:,:) :: ERGICEO real, pointer, dimension(:,:,:) :: ERGSNOO #endif ! Pointers to exports real, pointer, dimension(:) :: UW real, pointer, dimension(:) :: VW real, pointer, dimension(:) :: UI real, pointer, dimension(:) :: VI real, pointer, dimension(:) :: KPAR real, pointer, dimension(:) :: TS_FOUND integer :: iUseInterp logical :: UseInterp integer :: N, K, I, J #ifndef USE_CICE real, pointer, dimension(:) :: FR #endif !============================================================================= ! Begin... ! Get the target components name and set-up traceback handle. ! ----------------------------------------------------------- Iam = 'Run' call ESMF_GridCompGet( GC, name=COMP_NAME, RC=STATUS ) VERIFY_(STATUS) Iam = trim(COMP_NAME) // Iam ! Get my internal MAPL_Generic state !----------------------------------- call MAPL_GetObjectFromGC ( GC, MAPL, RC=STATUS) VERIFY_(STATUS) ! Start Total timer !------------------ call MAPL_TimerOn(MAPL,"TOTAL") call MAPL_TimerOn(MAPL,"RUN" ) ! Get parameters from generic state. !----------------------------------- call MAPL_Get(MAPL, & ExchangeGrid = ExchGrid, & GIM = GIM, & GEX = GEX, & GCS = GCS, & RC=STATUS ) VERIFY_(STATUS) ! Pointers to imports !-------------------- call MAPL_GetPointer(IMPORT, TAUXW , 'TAUXW' , RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(IMPORT, TAUYW , 'TAUYW' , RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(IMPORT, TAUXI , 'TAUXI' , RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(IMPORT, TAUYI , 'TAUYI' , RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(IMPORT, USTR3 , 'OUSTAR3', RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(IMPORT, UU , 'UU', RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(IMPORT, PS , 'PS' , RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(IMPORT, PENUVR , 'PENUVR' , RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(IMPORT, PENUVF , 'PENUVF' , RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(IMPORT, PENPAR , 'PENPAR' , RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(IMPORT, PENPAF , 'PENPAF' , RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(IMPORT, DISCHARGE, 'DISCHRG', RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(IMPORT, TW , 'TW' , RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(IMPORT, HW , 'HW' , RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(IMPORT, SW , 'SW' , RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(IMPORT, TI , 'TI' , RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(IMPORT, HI , 'HI' , RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(IMPORT, SI , 'SI' , RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(IMPORT, CO2SC , 'CO2SC' , RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(IMPORT, DUDP , 'DUDP' , RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(IMPORT, DUWT , 'DUWT' , RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(IMPORT, DUSD , 'DUSD' , RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(IMPORT, BCDP , 'BCDP' , RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(IMPORT, BCWT , 'BCWT' , RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(IMPORT, OCDP , 'OCDP' , RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(IMPORT, OCWT , 'OCWT' , RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(IMPORT, FSWBAND , 'FSWBAND' , RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(IMPORT, FSWBANDNA , 'FSWBANDNA' , RC=STATUS) VERIFY_(STATUS) #ifdef USE_CICE call MAPL_GetPointer(IMPORT, FR , 'FRACICE' , RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(IMPORT, VOLICE , 'VOLICE' , RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(IMPORT, VOLSNO , 'VOLSNO' , RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(IMPORT, ERGICE , 'ERGICE' , RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(IMPORT, ERGSNO , 'ERGSNO' , RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(IMPORT, TAUAGE , 'TAUAGE' , RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(IMPORT, MPOND , 'MPOND' , RC=STATUS) VERIFY_(STATUS) #ifndef DATAATM call MAPL_GetPointer(IMPORT, DAIDTD , 'DAIDTD' , RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(IMPORT, DVIDTD , 'DVIDTD' , RC=STATUS) VERIFY_(STATUS) #endif #endif ! Verify that the saltwater variables are friendly to both ocean and seaice !-------------------------------------------------------------------------- call ESMF_StateGet (IMPORT, 'TW', FIELD, RC=STATUS) VERIFY_(STATUS) call ESMF_AttributeGet (FIELD, NAME="FriendlyToOCEAN" , VALUE=FRIENDLY, RC=STATUS) VERIFY_(STATUS) ASSERT_(FRIENDLY) call ESMF_AttributeGet (FIELD, NAME="FriendlyToSEAICE", VALUE=FRIENDLY, RC=STATUS) VERIFY_(STATUS) ASSERT_(FRIENDLY) call ESMF_StateGet (IMPORT, 'HW', FIELD, RC=STATUS) VERIFY_(STATUS) call ESMF_AttributeGet (FIELD, NAME="FriendlyToOCEAN" , VALUE=FRIENDLY, RC=STATUS) VERIFY_(STATUS) ASSERT_(FRIENDLY) call ESMF_AttributeGet (FIELD, NAME="FriendlyToSEAICE", VALUE=FRIENDLY, RC=STATUS) VERIFY_(STATUS) ASSERT_(FRIENDLY) call ESMF_StateGet (IMPORT, 'SW', FIELD, RC=STATUS) VERIFY_(STATUS) call ESMF_AttributeGet (FIELD, NAME="FriendlyToOCEAN" , VALUE=FRIENDLY, RC=STATUS) VERIFY_(STATUS) ASSERT_(FRIENDLY) call ESMF_AttributeGet (FIELD, NAME="FriendlyToSEAICE", VALUE=FRIENDLY, RC=STATUS) VERIFY_(STATUS) ASSERT_(FRIENDLY) ! Verify that the saltwater ice variables are friendly to seaice !--------------------------------------------------------------- call ESMF_StateGet (IMPORT, 'TI', FIELD, RC=STATUS) VERIFY_(STATUS) call ESMF_AttributeGet (FIELD, NAME="FriendlyToSEAICE", VALUE=FRIENDLY, RC=STATUS) VERIFY_(STATUS) ASSERT_(FRIENDLY) call ESMF_StateGet (IMPORT, 'SI', FIELD, RC=STATUS) VERIFY_(STATUS) call ESMF_AttributeGet (FIELD, NAME="FriendlyToSEAICE", VALUE=FRIENDLY, RC=STATUS) VERIFY_(STATUS) ASSERT_(FRIENDLY) #ifndef USE_CICE call ESMF_StateGet (IMPORT, 'HI', FIELD, RC=STATUS) VERIFY_(STATUS) call ESMF_AttributeGet (FIELD, NAME="FriendlyToSEAICE", VALUE=FRIENDLY, RC=STATUS) VERIFY_(STATUS) ASSERT_(FRIENDLY) #else call ESMF_StateGet (IMPORT, 'FRACICE', FIELD, RC=STATUS) VERIFY_(STATUS) call ESMF_AttributeGet (FIELD, NAME="FriendlyToSEAICE", VALUE=FRIENDLY, RC=STATUS) VERIFY_(STATUS) ASSERT_(FRIENDLY) call ESMF_AttributeGet (FIELD, NAME="FriendlyToOCEAN", VALUE=FRIENDLY, RC=STATUS) VERIFY_(STATUS) ASSERT_(FRIENDLY) call ESMF_StateGet (IMPORT, 'VOLICE', FIELD, RC=STATUS) VERIFY_(STATUS) call ESMF_AttributeGet (FIELD, NAME="FriendlyToSEAICE", VALUE=FRIENDLY, RC=STATUS) VERIFY_(STATUS) ASSERT_(FRIENDLY) call ESMF_StateGet (IMPORT, 'VOLSNO', FIELD, RC=STATUS) VERIFY_(STATUS) call ESMF_AttributeGet (FIELD, NAME="FriendlyToSEAICE", VALUE=FRIENDLY, RC=STATUS) VERIFY_(STATUS) ASSERT_(FRIENDLY) call ESMF_StateGet (IMPORT, 'ERGICE', FIELD, RC=STATUS) VERIFY_(STATUS) call ESMF_AttributeGet (FIELD, NAME="FriendlyToSEAICE", VALUE=FRIENDLY, RC=STATUS) VERIFY_(STATUS) ASSERT_(FRIENDLY) call ESMF_StateGet (IMPORT, 'ERGSNO', FIELD, RC=STATUS) VERIFY_(STATUS) call ESMF_AttributeGet (FIELD, NAME="FriendlyToSEAICE", VALUE=FRIENDLY, RC=STATUS) VERIFY_(STATUS) ASSERT_(FRIENDLY) call ESMF_StateGet (IMPORT, 'TAUAGE', FIELD, RC=STATUS) VERIFY_(STATUS) call ESMF_AttributeGet (FIELD, NAME="FriendlyToSEAICE", VALUE=FRIENDLY, RC=STATUS) VERIFY_(STATUS) ASSERT_(FRIENDLY) call ESMF_StateGet (IMPORT, 'MPOND', FIELD, RC=STATUS) VERIFY_(STATUS) call ESMF_AttributeGet (FIELD, NAME="FriendlyToSEAICE", VALUE=FRIENDLY, RC=STATUS) VERIFY_(STATUS) ASSERT_(FRIENDLY) #endif ! Children's Imports !------------------- call MAPL_GetPointer(GIM(SEAICE), TAUXIO , 'TAUX', notfoundOK=.true., RC=STATUS); VERIFY_(STATUS) call MAPL_GetPointer(GIM(SEAICE), TAUYIO , 'TAUY', notfoundOK=.true., RC=STATUS); VERIFY_(STATUS) call MAPL_GetPointer(GIM(OCEAN ), TAUXWO , 'TAUX', notfoundOK=.true., RC=STATUS); VERIFY_(STATUS) call MAPL_GetPointer(GIM(OCEAN ), TAUYWO , 'TAUY', notfoundOK=.true., RC=STATUS); VERIFY_(STATUS) call MAPL_GetPointer(GIM(OCEAN ), USTR3O , 'OUSTAR3', notfoundOK=.true., RC=STATUS); VERIFY_(STATUS) call MAPL_GetPointer(GIM(OCEAN ), PSO , 'PS' , notfoundOK=.true., RC=STATUS); VERIFY_(STATUS) call MAPL_GetPointer(GIM(OBIO ), USTR3B , 'OUSTAR3' , notfoundOK=.true., RC=STATUS); VERIFY_(STATUS) call MAPL_GetPointer(GIM(OBIO ), UUB , 'UU' , notfoundOK=.true., RC=STATUS); VERIFY_(STATUS) call MAPL_GetPointer(GIM(OBIO ), PSB , 'PS' , notfoundOK=.true., RC=STATUS); VERIFY_(STATUS) call MAPL_GetPointer(GIM(OBIO ), CO2SCB , 'CO2SC' , notfoundOK=.true., RC=STATUS); VERIFY_(STATUS) call MAPL_GetPointer(GIM(OBIO ), DUDPB , 'DUDP' , notfoundOK=.true., RC=STATUS); VERIFY_(STATUS) call MAPL_GetPointer(GIM(OBIO ), DUWTB , 'DUWT' , notfoundOK=.true., RC=STATUS); VERIFY_(STATUS) call MAPL_GetPointer(GIM(OBIO ), DUSDB , 'DUSD' , notfoundOK=.true., RC=STATUS); VERIFY_(STATUS) call MAPL_GetPointer(GIM(OBIO ), BCDPB , 'BCDP' , notfoundOK=.true., RC=STATUS); VERIFY_(STATUS) call MAPL_GetPointer(GIM(OBIO ), BCWTB , 'BCWT' , notfoundOK=.true., RC=STATUS); VERIFY_(STATUS) call MAPL_GetPointer(GIM(OBIO ), OCDPB , 'OCDP' , notfoundOK=.true., RC=STATUS); VERIFY_(STATUS) call MAPL_GetPointer(GIM(OBIO ), OCWTB , 'OCWT' , notfoundOK=.true., RC=STATUS); VERIFY_(STATUS) call MAPL_GetPointer(GIM(ORAD ), FSWBANDR , 'FSWBAND' , notfoundOK=.true., RC=STATUS); VERIFY_(STATUS) call MAPL_GetPointer(GIM(ORAD ), FSWBANDNAR , 'FSWBANDNA' , notfoundOK=.true., RC=STATUS); VERIFY_(STATUS) #ifdef USE_GUEST_OCEAN call MAPL_GetPointer(GIM(OCEAN ), PENUVRM , 'PENUVR', RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(GIM(OCEAN ), PENUVFM , 'PENUVF', RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(GIM(OCEAN ), PENPARM , 'PENPAR', RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(GIM(OCEAN ), PENPAFM , 'PENPAF', RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(GIM(OCEAN ), DISCHARGEO, 'DISCHARGE', RC=STATUS) VERIFY_(STATUS) #endif call MAPL_GetPointer(GIM(ORAD ), PENUVRO , 'PENUVR', RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(GIM(ORAD ), PENUVFO , 'PENUVF', RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(GIM(ORAD ), PENPARO , 'PENPAR', RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(GIM(ORAD ), PENPAFO , 'PENPAF', RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(GIM(OCEAN ), TWO , 'TW' , RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(GIM(OCEAN ), HWO , 'HW' , RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(GIM(OCEAN ), SWO , 'SW' , RC=STATUS) VERIFY_(STATUS) #ifdef USE_CICE call MAPL_GetPointer(GIM(SEAICE), TWI , 'TW' , RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(GIM(SEAICE), HWI , 'HW' , RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(GIM(SEAICE), SWI , 'SW' , RC=STATUS) VERIFY_(STATUS) #endif call MAPL_GetPointer(GIM(SEAICE), TIO , 'TI' , RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(GIM(SEAICE), SIO , 'SI' , RC=STATUS) VERIFY_(STATUS) #ifdef USE_CICE !call MAPL_GetPointer(GIM(OCEAN ), FRI , 'FRACICE', RC=STATUS) !VERIFY_(STATUS) call MAPL_GetPointer(GIM(SEAICE), FRO , 'FRACICE', RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(GIM(SEAICE), VOLICEO , 'VOLICE' , RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(GIM(SEAICE), VOLSNOO , 'VOLSNO' , RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(GIM(SEAICE), ERGICEO , 'ERGICE' , RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(GIM(SEAICE), ERGSNOO , 'ERGSNO' , RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(GIM(SEAICE), TAUAGEO , 'TAUAGE' , RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(GIM(SEAICE), MPONDO , 'MPOND' , RC=STATUS) VERIFY_(STATUS) #ifndef DATAATM call MAPL_GetPointer(GEX(SEAICE), DAIDTDO ,'DAIDTD' , alloc=.true., RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(GEX(SEAICE), DVIDTDO ,'DVIDTD' , alloc=.true., RC=STATUS) VERIFY_(STATUS) #endif #else call MAPL_GetPointer(GIM(SEAICE), HIO , 'HI' , RC=STATUS) VERIFY_(STATUS) #endif ! Transform imports to the ocean grid !------------------------------------ if(associated(TAUXIO)) then call MAPL_LocStreamTransform( ExchGrid, TAUXIO , TAUXI , RC=STATUS) VERIFY_(STATUS) endif if(associated(TAUYIO)) then call MAPL_LocStreamTransform( ExchGrid, TAUYIO , TAUYI , RC=STATUS) VERIFY_(STATUS) endif if(associated(TAUXWO)) then call MAPL_LocStreamTransform( ExchGrid, TAUXWO , TAUXW , RC=STATUS) VERIFY_(STATUS) endif if(associated(TAUYWO)) then call MAPL_LocStreamTransform( ExchGrid, TAUYWO , TAUYW , RC=STATUS) VERIFY_(STATUS) endif if(associated(USTR3O)) then call MAPL_LocStreamTransform( ExchGrid, USTR3O , USTR3 , RC=STATUS) VERIFY_(STATUS) endif if(associated(PSO)) then call MAPL_LocStreamTransform( ExchGrid, PSO , PS , RC=STATUS) VERIFY_(STATUS) endif if(associated(USTR3B)) then call MAPL_LocStreamTransform( ExchGrid, USTR3B , USTR3 , RC=STATUS) VERIFY_(STATUS) endif if(associated(UUB)) then call MAPL_LocStreamTransform( ExchGrid, UUB , UU , RC=STATUS) VERIFY_(STATUS) endif if(associated(PSB)) then call MAPL_LocStreamTransform( ExchGrid, PSB , PS , RC=STATUS) VERIFY_(STATUS) endif if(associated(CO2SCB)) then call MAPL_LocStreamTransform( ExchGrid, CO2SCB , CO2SC , RC=STATUS) VERIFY_(STATUS) endif if(associated(DUDPB)) then do N = 1, NUM_DUDP call MAPL_LocStreamTransform( ExchGrid, DUDPB(:,:,N), DUDP(:,N), RC=STATUS ) VERIFY_(STATUS) end do endif if(associated(DUWTB)) then do N = 1, NUM_DUWT call MAPL_LocStreamTransform( ExchGrid, DUWTB(:,:,N), DUWT(:,N), RC=STATUS ) VERIFY_(STATUS) end do endif if(associated(DUSDB)) then do N = 1, NUM_DUSD call MAPL_LocStreamTransform( ExchGrid, DUSDB(:,:,N), DUSD(:,N), RC=STATUS ) VERIFY_(STATUS) end do endif if(associated(BCDPB)) then do N = 1, NUM_BCDP call MAPL_LocStreamTransform( ExchGrid, BCDPB(:,:,N), BCDP(:,N), RC=STATUS ) VERIFY_(STATUS) end do endif if(associated(BCWTB)) then do N = 1, NUM_BCWT call MAPL_LocStreamTransform( ExchGrid, BCWTB(:,:,N), BCWT(:,N), RC=STATUS ) VERIFY_(STATUS) end do endif if(associated(OCDPB)) then do N = 1, NUM_OCDP call MAPL_LocStreamTransform( ExchGrid, OCDPB(:,:,N), OCDP(:,N), RC=STATUS ) VERIFY_(STATUS) end do endif if(associated(OCWTB)) then do N = 1, NUM_OCWT call MAPL_LocStreamTransform( ExchGrid, OCWTB(:,:,N), OCWT(:,N), RC=STATUS ) VERIFY_(STATUS) end do endif if(associated(FSWBANDR)) then do N = 1, NB_CHOU call MAPL_LocStreamTransform( ExchGrid, FSWBANDR(:,:,N), FSWBAND(:,N), RC=STATUS ) VERIFY_(STATUS) end do endif if(associated(FSWBANDNAR)) then do N = 1, NB_CHOU call MAPL_LocStreamTransform( ExchGrid, FSWBANDNAR(:,:,N), FSWBANDNA(:,N), RC=STATUS ) VERIFY_(STATUS) end do endif call MAPL_LocStreamTransform( ExchGrid, PENUVRO, PENUVR, RC=STATUS) VERIFY_(STATUS) call MAPL_LocStreamTransform( ExchGrid, PENUVFO, PENUVF, RC=STATUS) VERIFY_(STATUS) call MAPL_LocStreamTransform( ExchGrid, PENPARO, PENPAR, RC=STATUS) VERIFY_(STATUS) call MAPL_LocStreamTransform( ExchGrid, PENPAFO, PENPAF, RC=STATUS) VERIFY_(STATUS) #ifdef USE_GUEST_OCEAN call MAPL_LocStreamTransform( ExchGrid, DISCHARGEO, DISCHARGE, RC=STATUS) VERIFY_(STATUS) PENUVRM= PENUVRO PENUVFM= PENUVFO PENPARM= PENPARO PENPAFM= PENPAFO #endif call MAPL_LocStreamTransform( ExchGrid, TWO , TW , RC=STATUS) VERIFY_(STATUS) call MAPL_LocStreamTransform( ExchGrid, HWO , HW , RC=STATUS) VERIFY_(STATUS) call MAPL_LocStreamTransform( ExchGrid, SWO , SW , RC=STATUS) VERIFY_(STATUS) #ifdef USE_CICE call MAPL_LocStreamTransform( ExchGrid, TWI , TW , RC=STATUS) VERIFY_(STATUS) call MAPL_LocStreamTransform( ExchGrid, HWI , HW , RC=STATUS) VERIFY_(STATUS) call MAPL_LocStreamTransform( ExchGrid, SWI , SW , RC=STATUS) VERIFY_(STATUS) #endif call MAPL_LocStreamTransform( ExchGrid, SIO , SI , RC=STATUS) VERIFY_(STATUS) #ifndef USE_CICE call MAPL_LocStreamTransform( ExchGrid, TIO , TI , RC=STATUS) VERIFY_(STATUS) call MAPL_LocStreamTransform( ExchGrid, HIO , HI , RC=STATUS) VERIFY_(STATUS) #else do n=1,NUM_ICE_CATEGORIES call MAPL_LocStreamTransform( ExchGrid, TIO(:,:,N), TI(:,N), RC=STATUS) VERIFY_(STATUS) call MAPL_LocStreamTransform( ExchGrid, FRO(:,:,N), FR(:,N), RC=STATUS) VERIFY_(STATUS) !call MAPL_LocStreamTransform( ExchGrid, FRI(:,:,N), FR(:,N), RC=STATUS) !VERIFY_(STATUS) call MAPL_LocStreamTransform( ExchGrid, VOLICEO(:,:,N), & VOLICE (:, N), & RC=STATUS) VERIFY_(STATUS) call MAPL_LocStreamTransform( ExchGrid, VOLSNOO(:,:,N), & VOLSNO (:, N), RC=STATUS) VERIFY_(STATUS) call MAPL_LocStreamTransform( ExchGrid, TAUAGEO(:,:,N), & TAUAGE (:, N), RC=STATUS) VERIFY_(STATUS) call MAPL_LocStreamTransform( ExchGrid, MPONDO(:,:,N), & MPOND (:, N), RC=STATUS) VERIFY_(STATUS) do k=1,NUM_ICE_LAYERS call MAPL_LocStreamTransform( ExchGrid, & ERGICEO(:,:,NUM_ICE_LAYERS*(N-1)+K), & ERGICE (:, K,N), RC=STATUS) VERIFY_(STATUS) enddo do k=1,NUM_SNOW_LAYERS call MAPL_LocStreamTransform( ExchGrid, & ERGSNOO(:,:,NUM_SNOW_LAYERS*(N-1)+K), & ERGSNO (:, K,N), RC=STATUS) VERIFY_(STATUS) enddo enddo #endif ! Pointers to tile outputs !------------------------- call MAPL_GetPointer(EXPORT, UW , 'UW' , RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(EXPORT, VW , 'VW' , RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(EXPORT, UI , 'UI' , RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(EXPORT, VI , 'VI' , RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(EXPORT, KPAR , 'KPAR' , RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(EXPORT, TS_FOUND , 'TS_FOUND' , RC=STATUS) VERIFY_(STATUS) #ifndef USE_CICE call MAPL_GetPointer(EXPORT, FR , 'FRACICE', RC=STATUS) VERIFY_(STATUS) #else call MAPL_GetPointer(EXPORT, TAUXIBOT, 'TAUXIBOT', RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(EXPORT, TAUYIBOT, 'TAUYIBOT', RC=STATUS) VERIFY_(STATUS) #endif ! Mark as needed in the children by allocating !--------------------------------------------- if(associated(UW)) then call MAPL_GetPointer(GEX(OCEAN ), UWO , 'UW' , alloc=.true., RC=STATUS) VERIFY_(STATUS) end if if(associated(VW)) then call MAPL_GetPointer(GEX(OCEAN ), VWO , 'VW' , alloc=.true., RC=STATUS) VERIFY_(STATUS) end if if(associated(UI)) then call MAPL_GetPointer(GEX(SEAICE), UIO , 'UI' , alloc=.true., RC=STATUS) VERIFY_(STATUS) end if if(associated(VI)) then call MAPL_GetPointer(GEX(SEAICE), VIO , 'VI' , alloc=.true., RC=STATUS) VERIFY_(STATUS) end if if(associated(KPAR)) then call MAPL_GetPointer(GEX(ORAD ), KPARO , 'KPAR' , alloc=.true., RC=STATUS) VERIFY_(STATUS) end if if(associated(TS_FOUND)) then call MAPL_GetPointer(GEX(OCEAN ), TS_FOUNDO , 'TS_FOUND' , alloc=.true., RC=STATUS) VERIFY_(STATUS) end if #ifdef USE_CICE call MAPL_GetPointer(GEX(OCEAN ), UWBO , 'UWB' , alloc=.true., RC=STATUS) VERIFY_(STATUS) call MAPL_GetPointer(GEX(OCEAN ), VWBO , 'VWB' , alloc=.true., RC=STATUS) VERIFY_(STATUS) if(associated(FR)) then call MAPL_GetPointer(GEX(SEAICE), FRI , 'FRACICE', alloc=.true., RC=STATUS) VERIFY_(STATUS) endif if(associated(TAUXIBOT)) then call MAPL_GetPointer(GEX(SEAICE), TAUXIBOTO , 'TAUXBOT' , alloc=.true., RC=STATUS) VERIFY_(STATUS) end if if(associated(TAUYIBOT)) then call MAPL_GetPointer(GEX(SEAICE), TAUYIBOTO , 'TAUYBOT' , alloc=.true., RC=STATUS) VERIFY_(STATUS) end if #else if(associated(FR)) then call MAPL_GetPointer(GEX(SEAICE), FRO , 'FRACICE', alloc=.true., RC=STATUS) VERIFY_(STATUS) end if #endif call MAPL_TimerOff(MAPL,"TOTAL" ) call MAPL_GenericRun ( GC, IMPORT, EXPORT, CLOCK, RC=STATUS) VERIFY_(STATUS) call MAPL_TimerOn (MAPL,"TOTAL" ) call MAPL_GetResource(MAPL, iUseInterp, 'INTERPOLATE_SST:', & default=0, RC=STATUS ) VERIFY_(STATUS) useInterp = (iUseInterp /= 0) call MAPL_LocStreamTransform( ExchGrid, TW , TWO , & INTERP=useInterp, RC=STATUS) VERIFY_(STATUS) call MAPL_LocStreamTransform( ExchGrid, HW , HWO , RC=STATUS) VERIFY_(STATUS) call MAPL_LocStreamTransform( ExchGrid, SW , SWO , RC=STATUS) VERIFY_(STATUS) call MAPL_LocStreamTransform( ExchGrid, SI , SIO , RC=STATUS) VERIFY_(STATUS) #ifndef USE_CICE call MAPL_LocStreamTransform( ExchGrid, TI , TIO , RC=STATUS) VERIFY_(STATUS) call MAPL_LocStreamTransform( ExchGrid, HI , HIO , RC=STATUS) VERIFY_(STATUS) #else #ifndef DATAATM call MAPL_LocStreamTransform( ExchGrid, DAIDTD , DAIDTDO , RC=STATUS) VERIFY_(STATUS) call MAPL_LocStreamTransform( ExchGrid, DVIDTD , DVIDTDO , RC=STATUS) VERIFY_(STATUS) #endif do n=1,NUM_ICE_CATEGORIES call MAPL_LocStreamTransform( ExchGrid, TI(:,N), TIO(:,:,N), RC=STATUS) VERIFY_(STATUS) call MAPL_LocStreamTransform( ExchGrid, FR(:,N), FRO(:,:,N), & INTERP=useInterp, RC=STATUS) VERIFY_(STATUS) call MAPL_LocStreamTransform( ExchGrid, VOLICE (:, N), & VOLICEO(:,:,N), RC=STATUS) VERIFY_(STATUS) call MAPL_LocStreamTransform( ExchGrid, VOLSNO (:, N), & VOLSNOO(:,:,N), RC=STATUS) VERIFY_(STATUS) call MAPL_LocStreamTransform( ExchGrid, TAUAGE (:, N), & TAUAGEO(:,:,N), RC=STATUS) VERIFY_(STATUS) call MAPL_LocStreamTransform( ExchGrid, MPOND (:, N), & MPONDO(:,:,N), RC=STATUS) VERIFY_(STATUS) do k=1,NUM_ICE_LAYERS call MAPL_LocStreamTransform( ExchGrid, ERGICE (:, K,N), & ERGICEO(:,:,NUM_ICE_LAYERS*(N-1)+K),RC=STATUS) VERIFY_(STATUS) enddo do k=1,NUM_SNOW_LAYERS call MAPL_LocStreamTransform( ExchGrid, ERGSNO (:, K,N), & ERGSNOO(:,:,NUM_SNOW_LAYERS*(N-1)+K),RC=STATUS) VERIFY_(STATUS) enddo enddo #endif if(associated(UW)) then call MAPL_LocStreamTransform( ExchGrid, UW , UWO , RC=STATUS) VERIFY_(STATUS) end if if(associated(VW)) then call MAPL_LocStreamTransform( ExchGrid, VW , VWO , RC=STATUS) VERIFY_(STATUS) end if if(associated(UI)) then call MAPL_LocStreamTransform( ExchGrid, UI , UIO , RC=STATUS) VERIFY_(STATUS) end if if(associated(VI)) then call MAPL_LocStreamTransform( ExchGrid, VI , VIO , RC=STATUS) VERIFY_(STATUS) end if #ifndef USE_CICE if(associated(FR)) then call MAPL_LocStreamTransform( ExchGrid, FR , FRO , & INTERP=useInterp, RC=STATUS) VERIFY_(STATUS) end if #else if(associated(TAUXIBOT)) then call MAPL_LocStreamTransform( ExchGrid, TAUXIBOT, TAUXIBOTO, RC=STATUS) VERIFY_(STATUS) end if if(associated(TAUYIBOT)) then call MAPL_LocStreamTransform( ExchGrid, TAUYIBOT, TAUYIBOTO, RC=STATUS) VERIFY_(STATUS) end if #endif if(associated(KPAR)) then call MAPL_LocStreamTransform( ExchGrid, KPAR , KPARO , RC=STATUS) VERIFY_(STATUS) end if if(associated(TS_FOUND)) then call MAPL_LocStreamTransform( ExchGrid, TS_FOUND , TS_FOUNDO , & INTERP=useInterp, RC=STATUS) VERIFY_(STATUS) end if ! All done !----------- call MAPL_TimerOff(MAPL,"RUN" ) call MAPL_TimerOff(MAPL,"TOTAL") RETURN_(ESMF_SUCCESS) end subroutine RUN end module GEOS_OgcmGridCompMod