= MESSy/CLaMS: dimensions and representations =


 * The type of channel objects is ''REAL(DP)''

 * Used parallel decomposition types (''dctype'')
  * DC_BC = 0  ! BROADCAST (IO-PE ONLY) -> no decomposition
  * DC_IX = 4  ! INDEX

== Deklaration of dimensions and representations ==

In ''bmil/messy_main_channel_bi.f90'':

==== Dimensions ====

 {{{
  INTEGER, SAVE, PUBLIC :: DIMID_TIME = DIMID_UNDEF
  INTEGER, SAVE, PUBLIC :: DIMID_LEV  = DIMID_UNDEF
  INTEGER, SAVE, PUBLIC :: DIMID_LON  = DIMID_UNDEF
  INTEGER, SAVE, PUBLIC :: DIMID_LAT  = DIMID_UNDEF

  INTEGER, SAVE, PUBLIC :: DIMID_THETA   = DIMID_UNDEF
  INTEGER, SAVE, PUBLIC :: DIMID_TRAJ    = DIMID_UNDEF
  INTEGER, SAVE, PUBLIC :: DIMID_MIX_GRID = DIMID_UNDEF
  INTEGER, SAVE, PUBLIC :: DIMID_NTASKS  = DIMID_UNDEF
  INTEGER, SAVE, PUBLIC :: DIMID_SHUFFLE = DIMID_UNDEF
  INTEGER, SAVE, PUBLIC :: DIMID_SEDI_PARTICLE = DIMID_UNDEF

  INTEGER, SAVE, PUBLIC :: DIMID_WAVE        = DIMID_UNDEF
  INTEGER, SAVE, PUBLIC :: DIMID_DISSOC_LEV  = DIMID_UNDEF
  INTEGER, SAVE, PUBLIC :: DIMID_DISSOC_LEVC = DIMID_UNDEF
  INTEGER, SAVE, PUBLIC :: DIMID_DISSOC_LAT  = DIMID_UNDEF
  INTEGER, SAVE, PUBLIC :: DIMID_DISSOC_SZA  = DIMID_UNDEF
  INTEGER, SAVE, PUBLIC :: DIMID_DISSOC_NUMJ = DIMID_UNDEF
}}}

==== Representations ====

 {{{
  INTEGER, SAVE, PUBLIC :: REPR_LG_CLAMS     = REPR_UNDEF
  INTEGER, SAVE, PUBLIC :: REPR_CLAMS_SHUFFLE= REPR_UNDEF
  INTEGER, SAVE, PUBLIC :: REPR_3DINP_CLAMS  = REPR_UNDEF 
  INTEGER, SAVE, PUBLIC :: REPR_NTASKS = REPR_UNDEF
  INTEGER, SAVE, PUBLIC :: REPR_SEDI_PARTICLE = REPR_UNDEF

  INTEGER, SAVE, PUBLIC :: REPR_DISSOC_WAVE  = REPR_UNDEF
  INTEGER, SAVE, PUBLIC :: REPR_DISSOC_LEV   = REPR_UNDEF
  INTEGER, SAVE, PUBLIC :: REPR_DISSOC_LEVC  = REPR_UNDEF
  INTEGER, SAVE, PUBLIC :: REPR_DISSOC_LAT   = REPR_UNDEF
  INTEGER, SAVE, PUBLIC :: REPR_DISSOC_SZA   = REPR_UNDEF
  INTEGER, SAVE, PUBLIC :: REPR_DISSOC_TABS  = REPR_UNDEF
  INTEGER, SAVE, PUBLIC :: REPR_DISSOC_TABS_DAVG = REPR_UNDEF
  INTEGER, SAVE, PUBLIC :: REPR_DISSOC_TWOD  = REPR_UNDEF
  INTEGER, SAVE, PUBLIC :: REPR_DISSOC_TWODC = REPR_UNDEF
  INTEGER, SAVE, PUBLIC :: REPR_DISSOC_RATE  = REPR_UNDEF
}}}

== Initialize dimensions and representations ==

In ''bmil/messy_main_channel_clams.inc'':

==== Dimensions ====

Initialize with ''new_dimension''

|| ID || Name || Length  ||
|| DIMID_TIME ||  time ||  1 ||
|| DIMID_LON  ||  LON ||  nx ||
|| DIMID_LAT  ||  LAT ||  ny ||
|| DIMID_LEV  ||  LEV ||  nz ||
|| DIMID_THETA || THETA || ntheta ||
|| DIMID_TRAJ         || NPARTS         || nparts_max ||
|| DIMID_SHUFFLE      || NPARTS_SHUFFLE || nparts_max_shuffle ||
|| DIMID_MIX_GRID     || NLEVS          || adapt_par%nlevs ||
|| DIMID_NTASKS       || ntasks         || ntasks ||
|| DIMID_WAVE         || WAVELENGTH     || jpwave ||
|| DIMID_DISSOC_LEV   || DISSOC_LEV     || jpslevall ||
|| DIMID_DISSOC_LEVC  || DISSOC_LEVC    || jpslev ||
|| DIMID_DISSOC_LAT   || DISSOC_LAT     || jpschi ||
|| DIMID_DISSOC_SZA   || DISSOC_SZA     || jpschi ||
|| DIMID_DISSOC_NUMJ  || DISSOC_NUMJ    || numj_max ||
|| DIMID_SEDI_PARTICLE|| SEDI_PARTICLE  || nparticle_max ||


==== Dimension variables ====

Create with ''add_dimension_variable''

||Name of dimension variable|| Name of dimension || values of dimension variable ||
|| time          || time || days since starttime ||
|| YYYYMMDD      || time || yyyymmdd  ||
|| dt            || time || delta_time  ||
|| nstep         || time || REAL(current_time_step, DP) ||
|| JULIAN_SECONDS|| time || time in julian seconds  ||
|| LON           || LON  || longrid ||
|| LAT           || LAT  || latgrid ||
|| LEV           || LEV  || levelgrid(1:nz) ||
|| THETA         || THETA|| thetagrid(1:ntheta) ||


==== Representations ====

Create with ''new_representation''

 * '''SCALAR'''
 {{{
CALL new_representation(status, SCALAR, 'SCALAR'                 &
     , rank = 0, link = '----', dctype = 0                       &
     , dimension_ids = scdim &
     , ldimlen       = scdim &
     , axis = '----'                                             &
     )
}}}
 Variables with representation SCALAR:
  * In ''messy_clams_si.f90''
   * '''grid_switch'''
   * '''pre_year''', '''pre_month''', '''pre_day''', '''pre_sec'''
   * '''JULTIME'''

 * '''REPR_NTASKS'''
 {{{
CALL new_representation(status, REPR_NTASKS, 'REPR_NTASKS'       &
     , rank = 1, link = 'x---', dctype = DC_IX                   &
     , dimension_ids = (/ DIMID_NTASKS /) &
     , ldimlen       = (/ 1 /) &  INTEGER, SAVE, PUBLIC :: REPR_SEDI_TBOX = REPR_UNDEF
 
     , axis = 'N---'                                             &
     )
}}}
  * Variables with representation REPR_NTASKS in ''messy_clams_si.f90'':
    * '''dnparts'''
    * '''dnparts_max'''
  * one-dimensional array of length NTASKS
  * index distributed on tasks (dctype=DC_IX), every task can use ''dnparts'' and ''dnparts_max'' as a scalar

 * '''REPR_3DINP_CLAMS'''
 {{{
CALL new_representation(status, REPR_3DINP_CLAMS, 'REPR_3DINP_CLAMS' &
     , rank = 3, link = 'xxx-', dctype = 0                           &
     , dimension_ids = (/ DIMID_LON, DIMID_LAT, DIMID_LEV /)         &
     , ldimlen = (/ AUTO, AUTO, AUTO /)                              &
     , axis = 'XYZ-'                                                 &
     )
}}}
  * Variables with this representation in ''messy_clams_si.f90'':
   * '''UDT, VDT, WDT, LEVELDT, DLEVDZDT'''
   * '''UFUT, VFUT, WFUT, LEVELFUT, DLEVDZFUT'''
   * '''PREDATA_param, FUTDATA_param''' (TEMP, PRESS etc.)
  * 3-dimensional arrays (nlev,nlat,nlon), input from meteorological files
    and current winds 
  * no parallel decomposition (dctype=0)


 * '''REPR_3DINP_CLAMSTHETA'''
 {{{
CALL new_representation(status, REPR_3DINP_CLAMSTHETA, 'REPR_3DINP_CLAMSTHETA' &
     , rank = 3, link = 'xxx-', dctype = 0                           &
     , dimension_ids = (/ DIMID_LON, DIMID_LAT, DIMID_THETA /)         &
     , ldimlen = (/ AUTO, AUTO, AUTO /)                              &
     , axis = 'XYZ-'                                                 &
     )
}}}
  * Variables with this representation in ''messy_clams_si.f90'':
    * '''PREDATA_param, FUTDATA_param''' (EQLAT and PV)
  * 3-dimensional arrays (nlev,nlat,nlon), input from meteorological files 
  * no parallel decomposition (dctype=0)
 

 * '''REPR_LG_CLAMS'''
 {{{
CALL new_representation(status, REPR_LG_CLAMS, 'REPR_LG_CLAMS'         &
     , rank = 1, link = 'x---', dctype = DC_IX                 &
     , dimension_ids = (/ DIMID_TRAJ /) &
     , ldimlen       = (/ dnparts_max /) &
     , axis = 'N---'                                           &
     )
}}}
  * Variables with this representation in ''messy_clams_si.f90'':
    * '''JULSEC'''
    * '''LAT, LAT_OLD, LAT_OLD_MIX'''
    * '''LON, LON_OLD, LON_OLD_MIX'''
    * '''LEV, LEV_OLD'''
    * '''param, param_OLD  '''  (PRESS,TEMP etc)
    * '''SPECARR''' for all species (1-nspec)
    * '''STATE, STATE_VERT'''
    * '''THETA_OLD_MIX, BVFWET_OLD_MIX'''
  * Variables with this representation in ''messy_dissoc_si.f90'':
    * '''jresult'''
  * Variables with this representation in ''messy_clamschem_si.f90'':
    * '''BRATES, TRATES, JRATES, HRATES'''
    * '''BCONST, TCONST, JCONST, HCONST'''
    * '''HETPAR'''
  * One-dimensional arrays of length '''nparts_max'''
  * Index decomposition (dctype=DC_IX) => every task gets one-dimensional arrays of length '''dnparts_max'''


 * '''REPR_CLAMS_SHUFFLE'''
 {{{
CALL new_representation(status, REPR_CLAMS_SHUFFLE, 'REPR_CLAMS_SHUFFLE'  &
     , rank = 1, link = 'x---', dctype = DC_IX                       &
     , dimension_ids = (/ DIMID_SHUFFLE /)                              &
     , ldimlen       = (/ dnparts_max_shuffle /)                              &
     , axis = 'N---'                                                 &
     )
}}}
  * Variables with this representation in ''messy_clamsmix_si.f90'':
    * '''ZETA_SHUFFLED'''
    * '''LAT_SHUFFLED'''
    * '''LON_SHUFFLED'''
    * '''LAT_OLD_MIX_SHUFFLED'''
    * '''LON_OLD_MIX_SHUFFLED'''
    * '''STATE_SHUFFLED, STATE_VERT_SHUFFLED'''
    * '''species_SHUFFLED '''(for all species)
    * '''THETA_SHUFFLED, THETA_OLD_MIX_SHUFFLED'''
    * '''BVFWET_SHUFFLED, BVFWET_OLD_MIX_SHUFFLED'''
  * One-dimensional arrays of length '''nparts_max_shuffle'''
  * Index decomposition (dctype=DX_IX) => every Task gets one-dimensional arrays of length '''dnparts_max_shuffle'''


 * '''REPR_MIX_GRID'''
 {{{
CALL new_representation(status, REPR_MIX_GRID, 'REPR_MIX_GRID'         &
     , rank = 1, link = 'x---', dctype = 0                     &
     , dimension_ids = (/ DIMID_MIX_GRID /) &
     , ldimlen       = (/ adapt_par%nlevs /) &
     , axis = 'N---'                                           &
     )
}}}
  * Variables with this representation in ''messy_clams_si.f90'':
    * '''LEV_GRID'''
    * '''LEV_DELTA'''
    * '''R_GRID'''
  * One-dimensional arrays of lenght '''adapt_par%nlevs'''
  * No decomposition

 * REPR_DISSOC_WAVE
 * REPR_DISSOC_LEV
 * REPR_DISSOC_LEVC
 * REPR_DISSOC_SZA
 * REPR_DISSOC_LAT
 * REPR_DISSOC_TABS
 * REPR_DISSOC_TABS_DAVG
 * REPR_DISSOC_TWOD
 * REPR_DISSOC_TWODC
 * REPR_DISSOC_RATE

 * '''REPR_SEDI_PARTICLE'''
 {{{
    CALL new_representation(status, REPR_SEDI_PARTICLE, 'REPR_SEDI_PARTICLE'  &
         , rank = 1, link = 'x---', dctype = 0                           &
         , dimension_ids = (/ DIMID_SEDI_PARTICLE /)                        &
         , ldimlen       = (/ nparticle_max /)                                &
         , axis = 'N---'                                                 &
         )
}}}