module seq_flds_mod !==================================================================== ! New standardized naming convention !==================================================================== ! ! --------- ! definitions: ! --------- ! state-prefix ! first 3 characters: Sx_, Sa_, Si_, Sl_, So_ ! one letter indices: x,a,l,i,o,g,r ! x => coupler (mapping, merging, atm/ocn flux calc done on coupler procs) ! a => atm ! l => lnd ! i => ice ! o => ocn ! g => glc ! r => rof ! w => wav ! ! state-name ! what follows state prefix ! ! flux-prefix ! first 5 characters: Flmn__ ! lm => between components l and m ! n => computed by component n ! example: Fioi => ice/ocn flux computed by ice ! example: Fall => atm/lnd flux computed by lnd ! If flux prefix has first letter of P (so first five characters are PFlmn_) ! then flux is passed straight through without scaling by the corresponding fraction) ! ! flux-name ! what follows flux-prefix ! ! --------- ! rules: ! --------- ! 1) states: ! a) atm attributes fields that HAVE a state-prefix of Sx_ in seq_flds_x2a_states ! rule: will merge all identical values of the state-names from ! seq_flds_i2x_states ! seq_flds_l2x_states ! seq_flds_o2x_states ! seq_flds_xao_states ! to obtain output state-name in seq_flds_x2a_states ! ! rule: to merge input states that originate in the ! lnd (l2x_a) will be scaled by the lndfrac ! ice (i2x_a) will be scaled by the icefrac ! cpl (xao_a) will be scaled by the ocnfrac ! ocn (o2x_a) will be scaled by the ocnfrac ! ! example: ! seq_flds_l2x_states = "Sl_t" ! seq_flds_i2x_states = "Si_t" ! seq_flds_o2x_states = "So_t" ! seq_flds_x2a_states = "Sx_t" ! attribute fields Sl_t, Si_t, So_t, in ! attribute vectors l2x_a, i2x_a, o2x_a will be ! merged to obtain attribute Sx_t in attribute vector x2a_a ! ! b) atm attribute fields that DO NOT HAVE a state-prefix of Sx_ in seq_flds_x2a_states ! rule: copy directly all variables that identical state-prefix ! AND state-name in ! seq_flds_i2x_states and seq_flds_x2a_states ! seq_flds_l2x_states and seq_flds_x2a_states ! seq_flds_o2x_states and seq_flds_x2a_states ! seq_flds_xao_states and seq_flds_x2a_states ! ! example ! seq_flds_i2x_states = ":Si_snowh" ! seq_flds_x2a_states = ":Si_snowh" ! attribute field of Si_snowh in i2x_a will be copied to ! attribute field Si_snowh in x2a_a ! ! 2) fluxes: ! rule: will merge all identical values of the flux-names from ! seq_flds_i2x_states ! seq_flds_l2x_states ! seq_flds_o2x_states ! seq_flds_xao_states ! to obtain output state-name in seq_flds_x2a_states ! ! rule: input flux fields that originate in the ! lnd (l2x_a) will be scaled by the lndfrac ! ice (i2x_a) will be scaled by the icefrac ! - ignore all fluxes that are ice/ocn fluxes (e.g. Fioi_) ! cpl (xao_a) will be scaled by the ocnfrac ! ocn (o2x_a) will be scaled by the ocnfrac+icefrac ! !==================================================================== ! ! New user specified fields ! !==================================================================== ! New fields that are user specidied can be added as namelist variables ! by the user in the cpl namelist seq_flds_user using the namelist variable ! array cplflds_customs. The user specified new fields must follow the ! above naming convention. ! As an example, say you want to add a new state 'foo' that is passed ! from the land to the atm - you would do this as follows ! &seq_flds_user ! cplflds_custom = 'Sa_foo->a2x', 'Sa_foo->x2a' ! / ! This would add the field 'Sa_foo' to the character strings defining the ! attribute vectors a2x and x2a. It is assumed that code would need to be ! introduced in the atm and land components to deal with this new attribute ! vector field. ! Currently, the only way to add this is to edit $CASEROOT/user_nl_cpl !==================================================================== ! ! Coupler fields use cases ! !==================================================================== ! Previously, new fields that were needed to be passed between components ! for certain compsets were specified by cpp-variables. This has been ! modified to now be use cases. The use cases are specified in the ! namelist cpl_flds_inparm and are currently triggered by the xml ! variables CCSM_VOC, CCSM_BGC and GLC_NEC. !==================================================================== use shr_kind_mod , only : CX => shr_kind_CX, CXX => shr_kind_CXX use shr_sys_mod , only : shr_sys_abort use seq_comm_mct , only : seq_comm_iamroot, seq_comm_setptrs, logunit use seq_drydep_mod , only : seq_drydep_init, seq_drydep_readnl, lnd_drydep use shr_megan_mod , only : shr_megan_readnl, shr_megan_mechcomps_n use shr_fire_emis_mod , only : shr_fire_emis_readnl, shr_fire_emis_mechcomps_n, shr_fire_emis_ztop_token use shr_carma_mod , only : shr_carma_readnl use shr_ndep_mod , only : shr_ndep_readnl use shr_flds_mod , only : seq_flds_dom_coord, seq_flds_dom_other implicit none public save interface seq_flds_lookup; module procedure & seq_flds_esmf_metadata_get end interface seq_flds_lookup integer, parameter, private :: CSS = 256 ! use longer short character integer, parameter, private :: CLL = 1024 character(len=CXX) :: seq_drydep_fields ! List of dry-deposition fields character(len=CXX) :: megan_voc_fields ! List of MEGAN VOC emission fields character(len=CXX) :: fire_emis_fields ! List of fire emission fields character(len=CX) :: carma_fields ! List of CARMA fields from lnd->atm character(len=CX) :: ndep_fields ! List of nitrogen deposition fields from atm->lnd/ocn integer :: ice_ncat ! number of sea ice thickness categories logical :: seq_flds_i2o_per_cat! .true. if select per ice thickness category fields are passed from ice to ocean logical :: add_ndep_fields ! .true. => add ndep fields !---------------------------------------------------------------------------- ! metadata !---------------------------------------------------------------------------- character(len=*),parameter :: undef = 'undefined' integer ,parameter :: nmax = 1000 ! maximum number of entries in lookup_entry integer :: n_entries = 0 ! actual number of entries in lookup_entry character(len=CSS), dimension(nmax, 4) :: lookup_entry = undef !---------------------------------------------------------------------------- ! state + flux fields !---------------------------------------------------------------------------- character(CXX) :: seq_flds_a2x_states character(CXX) :: seq_flds_a2x_fluxes character(CXX) :: seq_flds_x2a_states character(CXX) :: seq_flds_x2a_fluxes character(CXX) :: seq_flds_i2x_states character(CXX) :: seq_flds_i2x_fluxes character(CXX) :: seq_flds_x2i_states character(CXX) :: seq_flds_x2i_fluxes character(CXX) :: seq_flds_l2x_states character(CXX) :: seq_flds_l2x_states_to_glc character(CXX) :: seq_flds_l2x_fluxes character(CXX) :: seq_flds_l2x_fluxes_to_glc character(CXX) :: seq_flds_x2l_states character(CXX) :: seq_flds_x2l_states_from_glc character(CXX) :: seq_flds_x2l_fluxes character(CXX) :: seq_flds_x2l_fluxes_from_glc character(CXX) :: seq_flds_o2x_states character(CXX) :: seq_flds_o2x_fluxes character(CXX) :: seq_flds_x2o_states character(CXX) :: seq_flds_x2o_fluxes character(CXX) :: seq_flds_g2x_states character(CXX) :: seq_flds_g2x_states_to_lnd character(CXX) :: seq_flds_g2x_fluxes character(CXX) :: seq_flds_g2x_fluxes_to_lnd character(CXX) :: seq_flds_g2o_liq_fluxes character(CXX) :: seq_flds_g2o_ice_fluxes character(CXX) :: seq_flds_x2g_states character(CXX) :: seq_flds_x2g_fluxes character(CXX) :: seq_flds_w2x_states character(CXX) :: seq_flds_w2x_fluxes character(CXX) :: seq_flds_x2w_states character(CXX) :: seq_flds_x2w_fluxes character(CXX) :: seq_flds_xao_albedo character(CXX) :: seq_flds_xao_states character(CXX) :: seq_flds_xao_fluxes character(CXX) :: seq_flds_xao_diurnl ! for diurnal cycle character(CXX) :: seq_flds_r2x_states character(CXX) :: seq_flds_r2x_fluxes character(CXX) :: seq_flds_x2r_states character(CXX) :: seq_flds_x2r_fluxes character(CXX) :: seq_flds_r2o_liq_fluxes character(CXX) :: seq_flds_r2o_ice_fluxes !---------------------------------------------------------------------------- ! combined state/flux fields !---------------------------------------------------------------------------- character(CXX) :: seq_flds_dom_fields character(CXX) :: seq_flds_a2x_fields character(CXX) :: seq_flds_x2a_fields character(CXX) :: seq_flds_i2x_fields character(CXX) :: seq_flds_x2i_fields character(CXX) :: seq_flds_l2x_fields character(CXX) :: seq_flds_l2x_fields_to_glc character(CXX) :: seq_flds_x2l_fields character(CXX) :: seq_flds_x2l_fields_from_glc character(CXX) :: seq_flds_o2x_fields character(CXX) :: seq_flds_x2o_fields character(CXX) :: seq_flds_xao_fields character(CXX) :: seq_flds_r2x_fields character(CXX) :: seq_flds_x2r_fields character(CXX) :: seq_flds_g2x_fields character(CXX) :: seq_flds_g2x_fields_to_lnd character(CXX) :: seq_flds_x2g_fields character(CXX) :: seq_flds_w2x_fields character(CXX) :: seq_flds_x2w_fields !---------------------------------------------------------------------------- ! component names !---------------------------------------------------------------------------- character(32) :: atmname='atm' character(32) :: ocnname='ocn' character(32) :: icename='ice' character(32) :: lndname='lnd' character(32) :: glcname='glc' character(32) :: wavname='wav' character(32) :: rofname='rof' ! namelist variables logical :: nan_check_component_fields !---------------------------------------------------------------------------- contains !---------------------------------------------------------------------------- subroutine seq_flds_set(nmlfile, ID, infodata) ! !USES: use shr_file_mod, only : shr_file_getUnit, shr_file_freeUnit use shr_string_mod, only : shr_string_listIntersect use shr_mpi_mod, only : shr_mpi_bcast use glc_elevclass_mod, only : glc_elevclass_init use seq_infodata_mod, only : seq_infodata_type, seq_infodata_getdata ! !INPUT/OUTPUT PARAMETERS: character(len=*), intent(in) :: nmlfile ! Name-list filename integer , intent(in) :: ID ! seq_comm ID type(seq_infodata_type), intent(in) :: infodata ! !LOCAL VARIABLES: integer :: mpicom ! MPI communicator integer :: ierr ! I/O error code integer :: unitn ! Namelist unit number to read character(len=CSS) :: attname character(len=CSS) :: units character(len=CSS) :: longname character(len=CSS) :: stdname integer :: num character(len= 2) :: cnum character(len=CSS) :: name character(len=CSS) :: cime_model character(CXX) :: dom_coord = '' character(CXX) :: dom_other = '' character(CXX) :: a2x_states = '' character(CXX) :: a2x_fluxes = '' character(CXX) :: x2a_states = '' character(CXX) :: x2a_fluxes = '' character(CXX) :: i2x_states = '' character(CXX) :: i2x_fluxes = '' character(CXX) :: x2i_states = '' character(CXX) :: x2i_fluxes = '' character(CXX) :: l2x_states = '' character(CXX) :: l2x_states_to_glc = '' character(CXX) :: l2x_fluxes = '' character(CXX) :: l2x_fluxes_to_glc = '' character(CXX) :: x2l_states = '' character(CXX) :: x2l_states_from_glc = '' character(CXX) :: x2l_fluxes = '' character(CXX) :: x2l_fluxes_from_glc = '' character(CXX) :: o2x_states = '' character(CXX) :: o2x_fluxes = '' character(CXX) :: x2o_states = '' character(CXX) :: x2o_fluxes = '' character(CXX) :: g2x_states = '' character(CXX) :: g2x_states_to_lnd = '' character(CXX) :: g2x_fluxes = '' character(CXX) :: g2x_fluxes_to_lnd = '' character(CXX) :: g2o_liq_fluxes = '' character(CXX) :: g2o_ice_fluxes = '' character(CXX) :: x2g_states = '' character(CXX) :: x2g_fluxes = '' character(CXX) :: xao_albedo = '' character(CXX) :: xao_states = '' character(CXX) :: xao_fluxes = '' character(CXX) :: xao_diurnl = '' character(CXX) :: r2x_states = '' character(CXX) :: r2x_fluxes = '' character(CXX) :: x2r_states = '' character(CXX) :: x2r_fluxes = '' character(CXX) :: w2x_states = '' character(CXX) :: w2x_fluxes = '' character(CXX) :: x2w_states = '' character(CXX) :: x2w_fluxes = '' character(CXX) :: r2o_liq_fluxes = '' character(CXX) :: r2o_ice_fluxes = '' character(CXX) :: stringtmp = '' !------ namelist ----- character(len=CSS) :: fldname, fldflow logical :: is_state, is_flux integer :: i,n ! use cases namelists logical :: flds_co2a logical :: flds_co2b logical :: flds_co2c logical :: flds_co2_dmsa logical :: flds_bgc_oi logical :: flds_wiso integer :: glc_nec namelist /seq_cplflds_inparm/ & flds_co2a, flds_co2b, flds_co2c, flds_co2_dmsa, flds_wiso, glc_nec, & ice_ncat, seq_flds_i2o_per_cat, flds_bgc_oi, nan_check_component_fields ! user specified new fields integer, parameter :: nfldmax = 200 character(len=CLL) :: cplflds_custom(nfldmax) = '' namelist /seq_cplflds_userspec/ & cplflds_custom character(len=*),parameter :: subname = '(seq_flds_set) ' !------------------------------------------------------------------------------- call seq_comm_setptrs(ID,mpicom=mpicom) call seq_infodata_GetData(infodata, cime_model=cime_model) !--------------------------------------------------------------------------- ! Read in namelist for use cases !--------------------------------------------------------------------------- ! TODO: permit duplicates to occur - then check for this in seq_flds_add ! TODO: add entries for lookup entry table for custom fields !--------------------------------------------------------------------------- if (seq_comm_iamroot(ID)) then flds_co2a = .false. flds_co2b = .false. flds_co2c = .false. flds_co2_dmsa = .false. flds_bgc_oi = .false. flds_wiso = .false. glc_nec = 0 ice_ncat = 1 seq_flds_i2o_per_cat = .false. nan_check_component_fields = .false. unitn = shr_file_getUnit() write(logunit,"(A)") subname//': read seq_cplflds_inparm namelist from: '& //trim(nmlfile) open( unitn, file=trim(nmlfile), status='old' ) ierr = 1 do while( ierr /= 0 ) read(unitn,nml=seq_cplflds_inparm,iostat=ierr) if (ierr < 0) then call shr_sys_abort( & subname//"ERROR: namelist read returns an EOF or EOR condition" ) end if end do close(unitn) call shr_file_freeUnit( unitn ) end if call shr_mpi_bcast(flds_co2a , mpicom) call shr_mpi_bcast(flds_co2b , mpicom) call shr_mpi_bcast(flds_co2c , mpicom) call shr_mpi_bcast(flds_co2_dmsa, mpicom) call shr_mpi_bcast(flds_bgc_oi , mpicom) call shr_mpi_bcast(flds_wiso , mpicom) call shr_mpi_bcast(glc_nec , mpicom) call shr_mpi_bcast(ice_ncat , mpicom) call shr_mpi_bcast(seq_flds_i2o_per_cat, mpicom) call shr_mpi_bcast(nan_check_component_fields, mpicom) call glc_elevclass_init(glc_nec) !--------------------------------------------------------------------------- ! Read in namelists for user specified new fields !--------------------------------------------------------------------------- ! TODO: permit duplicates to occur - then check for this in seq_flds_add ! TODO: add entries for lookup entry table for custom fields !--------------------------------------------------------------------------- if (seq_comm_iamroot(ID)) then cplflds_custom(:) = ' ' unitn = shr_file_getUnit() write(logunit,"(A)") subname//': read seq_cplflds_userspec namelist from: '& //trim(nmlfile) open( unitn, file=trim(nmlfile), status='old' ) ierr = 1 do while( ierr /= 0 ) read(unitn,nml=seq_cplflds_userspec,iostat=ierr) if (ierr < 0) then call shr_sys_abort( & subname//"ERROR: namelist read returns an EOF or EOR condition" ) end if end do close(unitn) call shr_file_freeUnit( unitn ) end if do n = 1, nfldmax call shr_mpi_bcast(cplflds_custom(n), mpicom) end do ! add customized fields through coupler do n = 1,nfldmax if (cplflds_custom(n) /= ' ') then i = scan(cplflds_custom(n),'->') fldname = trim(adjustl(cplflds_custom(n)(:i-1))) fldflow = trim(adjustl(cplflds_custom(n)(i+2:))) if (fldname(1:1) == 'S') then is_state = .true. is_flux = .false. else if (fldname (1:1) == 'F') then is_state = .false. is_flux = .true. else if (fldname (1:2) == 'PF') then is_state = .false. is_flux = .true. else write(logunit,*) subname//'ERROR: fldname must start with S,F,P, not ',trim(fldname) call shr_sys_abort(subname//"ERROR: fldname must start with S, F, or P") end if select case (trim(fldflow)) case('a2x') if (is_state) call seq_flds_add(a2x_states,trim(fldname)) if (is_flux ) call seq_flds_add(a2x_fluxes,trim(fldname)) case('x2a') if (is_state) call seq_flds_add(x2a_states,trim(fldname)) if (is_flux ) call seq_flds_add(x2a_fluxes,trim(fldname)) case('l2x') if (is_state) call seq_flds_add(l2x_states,trim(fldname)) if (is_flux ) call seq_flds_add(l2x_fluxes,trim(fldname)) case('x2l') if (is_state) call seq_flds_add(x2l_states,trim(fldname)) if (is_flux ) call seq_flds_add(x2l_fluxes,trim(fldname)) case('r2x') if (is_state) call seq_flds_add(r2x_states,trim(fldname)) if (is_flux ) call seq_flds_add(r2x_fluxes,trim(fldname)) case('x2r') if (is_state) call seq_flds_add(x2r_states,trim(fldname)) if (is_flux ) call seq_flds_add(x2r_fluxes,trim(fldname)) case('i2x') if (is_state) call seq_flds_add(i2x_states,trim(fldname)) if (is_flux ) call seq_flds_add(i2x_fluxes,trim(fldname)) case('x2i') if (is_state) call seq_flds_add(x2i_states,trim(fldname)) if (is_flux ) call seq_flds_add(x2i_fluxes,trim(fldname)) case('o2x') if (is_state) call seq_flds_add(o2x_states,trim(fldname)) if (is_flux ) call seq_flds_add(o2x_fluxes,trim(fldname)) case('x2o') if (is_state) call seq_flds_add(x2o_states,trim(fldname)) if (is_flux ) call seq_flds_add(x2o_fluxes,trim(fldname)) case('g2x') if (is_state) call seq_flds_add(g2x_states,trim(fldname)) if (is_flux ) call seq_flds_add(g2x_fluxes,trim(fldname)) case('x2g') if (is_state) call seq_flds_add(x2g_states,trim(fldname)) if (is_flux ) call seq_flds_add(x2g_fluxes,trim(fldname)) case default write(logunit,*) subname//'ERROR: ',trim(cplflds_custom(n)),& ' not a recognized value' call shr_sys_abort() end select else exit end if end do !---------------------------------------------------------- ! domain coordinates !---------------------------------------------------------- call seq_flds_add(dom_coord,'lat') longname = 'latitude' stdname = 'latitude' units = 'degrees north' attname = 'lat' call metadata_set(attname, longname, stdname, units) call seq_flds_add(dom_coord,'lon') longname = 'longitude' stdname = 'longitude' units = 'degrees east' attname = 'lon' call metadata_set(attname, longname, stdname, units) call seq_flds_add(dom_coord,'hgt') longname = 'height' stdname = 'height, depth, or levels' units = 'unitless' attname = 'hgt' call metadata_set(attname, longname, stdname, units) call seq_flds_add(dom_other,'area') longname = 'cell_area_model' stdname = 'cell area from model' units = 'radian^2' attname = 'area' call metadata_set(attname, longname, stdname, units) call seq_flds_add(dom_other,'aream') longname = 'cell_area_mapping' stdname = 'cell area from mapping file' units = 'radian^2' attname = 'aream' call metadata_set(attname, longname, stdname, units) call seq_flds_add(dom_other,'mask') longname = 'mask' stdname = 'mask' units = '1' attname = 'mask' call metadata_set(attname, longname, stdname, units) call seq_flds_add(dom_other,'frac') longname = 'area_fraction' stdname = 'area fraction' units = '1' attname = 'frac' call metadata_set(attname, longname, stdname, units) !---------------------------------------------------------- ! states/fluxes from atm !---------------------------------------------------------- ! height at the lowest model level (m) call seq_flds_add(a2x_states,"Sa_z") call seq_flds_add(x2l_states,"Sa_z") call seq_flds_add(x2i_states,"Sa_z") longname = 'Height at the lowest model level' stdname = 'height' units = 'm' attname = 'Sa_z' call metadata_set(attname, longname, stdname, units) ! topographic height (m) call seq_flds_add(a2x_states,"Sa_topo") call seq_flds_add(x2l_states,"Sa_topo") longname = 'Surface height' stdname = 'height' units = 'm' attname = 'Sa_topo' call metadata_set(attname, longname, stdname, units) ! zonal wind at the lowest model level (m/s) call seq_flds_add(a2x_states,"Sa_u") call seq_flds_add(x2l_states,"Sa_u") call seq_flds_add(x2i_states,"Sa_u") call seq_flds_add(x2w_states,"Sa_u") longname = 'Zonal wind at the lowest model level' stdname = 'eastward_wind' units = 'm s-1' attname = 'Sa_u' call metadata_set(attname, longname, stdname, units) ! meridional wind at the lowest model level (m/s) call seq_flds_add(a2x_states,"Sa_v") call seq_flds_add(x2l_states,"Sa_v") call seq_flds_add(x2i_states,"Sa_v") call seq_flds_add(x2w_states,"Sa_v") longname = 'Meridional wind at the lowest model level' stdname = 'northward_wind' units = 'm s-1' attname = 'Sa_v' call metadata_set(attname, longname, stdname, units) ! temperature at the lowest model level (K) call seq_flds_add(a2x_states,"Sa_tbot") call seq_flds_add(x2l_states,"Sa_tbot") call seq_flds_add(x2i_states,"Sa_tbot") call seq_flds_add(x2w_states,"Sa_tbot") longname = 'Temperature at the lowest model level' stdname = 'air_temperature' units = 'K' attname = 'Sa_tbot' call metadata_set(attname, longname, stdname, units) ! potential temperature at the lowest model level (K) call seq_flds_add(a2x_states,"Sa_ptem") call seq_flds_add(x2l_states,"Sa_ptem") call seq_flds_add(x2i_states,"Sa_ptem") longname = 'Potential temperature at the lowest model level' stdname = 'air_potential_temperature' units = 'K' attname = 'Sa_ptem' call metadata_set(attname, longname, stdname, units) ! specific humidity at the lowest model level (kg/kg) call seq_flds_add(a2x_states,"Sa_shum") call seq_flds_add(x2l_states,"Sa_shum") call seq_flds_add(x2i_states,"Sa_shum") longname = 'Specific humidity at the lowest model level' stdname = 'specific_humidity' units = 'kg kg-1' attname = 'Sa_shum' call metadata_set(attname, longname, stdname, units) ! pressure at the lowest model level (Pa) call seq_flds_add(a2x_states,"Sa_pbot") call seq_flds_add(x2l_states,"Sa_pbot") call seq_flds_add(x2i_states,"Sa_pbot") if (trim(cime_model) == 'e3sm') then call seq_flds_add(x2o_states,"Sa_pbot") end if longname = 'Pressure at the lowest model level' stdname = 'air_pressure' units = 'Pa' attname = 'Sa_pbot' call metadata_set(attname, longname, stdname, units) ! air density at the lowest model level (kg/m**3) call seq_flds_add(a2x_states,"Sa_dens") call seq_flds_add(x2i_states,"Sa_dens") longname = 'Density at the lowest model level' stdname = 'air_density' units = 'kg m-3' attname = 'Sa_dens' call metadata_set(attname, longname, stdname, units) ! convective precipitation rate ! large-scale (stable) snow rate (water equivalent) call seq_flds_add(a2x_fluxes,"Faxa_rainc") call seq_flds_add(a2x_fluxes,"Faxa_rainl") call seq_flds_add(x2l_fluxes,"Faxa_rainc") call seq_flds_add(x2l_fluxes,"Faxa_rainl") call seq_flds_add(x2i_fluxes,"Faxa_rain" ) call seq_flds_add(x2o_fluxes,"Faxa_rain" ) units = 'kg m-2 s-1' longname = 'Convective precipitation rate' stdname = 'convective_precipitation_flux' attname = 'Faxa_rainc' call metadata_set(attname, longname, stdname, units) longname = 'Large-scale (stable) precipitation rate' stdname = 'large_scale_precipitation_flux' attname = 'Faxa_rainl' call metadata_set(attname, longname, stdname, units) longname = 'Water flux due to rain' stdname = 'rainfall_flux' attname = 'Faxa_rain' call metadata_set(attname, longname, stdname, units) ! convective snow rate (water equivalent) ! large-scale (stable) snow rate (water equivalent) call seq_flds_add(a2x_fluxes,"Faxa_snowc") call seq_flds_add(a2x_fluxes,"Faxa_snowl") call seq_flds_add(x2l_fluxes,"Faxa_snowc") call seq_flds_add(x2l_fluxes,"Faxa_snowl") call seq_flds_add(x2i_fluxes,"Faxa_snow" ) call seq_flds_add(x2o_fluxes,"Faxa_snow" ) units = 'kg m-2 s-1' longname = 'Convective snow rate (water equivalent)' stdname = 'convective_snowfall_flux' attname = 'Faxa_snowc' call metadata_set(attname, longname, stdname, units) longname = 'Large-scale (stable) snow rate (water equivalent)' stdname = 'large_scale_snowfall_flux' attname = 'Faxa_snowl' call metadata_set(attname, longname, stdname, units) longname = 'Water flux due to snow' stdname = 'surface_snow_melt_flux' attname = 'Faxa_snow' call metadata_set(attname, longname, stdname, units) ! total precipitation to ocean call seq_flds_add(x2o_fluxes,"Faxa_prec") ! derived rain+snow longname = 'Water flux (rain+snow)' stdname = 'precipitation_flux' units = 'kg m-2 s-1' attname = 'Faxa_prec' call metadata_set(attname, longname, stdname, units) ! downward longwave heat flux (W/m**2) call seq_flds_add(a2x_fluxes,"Faxa_lwdn") call seq_flds_add(x2l_fluxes,"Faxa_lwdn") call seq_flds_add(x2i_fluxes,"Faxa_lwdn") call seq_flds_add(x2o_fluxes,"Faxa_lwdn") longname = 'Downward longwave heat flux' stdname = 'downwelling_longwave_flux' units = 'W m-2' attname = 'Faxa_lwdn' call metadata_set(attname, longname, stdname, units) ! direct near-infrared incident solar radiation call seq_flds_add(a2x_fluxes,"Faxa_swndr") call seq_flds_add(x2i_fluxes,"Faxa_swndr") call seq_flds_add(x2l_fluxes,"Faxa_swndr") longname = 'Direct near-infrared incident solar radiation' stdname = 'surface_downward_direct_shortwave_flux_due_to_near_infrared_radiation' units = 'W m-2' attname = 'Faxa_swndr' call metadata_set(attname, longname, stdname, units) ! direct visible incident solar radiation call seq_flds_add(a2x_fluxes,"Faxa_swvdr") call seq_flds_add(x2i_fluxes,"Faxa_swvdr") call seq_flds_add(x2l_fluxes,"Faxa_swvdr") longname = 'Direct visible incident solar radiation' stdname = 'surface_downward_direct_shortwave_flux_due_to_visible_radiation' units = 'W m-2' attname = 'Faxa_swvdr' call metadata_set(attname, longname, stdname, units) ! diffuse near-infrared incident solar radiation call seq_flds_add(a2x_fluxes,"Faxa_swndf") call seq_flds_add(x2i_fluxes,"Faxa_swndf") call seq_flds_add(x2l_fluxes,"Faxa_swndf") longname = 'Diffuse near-infrared incident solar radiation' stdname = 'surface_downward_diffuse_shortwave_flux_due_to_near_infrared_radiation' units = 'W m-2' attname = 'Faxa_swndf' call metadata_set(attname, longname, stdname, units) ! diffuse visible incident solar radiation call seq_flds_add(a2x_fluxes,"Faxa_swvdf") call seq_flds_add(x2i_fluxes,"Faxa_swvdf") call seq_flds_add(x2l_fluxes,"Faxa_swvdf") longname = 'Diffuse visible incident solar radiation' stdname = 'surface_downward_diffuse_shortwave_flux_due_to_visible_radiation' units = 'W m-2' attname = 'Faxa_swvdf' call metadata_set(attname, longname, stdname, units) ! Net shortwave radiation call seq_flds_add(a2x_fluxes,"Faxa_swnet") ! diagnostic call seq_flds_add(l2x_fluxes,"Fall_swnet") ! diagnostic call seq_flds_add(i2x_fluxes,"Faii_swnet") ! diagnostic call seq_flds_add(i2x_fluxes,"Fioi_swpen") ! used for Foxx_swnet below call seq_flds_add(x2o_fluxes,"Foxx_swnet") ! derived using albedos, Faxa_swxxx and swpen units = 'W m-2' longname = 'Net shortwave radiation' stdname = 'surface_net_shortwave_flux' attname = 'Faxa_swnet' call metadata_set(attname, longname, stdname, units) attname = 'Fall_swnet' call metadata_set(attname, longname, stdname, units) attname = 'Faii_swnet' call metadata_set(attname, longname, stdname, units) attname = 'Foxx_swnet' call metadata_set(attname, longname, stdname, units) longname = 'Net shortwave radiation penetrating into ice and ocean' stdname = 'net_downward_shortwave_flux_in_sea_ice_due_to_penetration' attname = 'Fioi_swpen' call metadata_set(attname, longname, stdname, units) ! Black Carbon hydrophilic dry deposition call seq_flds_add(a2x_fluxes,"Faxa_bcphidry" ) call seq_flds_add(x2i_fluxes,"Faxa_bcphidry" ) call seq_flds_add(x2l_fluxes,"Faxa_bcphidry" ) call seq_flds_add(x2o_fluxes,"Faxa_bcphidry" ) longname = 'Hydrophylic black carbon dry deposition flux' stdname = 'dry_deposition_flux_of_hydrophylic_black_carbon' units = 'kg m-2 s-1' attname = 'Faxa_bcphidry' call metadata_set(attname, longname, stdname, units) ! Black Carbon hydrophobic dry deposition call seq_flds_add(a2x_fluxes,"Faxa_bcphodry" ) call seq_flds_add(x2i_fluxes,"Faxa_bcphodry" ) call seq_flds_add(x2l_fluxes,"Faxa_bcphodry" ) call seq_flds_add(x2o_fluxes,"Faxa_bcphodry") longname = 'Hydrophobic black carbon dry deposition flux' stdname = 'dry_deposition_flux_of_hydrophobic_black_carbon' units = 'kg m-2 s-1' attname = 'Faxa_bcphodry' call metadata_set(attname, longname, stdname, units) ! Black Carbon hydrophilic wet deposition call seq_flds_add(a2x_fluxes,"Faxa_bcphiwet" ) call seq_flds_add(x2i_fluxes,"Faxa_bcphiwet" ) call seq_flds_add(x2l_fluxes,"Faxa_bcphiwet" ) call seq_flds_add(x2o_fluxes,"Faxa_bcphiwet" ) longname = 'Hydrophylic black carbon wet deposition flux' stdname = 'wet_deposition_flux_of_hydrophylic_black_carbon' units = 'kg m-2 s-1' attname = 'Faxa_bcphiwet' call metadata_set(attname, longname, stdname, units) ! Organic Carbon hydrophilic dry deposition call seq_flds_add(a2x_fluxes,"Faxa_ocphidry" ) call seq_flds_add(x2i_fluxes,"Faxa_ocphidry" ) call seq_flds_add(x2l_fluxes,"Faxa_ocphidry" ) call seq_flds_add(x2o_fluxes,"Faxa_ocphidry" ) longname = 'Hydrophylic organic carbon dry deposition flux' stdname = 'dry_deposition_flux_of_hydrophylic_organic_carbon' units = 'kg m-2 s-1' attname = 'Faxa_ocphidry' call metadata_set(attname, longname, stdname, units) ! Organic Carbon hydrophobic dry deposition call seq_flds_add(a2x_fluxes,"Faxa_ocphodry" ) call seq_flds_add(x2i_fluxes,"Faxa_ocphodry" ) call seq_flds_add(x2l_fluxes,"Faxa_ocphodry" ) call seq_flds_add(x2o_fluxes,"Faxa_ocphodry" ) longname = 'Hydrophobic organic carbon dry deposition flux' stdname = 'dry_deposition_flux_of_hydrophobic_organic_carbon' units = 'kg m-2 s-1' attname = 'Faxa_ocphodry' call metadata_set(attname, longname, stdname, units) ! Organic Carbon hydrophilic wet deposition call seq_flds_add(a2x_fluxes,"Faxa_ocphiwet" ) call seq_flds_add(x2i_fluxes,"Faxa_ocphiwet" ) call seq_flds_add(x2l_fluxes,"Faxa_ocphiwet" ) call seq_flds_add(x2o_fluxes,"Faxa_ocphiwet" ) longname = 'Hydrophylic organic carbon wet deposition flux' stdname = 'wet_deposition_flux_of_hydrophylic_organic_carbon' units = 'kg m-2 s-1' attname = 'Faxa_ocphiwet' call metadata_set(attname, longname, stdname, units) ! Size 1 dust -- wet deposition call seq_flds_add(a2x_fluxes,"Faxa_dstwet1" ) call seq_flds_add(x2i_fluxes,"Faxa_dstwet1" ) call seq_flds_add(x2l_fluxes,"Faxa_dstwet1" ) call seq_flds_add(x2o_fluxes,"Faxa_dstwet1" ) longname = 'Dust wet deposition flux (size 1)' stdname = 'wet_deposition_flux_of_dust' units = 'kg m-2 s-1' attname = 'Faxa_dstwet1' call metadata_set(attname, longname, stdname, units) ! Size 2 dust -- wet deposition call seq_flds_add(a2x_fluxes,"Faxa_dstwet2" ) call seq_flds_add(x2i_fluxes,"Faxa_dstwet2" ) call seq_flds_add(x2l_fluxes,"Faxa_dstwet2" ) call seq_flds_add(x2o_fluxes,"Faxa_dstwet2" ) longname = 'Dust wet deposition flux (size 2)' stdname = 'wet_deposition_flux_of_dust' units = 'kg m-2 s-1' attname = 'Faxa_dstwet2' call metadata_set(attname, longname, stdname, units) ! Size 3 dust -- wet deposition call seq_flds_add(a2x_fluxes,"Faxa_dstwet3" ) call seq_flds_add(x2i_fluxes,"Faxa_dstwet3" ) call seq_flds_add(x2l_fluxes,"Faxa_dstwet3" ) call seq_flds_add(x2o_fluxes,"Faxa_dstwet3" ) longname = 'Dust wet deposition flux (size 3)' stdname = 'wet_deposition_flux_of_dust' units = 'kg m-2 s-1' attname = 'Faxa_dstwet3' call metadata_set(attname, longname, stdname, units) ! Size 4 dust -- wet deposition call seq_flds_add(a2x_fluxes,"Faxa_dstwet4" ) call seq_flds_add(x2i_fluxes,"Faxa_dstwet4" ) call seq_flds_add(x2l_fluxes,"Faxa_dstwet4" ) call seq_flds_add(x2o_fluxes,"Faxa_dstwet4" ) longname = 'Dust wet deposition flux (size 4)' stdname = 'wet_deposition_flux_of_dust' units = 'kg m-2 s-1' attname = 'Faxa_dstwet4' call metadata_set(attname, longname, stdname, units) ! Size 1 dust -- dry deposition call seq_flds_add(a2x_fluxes,"Faxa_dstdry1" ) call seq_flds_add(x2i_fluxes,"Faxa_dstdry1" ) call seq_flds_add(x2l_fluxes,"Faxa_dstdry1" ) call seq_flds_add(x2o_fluxes,"Faxa_dstdry1" ) longname = 'Dust dry deposition flux (size 1)' stdname = 'dry_deposition_flux_of_dust' units = 'kg m-2 s-1' attname = 'Faxa_dstdry1' call metadata_set(attname, longname, stdname, units) ! Size 2 dust -- dry deposition call seq_flds_add(a2x_fluxes,"Faxa_dstdry2" ) call seq_flds_add(x2i_fluxes,"Faxa_dstdry2" ) call seq_flds_add(x2l_fluxes,"Faxa_dstdry2" ) call seq_flds_add(x2o_fluxes,"Faxa_dstdry2" ) longname = 'Dust dry deposition flux (size 2)' stdname = 'dry_deposition_flux_of_dust' units = 'kg m-2 s-1' attname = 'Faxa_dstdry2' call metadata_set(attname, longname, stdname, units) ! Size 3 dust -- dry deposition call seq_flds_add(a2x_fluxes,"Faxa_dstdry3" ) call seq_flds_add(x2i_fluxes,"Faxa_dstdry3" ) call seq_flds_add(x2l_fluxes,"Faxa_dstdry3" ) call seq_flds_add(x2o_fluxes,"Faxa_dstdry3" ) longname = 'Dust dry deposition flux (size 3)' stdname = 'dry_deposition_flux_of_dust' units = 'kg m-2 s-1' attname = 'Faxa_dstdry3' call metadata_set(attname, longname, stdname, units) ! Size 4 dust -- dry deposition call seq_flds_add(a2x_fluxes,"Faxa_dstdry4" ) call seq_flds_add(x2i_fluxes,"Faxa_dstdry4" ) call seq_flds_add(x2l_fluxes,"Faxa_dstdry4" ) call seq_flds_add(x2o_fluxes,"Faxa_dstdry4" ) longname = 'Dust dry deposition flux (size 4)' stdname = 'dry_deposition_flux_of_dust' units = 'kg m-2 s-1' attname = 'Faxa_dstdry4' call metadata_set(attname, longname, stdname, units) !---------------------------------------------------------- ! states/fluxes to atm (and ocean) !---------------------------------------------------------- ! land/sea-ice/ocean fractions call seq_flds_add(x2a_states,'Sf_lfrac') call seq_flds_add(x2a_states,'Sf_ifrac') call seq_flds_add(x2a_states,'Sf_ofrac') longname = 'Surface land fraction' stdname = 'land_area_fraction' units = '1' attname = 'Sf_lfrac' call metadata_set(attname, longname, stdname, units) longname = 'Surface ice fraction' stdname = 'sea_ice_area_fraction' attname = 'Sf_ifrac' call metadata_set(attname, longname, stdname, units) longname = 'Surface ocean fraction' stdname = 'sea_area_fraction' attname = 'Sf_ofrac' call metadata_set(attname, longname, stdname, units) ! Direct albedo (visible radiation) call seq_flds_add(i2x_states,"Si_avsdr") call seq_flds_add(l2x_states,"Sl_avsdr") call seq_flds_add(xao_albedo,"So_avsdr") call seq_flds_add(x2a_states,"Sx_avsdr") longname = 'Direct albedo (visible radiation)' stdname = 'surface_direct_albedo_due_to_visible_radiation' units = '1' attname = 'Si_avsdr' call metadata_set(attname, longname, stdname, units) attname = 'Sl_avsdr' call metadata_set(attname, longname, stdname, units) attname = 'So_avsdr' call metadata_set(attname, longname, stdname, units) attname = 'Sx_avsdr' call metadata_set(attname, longname, stdname, units) ! Direct albedo (near-infrared radiation) call seq_flds_add(i2x_states,"Si_anidr") call seq_flds_add(l2x_states,"Sl_anidr") call seq_flds_add(xao_albedo,"So_anidr") call seq_flds_add(x2a_states,"Sx_anidr") longname = 'Direct albedo (near-infrared radiation)' stdname = 'surface_direct_albedo_due_to_near_infrared_radiation' units = '1' attname = 'Si_anidr' call metadata_set(attname, longname, stdname, units) attname = 'Sl_anidr' call metadata_set(attname, longname, stdname, units) attname = 'So_anidr' call metadata_set(attname, longname, stdname, units) attname = 'Sx_anidr' call metadata_set(attname, longname, stdname, units) ! Diffuse albedo (visible radiation) call seq_flds_add(i2x_states,"Si_avsdf") call seq_flds_add(l2x_states,"Sl_avsdf") call seq_flds_add(xao_albedo,"So_avsdf") call seq_flds_add(x2a_states,"Sx_avsdf") longname = 'Diffuse albedo (visible radiation)' stdname = 'surface_diffuse_albedo_due_to_visible_radiation' units = '1' attname = 'Si_avsdf' call metadata_set(attname, longname, stdname, units) attname = 'Sl_avsdf' call metadata_set(attname, longname, stdname, units) attname = 'So_avsdf' call metadata_set(attname, longname, stdname, units) attname = 'Sx_avsdf' call metadata_set(attname, longname, stdname, units) ! Diffuse albedo (near-infrared radiation) call seq_flds_add(i2x_states,"Si_anidf") call seq_flds_add(l2x_states,"Sl_anidf") call seq_flds_add(xao_albedo,"So_anidf") call seq_flds_add(x2a_states,"Sx_anidf") longname = 'Diffuse albedo (near-infrared radiation)' stdname = 'surface_diffuse_albedo_due_to_near_infrared_radiation' units = '1' attname = 'Si_anidf' call metadata_set(attname, longname, stdname, units) attname = 'Sl_anidf' call metadata_set(attname, longname, stdname, units) attname = 'So_anidf' call metadata_set(attname, longname, stdname, units) attname = 'Sx_anidf' call metadata_set(attname, longname, stdname, units) ! Reference temperature at 2 meters call seq_flds_add(l2x_states,"Sl_tref") call seq_flds_add(i2x_states,"Si_tref") call seq_flds_add(xao_states,"So_tref") call seq_flds_add(x2a_states,"Sx_tref") longname = 'Reference temperature at 2 meters' stdname = 'air_temperature' units = 'K' attname = 'Si_tref' call metadata_set(attname, longname, stdname, units) attname = 'Sl_tref' call metadata_set(attname, longname, stdname, units) attname = 'So_tref' call metadata_set(attname, longname, stdname, units) attname = 'Sx_tref' call metadata_set(attname, longname, stdname, units) ! Reference specific humidity at 2 meters call seq_flds_add(l2x_states,"Sl_qref") call seq_flds_add(i2x_states,"Si_qref") call seq_flds_add(xao_states,"So_qref") call seq_flds_add(x2a_states,"Sx_qref") longname = 'Reference specific humidity at 2 meters' stdname = 'specific_humidity' units = 'kg kg-1' attname = 'Si_qref' call metadata_set(attname, longname, stdname, units) attname = 'Sl_qref' call metadata_set(attname, longname, stdname, units) attname = 'So_qref' call metadata_set(attname, longname, stdname, units) attname = 'Sx_qref' call metadata_set(attname, longname, stdname, units) ! Surface temperature call seq_flds_add(l2x_states,"Sl_t") call seq_flds_add(i2x_states,"Si_t") call seq_flds_add(x2a_states,"So_t") call seq_flds_add(x2a_states,"Sx_t") longname = 'Surface temperature' stdname = 'surface_temperature' units = 'K' attname = 'Si_t' call metadata_set(attname, longname, stdname, units) attname = 'Sl_t' call metadata_set(attname, longname, stdname, units) attname = 'So_t' call metadata_set(attname, longname, stdname, units) attname = 'Sx_t' call metadata_set(attname, longname, stdname, units) ! Surface friction velocity in land (land/atm only) call seq_flds_add(l2x_states,"Sl_fv") call seq_flds_add(x2a_states,"Sl_fv") longname = 'Surface fraction velocity in land' stdname = 'fraction_velocity' units = 'm s-1' attname = 'Sl_fv' call metadata_set(attname, longname, stdname, units) ! Aerodynamical resistance (land/atm only) call seq_flds_add(l2x_states,"Sl_ram1") call seq_flds_add(x2a_states,"Sl_ram1") longname = 'aerodynamic resistance' stdname = 'aerodynamic_resistance' attname = 'SI_ram1' units = 's/m' call metadata_set(attname, longname, stdname, units) ! Surface snow water equivalent (land/atm only) call seq_flds_add(l2x_states,"Sl_snowh") call seq_flds_add(x2a_states,"Sl_snowh") longname = 'Surface snow water equivalent' stdname = 'surface_snow_water_equivalent' units = 'm' attname = 'Sl_snowh' call metadata_set(attname, longname, stdname, units) ! Surface snow depth (ice/atm only) call seq_flds_add(i2x_states,"Si_snowh") call seq_flds_add(x2a_states,"Si_snowh") longname = 'Surface snow depth' stdname = 'surface_snow_thickness' units = 'm' attname = 'Si_snowh' call metadata_set(attname, longname, stdname, units) ! Surface saturation specific humidity in ocean (ocn/atm only) call seq_flds_add(xao_states,"So_ssq") call seq_flds_add(x2a_states,"So_ssq") longname = 'Surface saturation specific humidity in ocean' stdname = 'specific_humidity_at_saturation' units = 'kg kg-1' attname = 'So_ssq' call metadata_set(attname, longname, stdname, units) ! Square of exch. coeff (tracers) (ocn/atm only) call seq_flds_add(xao_states,"So_re") call seq_flds_add(x2a_states,"So_re") longname = 'Square of exch. coeff (tracers)' stdname = '' units = '' attname = 'So_re' call metadata_set(attname, longname, stdname, units) ! 10 meter wind call seq_flds_add(i2x_states,"Si_u10") call seq_flds_add(xao_states,"So_u10") call seq_flds_add(l2x_states,"Sl_u10") call seq_flds_add(x2a_states,"Sx_u10") longname = '10m wind' stdname = '10m_wind' units = 'm' attname = 'u10' call metadata_set(attname, longname, stdname, units) ! Zonal surface stress" call seq_flds_add(l2x_fluxes,"Fall_taux") call seq_flds_add(xao_fluxes,"Faox_taux") call seq_flds_add(i2x_fluxes,"Faii_taux") call seq_flds_add(x2a_fluxes,"Faxx_taux") call seq_flds_add(i2x_fluxes,"Fioi_taux") call seq_flds_add(x2o_fluxes,"Foxx_taux") longname = 'Zonal surface stress' stdname = 'surface_downward_eastward_stress' units = 'N m-2' attname = 'Fall_taux' call metadata_set(attname, longname, stdname, units) attname = 'Faox_taux' call metadata_set(attname, longname, stdname, units) attname = 'Faii_taux' call metadata_set(attname, longname, stdname, units) attname = 'Fioi_taux' call metadata_set(attname, longname, stdname, units) attname = 'Faxx_taux' call metadata_set(attname, longname, stdname, units) attname = 'Foxx_taux' call metadata_set(attname, longname, stdname, units) ! Meridional surface stress call seq_flds_add(l2x_fluxes,"Fall_tauy") call seq_flds_add(xao_fluxes,"Faox_tauy") call seq_flds_add(i2x_fluxes,"Faii_tauy") call seq_flds_add(x2a_fluxes,"Faxx_tauy") call seq_flds_add(i2x_fluxes,"Fioi_tauy") call seq_flds_add(x2o_fluxes,"Foxx_tauy") longname = 'Meridional surface stress' stdname = 'surface_downward_northward_stress' units = 'N m-2' attname = 'Fall_tauy' call metadata_set(attname, longname, stdname, units) attname = 'Faox_tauy' call metadata_set(attname, longname, stdname, units) attname = 'Faii_tauy' call metadata_set(attname, longname, stdname, units) attname = 'Fioi_tauy' call metadata_set(attname, longname, stdname, units) attname = 'Faxx_tauy' call metadata_set(attname, longname, stdname, units) attname = 'Foxx_tauy' call metadata_set(attname, longname, stdname, units) ! Surface latent heat flux call seq_flds_add(l2x_fluxes,"Fall_lat") call seq_flds_add(xao_fluxes,"Faox_lat") call seq_flds_add(i2x_fluxes,"Faii_lat") call seq_flds_add(x2a_fluxes,"Faxx_lat") call seq_flds_add(x2o_fluxes,"Foxx_lat") longname = 'Surface latent heat flux' stdname = 'surface_upward_latent_heat_flux' units = 'W m-2' attname = 'Fall_lat' call metadata_set(attname, longname, stdname, units) attname = 'Faox_lat' call metadata_set(attname, longname, stdname, units) attname = 'Faii_lat' call metadata_set(attname, longname, stdname, units) attname = 'Faxx_lat' call metadata_set(attname, longname, stdname, units) attname = 'Foxx_lat' call metadata_set(attname, longname, stdname, units) ! Surface sensible heat flux call seq_flds_add(l2x_fluxes,"Fall_sen") call seq_flds_add(xao_fluxes,"Faox_sen") call seq_flds_add(i2x_fluxes,"Faii_sen") call seq_flds_add(x2a_fluxes,"Faxx_sen") call seq_flds_add(x2o_fluxes,"Foxx_sen") longname = 'Sensible heat flux' stdname = 'surface_upward_sensible_heat_flux' units = 'W m-2' attname = 'Fall_sen' call metadata_set(attname, longname, stdname, units) attname = 'Faox_sen' call metadata_set(attname, longname, stdname, units) attname = 'Faii_sen' call metadata_set(attname, longname, stdname, units) attname = 'Faxx_sen' call metadata_set(attname, longname, stdname, units) attname = 'Foxx_sen' call metadata_set(attname, longname, stdname, units) ! Surface upward longwave heat flux call seq_flds_add(l2x_fluxes,"Fall_lwup") call seq_flds_add(xao_fluxes,"Faox_lwup") call seq_flds_add(i2x_fluxes,"Faii_lwup") call seq_flds_add(x2a_fluxes,"Faxx_lwup") call seq_flds_add(x2o_fluxes,"Foxx_lwup") longname = 'Surface upward longwave heat flux' stdname = 'surface_net_upward_longwave_flux' units = 'W m-2' attname = 'Fall_lwup' call metadata_set(attname, longname, stdname, units) attname = 'Faox_lwup' call metadata_set(attname, longname, stdname, units) attname = 'Faii_lwup' call metadata_set(attname, longname, stdname, units) attname = 'Faxx_lwup' call metadata_set(attname, longname, stdname, units) attname = 'Foxx_lwup' call metadata_set(attname, longname, stdname, units) ! Evaporation water flux call seq_flds_add(l2x_fluxes,"Fall_evap") call seq_flds_add(xao_fluxes,"Faox_evap") call seq_flds_add(i2x_fluxes,"Faii_evap") call seq_flds_add(x2a_fluxes,"Faxx_evap") call seq_flds_add(x2o_fluxes,"Foxx_evap") longname = 'Evaporation water flux' stdname = 'water_evaporation_flux' units = 'kg m-2 s-1' attname = 'Fall_evap' call metadata_set(attname, longname, stdname, units) attname = 'Faox_evap' call metadata_set(attname, longname, stdname, units) attname = 'Faii_evap' call metadata_set(attname, longname, stdname, units) attname = 'Faxx_evap' call metadata_set(attname, longname, stdname, units) ! Dust flux (particle bin number 1) call seq_flds_add(l2x_fluxes,"Fall_flxdst1") call seq_flds_add(x2a_fluxes,"Fall_flxdst1") longname = 'Dust flux (particle bin number 1)' stdname = 'dust_flux' units = 'kg m-2 s-1' attname = 'Fall_flxdst1' call metadata_set(attname, longname, stdname, units) ! Dust flux (particle bin number 2) call seq_flds_add(l2x_fluxes,"Fall_flxdst2") call seq_flds_add(x2a_fluxes,"Fall_flxdst2") longname = 'Dust flux (particle bin number 2)' stdname = 'dust_flux' units = 'kg m-2 s-1' attname = 'Fall_flxdst2' call metadata_set(attname, longname, stdname, units) ! Dust flux (particle bin number 3) call seq_flds_add(l2x_fluxes,"Fall_flxdst3") call seq_flds_add(x2a_fluxes,"Fall_flxdst3") longname = 'Dust flux (particle bin number 3)' stdname = 'dust_flux' units = 'kg m-2 s-1' attname = 'Fall_flxdst3' call metadata_set(attname, longname, stdname, units) ! Dust flux (particle bin number 4) call seq_flds_add(l2x_fluxes,"Fall_flxdst4") call seq_flds_add(x2a_fluxes,"Fall_flxdst4") longname = 'Dust flux (particle bin number 4)' stdname = 'dust_flux' units = 'kg m-2 s-1' attname = 'Fall_flxdst4' call metadata_set(attname, longname, stdname, units) !----------------------------- ! atm<->ocn only exchange !----------------------------- ! Sea level pressure (Pa) call seq_flds_add(a2x_states,"Sa_pslv") call seq_flds_add(x2o_states,"Sa_pslv") longname = 'Sea level pressure' stdname = 'air_pressure_at_sea_level' units = 'Pa' attname = 'Sa_pslv' call metadata_set(attname, longname, stdname, units) ! Wind speed squared at 10 meters call seq_flds_add(xao_states,"So_duu10n") call seq_flds_add(x2o_states,"So_duu10n") longname = 'Wind speed squared at 10 meters' stdname = 'square_of_wind_speed' units = 'm2 s-2' attname = 'So_duu10n' call metadata_set(attname, longname, stdname, units) ! Surface friction velocity in ocean call seq_flds_add(xao_states,"So_ustar") call seq_flds_add(x2a_states,"So_ustar") longname = 'Surface fraction velocity in ocean' stdname = 'fraction_velocity' units = 'm s-1' attname = 'So_ustar' call metadata_set(attname, longname, stdname, units) !----------------------------- ! ice<->ocn only exchange !----------------------------- ! Fractional ice coverage wrt ocean call seq_flds_add(i2x_states,"Si_ifrac") call seq_flds_add(x2o_states,"Si_ifrac") call seq_flds_add(x2w_states,"Si_ifrac") longname = 'Fractional ice coverage wrt ocean' stdname = 'sea_ice_area_fraction' units = '1' attname = 'Si_ifrac' call metadata_set(attname, longname, stdname, units) if (trim(cime_model) == 'e3sm') then ! Sea ice basal pressure call seq_flds_add(i2x_states,"Si_bpress") call seq_flds_add(x2o_states,"Si_bpress") longname = 'Sea ice basal pressure' stdname = 'cice_basal_pressure' units = 'Pa' attname = 'Si_bpress' call metadata_set(attname, longname, stdname, units) end if ! Ocean melt and freeze potential call seq_flds_add(o2x_fluxes,"Fioo_q") call seq_flds_add(x2i_fluxes,"Fioo_q") longname = 'Ocean melt and freeze potential' stdname = 'surface_snow_and_ice_melt_heat_flux' units = 'W m-2' attname = 'Fioo_q' call metadata_set(attname, longname, stdname, units) if (trim(cime_model) == 'e3sm') then ! Ocean melt (q<0) potential call seq_flds_add(o2x_fluxes,"Fioo_meltp") call seq_flds_add(x2i_fluxes,"Fioo_meltp") longname = 'Ocean melt (q<0) potential' stdname = 'surface_snow_and_ice_melt_heat_flux' units = 'W m-2' attname = 'Fioo_meltp' call metadata_set(attname, longname, stdname, units) end if if (trim(cime_model) == 'e3sm') then ! Ocean frazil production call seq_flds_add(o2x_fluxes,"Fioo_frazil") call seq_flds_add(x2i_fluxes,"Fioo_frazil") longname = 'Ocean frazil production' stdname = 'ocean_frazil_ice_production' units = 'kg m-2 s-1' attname = 'Fioo_frazil' call metadata_set(attname, longname, stdname, units) end if ! Heat flux from melting call seq_flds_add(i2x_fluxes,"Fioi_melth") call seq_flds_add(x2o_fluxes,"Fioi_melth") longname = 'Heat flux from melting' stdname = 'surface_snow_melt_heat_flux' units = 'W m-2' attname = 'Fioi_melth' call metadata_set(attname, longname, stdname, units) ! Water flux from melting call seq_flds_add(i2x_fluxes,"Fioi_meltw") call seq_flds_add(x2o_fluxes,"Fioi_meltw") longname = 'Water flux due to melting' stdname = 'surface_snow_melt_flux' units = 'kg m-2 s-1' attname = 'Fioi_meltw' call metadata_set(attname, longname, stdname, units) ! Salt flux call seq_flds_add(i2x_fluxes,"Fioi_salt") call seq_flds_add(x2o_fluxes,"Fioi_salt") longname = 'Salt flux' stdname = 'virtual_salt_flux_into_sea_water' units = 'kg m-2 s-1' attname = 'Fioi_salt' call metadata_set(attname, longname, stdname, units) ! Black Carbon hydrophilic deposition call seq_flds_add(i2x_fluxes,"Fioi_bcphi" ) call seq_flds_add(x2o_fluxes,"Fioi_bcphi" ) longname = 'Hydrophylic black carbon deposition flux' stdname = 'deposition_flux_of_hydrophylic_black_carbon' units = 'kg m-2 s-1' attname = 'Fioi_bcphi' call metadata_set(attname, longname, stdname, units) ! Black Carbon hydrophobic deposition call seq_flds_add(i2x_fluxes,"Fioi_bcpho" ) call seq_flds_add(x2o_fluxes,"Fioi_bcpho" ) longname = 'Hydrophobic black carbon deposition flux' stdname = 'deposition_flux_of_hydrophobic_black_carbon' units = 'kg m-2 s-1' attname = 'Fioi_bcpho' call metadata_set(attname, longname, stdname, units) ! Dust flux call seq_flds_add(i2x_fluxes,"Fioi_flxdst") call seq_flds_add(x2o_fluxes,"Fioi_flxdst") longname = 'Dust flux' stdname = 'dust_flux' units = 'kg m-2 s-1' attname = 'Fioi_flxdst' call metadata_set(attname, longname, stdname, units) ! Sea surface temperature call seq_flds_add(o2x_states,"So_t") call seq_flds_add(x2i_states,"So_t") call seq_flds_add(x2w_states,"So_t") ! Sea surface salinity call seq_flds_add(o2x_states,"So_s") call seq_flds_add(x2i_states,"So_s") longname = 'Sea surface salinity' stdname = 'sea_surface_salinity' units = 'g kg-1' attname = 'So_s' call metadata_set(attname, longname, stdname, units) ! Zonal sea water velocity call seq_flds_add(o2x_states,"So_u") call seq_flds_add(x2i_states,"So_u") call seq_flds_add(x2w_states,"So_u") longname = 'Zonal sea water velocity' stdname = 'eastward_sea_water_velocity' units = 'm s-1' attname = 'So_u' call metadata_set(attname, longname, stdname, units) ! Meridional sea water velocity call seq_flds_add(o2x_states,"So_v") call seq_flds_add(x2i_states,"So_v") call seq_flds_add(x2w_states,"So_v") longname = 'Meridional sea water velocity' stdname = 'northward_sea_water_velocity' units = 'm s-1' attname = 'So_v' ! Zonal sea surface slope call seq_flds_add(o2x_states,"So_dhdx") call seq_flds_add(x2i_states,"So_dhdx") longname = 'Zonal sea surface slope' stdname = 'sea_surface_eastward_slope' units = 'm m-1' attname = 'So_dhdx' call metadata_set(attname, longname, stdname, units) ! Meridional sea surface slope call seq_flds_add(o2x_states,"So_dhdy") call seq_flds_add(x2i_states,"So_dhdy") longname = 'Meridional sea surface slope' stdname = 'sea_surface_northward_slope' units = 'm m-1' attname = 'So_dhdy' call metadata_set(attname, longname, stdname, units) ! Boundary Layer Depth call seq_flds_add(o2x_states,"So_bldepth") call seq_flds_add(x2w_states,"So_bldepth") longname = 'Ocean Boundary Layer Depth' stdname = 'ocean_boundary_layer_depth' units = 'm' attname = 'So_bldepth' call metadata_set(attname, longname, stdname, units) call seq_flds_add(xao_states,"So_fswpen") call seq_flds_add(o2x_states,"So_fswpen") longname = 'Fraction of sw penetrating surface layer for diurnal cycle' stdname = 'Fraction of sw penetrating surface layer for diurnal cycle' units = '1' attname = 'So_fswpen' call metadata_set(attname, longname, stdname, units) !------------------------------ ! ice<->ocn only exchange - BGC !------------------------------ if (trim(cime_model) == 'e3sm' .and. flds_bgc_oi) then ! Ocean algae concentration 1 - diatoms? call seq_flds_add(o2x_states,"So_algae1") call seq_flds_add(x2i_states,"So_algae1") longname = 'Ocean algae concentration 1 - diatoms' stdname = 'ocean_algae_conc_1' units = 'mmol C m-3' attname = 'So_algae1' call metadata_set(attname, longname, stdname, units) ! Ocean algae concentration 2 - flagellates? call seq_flds_add(o2x_states,"So_algae2") call seq_flds_add(x2i_states,"So_algae2") longname = 'Ocean algae concentration 2 - flagellates' stdname = 'ocean_algae_conc_2' units = 'mmol C m-3' attname = 'So_algae2' call metadata_set(attname, longname, stdname, units) ! Ocean algae concentration 3 - phaeocyctis? call seq_flds_add(o2x_states,"So_algae3") call seq_flds_add(x2i_states,"So_algae3") longname = 'Ocean algae concentration 3 - phaeocyctis' stdname = 'ocean_algae_conc_3' units = 'mmol C m-3' attname = 'So_algae3' call metadata_set(attname, longname, stdname, units) ! Ocean dissolved organic carbon concentration 1 - saccharides? call seq_flds_add(o2x_states,"So_doc1") call seq_flds_add(x2i_states,"So_doc1") longname = 'Ocean dissolved organic carbon concentration 1 - saccharides' stdname = 'ocean_dissolved_organic_carbon_conc_1' units = 'mmol C m-3' attname = 'So_doc1' call metadata_set(attname, longname, stdname, units) ! Ocean dissolved organic carbon concentration 2 - lipids? call seq_flds_add(o2x_states,"So_doc2") call seq_flds_add(x2i_states,"So_doc2") longname = 'Ocean dissolved organic carbon concentration 2 - lipids' stdname = 'ocean_dissolved_organic_carbon_conc_2' units = 'mmol C m-3' attname = 'So_doc2' call metadata_set(attname, longname, stdname, units) ! Ocean dissolved organic carbon concentration 3 - tbd? call seq_flds_add(o2x_states,"So_doc3") call seq_flds_add(x2i_states,"So_doc3") longname = 'Ocean dissolved organic carbon concentration 3 - tbd' stdname = 'ocean_dissolved_organic_carbon_conc_3' units = 'mmol C m-3' attname = 'So_doc3' call metadata_set(attname, longname, stdname, units) ! Ocean dissolved inorganic carbon concentration 1 call seq_flds_add(o2x_states,"So_dic1") call seq_flds_add(x2i_states,"So_dic1") longname = 'Ocean dissolved inorganic carbon concentration 1' stdname = 'ocean_dissolved_inorganic_carbon_conc_1' units = 'mmol C m-3' attname = 'So_dic1' call metadata_set(attname, longname, stdname, units) ! Ocean dissolved organic nitrogen concentration 1 call seq_flds_add(o2x_states,"So_don1") call seq_flds_add(x2i_states,"So_don1") longname = 'Ocean dissolved organic nitrogen concentration 1' stdname = 'ocean_dissolved_organic_nitrogen_conc_1' units = 'mmol N m-3' attname = 'So_don1' call metadata_set(attname, longname, stdname, units) ! Ocean nitrate concentration call seq_flds_add(o2x_states,"So_no3") call seq_flds_add(x2i_states,"So_no3") longname = 'Ocean nitrate concentration' stdname = 'ocean_nitrate_conc' units = 'mmol N m-3' attname = 'So_no3' call metadata_set(attname, longname, stdname, units) ! Ocean silicate concentration call seq_flds_add(o2x_states,"So_sio3") call seq_flds_add(x2i_states,"So_sio3") longname = 'Ocean silicate concentration' stdname = 'ocean_silicate_conc' units = 'mmol Si m-3' attname = 'So_sio3' call metadata_set(attname, longname, stdname, units) ! Ocean ammonium concentration call seq_flds_add(o2x_states,"So_nh4") call seq_flds_add(x2i_states,"So_nh4") longname = 'Ocean ammonium concentration' stdname = 'ocean_ammonium_conc' units = 'mmol N m-3' attname = 'So_nh4' call metadata_set(attname, longname, stdname, units) ! Ocean dimethyl sulfide (DMS) concentration call seq_flds_add(o2x_states,"So_dms") call seq_flds_add(x2i_states,"So_dms") longname = 'Ocean dimethyl sulfide concentration' stdname = 'ocean_dimethyl_sulfide_conc' units = 'mmol S m-3' attname = 'So_dms' call metadata_set(attname, longname, stdname, units) ! Ocean dimethylsulphonio-propionate (DMSP) concentration call seq_flds_add(o2x_states,"So_dmsp") call seq_flds_add(x2i_states,"So_dmsp") longname = 'Ocean dimethylsulphonio-propionate concentration' stdname = 'ocean_dimethylsulphoniopropionate_conc' units = 'mmol S m-3' attname = 'So_dmsp' call metadata_set(attname, longname, stdname, units) ! Ocean DOCr concentration call seq_flds_add(o2x_states,"So_docr") call seq_flds_add(x2i_states,"So_docr") longname = 'Ocean DOCr concentration' stdname = 'ocean_DOCr_conc' units = 'mmol C m-3' attname = 'So_docr' call metadata_set(attname, longname, stdname, units) ! Ocean particulate iron concentration 1 call seq_flds_add(o2x_states,"So_fep1") call seq_flds_add(x2i_states,"So_fep1") longname = 'Ocean particulate iron concentration 1' stdname = 'ocean_particulate_iron_conc_1' units = 'umol Fe m-3' attname = 'So_fep1' call metadata_set(attname, longname, stdname, units) ! Ocean particulate iron concentration 2 call seq_flds_add(o2x_states,"So_fep2") call seq_flds_add(x2i_states,"So_fep2") longname = 'Ocean particulate iron concentration 2' stdname = 'ocean_particulate_iron_conc_2' units = 'umol Fe m-3' attname = 'So_fep2' call metadata_set(attname, longname, stdname, units) ! Ocean dissolved iron concentration 1 call seq_flds_add(o2x_states,"So_fed1") call seq_flds_add(x2i_states,"So_fed1") longname = 'Ocean dissolved iron concentration 1' stdname = 'ocean_dissolved_iron_conc_1' units = 'umol Fe m-3' attname = 'So_fed1' call metadata_set(attname, longname, stdname, units) ! Ocean dissolved iron concentration 2 call seq_flds_add(o2x_states,"So_fed2") call seq_flds_add(x2i_states,"So_fed2") longname = 'Ocean dissolved iron concentration 2' stdname = 'ocean_dissolved_iron_conc_2' units = 'umol Fe m-3' attname = 'So_fed2' call metadata_set(attname, longname, stdname, units) ! Ocean z-aerosol concentration 1 call seq_flds_add(o2x_states,"So_zaer1") call seq_flds_add(x2i_states,"So_zaer1") longname = 'Ocean z-aerosol concentration 1' stdname = 'ocean_z_aerosol_conc_1' units = 'kg m-3' attname = 'So_zaer1' call metadata_set(attname, longname, stdname, units) ! Ocean z-aerosol concentration 2 call seq_flds_add(o2x_states,"So_zaer2") call seq_flds_add(x2i_states,"So_zaer2") longname = 'Ocean z-aerosol concentration 2' stdname = 'ocean_z_aerosol_conc_2' units = 'kg m-3' attname = 'So_zaer2' call metadata_set(attname, longname, stdname, units) ! Ocean z-aerosol concentration 3 call seq_flds_add(o2x_states,"So_zaer3") call seq_flds_add(x2i_states,"So_zaer3") longname = 'Ocean z-aerosol concentration 3' stdname = 'ocean_z_aerosol_conc_3' units = 'kg m-3' attname = 'So_zaer3' call metadata_set(attname, longname, stdname, units) ! Ocean z-aerosol concentration 4 call seq_flds_add(o2x_states,"So_zaer4") call seq_flds_add(x2i_states,"So_zaer4") longname = 'Ocean z-aerosol concentration 4' stdname = 'ocean_z_aerosol_conc_4' units = 'kg m-3' attname = 'So_zaer4' call metadata_set(attname, longname, stdname, units) ! Ocean z-aerosol concentration 5 call seq_flds_add(o2x_states,"So_zaer5") call seq_flds_add(x2i_states,"So_zaer5") longname = 'Ocean z-aerosol concentration 5' stdname = 'ocean_z_aerosol_conc_5' units = 'kg m-3' attname = 'So_zaer5' call metadata_set(attname, longname, stdname, units) ! Ocean z-aerosol concentration 6 call seq_flds_add(o2x_states,"So_zaer6") call seq_flds_add(x2i_states,"So_zaer6") longname = 'Ocean z-aerosol concentration 6' stdname = 'ocean_z_aerosol_conc_6' units = 'kg m-3' attname = 'So_zaer6' call metadata_set(attname, longname, stdname, units) ! Sea ice algae flux 1 - diatoms? call seq_flds_add(i2x_fluxes,"Fioi_algae1") call seq_flds_add(x2o_fluxes,"Fioi_algae1") longname = 'Sea ice algae flux 1 - diatoms' stdname = 'seaice_algae_flux_1' units = 'mmol C m-2 s-1' attname = 'Fioi_algae1' call metadata_set(attname, longname, stdname, units) ! Sea ice algae flux 2 - flagellates? call seq_flds_add(i2x_fluxes,"Fioi_algae2") call seq_flds_add(x2o_fluxes,"Fioi_algae2") longname = 'Sea ice algae flux 2 - flagellates' stdname = 'seaice_algae_flux_2' units = 'mmol C m-2 s-1' attname = 'Fioi_algae2' call metadata_set(attname, longname, stdname, units) ! Sea ice algae flux 3 - phaeocyctis? call seq_flds_add(i2x_fluxes,"Fioi_algae3") call seq_flds_add(x2o_fluxes,"Fioi_algae3") longname = 'Sea ice algae flux 3 - phaeocyctis' stdname = '_algae_flux_3' units = 'mmol C m-2 s-1' attname = 'Fioi_algae3' call metadata_set(attname, longname, stdname, units) ! Sea ice dissolved organic carbon flux 1 - saccharides? call seq_flds_add(i2x_fluxes,"Fioi_doc1") call seq_flds_add(x2o_fluxes,"Fioi_doc1") longname = 'Sea ice dissolved organic carbon flux 1 - saccharides' stdname = 'seaice_dissolved_organic_carbon_flux_1' units = 'mmol C m-2 s-1' attname = 'Fioi_doc1' call metadata_set(attname, longname, stdname, units) ! Sea ice dissolved organic carbon flux 2 - lipids? call seq_flds_add(i2x_fluxes,"Fioi_doc2") call seq_flds_add(x2o_fluxes,"Fioi_doc2") longname = 'Sea ice dissolved organic carbon flux 2 - lipids' stdname = 'seaice_dissolved_organic_carbon_flux_2' units = 'mmol C m-2 s-1' attname = 'Fioi_doc2' call metadata_set(attname, longname, stdname, units) ! Sea ice dissolved organic carbon flux 3 - tbd? call seq_flds_add(i2x_fluxes,"Fioi_doc3") call seq_flds_add(x2o_fluxes,"Fioi_doc3") longname = 'Sea ice dissolved organic carbon flux 3 - tbd' stdname = 'seaice_dissolved_organic_carbon_flux_3' units = 'mmol C m-2 s-1' attname = 'Fioi_doc3' call metadata_set(attname, longname, stdname, units) ! Sea ice dissolved inorganic carbon flux 1 call seq_flds_add(i2x_fluxes,"Fioi_dic1") call seq_flds_add(x2o_fluxes,"Fioi_dic1") longname = 'Sea ice dissolved inorganic carbon flux 1' stdname = 'seaice_dissolved_inorganic_carbon_flux_1' units = 'mmol C m-2 s-1' attname = 'Fioi_dic1' call metadata_set(attname, longname, stdname, units) ! Sea ice dissolved organic nitrogen flux 1 call seq_flds_add(i2x_fluxes,"Fioi_don1") call seq_flds_add(x2o_fluxes,"Fioi_don1") longname = 'Sea ice dissolved organic nitrogen flux 1' stdname = 'seaice_dissolved_organic_nitrogen_flux_1' units = 'mmol N m-2 s-1' attname = 'Fioi_don1' call metadata_set(attname, longname, stdname, units) ! Sea ice nitrate flux call seq_flds_add(i2x_fluxes,"Fioi_no3") call seq_flds_add(x2o_fluxes,"Fioi_no3") longname = 'Sea ice nitrate flux' stdname = 'seaice_nitrate_flux' units = 'mmol N m-2 s-1' attname = 'Fioi_no3' call metadata_set(attname, longname, stdname, units) ! Sea ice silicate flux call seq_flds_add(i2x_fluxes,"Fioi_sio3") call seq_flds_add(x2o_fluxes,"Fioi_sio3") longname = 'Sea ice silicate flux' stdname = 'seaice_silicate_flux' units = 'mmol Si m-2 s-1' attname = 'Fioi_sio3' call metadata_set(attname, longname, stdname, units) ! Sea ice ammonium flux call seq_flds_add(i2x_fluxes,"Fioi_nh4") call seq_flds_add(x2o_fluxes,"Fioi_nh4") longname = 'Sea ice ammonium flux' stdname = 'seaice_ammonium_flux' units = 'mmol N m-2 s-1' attname = 'Fioi_nh4' call metadata_set(attname, longname, stdname, units) ! Sea ice dimethyl sulfide (DMS) flux call seq_flds_add(i2x_fluxes,"Fioi_dms") call seq_flds_add(x2o_fluxes,"Fioi_dms") longname = 'Sea ice dimethyl sulfide flux' stdname = 'seaice_dimethyl_sulfide_flux' units = 'mmol S m-2 s-1' attname = 'Fioi_dms' call metadata_set(attname, longname, stdname, units) ! Sea ice DMSPp flux call seq_flds_add(i2x_fluxes,"Fioi_dmspp") call seq_flds_add(x2o_fluxes,"Fioi_dmspp") longname = 'Sea ice DSMPp flux' stdname = 'seaice_DSMPp_flux' units = 'mmol S m-2 s-1' attname = 'Fioi_dmspp' call metadata_set(attname, longname, stdname, units) ! Sea ice DMSPd flux call seq_flds_add(i2x_fluxes,"Fioi_dmspd") call seq_flds_add(x2o_fluxes,"Fioi_dmspd") longname = 'Sea ice DSMPd flux' stdname = 'seaice_DSMPd_flux' units = 'mmol S m-2 s-1' attname = 'Fioi_dmspd' call metadata_set(attname, longname, stdname, units) ! Sea ice DOCr flux call seq_flds_add(i2x_fluxes,"Fioi_docr") call seq_flds_add(x2o_fluxes,"Fioi_docr") longname = 'Sea ice DOCr flux' stdname = 'seaice_DOCr_flux' units = 'mmol C m-2 s-1' attname = 'Fioi_docr' call metadata_set(attname, longname, stdname, units) ! Sea ice particulate iron flux 1 call seq_flds_add(i2x_fluxes,"Fioi_fep1") call seq_flds_add(x2o_fluxes,"Fioi_fep1") longname = 'Sea ice particulate iron flux 1' stdname = 'seaice_particulate_iron_flux_1' units = 'umol Fe m-2 s-1' attname = 'Fioi_fep1' call metadata_set(attname, longname, stdname, units) ! Sea ice particulate iron flux 2 call seq_flds_add(i2x_fluxes,"Fioi_fep2") call seq_flds_add(x2o_fluxes,"Fioi_fep2") longname = 'Sea ice particulate iron flux 2' stdname = 'seaice_particulate_iron_flux_2' units = 'umol Fe m-2 s-1' attname = 'Fioi_fep2' call metadata_set(attname, longname, stdname, units) ! Sea ice dissolved iron flux 1 call seq_flds_add(i2x_fluxes,"Fioi_fed1") call seq_flds_add(x2o_fluxes,"Fioi_fed1") longname = 'Sea ice dissolved iron flux 1' stdname = 'seaice_dissolved_iron_flux_1' units = 'umol Fe m-2 s-1' attname = 'Fioi_fed1' call metadata_set(attname, longname, stdname, units) ! Sea ice dissolved iron flux 2 call seq_flds_add(i2x_fluxes,"Fioi_fed2") call seq_flds_add(x2o_fluxes,"Fioi_fed2") longname = 'Sea ice dissolved iron flux 2' stdname = 'seaice_dissolved_iron_flux_2' units = 'umol Fe m-2 s-1' attname = 'Fioi_fed2' call metadata_set(attname, longname, stdname, units) ! Sea ice iron dust call seq_flds_add(i2x_fluxes,"Fioi_dust1") call seq_flds_add(x2o_fluxes,"Fioi_dust1") longname = 'Sea ice iron dust 1' stdname = 'seaice_iron_dust_1' units = 'kg m-2 s-1' attname = 'Fioi_dust1' call metadata_set(attname, longname, stdname, units) endif !----------------------------- ! lnd->rof exchange ! TODO: put in attributes below !----------------------------- call seq_flds_add(l2x_fluxes,'Flrl_rofsur') call seq_flds_add(x2r_fluxes,'Flrl_rofsur') longname = 'Water flux from land (liquid surface)' stdname = 'water_flux_into_runoff_surface' units = 'kg m-2 s-1' attname = 'Flrl_rofsur' call metadata_set(attname, longname, stdname, units) call seq_flds_add(l2x_fluxes,'Flrl_rofgwl') call seq_flds_add(x2r_fluxes,'Flrl_rofgwl') longname = 'Water flux from land (liquid glacier, wetland, and lake)' stdname = 'water_flux_into_runoff_from_gwl' units = 'kg m-2 s-1' attname = 'Flrl_rofgwl' call metadata_set(attname, longname, stdname, units) call seq_flds_add(l2x_fluxes,'Flrl_rofsub') call seq_flds_add(x2r_fluxes,'Flrl_rofsub') longname = 'Water flux from land (liquid subsurface)' stdname = 'water_flux_into_runoff_subsurface' units = 'kg m-2 s-1' attname = 'Flrl_rofsub' call metadata_set(attname, longname, stdname, units) call seq_flds_add(l2x_fluxes,'Flrl_rofdto') call seq_flds_add(x2r_fluxes,'Flrl_rofdto') longname = 'Water flux from land direct to ocean' stdname = 'water_flux_direct_to_ocean' units = 'kg m-2 s-1' attname = 'Flrl_rofdto' call metadata_set(attname, longname, stdname, units) call seq_flds_add(l2x_fluxes,'Flrl_rofi') call seq_flds_add(x2r_fluxes,'Flrl_rofi') longname = 'Water flux from land (frozen)' stdname = 'frozen_water_flux_into_runoff' units = 'kg m-2 s-1' attname = 'Flrl_rofi' call metadata_set(attname, longname, stdname, units) ! Currently only the CESM land and runoff models treat irrigation as a separate ! field: in E3SM, this field is folded in to the other runoff fields. Eventually, ! E3SM may want to update its land and runoff models to map irrigation specially, as ! CESM does. ! ! (Once E3SM is using this irrigation field, all that needs to be done is to remove ! this conditional: Code in other places in the coupler is written to trigger off of ! whether Flrl_irrig has been added to the field list, so it should Just Work if this ! conditional is removed.) if (trim(cime_model) == 'cesm') then ! Irrigation flux (land/rof only) call seq_flds_add(l2x_fluxes,"Flrl_irrig") call seq_flds_add(x2r_fluxes,"Flrl_irrig") longname = 'Irrigation flux (withdrawal from rivers)' stdname = 'irrigation' units = 'kg m-2 s-1' attname = 'Flrl_irrig' call metadata_set(attname, longname, stdname, units) end if !----------------------------- ! rof->ocn (runoff) and rof->lnd (flooding) !----------------------------- call seq_flds_add(r2x_fluxes,'Forr_rofl') call seq_flds_add(x2o_fluxes,'Foxx_rofl') call seq_flds_add(r2o_liq_fluxes,'Forr_rofl') longname = 'Water flux due to runoff (liquid)' stdname = 'water_flux_into_sea_water' units = 'kg m-2 s-1' attname = 'Forr_rofl' call metadata_set(attname, longname, stdname, units) attname = 'Foxx_rofl' call metadata_set(attname, longname, stdname, units) call seq_flds_add(r2x_fluxes,'Forr_rofi') call seq_flds_add(x2o_fluxes,'Foxx_rofi') call seq_flds_add(r2o_ice_fluxes,'Forr_rofi') longname = 'Water flux due to runoff (frozen)' stdname = 'frozen_water_flux_into_sea_water' units = 'kg m-2 s-1' attname = 'Forr_rofi' call metadata_set(attname, longname, stdname, units) attname = 'Foxx_rofi' call metadata_set(attname, longname, stdname, units) call seq_flds_add(r2x_fluxes,'Firr_rofi') call seq_flds_add(x2i_fluxes,'Fixx_rofi') longname = 'Water flux due to runoff (frozen)' stdname = 'frozen_water_flux_into_sea_ice' units = 'kg m-2 s-1' attname = 'Firr_rofi' call metadata_set(attname, longname, stdname, units) attname = 'Fixx_rofi' call metadata_set(attname, longname, stdname, units) call seq_flds_add(r2x_fluxes,'Flrr_flood') call seq_flds_add(x2l_fluxes,'Flrr_flood') longname = 'Waterrflux due to flooding' stdname = 'flooding_water_flux' units = 'kg m-2 s-1' attname = 'Flrr_flood' call metadata_set(attname, longname, stdname, units) call seq_flds_add(r2x_fluxes,'Flrr_volr') call seq_flds_add(x2l_fluxes,'Flrr_volr') longname = 'River channel total water volume' stdname = 'rtm_volr' units = 'm' attname = 'Flrr_volr' call metadata_set(attname, longname, stdname, units) call seq_flds_add(r2x_fluxes,'Flrr_volrmch') call seq_flds_add(x2l_fluxes,'Flrr_volrmch') longname = 'River channel main channel water volume' stdname = 'rtm_volrmch' units = 'm' attname = 'Flrr_volrmch' call metadata_set(attname, longname, stdname, units) !----------------------------- ! wav->ocn and ocn->wav !----------------------------- call seq_flds_add(w2x_states,'Sw_lamult') call seq_flds_add(x2o_states,'Sw_lamult') longname = 'Langmuir multiplier' stdname = 'wave_model_langmuir_multiplier' units = '' attname = 'Sw_lamult' call metadata_set(attname, longname, stdname, units) call seq_flds_add(w2x_states,'Sw_ustokes') call seq_flds_add(x2o_states,'Sw_ustokes') longname = 'Stokes drift u component' stdname = 'wave_model_stokes_drift_eastward_velocity' units = 'm/s' attname = 'Sw_ustokes' call metadata_set(attname, longname, stdname, units) call seq_flds_add(w2x_states,'Sw_vstokes') call seq_flds_add(x2o_states,'Sw_vstokes') longname = 'Stokes drift v component' stdname = 'wave_model_stokes_drift_northward_velocity' units = 'm/s' attname = 'Sw_vstokes' call metadata_set(attname, longname, stdname, units) call seq_flds_add(w2x_states,'Sw_hstokes') call seq_flds_add(x2o_states,'Sw_hstokes') longname = 'Stokes drift depth' stdname = 'wave_model_stokes_drift_depth' units = 'm' attname = 'Sw_hstokes' call metadata_set(attname, longname, stdname, units) !----------------------------- ! New xao_states diagnostic ! fields for history output only !----------------------------- call seq_flds_add(xao_fluxes,"Faox_swdn") longname = 'Downward solar radiation' stdname = 'surface_downward_shortwave_flux' units = 'W m-2' attname = 'Faox_swdn' call metadata_set(attname, longname, stdname, units) call seq_flds_add(xao_fluxes,"Faox_swup") longname = 'Upward solar radiation' stdname = 'surface_upward_shortwave_flux' units = 'W m-2' attname = 'Faox_swup' call metadata_set(attname, longname, stdname, units) call seq_flds_add(xao_diurnl,"So_tbulk_diurn") longname = 'atm/ocn flux temperature bulk' stdname = 'aoflux_tbulk' units = 'K' attname = 'So_tbulk_diurn' call metadata_set(attname, longname, stdname, units) call seq_flds_add(xao_diurnl,"So_tskin_diurn") longname = 'atm/ocn flux temperature skin' stdname = 'aoflux_tskin' units = 'K' attname = 'So_tskin_diurn' call metadata_set(attname, longname, stdname, units) call seq_flds_add(xao_diurnl,"So_tskin_night_diurn") longname = 'atm/ocn flux temperature skin at night' stdname = 'aoflux_tskin_night' units = 'K' attname = 'So_tskin_night_diurn' call metadata_set(attname, longname, stdname, units) call seq_flds_add(xao_diurnl,"So_tskin_day_diurn") longname = 'atm/ocn flux temperature skin at day' stdname = 'aoflux_tskin_day' units = 'K' attname = 'So_tskin_day_diurn' call metadata_set(attname, longname, stdname, units) call seq_flds_add(xao_diurnl,"So_cskin_diurn") longname = 'atm/ocn flux cool skin' stdname = 'aoflux_cskin' units = 'K' attname = 'So_cskin_diurn' call metadata_set(attname, longname, stdname, units) call seq_flds_add(xao_diurnl,"So_cskin_night_diurn") longname = 'atm/ocn flux cool skin at night' stdname = 'aoflux_cskin_night' units = 'K' attname = 'So_cskin_night_diurn' call metadata_set(attname, longname, stdname, units) call seq_flds_add(xao_diurnl,"So_warm_diurn") longname = 'atm/ocn flux warming' stdname = 'aoflux_warm' units = 'unitless' attname = 'So_warm_diurn' call metadata_set(attname, longname, stdname, units) call seq_flds_add(xao_diurnl,"So_salt_diurn") longname = 'atm/ocn flux salting' stdname = 'aoflux_salt' units = 'unitless' attname = 'So_salt_diurn' call metadata_set(attname, longname, stdname, units) call seq_flds_add(xao_diurnl,"So_speed_diurn") longname = 'atm/ocn flux speed' stdname = 'aoflux_speed' units = 'unitless' attname = 'So_speed_diurn' call metadata_set(attname, longname, stdname, units) call seq_flds_add(xao_diurnl,"So_regime_diurn") longname = 'atm/ocn flux regime' stdname = 'aoflux_regime' units = 'unitless' attname = 'So_regime_diurn' call metadata_set(attname, longname, stdname, units) call seq_flds_add(xao_diurnl,"So_warmmax_diurn") longname = 'atm/ocn flux warming dialy max' stdname = 'aoflux_warmmax' units = 'unitless' attname = 'So_warmmax_diurn' call metadata_set(attname, longname, stdname, units) call seq_flds_add(xao_diurnl,"So_windmax_diurn") longname = 'atm/ocn flux wind daily max' stdname = 'aoflux_windmax' units = 'unitless' attname = 'So_windmax_diurn' call metadata_set(attname, longname, stdname, units) call seq_flds_add(xao_diurnl,"So_qsolavg_diurn") longname = 'atm/ocn flux q-solar daily avg' stdname = 'aoflux_qsolavg' units = 'unitless' attname = 'So_qsolavg_diurn' call metadata_set(attname, longname, stdname, units) call seq_flds_add(xao_diurnl,"So_windavg_diurn") longname = 'atm/ocn flux wind daily avg' stdname = 'aoflux_windavg' units = 'unitless' attname = 'So_windavg_diurn' call metadata_set(attname, longname, stdname, units) call seq_flds_add(xao_diurnl,"So_warmmaxinc_diurn") longname = 'atm/ocn flux daily max increment' stdname = 'aoflux_warmmaxinc' units = 'unitless' attname = 'So_warmmaxinc_diurn' call metadata_set(attname, longname, stdname, units) call seq_flds_add(xao_diurnl,"So_windmaxinc_diurn") longname = 'atm/ocn flux wind daily max increment' stdname = 'aoflux_windmaxinc' units = 'unitless' attname = 'So_windmaxinc_diurn' call metadata_set(attname, longname, stdname, units) call seq_flds_add(xao_diurnl,"So_qsolinc_diurn") longname = 'atm/ocn flux q-solar increment' stdname = 'aoflux_qsolinc' units = 'unitless' attname = 'So_qsolinc_diurn' call metadata_set(attname, longname, stdname, units) call seq_flds_add(xao_diurnl,"So_windinc_diurn") longname = 'atm/ocn flux wind increment' stdname = 'aoflux_windinc' units = 'unitless' attname = 'So_windinc_diurn' call metadata_set(attname, longname, stdname, units) call seq_flds_add(xao_diurnl,"So_ninc_diurn") longname = 'atm/ocn flux increment counter' stdname = 'aoflux_ninc' units = 'unitless' attname = 'So_ninc_diurn' call metadata_set(attname, longname, stdname, units) !----------------------------- ! glc fields !----------------------------- name = 'Fogg_rofl' call seq_flds_add(g2x_fluxes,trim(name)) ! Don't need to add this to x2o_fluxes, because Foxx_rofl is already added in the ! course of adding Forr_rofl call seq_flds_add(g2o_liq_fluxes,trim(name)) longname = 'glc liquid runoff flux to ocean' stdname = 'glacier_liquid_runoff_flux_to_ocean' units = 'kg m-2 s-1' attname = 'Fogg_rofl' call metadata_set(attname, longname, stdname, units) name = 'Fogg_rofi' call seq_flds_add(g2x_fluxes,trim(name)) ! Don't need to add this to x2o_fluxes, because Foxx_rofi is already added in the ! course of adding Forr_rofi call seq_flds_add(g2o_ice_fluxes,trim(name)) longname = 'glc frozen runoff flux to ocean' stdname = 'glacier_frozen_runoff_flux_to_ocean' units = 'kg m-2 s-1' attname = 'Fogg_rofi' call metadata_set(attname, longname, stdname, units) name = 'Figg_rofi' call seq_flds_add(g2x_fluxes,trim(name)) ! Don't need to add this to x2i_fluxes, because Fixx_rofi is already added in the ! course of adding Firr_rofi longname = 'glc frozen runoff_iceberg flux to ice' stdname = 'glacier_frozen_runoff_flux_to_seaice' units = 'kg m-2 s-1' attname = 'Figg_rofi' call metadata_set(attname, longname, stdname, units) name = 'Sg_icemask' call seq_flds_add(g2x_states,trim(name)) call seq_flds_add(g2x_states_to_lnd,trim(name)) call seq_flds_add(x2l_states,trim(name)) call seq_flds_add(x2l_states_from_glc,trim(name)) longname = 'Ice sheet grid coverage on global grid' stdname = 'ice_sheet_grid_mask' units = '1' attname = 'Sg_icemask' call metadata_set(attname, longname, stdname, units) name = 'Sg_icemask_coupled_fluxes' call seq_flds_add(g2x_states,trim(name)) call seq_flds_add(g2x_states_to_lnd,trim(name)) call seq_flds_add(x2l_states,trim(name)) call seq_flds_add(x2l_states_from_glc,trim(name)) longname = 'Ice sheet mask where we are potentially sending non-zero fluxes' stdname = 'icemask_coupled_fluxes' units = '1' attname = 'Sg_icemask_coupled_fluxes' call metadata_set(attname, longname, stdname, units) ! glc fields with multiple elevation classes: lnd->glc ! ! Note that these fields are sent in multiple elevation classes from lnd->cpl, but ! the fields sent from cpl->glc do NOT have elevation classes ! ! Also note that we need to keep track of the l2x fields destined for glc in the ! additional variables, l2x_fluxes_to_glc and l2x_states_to_glc. This is needed so that ! we can set up an additional attribute vector holding accumulated quantities of just ! these fields. (We can't determine these field lists with a call to ! mct_aVect_initSharedFields, because the field names differ between l2x and x2g.) name = 'Flgl_qice' longname = 'New glacier ice flux' stdname = 'ice_flux_out_of_glacier' units = 'kg m-2 s-1' attname = 'Flgl_qice' call set_glc_elevclass_field(name, attname, longname, stdname, units, l2x_fluxes) call set_glc_elevclass_field(name, attname, longname, stdname, units, l2x_fluxes_to_glc, & additional_list = .true.) call seq_flds_add(x2g_fluxes,trim(name)) call metadata_set(attname, longname, stdname, units) name = 'Sl_tsrf' longname = 'Surface temperature of glacier' stdname = 'surface_temperature' units = 'deg C' attname = 'Sl_tsrf' call set_glc_elevclass_field(name, attname, longname, stdname, units, l2x_states) call set_glc_elevclass_field(name, attname, longname, stdname, units, l2x_states_to_glc, & additional_list = .true.) call seq_flds_add(x2g_states,trim(name)) call metadata_set(attname, longname, stdname, units) ! Sl_topo is sent from lnd -> cpl, but is NOT sent to glc (it is only used for the ! remapping in the coupler) name = 'Sl_topo' longname = 'Surface height' stdname = 'height' units = 'm' attname = 'Sl_topo' call set_glc_elevclass_field(name, attname, longname, stdname, units, l2x_states) call set_glc_elevclass_field(name, attname, longname, stdname, units, l2x_states_to_glc, & additional_list = .true.) ! glc fields with multiple elevation classes: glc->lnd ! ! Note that the fields sent from glc->cpl do NOT have elevation classes, but the ! fields from cpl->lnd are broken into multiple elevation classes name = 'Sg_ice_covered' longname = 'Fraction of glacier area' stdname = 'glacier_area_fraction' units = '1' attname = 'Sg_ice_covered' call seq_flds_add(g2x_states,trim(name)) call seq_flds_add(g2x_states_to_lnd,trim(name)) call metadata_set(attname, longname, stdname, units) call set_glc_elevclass_field(name, attname, longname, stdname, units, x2l_states) call set_glc_elevclass_field(name, attname, longname, stdname, units, x2l_states_from_glc, & additional_list = .true.) name = 'Sg_topo' longname = 'Surface height of glacier' stdname = 'height' units = 'm' attname = 'Sg_topo' call seq_flds_add(g2x_states,trim(name)) call seq_flds_add(g2x_states_to_lnd,trim(name)) call metadata_set(attname, longname, stdname, units) call set_glc_elevclass_field(name, attname, longname, stdname, units, x2l_states) call set_glc_elevclass_field(name, attname, longname, stdname, units, x2l_states_from_glc, & additional_list = .true.) name = 'Flgg_hflx' longname = 'Downward heat flux from glacier interior' stdname = 'downward_heat_flux_in_glacier' units = 'W m-2' attname = 'Flgg_hflx' call seq_flds_add(g2x_fluxes,trim(name)) call seq_flds_add(g2x_fluxes_to_lnd,trim(name)) call metadata_set(attname, longname, stdname, units) call set_glc_elevclass_field(name, attname, longname, stdname, units, x2l_fluxes) call set_glc_elevclass_field(name, attname, longname, stdname, units, x2l_fluxes_from_glc, & additional_list = .true.) ! Done glc fields if (flds_co2a) then call seq_flds_add(a2x_states, "Sa_co2prog") call seq_flds_add(x2l_states, "Sa_co2prog") call seq_flds_add(x2o_states, "Sa_co2prog") longname = 'Prognostic CO2 at the lowest model level' stdname = '' units = '1e-6 mol/mol' attname = 'Sa_co2prog' call metadata_set(attname, longname, stdname, units) call seq_flds_add(a2x_states, "Sa_co2diag") call seq_flds_add(x2l_states, "Sa_co2diag") call seq_flds_add(x2o_states, "Sa_co2diag") longname = 'Diagnostic CO2 at the lowest model level' stdname = '' units = '1e-6 mol/mol' attname = 'Sa_co2diag' call metadata_set(attname, longname, stdname, units) else if (flds_co2b) then call seq_flds_add(a2x_states, "Sa_co2prog") call seq_flds_add(x2l_states, "Sa_co2prog") longname = 'Prognostic CO2 at the lowest model level' stdname = '' units = '1e-6 mol/mol' attname = 'Sa_co2prog' call metadata_set(attname, longname, stdname, units) call seq_flds_add(a2x_states, "Sa_co2diag") call seq_flds_add(x2l_states, "Sa_co2diag") longname = 'Diagnostic CO2 at the lowest model level' stdname = '' units = '1e-6 mol/mol' attname = 'Sa_co2diag' call metadata_set(attname, longname, stdname, units) call seq_flds_add(l2x_fluxes, "Fall_fco2_lnd") call seq_flds_add(x2a_fluxes, "Fall_fco2_lnd") longname = 'Surface flux of CO2 from land' stdname = 'surface_upward_flux_of_carbon_dioxide_where_land' units = 'moles m-2 s-1' attname = 'Fall_fco2_lnd' call metadata_set(attname, longname, stdname, units) else if (flds_co2c) then call seq_flds_add(a2x_states, "Sa_co2prog") call seq_flds_add(x2l_states, "Sa_co2prog") call seq_flds_add(x2o_states, "Sa_co2prog") longname = 'Prognostic CO2 at the lowest model level' stdname = '' units = '1e-6 mol/mol' attname = 'Sa_co2prog' call metadata_set(attname, longname, stdname, units) call seq_flds_add(a2x_states, "Sa_co2diag") call seq_flds_add(x2l_states, "Sa_co2diag") call seq_flds_add(x2o_states, "Sa_co2diag") longname = 'Diagnostic CO2 at the lowest model level' stdname = '' units = '1e-6 mol/mol' attname = 'Sa_co2diag' call metadata_set(attname, longname, stdname, units) call seq_flds_add(l2x_fluxes, "Fall_fco2_lnd") call seq_flds_add(x2a_fluxes, "Fall_fco2_lnd") longname = 'Surface flux of CO2 from land' stdname = 'surface_upward_flux_of_carbon_dioxide_where_land' units = 'moles m-2 s-1' attname = 'Fall_foc2_lnd' call metadata_set(attname, longname, stdname, units) call seq_flds_add(o2x_fluxes, "Faoo_fco2_ocn") call seq_flds_add(x2a_fluxes, "Faoo_fco2_ocn") longname = 'Surface flux of CO2 from ocean' stdname = 'surface_upward_flux_of_carbon_dioxide_where_open_sea' units = 'moles m-2 s-1' attname = 'Faoo_fco2_ocn' call metadata_set(attname, longname, stdname, units) else if (flds_co2_dmsa) then call seq_flds_add(a2x_states, "Sa_co2prog") call seq_flds_add(x2l_states, "Sa_co2prog") longname = 'Prognostic CO2 at the lowest model level' stdname = '' units = '1e-6 mol/mol' attname = 'Sa_co2prog' call metadata_set(attname, longname, stdname, units) call seq_flds_add(a2x_states, "Sa_co2diag") call seq_flds_add(x2l_states, "Sa_co2diag") longname = 'Diagnostic CO2 at the lowest model level' stdname = '' units = '1e-6 mol/mol' attname = 'Sa_co2diag' call metadata_set(attname, longname, stdname, units) call seq_flds_add(o2x_fluxes, "Faoo_fdms_ocn") call seq_flds_add(x2a_fluxes, "Faoo_fdms_ocn") longname = 'Surface flux of DMS' stdname = 'surface_upward_flux_of_dimethyl_sulfide' units = 'moles m-2 s-1' attname = 'Faoo_fdms' call metadata_set(attname, longname, stdname, units) call seq_flds_add(l2x_fluxes, "Fall_fco2_lnd") call seq_flds_add(x2a_fluxes, "Fall_fco2_lnd") longname = 'Surface flux of CO2 from land' stdname = 'surface_upward_flux_of_carbon_dioxide_where_land' units = 'moles m-2 s-1' attname = 'Fall_foc2_lnd' call metadata_set(attname, longname, stdname, units) call seq_flds_add(o2x_fluxes, "Faoo_fco2_ocn") call seq_flds_add(x2a_fluxes, "Faoo_fco2_ocn") longname = 'Surface flux of CO2 from ocean' stdname = 'surface_upward_flux_of_carbon_dioxide_where_open_sea' units = 'moles m-2 s-1' attname = 'Faoo_fco2_ocn' call metadata_set(attname, longname, stdname, units) endif if (flds_wiso) then call seq_flds_add(o2x_states, "So_roce_16O") call seq_flds_add(x2i_states, "So_roce_16O") longname = 'Ratio of ocean surface level abund. H2_16O/H2O/Rstd' stdname = '' units = ' ' attname = 'So_roce_16O' call metadata_set(attname, longname, stdname, units) call seq_flds_add(o2x_states, "So_roce_18O") call seq_flds_add(x2i_states, "So_roce_18O") longname = 'Ratio of ocean surface level abund. H2_18O/H2O/Rstd' attname = 'So_roce_18O' call metadata_set(attname, longname, stdname, units) call seq_flds_add(o2x_states, "So_roce_HDO") call seq_flds_add(x2i_states, "So_roce_HDO") longname = 'Ratio of ocean surface level abund. HDO/H2O/Rstd' attname = 'So_roce_HDO' call metadata_set(attname, longname, stdname, units) !-------------------------------------------- !Atmospheric specific humidty at lowest level: !-------------------------------------------- ! specific humidity of H216O at the lowest model level (kg/kg) call seq_flds_add(a2x_states,"Sa_shum_16O") call seq_flds_add(x2l_states,"Sa_shum_16O") call seq_flds_add(x2i_states,"Sa_shum_16O") longname = 'Specific humidty of H216O at the lowest model level' stdname = 'H216OV' units = 'kg kg-1' attname = 'Sa_shum_16O' call metadata_set(attname, longname, stdname, units) ! specific humidity of HD16O at the lowest model level (kg/kg) call seq_flds_add(a2x_states,"Sa_shum_HDO") call seq_flds_add(x2l_states,"Sa_shum_HDO") call seq_flds_add(x2i_states,"Sa_shum_HDO") longname = 'Specific humidty of HD16O at the lowest model level' stdname = 'HD16OV' attname = 'Sa_shum_HDO' call metadata_set(attname, longname, stdname, units) ! specific humidity of H218O at the lowest model level (kg/kg) call seq_flds_add(a2x_states,"Sa_shum_18O") call seq_flds_add(x2l_states,"Sa_shum_18O") call seq_flds_add(x2i_states,"Sa_shum_18O") longname = 'Specific humidty of H218O at the lowest model level' stdname = 'H218OV' attname = 'Sa_shum_18O' call metadata_set(attname, longname, stdname, units) ! Surface snow water equivalent (land/atm only) call seq_flds_add(l2x_states,"Sl_snowh_16O") call seq_flds_add(l2x_states,"Sl_snowh_18O") call seq_flds_add(l2x_states,"Sl_snowh_HDO") call seq_flds_add(x2a_states,"Sl_snowh_16O") call seq_flds_add(x2a_states,"Sl_snowh_18O") call seq_flds_add(x2a_states,"Sl_snowh_HDO") longname = 'Isotopic surface snow water equivalent' stdname = 'surface_snow_water_equivalent' units = 'm' attname = 'Sl_snowh_16O' call metadata_set(attname, longname, stdname, units) attname = 'Sl_snowh_18O' call metadata_set(attname, longname, stdname, units) attname = 'Sl_snowh_HDO' call metadata_set(attname, longname, stdname, units) attname = 'Sl_snowh_16O' call metadata_set(attname, longname, stdname, units) attname = 'Sl_snowh_18O' call metadata_set(attname, longname, stdname, units) attname = 'Sl_snowh_HDO' call metadata_set(attname, longname, stdname, units) !-------------- !Isotopic Rain: !-------------- !Isotopic Precipitation Fluxes: units = 'kg m-2 s-1' call seq_flds_add(a2x_fluxes,"Faxa_rainc_16O") call seq_flds_add(a2x_fluxes,"Faxa_rainl_16O") call seq_flds_add(x2o_fluxes, "Faxa_rain_16O") call seq_flds_add(x2l_fluxes,"Faxa_rainc_16O") call seq_flds_add(x2l_fluxes,"Faxa_rainl_16O") call seq_flds_add(x2i_fluxes, "Faxa_rain_16O") longname = 'Water flux due to H216O rain' !equiv. to bulk stdname = 'H2_16O_rainfall_flux' attname = 'Faxa_rain_16O' call metadata_set(attname, longname, stdname, units) longname = 'H216O Convective precipitation rate' stdname = 'H2_16O_convective_precipitation_flux' attname = 'Faxa_rainc_16O' call metadata_set(attname, longname, stdname, units) longname = 'H216O Large-scale (stable) precipitation rate' stdname = 'H2_16O_large_scale_precipitation_flux' attname = 'Faxa_rainl_16O' call metadata_set(attname, longname, stdname, units) call seq_flds_add(a2x_fluxes,"Faxa_rainc_18O") call seq_flds_add(a2x_fluxes,"Faxa_rainl_18O") call seq_flds_add(x2o_fluxes, "Faxa_rain_18O") call seq_flds_add(x2l_fluxes,"Faxa_rainc_18O") call seq_flds_add(x2l_fluxes,"Faxa_rainl_18O") call seq_flds_add(x2i_fluxes, "Faxa_rain_18O") longname = 'Water flux due to H218O rain' stdname = 'h2_18o_rainfall_flux' attname = 'Faxa_rain_18O' call metadata_set(attname, longname, stdname, units) longname = 'H218O Convective precipitation rate' stdname = 'H2_18O_convective_precipitation_flux' attname = 'Faxa_rainc_18O' call metadata_set(attname, longname, stdname, units) longname = 'H218O Large-scale (stable) precipitation rate' stdname = 'H2_18O_large_scale_precipitation_flux' attname = 'Faxa_rainl_18O' call metadata_set(attname, longname, stdname, units) call seq_flds_add(a2x_fluxes,"Faxa_rainc_HDO") call seq_flds_add(a2x_fluxes,"Faxa_rainl_HDO") call seq_flds_add(x2o_fluxes, "Faxa_rain_HDO") call seq_flds_add(x2l_fluxes,"Faxa_rainc_HDO") call seq_flds_add(x2l_fluxes,"Faxa_rainl_HDO") call seq_flds_add(x2i_fluxes, "Faxa_rain_HDO") longname = 'Water flux due to HDO rain' stdname = 'hdo_rainfall_flux' attname = 'Faxa_rain_HDO' call metadata_set(attname, longname, stdname, units) longname = 'HDO Convective precipitation rate' stdname = 'HDO_convective_precipitation_flux' attname = 'Faxa_rainc_HDO' call metadata_set(attname, longname, stdname, units) longname = 'HDO Large-scale (stable) precipitation rate' stdname = 'HDO_large_scale_precipitation_flux' attname = 'Faxa_rainl_HDO' call metadata_set(attname, longname, stdname, units) !------------- !Isotopic snow: !------------- call seq_flds_add(a2x_fluxes,"Faxa_snowc_16O") call seq_flds_add(a2x_fluxes,"Faxa_snowl_16O") call seq_flds_add(x2o_fluxes, "Faxa_snow_16O") call seq_flds_add(x2l_fluxes,"Faxa_snowc_16O") call seq_flds_add(x2l_fluxes,"Faxa_snowl_16O") call seq_flds_add(x2i_fluxes, "Faxa_snow_16O") longname = 'Water equiv. H216O snow flux' stdname = 'h2_16o_snowfall_flux' attname = 'Faxa_snow_16O' call metadata_set(attname, longname, stdname, units) longname = 'H2_16O Convective snow rate (water equivalent)' stdname = 'H2_16O_convective_snowfall_flux' attname = 'Faxa_snowc_16O' call metadata_set(attname, longname, stdname, units) longname = 'H2_16O Large-scale (stable) snow rate (water equivalent)' stdname = 'H2_16O_large_scale_snowfall_flux' attname = 'Faxa_snowl_16O' call metadata_set(attname, longname, stdname, units) call seq_flds_add(a2x_fluxes,"Faxa_snowc_18O") call seq_flds_add(a2x_fluxes,"Faxa_snowl_18O") call seq_flds_add(x2o_fluxes, "Faxa_snow_18O") call seq_flds_add(x2l_fluxes,"Faxa_snowc_18O") call seq_flds_add(x2l_fluxes,"Faxa_snowl_18O") call seq_flds_add(x2i_fluxes, "Faxa_snow_18O") longname = 'Isotopic water equiv. snow flux of H218O' stdname = 'h2_18o_snowfall_flux' attname = 'Faxa_snow_18O' call metadata_set(attname, longname, stdname, units) longname = 'H2_18O Convective snow rate (water equivalent)' stdname = 'H2_18O_convective_snowfall_flux' attname = 'Faxa_snowc_18O' call metadata_set(attname, longname, stdname, units) longname = 'H2_18O Large-scale (stable) snow rate (water equivalent)' stdname = 'H2_18O_large_scale_snowfall_flux' attname = 'Faxa_snowl_18O' call metadata_set(attname, longname, stdname, units) call seq_flds_add(a2x_fluxes,"Faxa_snowc_HDO") call seq_flds_add(a2x_fluxes,"Faxa_snowl_HDO") call seq_flds_add(x2o_fluxes, "Faxa_snow_HDO") call seq_flds_add(x2l_fluxes,"Faxa_snowc_HDO") call seq_flds_add(x2l_fluxes,"Faxa_snowl_HDO") call seq_flds_add(x2i_fluxes, "Faxa_snow_HDO") longname = 'Isotopic water equiv. snow flux of HDO' stdname = 'hdo_snowfall_flux' attname = 'Faxa_snow_HDO' call metadata_set(attname, longname, stdname, units) longname = 'HDO Convective snow rate (water equivalent)' stdname = 'HDO_convective_snowfall_flux' attname = 'Faxa_snowc_HDO' call metadata_set(attname, longname, stdname, units) longname = 'HDO Large-scale (stable) snow rate (water equivalent)' stdname = 'HDO_large_scale_snowfall_flux' attname = 'Faxa_snowl_HDO' call metadata_set(attname, longname, stdname, units) !---------------------------------- !Isotopic precipitation (rain+snow): !---------------------------------- call seq_flds_add(x2o_fluxes,"Faxa_prec_16O") ! derived rain+snow longname = 'Isotopic Water flux (rain+snow) for H2_16O' stdname = 'h2_18o_precipitation_flux' attname = 'Faxa_prec_16O' call metadata_set(attname, longname, stdname, units) call seq_flds_add(x2o_fluxes,"Faxa_prec_18O") ! derived rain+snow longname = 'Isotopic Water flux (rain+snow) for H2_18O' stdname = 'h2_18o_precipitation_flux' units = 'kg m-2 s-1' attname = 'Faxa_prec_18O' call metadata_set(attname, longname, stdname, units) call seq_flds_add(x2o_fluxes,"Faxa_prec_HDO") ! derived rain+snow longname = 'Isotopic Water flux (rain+snow) for HD_O' stdname = 'hdo_precipitation_flux' units = 'kg m-2 s-1' attname = 'Faxa_prec_HDO' call metadata_set(attname, longname, stdname, units) !------------------------------------- !Isotopic two meter reference humidity: !------------------------------------- ! H216O Reference specific humidity at 2 meters call seq_flds_add(l2x_states,"Sl_qref_16O") call seq_flds_add(i2x_states,"Si_qref_16O") call seq_flds_add(xao_states,"So_qref_16O") call seq_flds_add(x2a_states,"Sx_qref_16O") longname = 'Reference H216O specific humidity at 2 meters' stdname = 'H216O_specific_humidity' units = 'kg kg-1' attname = 'Si_qref_16O' call metadata_set(attname, longname, stdname, units) attname = 'Sl_qref_16O' call metadata_set(attname, longname, stdname, units) attname = 'So_qref_16O' call metadata_set(attname, longname, stdname, units) attname = 'Sx_qref_16O' call metadata_set(attname, longname, stdname, units) ! HD16O Reference specific humidity at 2 meters call seq_flds_add(l2x_states,"Sl_qref_HDO") call seq_flds_add(i2x_states,"Si_qref_HDO") call seq_flds_add(xao_states,"So_qref_HDO") call seq_flds_add(x2a_states,"Sx_qref_HDO") longname = 'Reference HD16O specific humidity at 2 meters' stdname = 'HD16O_specific_humidity' units = 'kg kg-1' attname = 'Si_qref_HDO' call metadata_set(attname, longname, stdname, units) attname = 'Sl_qref_HDO' call metadata_set(attname, longname, stdname, units) attname = 'So_qref_HDO' call metadata_set(attname, longname, stdname, units) attname = 'Sx_qref_HDO' call metadata_set(attname, longname, stdname, units) ! H218O Reference specific humidity at 2 meters call seq_flds_add(l2x_states,"Sl_qref_18O") call seq_flds_add(i2x_states,"Si_qref_18O") call seq_flds_add(xao_states,"So_qref_18O") call seq_flds_add(x2a_states,"Sx_qref_18O") longname = 'Reference H218O specific humidity at 2 meters' stdname = 'H218O_specific_humidity' units = 'kg kg-1' attname = 'Si_qref_18O' call metadata_set(attname, longname, stdname, units) attname = 'Sl_qref_18O' call metadata_set(attname, longname, stdname, units) attname = 'So_qref_18O' call metadata_set(attname, longname, stdname, units) attname = 'Sx_qref_18O' call metadata_set(attname, longname, stdname, units) !------------------------- !Isotopic Evaporation flux: !------------------------- ! H216O Evaporation water flux call seq_flds_add(l2x_fluxes,"Fall_evap_16O") call seq_flds_add(i2x_fluxes,"Faii_evap_16O") call seq_flds_add(xao_fluxes,"Faox_evap_16O") call seq_flds_add(x2a_fluxes,"Faxx_evap_16O") call seq_flds_add(x2o_fluxes,"Foxx_evap_16O") longname = 'Evaporation H216O flux' stdname = 'H216O_evaporation_flux' units = 'kg m-2 s-1' attname = 'Fall_evap_16O' call metadata_set(attname, longname, stdname, units) attname = 'Faii_evap_16O' call metadata_set(attname, longname, stdname, units) attname = 'Faox_evap_16O' call metadata_set(attname, longname, stdname, units) attname = 'Faxx_evap_16O' call metadata_set(attname, longname, stdname, units) attname = 'Foxx_evap_16O' call metadata_set(attname, longname, stdname, units) ! HD16O Evaporation water flux call seq_flds_add(l2x_fluxes,"Fall_evap_HDO") call seq_flds_add(i2x_fluxes,"Faii_evap_HDO") call seq_flds_add(xao_fluxes,"Faox_evap_HDO") call seq_flds_add(x2a_fluxes,"Faxx_evap_HDO") call seq_flds_add(x2o_fluxes,"Foxx_evap_HDO") longname = 'Evaporation HD16O flux' stdname = 'HD16O_evaporation_flux' units = 'kg m-2 s-1' attname = 'Fall_evap_HDO' call metadata_set(attname, longname, stdname, units) attname = 'Faii_evap_HDO' call metadata_set(attname, longname, stdname, units) attname = 'Faox_evap_HDO' call metadata_set(attname, longname, stdname, units) attname = 'Foxx_evap_HDO' call metadata_set(attname, longname, stdname, units) attname = 'Faxx_evap_HDO' call metadata_set(attname, longname, stdname, units) ! H218O Evaporation water flux call seq_flds_add(l2x_fluxes,"Fall_evap_18O") call seq_flds_add(i2x_fluxes,"Faii_evap_18O") call seq_flds_add(xao_fluxes,"Faox_evap_18O") call seq_flds_add(x2a_fluxes,"Faxx_evap_18O") call seq_flds_add(x2o_fluxes,"Foxx_evap_18O") longname = 'Evaporation H218O flux' stdname = 'H218O_evaporation_flux' units = 'kg m-2 s-1' attname = 'Fall_evap_18O' call metadata_set(attname, longname, stdname, units) attname = 'Faii_evap_18O' call metadata_set(attname, longname, stdname, units) attname = 'Faox_evap_18O' call metadata_set(attname, longname, stdname, units) attname = 'Faxx_evap_18O' call metadata_set(attname, longname, stdname, units) attname = 'Foxx_evap_18O' call metadata_set(attname, longname, stdname, units) !----------------------------- !Isotopic sea ice melting flux: !----------------------------- ! H216O Water flux from melting units = 'kg m-2 s-1' call seq_flds_add(i2x_fluxes,"Fioi_meltw_16O") call seq_flds_add(x2o_fluxes,"Fioi_meltw_16O") longname = 'H2_16O flux due to melting' stdname = 'h2_16o_surface_snow_melt_flux' attname = 'Fioi_meltw_16O' call metadata_set(attname, longname, stdname, units) ! H218O Water flux from melting call seq_flds_add(i2x_fluxes,"Fioi_meltw_18O") call seq_flds_add(x2o_fluxes,"Fioi_meltw_18O") longname = 'H2_18O flux due to melting' stdname = 'h2_18o_surface_snow_melt_flux' attname = 'Fioi_meltw_18O' call metadata_set(attname, longname, stdname, units) ! HDO Water flux from melting units = 'kg m-2 s-1' call seq_flds_add(i2x_fluxes,"Fioi_meltw_HDO") call seq_flds_add(x2o_fluxes,"Fioi_meltw_HDO") longname = 'HDO flux due to melting' stdname = 'hdo_surface_snow_melt_flux' attname = 'Fioi_meltw_HDO' call metadata_set(attname, longname, stdname, units) !Iso-Runoff ! r2o, l2x, x2r units = 'kg m-2 s-1' call seq_flds_add(l2x_fluxes,'Flrl_rofi_16O') call seq_flds_add(x2r_fluxes,'Flrl_rofi_16O') longname = 'H2_16O Water flux from land (frozen)' stdname = 'H2_16O_frozen_water_flux_into_runoff' attname = 'Flrl_rofi_16O' call metadata_set(attname, longname, stdname, units) call seq_flds_add(l2x_fluxes,'Flrl_rofi_18O') call seq_flds_add(x2r_fluxes,'Flrl_rofi_18O') longname = 'H2_18O Water flux from land (frozen)' stdname = 'H2_18O_frozen_water_flux_into_runoff' attname = 'Flrl_rofi_18O' call metadata_set(attname, longname, stdname, units) call seq_flds_add(l2x_fluxes,'Flrl_rofi_HDO') call seq_flds_add(x2r_fluxes,'Flrl_rofi_HDO') longname = 'HDO Water flux from land (frozen)' stdname = 'HDO_frozen_water_flux_into_runoff' attname = 'Flrl_rofi_HDO' call metadata_set(attname, longname, stdname, units) call seq_flds_add(l2x_fluxes,'Flrl_rofl_16O') call seq_flds_add(x2r_fluxes,'Flrl_rofl_16O') longname = 'H2_16O Water flux from land (liquid)' stdname = 'H2_16O_liquid_water_flux_into_runoff' attname = 'Flrl_rofl_16O' call metadata_set(attname, longname, stdname, units) call seq_flds_add(l2x_fluxes,'Flrl_rofl_18O') call seq_flds_add(x2r_fluxes,'Flrl_rofl_18O') longname = 'H2_18O Water flux from land (liquid)' stdname = 'H2_18O_liquid_water_flux_into_runoff' attname = 'Flrl_rofl_18O' call metadata_set(attname, longname, stdname, units) call seq_flds_add(l2x_fluxes,'Flrl_rofl_HDO') call seq_flds_add(x2r_fluxes,'Flrl_rofl_HDO') longname = 'HDO Water flux from land (liquid)' stdname = 'HDO_liquid_water_flux_into_runoff' attname = 'Flrl_rofl_HDO' call metadata_set(attname, longname, stdname, units) ! r2x, x2o call seq_flds_add(r2x_fluxes,'Forr_rofl_16O') call seq_flds_add(x2o_fluxes,'Foxx_rofl_16O') call seq_flds_add(r2o_liq_fluxes,'Forr_rofl_16O') longname = 'H2_16O Water flux due to liq runoff ' stdname = 'H2_16O_water_flux_into_sea_water' attname = 'Forr_rofl_16O' call metadata_set(attname, longname, stdname, units) attname = 'Foxx_rofl_16O' call metadata_set(attname, longname, stdname, units) call seq_flds_add(r2x_fluxes,'Forr_rofl_18O') call seq_flds_add(x2o_fluxes,'Foxx_rofl_18O') call seq_flds_add(r2o_liq_fluxes,'Forr_rofl_18O') longname = 'H2_18O Water flux due to liq runoff ' stdname = 'H2_18O_water_flux_into_sea_water' attname = 'Forr_rofl_18O' call metadata_set(attname, longname, stdname, units) attname = 'Foxx_rofl_18O' call metadata_set(attname, longname, stdname, units) call seq_flds_add(r2x_fluxes,'Forr_rofl_HDO') call seq_flds_add(x2o_fluxes,'Foxx_rofl_HDO') call seq_flds_add(r2o_liq_fluxes,'Forr_rofl_HDO') longname = 'HDO Water flux due to liq runoff ' stdname = 'HDO_water_flux_into_sea_water' attname = 'Forr_rofl_HDO' call metadata_set(attname, longname, stdname, units) attname = 'Foxx_rofl_HDO' call metadata_set(attname, longname, stdname, units) call seq_flds_add(r2x_fluxes,'Forr_rofi_16O') call seq_flds_add(x2o_fluxes,'Foxx_rofi_16O') call seq_flds_add(r2o_ice_fluxes,'Forr_rofi_16O') longname = 'H2_16O Water flux due to ice runoff ' stdname = 'H2_16O_water_flux_into_sea_water' attname = 'Forr_rofi_16O' call metadata_set(attname, longname, stdname, units) attname = 'Foxx_rofi_16O' call metadata_set(attname, longname, stdname, units) call seq_flds_add(r2x_fluxes,'Forr_rofi_18O') call seq_flds_add(x2o_fluxes,'Foxx_rofi_18O') call seq_flds_add(r2o_ice_fluxes,'Forr_rofi_18O') longname = 'H2_18O Water flux due to ice runoff ' stdname = 'H2_18O_water_flux_into_sea_water' attname = 'Forr_rofi_18O' call metadata_set(attname, longname, stdname, units) attname = 'Foxx_rofi_18O' call metadata_set(attname, longname, stdname, units) call seq_flds_add(r2x_fluxes,'Forr_rofi_HDO') call seq_flds_add(x2o_fluxes,'Foxx_rofi_HDO') call seq_flds_add(r2o_ice_fluxes,'Forr_rofi_HDO') longname = 'HDO Water flux due to ice runoff ' stdname = 'HDO_water_flux_into_sea_water' attname = 'Forr_rofi_HDO' call metadata_set(attname, longname, stdname, units) ! r2x, x2l call seq_flds_add(r2x_fluxes,'Flrr_flood_16O') call seq_flds_add(x2l_fluxes,'Flrr_flood_16O') longname = 'H2_16O waterrflux due to flooding' stdname = 'H2_16O_flodding_water_flux_back_to_land' attname = 'Flrr_flood_16O' call metadata_set(attname, longname, stdname, units) call seq_flds_add(r2x_fluxes,'Flrr_flood_18O') call seq_flds_add(x2l_fluxes,'Flrr_flood_18O') longname = 'H2_18O waterrflux due to flooding' stdname = 'H2_18O_flodding_water_flux_back_to_land' attname = 'Flrr_flood_18O' call metadata_set(attname, longname, stdname, units) call seq_flds_add(r2x_fluxes,'Flrr_flood_HDO') call seq_flds_add(x2l_fluxes,'Flrr_flood_HDO') longname = 'HDO Waterrflux due to flooding' stdname = 'HDO_flodding_water_flux_back_to_land' attname = 'Flrr_flood_HDO' call metadata_set(attname, longname, stdname, units) units = 'm3' call seq_flds_add(r2x_states,'Flrr_volr_16O') call seq_flds_add(x2l_states,'Flrr_volr_16O') longname = 'H2_16O river channel water volume ' stdname = 'H2_16O_rtm_volr' attname = 'Flrr_volr_16O' call metadata_set(attname, longname, stdname, units) call seq_flds_add(r2x_states,'Flrr_volr_18O') call seq_flds_add(x2l_states,'Flrr_volr_18O') longname = 'H2_18O river channel water volume ' stdname = 'H2_18O_rtm_volr' attname = 'Flrr_volr_18O' call metadata_set(attname, longname, stdname, units) call seq_flds_add(r2x_states,'Flrr_volr_HDO') call seq_flds_add(x2l_states,'Flrr_volr_HDO') longname = 'HDO river channel water volume ' stdname = 'HDO_rtm_volr' attname = 'Flrr_volr_HDO' call metadata_set(attname, longname, stdname, units) ! call seq_flds_add(r2x_fluxes,'Flrr_flood_HDO') ! call seq_flds_add(x2l_fluxes,'Flrr_flood_HDO') ! longname = 'H2_18O Waterrflux due to flooding' ! stdname = 'H2_18O_flodding_water_flux_back_to_land' ! attname = 'Flrr_flood_18O' ! call metadata_set(attname, longname, stdname, units) !----------------------------- endif !Water isotopes !----------------------------------------------------------------------------- ! optional per thickness category fields !----------------------------------------------------------------------------- if (seq_flds_i2o_per_cat) then do num = 1, ice_ncat write(cnum,'(i2.2)') num ! Fractional ice coverage wrt ocean name = 'Si_ifrac_' // cnum call seq_flds_add(i2x_states,name) call seq_flds_add(x2o_states,name) longname = 'fractional ice coverage wrt ocean for thickness category ' // cnum stdname = 'sea_ice_area_fraction' units = '1' attname = name call metadata_set(attname, longname, stdname, units) ! Net shortwave radiation name = 'PFioi_swpen_ifrac_' // cnum call seq_flds_add(i2x_fluxes,name) call seq_flds_add(x2o_fluxes,name) longname = 'net shortwave radiation penetrating into ice and ocean times ice fraction for thickness category ' // cnum stdname = 'product_of_net_downward_shortwave_flux_at_sea_water_surface_and_sea_ice_area_fraction' units = 'W m-2' attname = name call metadata_set(attname, longname, stdname, units) end do ! Fractional atmosphere coverage wrt ocean name = 'Sf_afrac' call seq_flds_add(x2o_states,name) longname = 'fractional atmosphere coverage wrt ocean' stdname = 'atmosphere_area_fraction' units = '1' attname = name call metadata_set(attname, longname, stdname, units) name = 'Sf_afracr' call seq_flds_add(x2o_states,name) longname = 'fractional atmosphere coverage used in radiation computations wrt ocean' stdname = 'atmosphere_area_fraction' units = '1' attname = name call metadata_set(attname, longname, stdname, units) ! Net shortwave radiation name = 'Foxx_swnet_afracr' call seq_flds_add(x2o_fluxes,name) longname = 'net shortwave radiation times atmosphere fraction' stdname = 'product_of_net_downward_shortwave_flux_at_sea_water_surface_and_atmosphere_area_fraction' units = 'W m-2' attname = name call metadata_set(attname, longname, stdname, units) endif !----------------------------------------------------------------------------- ! Read namelist for CARMA ! if carma_flds are specified then setup fields for CLM to CAM communication !----------------------------------------------------------------------------- call shr_carma_readnl(nlfilename='drv_flds_in', carma_fields=carma_fields) if (carma_fields /= ' ') then call seq_flds_add(l2x_fluxes, trim(carma_fields)) call seq_flds_add(x2a_fluxes, trim(carma_fields)) longname = 'Volumetric soil water' stdname = 'soil_water' units = 'm3/m3' call metadata_set(carma_fields, longname, stdname, units) endif !----------------------------------------------------------------------------- ! Read namelist for MEGAN ! if MEGAN emission are specified then setup fields for CLM to CAM communication ! (emissions fluxes) !----------------------------------------------------------------------------- call shr_megan_readnl(nlfilename='drv_flds_in', ID=ID, megan_fields=megan_voc_fields) if (shr_megan_mechcomps_n>0) then call seq_flds_add(l2x_fluxes, trim(megan_voc_fields)) call seq_flds_add(x2a_fluxes, trim(megan_voc_fields)) longname = 'MEGAN emission fluxes' stdname = 'megan_fluxes' units = 'molecules/m2/sec' call metadata_set(megan_voc_fields, longname, stdname, units) endif !----------------------------------------------------------------------------- ! Read namelist for Fire Emissions ! if fire emission are specified then setup fields for CLM to CAM communication ! (emissions fluxes) !----------------------------------------------------------------------------- call shr_fire_emis_readnl(nlfilename='drv_flds_in', ID=ID, emis_fields=fire_emis_fields) if (shr_fire_emis_mechcomps_n>0) then call seq_flds_add(l2x_fluxes, trim(fire_emis_fields)) call seq_flds_add(x2a_fluxes, trim(fire_emis_fields)) longname = 'wild fire emission fluxes' stdname = 'fire_emis' units = 'kg/m2/sec' call metadata_set(fire_emis_fields, longname, stdname, units) call seq_flds_add(l2x_states, trim(shr_fire_emis_ztop_token)) call seq_flds_add(x2a_states, trim(shr_fire_emis_ztop_token)) longname = 'wild fire plume height' stdname = 'fire_plume_top' units = 'm' call metadata_set(shr_fire_emis_ztop_token, longname, stdname, units) endif !----------------------------------------------------------------------------- ! Dry Deposition fields ! First read namelist and figure out the drydep field list to pass ! Then check if file exists and if not, n_drydep will be zero ! Then add dry deposition fields to land export and atmosphere import states ! Then initialize dry deposition fields ! Note: CAM and CLM will then call seq_drydep_setHCoeff !----------------------------------------------------------------------------- call seq_drydep_readnl(nlfilename="drv_flds_in", ID=ID, seq_drydep_fields=seq_drydep_fields) if ( lnd_drydep ) then call seq_flds_add(l2x_states, seq_drydep_fields) call seq_flds_add(x2a_states, seq_drydep_fields) longname = 'dry deposition velocity' stdname = 'drydep_vel' units = 'cm/sec' call metadata_set(seq_drydep_fields, longname, stdname, units) endif call seq_drydep_init( ) !----------------------------------------------------------------------------- ! Nitrogen Deposition fields ! First read namelist and figure out the ndepdep field list to pass ! Then check if file exists and if not, n_drydep will be zero ! Then add nitrogen deposition fields to atm export, lnd import and ocn import !----------------------------------------------------------------------------- call shr_ndep_readnl(nlfilename="drv_flds_in", ID=ID, ndep_fields=ndep_fields, add_ndep_fields=add_ndep_fields) if (add_ndep_fields) then call seq_flds_add(a2x_fluxes, ndep_fields) call seq_flds_add(x2l_fluxes, ndep_fields) call seq_flds_add(x2o_fluxes, ndep_fields) longname = 'nitrogen deposition flux' stdname = 'nitrogen_deposition' units = 'kg(N)/m2/sec' call metadata_set(ndep_fields, longname, stdname, units) end if !---------------------------------------------------------------------------- ! state + flux fields !---------------------------------------------------------------------------- seq_flds_dom_coord = trim(dom_coord ) seq_flds_a2x_states = trim(a2x_states) seq_flds_x2a_states = trim(x2a_states) seq_flds_i2x_states = trim(i2x_states) seq_flds_x2i_states = trim(x2i_states) seq_flds_l2x_states = trim(l2x_states) seq_flds_l2x_states_to_glc = trim(l2x_states_to_glc) seq_flds_x2l_states = trim(x2l_states) seq_flds_x2l_states_from_glc = trim(x2l_states_from_glc) seq_flds_o2x_states = trim(o2x_states) seq_flds_x2o_states = trim(x2o_states) seq_flds_g2x_states = trim(g2x_states) seq_flds_g2x_states_to_lnd = trim(g2x_states_to_lnd) seq_flds_x2g_states = trim(x2g_states) seq_flds_xao_states = trim(xao_states) seq_flds_xao_albedo = trim(xao_albedo) seq_flds_xao_diurnl = trim(xao_diurnl) seq_flds_r2x_states = trim(r2x_states) seq_flds_x2r_states = trim(x2r_states) seq_flds_w2x_states = trim(w2x_states) seq_flds_x2w_states = trim(x2w_states) seq_flds_dom_other = trim(dom_other ) seq_flds_a2x_fluxes = trim(a2x_fluxes) seq_flds_x2a_fluxes = trim(x2a_fluxes) seq_flds_i2x_fluxes = trim(i2x_fluxes) seq_flds_x2i_fluxes = trim(x2i_fluxes) seq_flds_l2x_fluxes = trim(l2x_fluxes) seq_flds_l2x_fluxes_to_glc = trim(l2x_fluxes_to_glc) seq_flds_x2l_fluxes = trim(x2l_fluxes) seq_flds_x2l_fluxes_from_glc = trim(x2l_fluxes_from_glc) seq_flds_o2x_fluxes = trim(o2x_fluxes) seq_flds_x2o_fluxes = trim(x2o_fluxes) seq_flds_g2x_fluxes = trim(g2x_fluxes) seq_flds_g2x_fluxes_to_lnd = trim(g2x_fluxes_to_lnd) seq_flds_g2o_liq_fluxes = trim(g2o_liq_fluxes) seq_flds_g2o_ice_fluxes = trim(g2o_ice_fluxes) seq_flds_x2g_fluxes = trim(x2g_fluxes) seq_flds_xao_fluxes = trim(xao_fluxes) seq_flds_r2x_fluxes = trim(r2x_fluxes) seq_flds_x2r_fluxes = trim(x2r_fluxes) seq_flds_w2x_fluxes = trim(w2x_fluxes) seq_flds_x2w_fluxes = trim(x2w_fluxes) seq_flds_r2o_liq_fluxes = trim(r2o_liq_fluxes) seq_flds_r2o_ice_fluxes = trim(r2o_ice_fluxes) if (seq_comm_iamroot(ID)) then write(logunit,*) subname//': seq_flds_a2x_states= ',trim(seq_flds_a2x_states) write(logunit,*) subname//': seq_flds_a2x_fluxes= ',trim(seq_flds_a2x_fluxes) write(logunit,*) subname//': seq_flds_x2a_states= ',trim(seq_flds_x2a_states) write(logunit,*) subname//': seq_flds_x2a_fluxes= ',trim(seq_flds_x2a_fluxes) write(logunit,*) subname//': seq_flds_l2x_states= ',trim(seq_flds_l2x_states) write(logunit,*) subname//': seq_flds_l2x_fluxes= ',trim(seq_flds_l2x_fluxes) write(logunit,*) subname//': seq_flds_x2l_states= ',trim(seq_flds_x2l_states) write(logunit,*) subname//': seq_flds_x2l_fluxes= ',trim(seq_flds_x2l_fluxes) write(logunit,*) subname//': seq_flds_i2x_states= ',trim(seq_flds_i2x_states) write(logunit,*) subname//': seq_flds_i2x_fluxes= ',trim(seq_flds_i2x_fluxes) write(logunit,*) subname//': seq_flds_x2i_states= ',trim(seq_flds_x2i_states) write(logunit,*) subname//': seq_flds_x2i_fluxes= ',trim(seq_flds_x2i_fluxes) write(logunit,*) subname//': seq_flds_o2x_states= ',trim(seq_flds_o2x_states) write(logunit,*) subname//': seq_flds_o2x_fluxes= ',trim(seq_flds_o2x_fluxes) write(logunit,*) subname//': seq_flds_x2o_states= ',trim(seq_flds_x2o_states) write(logunit,*) subname//': seq_flds_x2o_fluxes= ',trim(seq_flds_x2o_fluxes) write(logunit,*) subname//': seq_flds_g2x_states= ',trim(seq_flds_g2x_states) write(logunit,*) subname//': seq_flds_g2x_fluxes= ',trim(seq_flds_g2x_fluxes) write(logunit,*) subname//': seq_flds_x2g_states= ',trim(seq_flds_x2g_states) write(logunit,*) subname//': seq_flds_x2g_fluxes= ',trim(seq_flds_x2g_fluxes) write(logunit,*) subname//': seq_flds_xao_states= ',trim(seq_flds_xao_states) write(logunit,*) subname//': seq_flds_xao_fluxes= ',trim(seq_flds_xao_fluxes) write(logunit,*) subname//': seq_flds_xao_albedo= ',trim(seq_flds_xao_albedo) write(logunit,*) subname//': seq_flds_xao_diurnl= ',trim(seq_flds_xao_diurnl) write(logunit,*) subname//': seq_flds_r2x_states= ',trim(seq_flds_r2x_states) write(logunit,*) subname//': seq_flds_r2x_fluxes= ',trim(seq_flds_r2x_fluxes) write(logunit,*) subname//': seq_flds_x2r_states= ',trim(seq_flds_x2r_states) write(logunit,*) subname//': seq_flds_x2r_fluxes= ',trim(seq_flds_x2r_fluxes) write(logunit,*) subname//': seq_flds_w2x_states= ',trim(seq_flds_w2x_states) write(logunit,*) subname//': seq_flds_w2x_fluxes= ',trim(seq_flds_w2x_fluxes) write(logunit,*) subname//': seq_flds_x2w_states= ',trim(seq_flds_x2w_states) write(logunit,*) subname//': seq_flds_x2w_fluxes= ',trim(seq_flds_x2w_fluxes) end if call catFields(seq_flds_dom_fields, seq_flds_dom_coord , seq_flds_dom_other ) call catFields(seq_flds_a2x_fields, seq_flds_a2x_states, seq_flds_a2x_fluxes) call catFields(seq_flds_x2a_fields, seq_flds_x2a_states, seq_flds_x2a_fluxes) call catFields(seq_flds_i2x_fields, seq_flds_i2x_states, seq_flds_i2x_fluxes) call catFields(seq_flds_x2i_fields, seq_flds_x2i_states, seq_flds_x2i_fluxes) call catFields(seq_flds_l2x_fields, seq_flds_l2x_states, seq_flds_l2x_fluxes) call catFields(seq_flds_l2x_fields_to_glc, seq_flds_l2x_states_to_glc, seq_flds_l2x_fluxes_to_glc) call catFields(seq_flds_x2l_fields, seq_flds_x2l_states, seq_flds_x2l_fluxes) call catFields(seq_flds_x2l_fields_from_glc, seq_flds_x2l_states_from_glc, seq_flds_x2l_fluxes_from_glc) call catFields(seq_flds_o2x_fields, seq_flds_o2x_states, seq_flds_o2x_fluxes) call catFields(seq_flds_x2o_fields, seq_flds_x2o_states, seq_flds_x2o_fluxes) call catFields(seq_flds_g2x_fields, seq_flds_g2x_states, seq_flds_g2x_fluxes) call catFields(seq_flds_g2x_fields_to_lnd, seq_flds_g2x_states_to_lnd, seq_flds_g2x_fluxes_to_lnd) call catFields(seq_flds_x2g_fields, seq_flds_x2g_states, seq_flds_x2g_fluxes) call catFields(seq_flds_xao_fields, seq_flds_xao_albedo, seq_flds_xao_states) call catFields(stringtmp , seq_flds_xao_fields, seq_flds_xao_fluxes) call catFields(seq_flds_xao_fields, stringtmp , seq_flds_xao_diurnl) call catFields(seq_flds_r2x_fields, seq_flds_r2x_states, seq_flds_r2x_fluxes) call catFields(seq_flds_x2r_fields, seq_flds_x2r_states, seq_flds_x2r_fluxes) call catFields(seq_flds_w2x_fields, seq_flds_w2x_states, seq_flds_w2x_fluxes) call catFields(seq_flds_x2w_fields, seq_flds_x2w_states, seq_flds_x2w_fluxes) end subroutine seq_flds_set !=============================================================================== !BOP =========================================================================== ! ! !IROUTINE: seq_flds_add ! ! !DESCRIPTION: ! Returns new concatentated field list ! in the output character string {\tt outfld}. ! ! !REVISION HISTORY: ! 2011-Nov-27 - M. Vertenstein - first version ! ! !INTERFACE: ------------------------------------------------------------------ subroutine seq_flds_add(outfld, str) ! !USES: ! !INPUT/OUTPUT PARAMETERS: character(len=*),intent(in) :: str ! string character(len=*),intent(inout) :: outfld ! output field name !EOP character(len=*),parameter :: subname = '(seq_flds_add) ' !------------------------------------------------------------------------------- ! !------------------------------------------------------------------------------- if (trim(outfld) == '') then outfld = trim(str) else outfld = trim(outfld)//':'//trim(str) end if if (len_trim(outfld) >= CXX) then write(logunit,*)'fields are = ',trim(outfld) write(logunit,*)'fields length = ',len_trim(outfld) call shr_sys_abort(subname//'ERROR: maximum length of xxx_states or xxx_fluxes has been exceeded') end if end subroutine seq_flds_add !=============================================================================== !BOP =========================================================================== ! ! !IROUTINE: catFields ! ! !DESCRIPTION: ! Returns {\tt nfld} concatentated field lists ! in the output character string {\tt outfield}. ! ! !REVISION HISTORY: ! 2003-Jan-24 - T. Craig - first version ! ! !INTERFACE: ------------------------------------------------------------------ subroutine catFields(outfield, str1, str2) ! !USES: ! !INPUT/OUTPUT PARAMETERS: character(len=*),intent(inout) :: outfield ! output field name character(len=*),intent(in) :: str1 ! string1 character(len=*),intent(in ) :: str2 ! string2 !EOP character(len=*),parameter :: subname = '(seq_flds_catFields) ' !------------------------------------------------------------------------------- ! !------------------------------------------------------------------------------- outfield = '' if (len_trim(str1) > 0 .and. len_trim(str2) > 0) then if (len_trim(str1) + len_trim(str2) + 1 > len(outfield)) then call shr_sys_abort(subname//' ERROR: maximum length of string has been exceeded sum') endif outfield = trim(str1)//':'//trim(str2) else if (len_trim(str1) > 0) then if (len_trim(str1) > len(outfield)) then call shr_sys_abort(subname//' ERROR: maximum length of string has been exceeded str1') endif outfield = trim(str1) endif if (len_trim(str2) > 0) then if (len_trim(str2) > len(outfield)) then call shr_sys_abort(subname//' ERROR: maximum length of string has been exceeded str2') endif outfield = trim(str2) endif endif end subroutine catFields !=============================================================================== !BOP =========================================================================== ! ! !IROUTINE: seq_flds_getField ! ! !DESCRIPTION: ! Returns {\tt nfld} element of the colon-delimited string {\tt cstring} ! in the output character string {\tt outfield}. ! ! !REVISION HISTORY: ! 2003-Jan-24 - T. Craig - first version ! ! !INTERFACE: ------------------------------------------------------------------ subroutine seq_flds_getField(outfield, nfld, cstring) ! !USES: use mct_mod ! !INPUT/OUTPUT PARAMETERS: character(len=*),intent(out) :: outfield ! output field name integer ,intent(in ) :: nfld ! field number character(len=*),intent(in ) :: cstring ! colon delimited field string !EOP type(mct_list) :: mctIstr ! mct list from input cstring type(mct_string) :: mctOStr ! mct string for output outfield character(len=*),parameter :: subname = '(seq_flds_getField) ' !------------------------------------------------------------------------------- ! !------------------------------------------------------------------------------- outfield = '' call mct_list_init(mctIstr,cstring) call mct_list_get(mctOStr,nfld,mctIstr) outfield = mct_string_toChar(mctOStr) call mct_list_clean(mctIstr) call mct_string_clean(mctOStr) end subroutine seq_flds_getField !=============================================================================== ! If the attname passed in contains colons it is assumed to be a list of fields ! all of which have the same names and units subroutine metadata_set(attname , longname, stdname , units ) ! !USES: implicit none ! !INPUT/OUTPUT PARAMETERS: character(len=*), intent(in) :: attname character(len=*), intent(in) :: longname character(len=*), intent(in) :: stdname character(len=*), intent(in) :: units !EOP character(len=*),parameter :: subname = '(seq_flds_metadata_set) ' integer :: i, j i = index(attname,':') j=1 do while(i>j .and. i<=len_trim(attname)) n_entries = n_entries + 1 lookup_entry(n_entries,1) = attname(j:i-1) lookup_entry(n_entries,2) = trim(longname) lookup_entry(n_entries,3) = trim(stdname ) lookup_entry(n_entries,4) = trim(units ) j=i+1 i = index(attname(j:),':') + j - 1 enddo n_entries = n_entries + 1 i = len_trim(attname) lookup_entry(n_entries,1) = attname(j:i) lookup_entry(n_entries,2) = trim(longname) lookup_entry(n_entries,3) = trim(stdname ) lookup_entry(n_entries,4) = trim(units ) if (n_entries .ge. nmax) then write(logunit,*)'n_entries= ',n_entries,' nmax = ',nmax,' attname= ',trim(attname) call shr_sys_abort(subname//'ERROR: nmax fields in lookup_entry table exceeded') end if end subroutine metadata_set !=============================================================================== subroutine set_glc_elevclass_field(name, attname, longname, stdname, units, fieldlist, & additional_list) ! Sets a coupling field for all glc elevation classes (1:glc_nec) plus bare land ! (index 0). ! ! Note that, if glc_nec = 0, then we don't create any coupling fields (not even the ! bare land (0) index) ! ! Puts the coupling fields in the given fieldlist, and also does the appropriate ! metadata_set calls. ! ! additional_list should be .false. (or absent) the first time this is called for a ! given set of coupling fields. However, if this same set of coupling fields is being ! added to multiple field lists, then additional_list should be set to true for the ! second and subsequent calls; in this case, the metadata_set calls are not done ! (because they have already been done). ! ! name, attname and longname give the base name of the field; the elevation class ! index will be appended as a suffix ! !USES: use glc_elevclass_mod, only : glc_get_num_elevation_classes, glc_elevclass_as_string ! !INPUT/OUTPUT PARAMETERS: character(len=*), intent(in) :: name ! base field name to add to fieldlist character(len=*), intent(in) :: attname ! base field name for metadata character(len=*), intent(in) :: longname ! base long name for metadata character(len=*), intent(in) :: stdname ! standard name for metadata character(len=*), intent(in) :: units ! units for metadata character(len=*), intent(inout) :: fieldlist ! field list into which the fields should be added logical, intent(in), optional :: additional_list ! whether this is an additional list for the same set of coupling fields (see above for details; defaults to false) !EOP integer :: num character(len= 16) :: cnum logical :: l_additional_list ! local version of the optional additional_list argument l_additional_list = .false. if (present(additional_list)) then l_additional_list = additional_list end if if (glc_get_num_elevation_classes() > 0) then do num = 0, glc_get_num_elevation_classes() cnum = glc_elevclass_as_string(num) call seq_flds_add(fieldlist, trim(name) // trim(cnum)) if (.not. l_additional_list) then call metadata_set(attname = trim(attname) // trim(cnum), & longname = trim(longname) // ' of elevation class ' // trim(cnum), & stdname = stdname, & units = units) end if end do end if end subroutine set_glc_elevclass_field !=============================================================================== subroutine seq_flds_esmf_metadata_get(shortname, longname, stdname, units) ! !USES: use shr_string_mod, only : shr_string_lastindex implicit none ! !INPUT/OUTPUT PARAMETERS: character(len=*), intent(in) :: shortname character(len=*),optional, intent(out) :: longname character(len=*),optional, intent(out) :: stdname character(len=*),optional, intent(out) :: units !EOP !--- local --- integer :: i,n character(len=CSS) :: llongname, lstdname, lunits, lshortname ! local copies character(len=*),parameter :: undef = 'undefined' character(len=*),parameter :: unknown = 'unknown' logical :: found character(len=*),parameter :: subname = '(seq_flds_esmf_metadata_get) ' !--- define field metadata (name, long_name, standard_name, units) --- llongname = trim(unknown) lstdname = trim(unknown) lunits = trim(unknown) found = .false. if (.not.found) then i = 1 do while (i <= n_entries .and. .not.found) lshortname = trim(shortname) if (trim(lshortname) == trim(lookup_entry(i,1))) then llongname = trim(lookup_entry(i,2)) lstdname = trim(lookup_entry(i,3)) lunits = trim(lookup_entry(i,4)) found =.true. end if i = i + 1 end do endif if (.not.found) then i = 1 do while (i <= n_entries .and. .not.found) n = shr_string_lastIndex(shortname,"_") lshortname = "" if (n < len_trim(shortname)) lshortname = shortname(n+1:len_trim(shortname)) if (trim(lshortname) == trim(lookup_entry(i,1))) then llongname = trim(lookup_entry(i,2)) lstdname = trim(lookup_entry(i,3)) lunits = trim(lookup_entry(i,4)) found = .true. end if i = i + 1 end do endif if (present(longname)) then longname = trim(llongname) endif if (present(stdname)) then stdname = trim(lstdname) endif if (present(units)) then units = trim(lunits) endif end subroutine seq_flds_esmf_metadata_get end module seq_flds_mod