00001 !======================================================================= 00002 !BOP 00003 ! 00004 ! !MODULE: ice_state - primary state variables 00005 ! 00006 ! !DESCRIPTION: 00007 ! 00008 ! Primary state variables in various configurations 00009 ! Note: other state variables are at the end of this... 00010 ! The primary state variable names are: 00011 !------------------------------------------------------------------- 00012 ! for each category aggregated over units 00013 ! categories 00014 !------------------------------------------------------------------- 00015 ! aicen(i,j,n) aice(i,j) --- 00016 ! vicen(i,j,n) vice(i,j) m 00017 ! vsnon(i,j,n) vsno(i,j) m 00018 ! eicen(i,j,k) eice(i,j) J/m^2 00019 ! esnon(i,j,k) esno(i,j) J/m^2 00020 ! trcrn(i,j,it,n) trcr(i,j,it) 00021 ! 00022 ! Area is dimensionless because aice is the fractional area 00023 ! (normalized so that the sum over all categories, including open 00024 ! water, is 1.0). That is why vice/vsno have units of m instead of 00025 ! m^3, and eice/esno have units of J/m^2 instead of J. 00026 ! 00027 ! Variable names follow these rules: 00028 ! 00029 ! (1) For 3D variables (indices i,j,n), write 'ice' or 'sno' or 00030 ! 'sfc' and put an 'n' at the end. 00031 ! (2) For 2D variables (indices i,j) aggregated over all categories, 00032 ! write 'ice' or 'sno' or 'sfc' without the 'n'. 00033 ! (3) For 2D variables (indices i,j) associated with an individual 00034 ! category, write 'i' or 's' instead of 'ice' or 'sno' and put an 'n' 00035 ! at the end: e.g. hin, hsn. These are not declared here 00036 ! but in individual modules (e.g., ice_therm_vertical). 00037 ! 00038 ! !REVISION HISTORY: 00039 ! SVN:$Id: ice_state.F90 37 2006-11-29 18:06:44Z eclare $ 00040 ! 00041 ! authors C. M. Bitz, UW 00042 ! Elizabeth C. Hunke and William H. Lipscomb, LANL 00043 ! 00044 ! 2004: Block structure added by William Lipscomb 00045 ! 2006: Converted to free form source (F90) by Elizabeth Hunke 00046 ! 00047 ! !INTERFACE: 00048 ! 00049 module ice_state 00050 ! 00051 ! !USES: 00052 ! 00053 use ice_kinds_mod 00054 use ice_domain_size 00055 use ice_blocks 00056 ! 00057 !EOP 00058 ! 00059 implicit none 00060 save 00061 00062 !----------------------------------------------------------------- 00063 ! state of the ice aggregated over all categories 00064 !----------------------------------------------------------------- 00065 00066 real (kind=dbl_kind), dimension(nx_block,ny_block,max_blocks) :: 00067 aice , ! concentration of ice 00068 vice , ! volume per unit area of ice (m) 00069 vsno , ! volume per unit area of snow (m) 00070 eice , ! energy of melt. of ice (J/m^2) 00071 esno ! energy of melt. of snow layer (J/m^2) 00072 00073 real (kind=dbl_kind), 00074 dimension(nx_block,ny_block,ntrcr,max_blocks) :: 00075 trcr ! ice tracers 00076 ! 1: surface temperature of ice/snow (C) 00077 ! 2: meltpond volume (m) 00078 00079 !----------------------------------------------------------------- 00080 ! state of the ice for each category 00081 !----------------------------------------------------------------- 00082 00083 real (kind=dbl_kind), dimension (nx_block,ny_block,max_blocks):: 00084 aice0 ! concentration of open water 00085 00086 real (kind=dbl_kind), 00087 dimension (nx_block,ny_block,ncat,max_blocks) :: 00088 aicen , ! concentration of ice 00089 vicen , ! volume per unit area of ice (m) 00090 vsnon ! volume per unit area of snow (m) 00091 00092 real (kind=dbl_kind), 00093 dimension (nx_block,ny_block,ncat,max_blocks) :: 00094 apondn , ! concentration of ponds 00095 hpondn ! pond depth (m) 00096 00097 real (kind=dbl_kind), 00098 dimension (nx_block,ny_block,ntrcr,ncat,max_blocks) :: 00099 trcrn ! tracers 00100 ! 1: surface temperature of ice/snow (C) 00101 00102 integer (kind=int_kind), dimension (ntrcr) :: 00103 trcr_depend ! = 0 for ice area tracers 00104 ! = 1 for ice volume tracers 00105 ! = 2 for snow volume tracers 00106 00107 real (kind=dbl_kind), 00108 dimension (nx_block,ny_block,ntilyr,max_blocks) :: 00109 eicen ! energy of melting for each ice layer (J/m^2) 00110 00111 real (kind=dbl_kind), 00112 dimension (nx_block,ny_block,ntslyr,max_blocks) :: 00113 esnon ! energy of melting for each snow layer (J/m^2) 00114 00115 !----------------------------------------------------------------- 00116 ! indices for tracers 00117 ! The maximum index should be no greater than ntrcr 00118 ! (ice_domain_size) to prevent array out-of-bounds errors. 00119 !----------------------------------------------------------------- 00120 00121 integer (kind=int_kind), parameter :: 00122 nt_Tsfc = 1 ! ice/snow surface temperature 00123 00124 integer (kind=int_kind) :: 00125 nt_iage , ! volume-weighted ice age 00126 nt_FY , ! area-weighted FY ice concentration 00127 nt_volpn , ! melt pond volume - not used, for now 00128 nt_aero ! starting index for aerosol within ice MH 00129 00130 logical (kind=log_kind) :: 00131 tr_aero, ! if .true., use aerosol tracers 00132 tr_iage, ! if .true., use age tracer 00133 tr_FY, ! if .true., use FY tracer 00134 tr_pond ! if .true., use melt pond tracer 00135 00136 character(len=char_len_long) :: 00137 filename_iage, ! filenames of tracer restarts 00138 filename_FY, 00139 filename_volpn, 00140 filename_aero 00141 00142 !----------------------------------------------------------------- 00143 ! dynamic variables closely related to the state of the ice 00144 !----------------------------------------------------------------- 00145 00146 real (kind=dbl_kind), dimension(nx_block,ny_block,max_blocks) :: 00147 uvel , ! x-component of velocity (m/s) 00148 vvel , ! y-component of velocity (m/s) 00149 divu , ! strain rate I component, velocity divergence (1/s) 00150 shear , ! strain rate II component (1/s) 00151 strength ! ice strength (N/m) 00152 00153 !----------------------------------------------------------------- 00154 ! ice state at start of time step, saved for later in the step 00155 !----------------------------------------------------------------- 00156 00157 real (kind=dbl_kind), dimension(nx_block,ny_block,max_blocks) :: 00158 aice_init ! initial concentration of ice, for diagnostics 00159 00160 real (kind=dbl_kind), 00161 dimension(nx_block,ny_block,ncat,max_blocks) :: 00162 aicen_init , ! initial ice concentration, for linear ITD 00163 vicen_init ! initial ice volume (m), for linear ITD 00164 00165 !======================================================================= 00166 00167 contains 00168 00169 !======================================================================= 00170 !BOP 00171 ! 00172 ! !IROUTINE: bound_state - bound calls for ice state variables 00173 ! 00174 ! !INTERFACE: 00175 ! 00176 subroutine bound_state (aicen, trcrn, & 00177 vicen, vsnon, & 00178 eicen, esnon) 00179 ! 00180 ! !DESCRIPTION: 00181 ! 00182 ! Get ghost cell values for ice state variables in each thickness category. 00183 ! NOTE: This subroutine cannot be called from inside a block loop! 00184 ! 00185 ! !REVISION HISTORY: 00186 ! 00187 ! author: William H. Lipscomb, LANL 00188 ! 00189 ! !USES: 00190 ! 00191 use ice_boundary 00192 use ice_domain 00193 use ice_constants 00194 ! 00195 ! !INPUT/OUTPUT PARAMETERS: 00196 ! 00197 real (kind=dbl_kind), 00198 dimension(nx_block,ny_block,ncat,max_blocks), intent(inout) :: 00199 aicen , ! fractional ice area 00200 vicen , ! volume per unit area of ice (m) 00201 vsnon ! volume per unit area of snow (m) 00202 00203 real (kind=dbl_kind), 00204 dimension(nx_block,ny_block,ntrcr,ncat,max_blocks), 00205 intent(inout) :: 00206 trcrn ! ice tracers 00207 00208 real (kind=dbl_kind), 00209 dimension(nx_block,ny_block,ntilyr,max_blocks),intent(inout) :: 00210 eicen ! energy of melting for each ice layer (J/m^2) 00211 00212 real (kind=dbl_kind), 00213 dimension(nx_block,ny_block,ntslyr,max_blocks),intent(inout) :: 00214 esnon ! energy of melting for each snow layer (J/m^2) 00215 ! 00216 !EOP 00217 ! 00218 call ice_HaloUpdate (aicen, halo_info, & 00219 field_loc_center, field_type_scalar) 00220 call ice_HaloUpdate (trcrn, halo_info, & 00221 field_loc_center, field_type_scalar) 00222 call ice_HaloUpdate (vicen, halo_info, & 00223 field_loc_center, field_type_scalar) 00224 call ice_HaloUpdate (vsnon, halo_info, & 00225 field_loc_center, field_type_scalar) 00226 call ice_HaloUpdate (eicen, halo_info, & 00227 field_loc_center, field_type_scalar) 00228 call ice_HaloUpdate (esnon, halo_info, & 00229 field_loc_center, field_type_scalar) 00230 00231 end subroutine bound_state 00232 00233 !======================================================================= 00234 00235 end module ice_state 00236 00237 !=======================================================================