MONC
Functions/Subroutines | Variables
casim_mod Module Reference

Implimentation of CASIM microphysics. More...

Functions/Subroutines

type(component_descriptor_type) function, public casim_get_descriptor ()
 Provides the descriptor back to the caller and is used in component registration. More...
 
subroutine field_information_retrieval_callback (current_state, name, field_information)
 
subroutine field_value_retrieval_callback (current_state, name, field_value)
 Field value retrieval callback, this returns the value of a specific published field. More...
 
subroutine initialisation_callback (current_state)
 The initialisation callback sets up the microphysics. More...
 
subroutine timestep_callback (current_state)
 Called for each column per timestep this will calculate the microphysical tendencies. More...
 
subroutine read_configuration (current_state)
 

Variables

real(wp), dimension(:,:,:), allocatable theta
 
real(wp), dimension(:,:,:), allocatable pressure
 
real(wp), dimension(:,:,:), allocatable z_half
 
real(wp), dimension(:,:,:), allocatable z_centre
 
real(wp), dimension(:,:,:), allocatable dz
 
real(wp), dimension(:,:,:), allocatable qv
 
real(wp), dimension(:,:,:), allocatable qc
 
real(wp), dimension(:,:,:), allocatable nc
 
real(wp), dimension(:,:,:), allocatable qr
 
real(wp), dimension(:,:,:), allocatable nr
 
real(wp), dimension(:,:,:), allocatable m3r
 
real(wp), dimension(:,:,:), allocatable rho
 
real(wp), dimension(:,:,:), allocatable exner
 
real(wp), dimension(:,:,:), allocatable w
 
real(wp), dimension(:,:,:), allocatable tke
 
real(wp), dimension(:,:,:), allocatable qi
 
real(wp), dimension(:,:,:), allocatable ni
 
real(wp), dimension(:,:,:), allocatable qs
 
real(wp), dimension(:,:,:), allocatable ns
 
real(wp), dimension(:,:,:), allocatable m3s
 
real(wp), dimension(:,:,:), allocatable qg
 
real(wp), dimension(:,:,:), allocatable ng
 
real(wp), dimension(:,:,:), allocatable m3g
 
real(wp), dimension(:,:,:), allocatable accumsolmass
 
real(wp), dimension(:,:,:), allocatable accumsolnumber
 
real(wp), dimension(:,:,:), allocatable activesolliquid
 
real(wp), dimension(:,:,:), allocatable aitkensolmass
 
real(wp), dimension(:,:,:), allocatable aitkensolnumber
 
real(wp), dimension(:,:,:), allocatable coarsesolmass
 
real(wp), dimension(:,:,:), allocatable coarsesolnumber
 
real(wp), dimension(:,:,:), allocatable activesolrain
 
real(wp), dimension(:,:,:), allocatable coarsedustmass
 
real(wp), dimension(:,:,:), allocatable coarsedustnumber
 
real(wp), dimension(:,:,:), allocatable activeinsolice
 
real(wp), dimension(:,:,:), allocatable activesolice
 
real(wp), dimension(:,:,:), allocatable activeinsolliquid
 
real(wp), dimension(:,:,:), allocatable accuminsolmass
 
real(wp), dimension(:,:,:), allocatable accuminsolnumber
 
real(wp), dimension(:,:,:), allocatable activesolnumber
 
real(wp), dimension(:,:,:), allocatable activeinsolnumber
 
real(wp), dimension(:,:,:), allocatable dqv
 
real(wp), dimension(:,:,:), allocatable dth
 
real(wp), dimension(:,:,:), allocatable dqc
 
real(wp), dimension(:,:,:), allocatable dnc
 
real(wp), dimension(:,:,:), allocatable dqr
 
real(wp), dimension(:,:,:), allocatable dnr
 
real(wp), dimension(:,:,:), allocatable dm3r
 
real(wp), dimension(:,:,:), allocatable dqi
 
real(wp), dimension(:,:,:), allocatable dni
 
real(wp), dimension(:,:,:), allocatable dqs
 
real(wp), dimension(:,:,:), allocatable dns
 
real(wp), dimension(:,:,:), allocatable dm3s
 
real(wp), dimension(:,:,:), allocatable dqg
 
real(wp), dimension(:,:,:), allocatable dng
 
real(wp), dimension(:,:,:), allocatable dm3g
 
real(wp), dimension(:,:,:), allocatable daccumsolmass
 
real(wp), dimension(:,:,:), allocatable daccumsolnumber
 
real(wp), dimension(:,:,:), allocatable dactivesolliquid
 
real(wp), dimension(:,:,:), allocatable daitkensolmass
 
real(wp), dimension(:,:,:), allocatable daitkensolnumber
 
real(wp), dimension(:,:,:), allocatable dcoarsesolmass
 
real(wp), dimension(:,:,:), allocatable dcoarsesolnumber
 
real(wp), dimension(:,:,:), allocatable dactivesolrain
 
real(wp), dimension(:,:,:), allocatable dcoarsedustmass
 
real(wp), dimension(:,:,:), allocatable dcoarsedustnumber
 
real(wp), dimension(:,:,:), allocatable dactiveinsolice
 
real(wp), dimension(:,:,:), allocatable dactivesolice
 
real(wp), dimension(:,:,:), allocatable dactiveinsolliquid
 
real(wp), dimension(:,:,:), allocatable daccuminsolmass
 
real(wp), dimension(:,:,:), allocatable daccuminsolnumber
 
real(wp), dimension(:,:,:), allocatable dactivesolnumber
 
real(wp), dimension(:,:,:), allocatable dactiveinsolnumber
 
real(wp), dimension(:,:), allocatable surface_precip
 
integer ils
 
integer ile
 
integer jls
 
integer jle
 
integer kls
 
integer kle
 
integer its
 
integer ite
 
integer jts
 
integer jte
 
integer kts
 
integer kte
 
integer iqv =0
 
integer iql =0
 
integer iqr =0
 
integer iqi =0
 
integer iqs =0
 
integer iqg =0
 
integer inl =0
 
integer inr =0
 
integer ini =0
 
integer ins =0
 
integer ing =0
 
integer i3mr =0
 
integer i3ms =0
 
integer i3mg =0
 
integer i_accumsolmass =0
 
integer i_accumsolnumber =0
 
integer i_activesolliquid =0
 
integer i_aitkensolmass =0
 
integer i_aitkensolnumber =0
 
integer i_coarsesolmass =0
 
integer i_coarsesolnumber =0
 
integer i_activesolrain =0
 
integer i_coarsedustmass =0
 
integer i_coarsedustnumber =0
 
integer i_activeinsolice =0
 
integer i_activesolice =0
 
integer i_activeinsolliquid =0
 
integer i_accuminsolmass =0
 
integer i_accuminsolnumber =0
 
integer i_activesolnumber =0
 
integer i_activeinsolnumber =0
 

Detailed Description

Implimentation of CASIM microphysics.

Dummy stub when not compiling with CASIM microphysics.

Function/Subroutine Documentation

◆ casim_get_descriptor()

type(component_descriptor_type) function, public casim_mod::casim_get_descriptor ( )

Provides the descriptor back to the caller and is used in component registration.

Returns
The termination check component descriptor

Definition at line 113 of file casim.F90.

113  casim_get_descriptor%name="casim"
114  casim_get_descriptor%version=0.1
115  casim_get_descriptor%initialisation=>initialisation_callback
116  casim_get_descriptor%timestep=>timestep_callback
117 
118  casim_get_descriptor%field_value_retrieval=>field_value_retrieval_callback
119  casim_get_descriptor%field_information_retrieval=>field_information_retrieval_callback
120 
121  allocate(casim_get_descriptor%published_fields(1))
122 
123  casim_get_descriptor%published_fields(1)="surface_precip"
124 
Here is the call graph for this function:

◆ field_information_retrieval_callback()

subroutine casim_mod::field_information_retrieval_callback ( type(model_state_type), intent(inout), target  current_state,
character(len=*), intent(in)  name,
type(component_field_information_type), intent(out)  field_information 
)
private

Definition at line 128 of file casim.F90.

128  type(model_state_type), target, intent(inout) :: current_state
129  character(len=*), intent(in) :: name
130  type(component_field_information_type), intent(out) :: field_information
131 
132  field_information%field_type=component_array_field_type
133  field_information%data_type=component_double_data_type
134  field_information%number_dimensions=2
135  field_information%dimension_sizes(1)=current_state%local_grid%size(y_index)
136  field_information%dimension_sizes(2)=current_state%local_grid%size(x_index)
137 
138  field_information%enabled=.true.
139 
Here is the caller graph for this function:

◆ field_value_retrieval_callback()

subroutine casim_mod::field_value_retrieval_callback ( type(model_state_type), intent(inout), target  current_state,
character(len=*), intent(in)  name,
type(component_field_value_type), intent(out)  field_value 
)
private

Field value retrieval callback, this returns the value of a specific published field.

Parameters
current_stateCurrent model state
nameThe name of the field to retrieve the value for
field_valuePopulated with the value of the field

Definition at line 147 of file casim.F90.

147  type(model_state_type), target, intent(inout) :: current_state
148  character(len=*), intent(in) :: name
149  type(component_field_value_type), intent(out) :: field_value
150 
151  integer :: i
152 
153  if (name .eq. "surface_precip") then
154  allocate(field_value%real_2d_array(current_state%local_grid%size(y_index), &
155  current_state%local_grid%size(x_index)))
156  field_value%real_2d_array(:,:)= surface_precip(:,:)
157  end if
158 
Here is the caller graph for this function:

◆ initialisation_callback()

subroutine casim_mod::initialisation_callback ( type(model_state_type), intent(inout), target  current_state)
private

The initialisation callback sets up the microphysics.

Parameters
current_stateThe current model state

Set up and allocate the local arrays

Definition at line 164 of file casim.F90.

164  type(model_state_type), target, intent(inout) :: current_state
165 
166  integer :: y_size_local, x_size_local
167 
168  if (is_component_enabled(current_state%options_database, "simplecloud")) then
169  call log_master_log(log_error, "Casim and Simplecloud are enabled, this does not work yet. Please disable one")
170  end if
171 
172  y_size_local = current_state%local_grid%size(y_index)
173  x_size_local = current_state%local_grid%size(x_index)
174 
175  call read_configuration(current_state)
176 
177  ils=1
178  ile=1
179  jls=1
180  jle=1
181  kls=2
182  kle=current_state%local_grid%size(z_index)
183  its=1
184  ite=1
185  jts=1
186  jte=1
187  kts=1
188  kte=current_state%local_grid%size(z_index)
189 
191 
192  allocate(pressure(kte,1,1))
193  allocate(z_half(0:kte,1,1))
194  allocate(z_centre(kte,1,1))
195  allocate(dz(kte,1,1))
196  allocate(rho(kte,1,1))
197  allocate(exner(kte,1,1))
198  allocate(w(kte,1,1))
199  allocate(tke(kte,1,1))
200 
201  allocate(theta(kte,1,1))
202  allocate(qv(kte,1,1))
203  allocate(qc(kte,1,1))
204  allocate(nc(kte,1,1))
205  allocate(qr(kte,1,1))
206  allocate(nr(kte,1,1))
207  allocate(m3r(kte,1,1))
208  allocate(qi(kte,1,1))
209  allocate(ni(kte,1,1))
210  allocate(qs(kte,1,1))
211  allocate(ns(kte,1,1))
212  allocate(m3s(kte,1,1))
213  allocate(qg(kte,1,1))
214  allocate(ng(kte,1,1))
215  allocate(m3g(kte,1,1))
216 
217  allocate(accumsolmass(kte,1,1))
218  allocate(accumsolnumber(kte,1,1))
219  allocate(activesolliquid(kte,1,1))
220  allocate(aitkensolmass(kte,1,1))
221  allocate(aitkensolnumber(kte,1,1))
222  allocate(coarsesolmass(kte,1,1))
223  allocate(coarsesolnumber(kte,1,1))
224  allocate(activesolrain(kte,1,1))
225  allocate(coarsedustmass(kte,1,1))
226  allocate(coarsedustnumber(kte,1,1))
227  allocate(activeinsolice(kte,1,1))
228  allocate(activesolice(kte,1,1))
229  allocate(activeinsolliquid(kte,1,1))
230  allocate(accuminsolmass(kte,1,1))
231  allocate(accuminsolnumber(kte,1,1))
232  allocate(activesolnumber(kte,1,1))
233  allocate(activeinsolnumber(kte,1,1))
234 
235  allocate(dth(kte,1,1))
236  allocate(dqv(kte,1,1))
237  allocate(dqc(kte,1,1))
238  allocate(dnc(kte,1,1))
239  allocate(dqr(kte,1,1))
240  allocate(dnr(kte,1,1))
241  allocate(dm3r(kte,1,1))
242  allocate(dqi(kte,1,1))
243  allocate(dni(kte,1,1))
244  allocate(dqs(kte,1,1))
245  allocate(dns(kte,1,1))
246  allocate(dm3s(kte,1,1))
247  allocate(dqg(kte,1,1))
248  allocate(dng(kte,1,1))
249  allocate(dm3g(kte,1,1))
250 
251  allocate(daccumsolmass(kte,1,1))
252  allocate(daccumsolnumber(kte,1,1))
253  allocate(dactivesolliquid(kte,1,1))
254  allocate(daitkensolmass(kte,1,1))
255  allocate(daitkensolnumber(kte,1,1))
256  allocate(dcoarsesolmass(kte,1,1))
257  allocate(dcoarsesolnumber(kte,1,1))
258  allocate(dactivesolrain(kte,1,1))
259  allocate(dcoarsedustmass(kte,1,1))
260  allocate(dcoarsedustnumber(kte,1,1))
261  allocate(dactiveinsolice(kte,1,1))
262  allocate(dactivesolice(kte,1,1))
263  allocate(dactiveinsolliquid(kte,1,1))
264  allocate(daccuminsolmass(kte,1,1))
265  allocate(daccuminsolnumber(kte,1,1))
266  allocate(dactivesolnumber(kte,1,1))
267  allocate(dactiveinsolnumber(kte,1,1))
268 
269  casdiags % l_surface_rain = .true.
270  casdiags % l_surface_snow = .true.
271  casdiags % l_surface_graup = .true.
272 
273  CALL allocate_diagnostic_space(its, ite, jts, jte, kts, kte)
274 
275  allocate(surface_precip(y_size_local, x_size_local))
276 
277  call set_mphys_switches(option,aerosol_option)
278  call mphys_init(its, ite, jts, jte, kts, kte, ils, ile, jls, jle, kls, kle, l_tendency=.true.)
279 
280  ! Need to allocate the appropriate indices, e.g. iqv, iql...
281  ! This needs to be compatible with the rest of the model
282  ! This essentially reproduces the switching in the main microphysics
283  ! code already done above (set_mphys_switches), so could be combined
284  ! once the MONC method has been finalized.
285  ! Note the numbers assigned here may be different from those assigned
286  ! in the microphysics since we share the q array with other components.
287 
288  if (.not. allocated(current_state%cq))then
289  allocate(current_state%cq(current_state%number_q_fields))
290  current_state%cq=0.0_default_precision
291  end if
292 
293  ! Mass
294  iqv = get_q_index(standard_q_names%VAPOUR, 'casim')
295  if (nq_l>0)then
296  iql = get_q_index(standard_q_names%CLOUD_LIQUID_MASS, 'casim')
297  current_state%cq(iql) = -1.0
298  end if
299  if (nq_r>0)then
300  iqr = get_q_index(standard_q_names%RAIN_MASS, 'casim')
301  current_state%cq(iqr) = -1.0
302  end if
303  if (.not. l_warm)then
304  if (nq_i>0)then
305  iqi = get_q_index(standard_q_names%ICE_MASS, 'casim')
306  current_state%cq(iqi) = -1.0
307  end if
308  if (nq_s>0)then
309  iqs = get_q_index(standard_q_names%SNOW_MASS, 'casim')
310  current_state%cq(iqs) = -1.0
311  end if
312  if (nq_g>0)then
313  iqg = get_q_index(standard_q_names%GRAUPEL_MASS, 'casim')
314  current_state%cq(iqg) = -1.0
315  end if
316  end if
317 
318  ! Number
319  if (l_2mc)inl = get_q_index(standard_q_names%CLOUD_LIQUID_NUMBER, 'casim')
320  if (l_2mr)inr = get_q_index(standard_q_names%RAIN_NUMBER, 'casim')
321  if (.not. l_warm)then
322  if (l_2mi)ini = get_q_index(standard_q_names%ICE_NUMBER, 'casim')
323  if (l_2ms)ins = get_q_index(standard_q_names%SNOW_NUMBER, 'casim')
324  if (l_2mg)ing = get_q_index(standard_q_names%GRAUPEL_NUMBER, 'casim')
325  end if
326 
327  ! Third moments
328  if (l_3mr)i3mr = get_q_index(standard_q_names%RAIN_THIRD_MOMENT, 'casim')
329  if (.not. l_warm)then
330  if (l_3ms)i3ms = get_q_index(standard_q_names%SNOW_THIRD_MOMENT, 'casim')
331  if (l_3mg)i3mg = get_q_index(standard_q_names%GRAUPEL_THIRD_MOMENT, 'casim')
332  end if
333 
334  ! Aerosol
335  if (soluble_modes(1) > 1) i_aitkensolmass = &
336  get_q_index(standard_q_names%AITKEN_SOL_MASS, 'casim')
337  if (soluble_modes(1) > 0) i_aitkensolnumber = &
338  get_q_index(standard_q_names%AITKEN_SOL_NUMBER, 'casim')
339  if (soluble_modes(2) > 1) i_accumsolmass = &
340  get_q_index(standard_q_names%ACCUM_SOL_MASS, 'casim')
341  if (soluble_modes(2) > 0) i_accumsolnumber = &
342  get_q_index(standard_q_names%ACCUM_SOL_NUMBER, 'casim')
343  if (soluble_modes(3) > 1) i_coarsesolmass = &
344  get_q_index(standard_q_names%COARSE_SOL_MASS, 'casim')
345  if (soluble_modes(3) > 0) i_coarsesolnumber = &
346  get_q_index(standard_q_names%COARSE_SOL_NUMBER, 'casim')
347  if (active_cloud(isol)) i_activesolliquid = &
348  get_q_index(standard_q_names%ACTIVE_SOL_LIQUID, 'casim')
349  if (active_rain(isol)) i_activesolrain = &
350  get_q_index(standard_q_names%ACTIVE_SOL_RAIN, 'casim')
351  if (insoluble_modes(2) > 1) i_coarsedustmass = &
352  get_q_index(standard_q_names%COARSE_DUST_MASS, 'casim')
353  if (insoluble_modes(2) > 0) i_coarsedustnumber = &
354  get_q_index(standard_q_names%COARSE_DUST_NUMBER, 'casim')
355  if (active_ice(iinsol)) i_activeinsolice = &
356  get_q_index(standard_q_names%ACTIVE_INSOL_ICE, 'casim')
357  if (active_ice(isol)) i_activesolice = &
358  get_q_index(standard_q_names%ACTIVE_SOL_ICE, 'casim')
359  if (active_cloud(iinsol)) i_activeinsolliquid = &
360  get_q_index(standard_q_names%ACTIVE_INSOL_LIQUID, 'casim')
361  if (insoluble_modes(1) > 1) i_accuminsolmass = &
362  get_q_index(standard_q_names%ACCUM_INSOL_MASS, 'casim')
363  if (insoluble_modes(1) > 0) i_accuminsolnumber = &
364  get_q_index(standard_q_names%ACCUM_INSOL_NUMBER, 'casim')
365  if (active_number(isol)) i_activesolnumber = &
366  get_q_index(standard_q_names%ACTIVE_SOL_NUMBER, 'casim')
367  if (active_number(iinsol)) i_activeinsolnumber = &
368  get_q_index(standard_q_names%ACTIVE_INSOL_NUMBER, 'casim')
369 
Here is the call graph for this function:
Here is the caller graph for this function:

◆ read_configuration()

subroutine casim_mod::read_configuration ( type(model_state_type), intent(inout), target  current_state)
private

Definition at line 711 of file casim.F90.

711 
712 
713  Use mphys_switches, only: iopt_act, option, aerosol_option &
714  , l_aaut, l_aacc, l_aevp, l_ased, l_warm &
715  , l_inuc, iopt_rcrit, iopt_inuc, l_iaut, l_iacw &
716  , l_rain, l_boussinesq, diag_mu_option &
717  , l_sed_3mdiff, l_cons, l_abelshipway, l_sed_icecloud_as_1m &
718  , l_active_inarg2000, process_level, l_separate_rain, l_idep &
719  , max_step_length, max_sed_length, l_sg, l_g, l_passive &
720  , l_passive3m, l_limit_psd, l_override_checks &
721  , max_mu, fix_mu, l_raci_g, l_onlycollect, l_inhom_revp &
722  , l_tidy_conserve_e , l_tidy_conserve_q &
723  , l_pcond & ! Condensation
724  , l_praut & ! Autoconversion cloud -> rain
725  , l_pracw & ! Accretion cloud -> rain
726  , l_pracr & ! aggregation of rain drops
727  , l_prevp & ! evaporation of rain
728  , l_psedl & ! sedimentation of cloud
729  , l_psedr & ! sedimentation of rain
730  , l_ptidy & ! tidying term 1
731  , l_ptidy2 & ! tidying term 2
732  , l_pinuc & ! ice nucleation
733  , l_pidep & ! ice deposition
734  , l_piacw & ! ice accreting water
735  , l_psaut & ! ice autoconversion ice -> snow
736  , l_psdep & ! vapour deposition onto snow
737  , l_psacw & ! snow accreting water
738  , l_pgdep & ! vapour deposition onto graupel
739  , l_pseds & ! snow sedimentation
740  , l_psedi & ! ice sedimentation
741  , l_psedg & ! graupel sedimentation
742  , l_psaci & ! snow accreting ice
743  , l_praci & ! rain accreting ice
744  , l_psacr & ! snow accreting rain
745  , l_pgacr & ! graupel accreting rain
746  , l_pgacw & ! graupel accreting cloud water
747  , l_pgaci & ! graupel accreting ice
748  , l_pgacs & ! graupel accreting snow
749  , l_piagg & ! aggregation of ice particles
750  , l_psagg & ! aggregation of snow particles
751  , l_pgagg & ! aggregation of graupel particles
752  , l_psbrk & ! break up of snow flakes
753  , l_pgshd & ! shedding of liquid from graupel
754  , l_pihal & ! hallet mossop
755  , l_psmlt & ! snow melting
756  , l_pgmlt & ! graupel melting
757  , l_phomr & ! homogeneous freezing of rain
758  , l_phomc & ! homogeneous freezing of cloud droplets
759  , l_pssub & ! sublimation of snow
760  , l_pgsub & ! sublimation of graupel
761  , l_pisub & ! sublimation of ice
762  , l_pimlt ! ice melting
763 
764  Use mphys_parameters, only: p1, p2, p3, sp1, sp2, sp3
765 
766  type(model_state_type), target, intent(inout) :: current_state
767 
768  integer :: ierr
769 
770  option = options_get_integer(current_state%options_database, 'option')
771  diag_mu_option = options_get_integer(current_state%options_database, 'diag_mu_option')
772  iopt_act = options_get_integer(current_state%options_database, 'iopt_act')
773  iopt_inuc = options_get_integer(current_state%options_database, 'iopt_inuc')
774  process_level = options_get_integer(current_state%options_database, 'process_level')
775  aerosol_option = options_get_integer(current_state%options_database, 'aerosol_option')
776  max_step_length = options_get_real(current_state%options_database, 'max_step_length')
777  max_sed_length = options_get_real(current_state%options_database, 'max_sed_length')
778  p1 = options_get_real(current_state%options_database, 'p1')
779  p2 = options_get_real(current_state%options_database, 'p2')
780  p3 = options_get_real(current_state%options_database, 'p3')
781  sp1 = options_get_real(current_state%options_database, 'sp1')
782  sp2 = options_get_real(current_state%options_database, 'sp2')
783  sp3 = options_get_real(current_state%options_database, 'sp3')
784  max_mu = options_get_real(current_state%options_database, 'max_mu')
785  fix_mu = options_get_real(current_state%options_database, 'fix_mu')
786 
787  l_aaut = options_get_logical(current_state%options_database, 'l_aaut')
788  l_aacc = options_get_logical(current_state%options_database, 'l_aacc')
789  l_aevp = options_get_logical(current_state%options_database, 'l_aevp')
790  l_ased = options_get_logical(current_state%options_database, 'l_ased')
791  l_warm = options_get_logical(current_state%options_database, 'l_warm')
792  l_inuc = options_get_logical(current_state%options_database, 'l_inuc')
793  l_iaut = options_get_logical(current_state%options_database, 'l_iaut')
794  l_idep = options_get_logical(current_state%options_database, 'l_idep')
795  l_iacw = options_get_logical(current_state%options_database, 'l_iacw')
796  l_active_inarg2000 = options_get_logical(current_state%options_database, 'l_active_inarg2000')
797  l_separate_rain = options_get_logical(current_state%options_database, 'l_separate_rain')
798  l_sg = options_get_logical(current_state%options_database, 'l_sg')
799  l_g = options_get_logical(current_state%options_database, 'l_g')
800  l_passive = options_get_logical(current_state%options_database, 'l_passive')
801  l_passive3m = options_get_logical(current_state%options_database, 'l_passive3m')
802  l_limit_psd = options_get_logical(current_state%options_database, 'l_limit_psd')
803  l_override_checks = options_get_logical(current_state%options_database, 'l_override_checks')
804  l_raci_g = options_get_logical(current_state%options_database, 'l_raci_g')
805  l_onlycollect = options_get_logical(current_state%options_database, 'l_onlycollect')
806  l_abelshipway = options_get_logical(current_state%options_database, 'l_abelshipway')
807  l_cons = options_get_logical(current_state%options_database, 'l_cons')
808  l_rain = options_get_logical(current_state%options_database, 'l_rain')
809  l_sed_3mdiff = options_get_logical(current_state%options_database, 'l_sed_3mdiff')
810  l_sed_icecloud_as_1m = options_get_logical(current_state%options_database, 'l_sed_icecloud_as_1m')
811  l_tidy_conserve_e = options_get_logical(current_state%options_database, 'l_tidy_conserve_E')
812  l_tidy_conserve_q = options_get_logical(current_state%options_database, 'l_tidy_conserve_q')
813 
814  l_inhom_revp = options_get_logical(current_state%options_database, 'l_inhom_revp')
815  l_pcond = options_get_logical(current_state%options_database, 'l_pcond')
816  l_praut = options_get_logical(current_state%options_database, 'l_praut')
817  l_pracw = options_get_logical(current_state%options_database, 'l_pracw')
818  l_pracr = options_get_logical(current_state%options_database, 'l_pracr')
819  l_prevp = options_get_logical(current_state%options_database, 'l_prevp')
820  l_psedl = options_get_logical(current_state%options_database, 'l_psedl')
821  l_psedr = options_get_logical(current_state%options_database, 'l_psedr')
822  l_ptidy = options_get_logical(current_state%options_database, 'l_ptidy')
823  l_ptidy2 = options_get_logical(current_state%options_database, 'l_ptidy2')
824  l_pinuc = options_get_logical(current_state%options_database, 'l_pinuc')
825  l_pidep = options_get_logical(current_state%options_database, 'l_pidep')
826  l_piacw = options_get_logical(current_state%options_database, 'l_piacw')
827  l_psaut = options_get_logical(current_state%options_database, 'l_psaut')
828  l_psdep = options_get_logical(current_state%options_database, 'l_psdep')
829  l_psacw = options_get_logical(current_state%options_database, 'l_psacw')
830  l_pgdep = options_get_logical(current_state%options_database, 'l_pgdep')
831  l_pseds = options_get_logical(current_state%options_database, 'l_pseds')
832  l_psedi = options_get_logical(current_state%options_database, 'l_psedi')
833  l_psedg = options_get_logical(current_state%options_database, 'l_psedg')
834  l_psaci = options_get_logical(current_state%options_database, 'l_psaci')
835  l_praci = options_get_logical(current_state%options_database, 'l_praci')
836  l_psacr = options_get_logical(current_state%options_database, 'l_psacr')
837  l_pgacr = options_get_logical(current_state%options_database, 'l_pgacr')
838  l_pgacw = options_get_logical(current_state%options_database, 'l_pgacw')
839  l_pgaci = options_get_logical(current_state%options_database, 'l_pgaci')
840  l_pgacs = options_get_logical(current_state%options_database, 'l_pgacs')
841  l_piagg = options_get_logical(current_state%options_database, 'l_piagg')
842  l_psagg = options_get_logical(current_state%options_database, 'l_psagg')
843  l_pgagg = options_get_logical(current_state%options_database, 'l_pgagg')
844  l_psbrk = options_get_logical(current_state%options_database, 'l_psbrk')
845  l_pgshd = options_get_logical(current_state%options_database, 'l_pgshd')
846  l_pihal = options_get_logical(current_state%options_database, 'l_pihal')
847  l_psmlt = options_get_logical(current_state%options_database, 'l_psmlt')
848  l_pgmlt = options_get_logical(current_state%options_database, 'l_pgmlt')
849  l_phomr = options_get_logical(current_state%options_database, 'l_phomr')
850  l_phomc = options_get_logical(current_state%options_database, 'l_phomc')
851  l_pssub = options_get_logical(current_state%options_database, 'l_pssub')
852  l_pgsub = options_get_logical(current_state%options_database, 'l_pgsub')
853  l_pisub = options_get_logical(current_state%options_database, 'l_pisub')
854  l_pimlt = options_get_logical(current_state%options_database, 'l_pimlt')
855 
Here is the caller graph for this function:

◆ timestep_callback()

subroutine casim_mod::timestep_callback ( type(model_state_type), intent(inout), target  current_state)
private

Called for each column per timestep this will calculate the microphysical tendencies.

Parameters
current_stateThe current model state

Definition at line 375 of file casim.F90.

375  type(model_state_type), target, intent(inout) :: current_state
376 
377  REAL(wp) :: dtwp
378  INTEGER :: icol, jcol, iqx, target_x_index, target_y_index
379 
380  icol=current_state%column_local_x
381  jcol=current_state%column_local_y
382  target_y_index=jcol-current_state%local_grid%halo_size(y_index)
383  target_x_index=icol-current_state%local_grid%halo_size(x_index)
384 
385  if (current_state%halo_column .or. current_state%timestep < 2) return
386 
387  if (current_state%field_stepping == forward_stepping)then
388  call log_master_log(log_error, 'Currently, CASIM assumes CENTERED_STEPPING')
389  dtwp = current_state%dtm
390  else
391  dtwp = 2.0*current_state%dtm
392  end if
393 
394  ! Initialize aerosol fields to zero...
395  aitkensolmass = 0.0
396  daitkensolmass = 0.0
397  aitkensolnumber = 0.0
398  daitkensolnumber = 0.0
399  accumsolmass = 0.0
400  daccumsolmass = 0.0
401  accumsolnumber = 0.0
402  daccumsolnumber = 0.0
403  coarsesolmass = 0.0
404  dcoarsesolmass = 0.0
405  coarsesolnumber = 0.0
406  dcoarsesolnumber = 0.0
407  activesolliquid = 0.0
408  dactivesolliquid = 0.0
409  coarsedustmass = 0.0
410  dcoarsedustmass = 0.0
411  coarsedustnumber = 0.0
412  dcoarsedustnumber = 0.0
413  activeinsolice = 0.0
414  dactiveinsolice = 0.0
415  activesolice = 0.0
416  dactivesolice = 0.0
417  activeinsolliquid = 0.0
418  dactiveinsolliquid = 0.0
419  accuminsolmass = 0.0
420  daccuminsolmass = 0.0
421  accuminsolnumber = 0.0
422  daccuminsolnumber = 0.0
423  activesolnumber = 0.0
424  dactivesolnumber = 0.0
425  activeinsolnumber = 0.0
426  dactiveinsolnumber = 0.0
427 
428  theta(:,1,1) = current_state%zth%data(:, jcol, icol) + current_state%global_grid%configuration%vertical%thref(:)
429  dth(:,1,1) = current_state%sth%data(:, jcol, icol)
430  exner(:,1,1) = current_state%global_grid%configuration%vertical%rprefrcp(:)
431  pressure(:,1,1) = current_state%global_grid%configuration%vertical%prefn(:)
432  z_centre(:,1,1) = current_state%global_grid%configuration%vertical%zn(:)
433  dz(:,1,1) = current_state%global_grid%configuration%vertical%dz(:)
434  z_half(:kte-1,1,1) = current_state%global_grid%configuration%vertical%z(:)
435  rho(:,1,1) = current_state%global_grid%configuration%vertical%rhon(:)
436  w(:,1,1) = current_state%zw%data(:, jcol, icol)
437  tke(:,1,1) = 0.1 ! Test value
438 
439  iqx = iqv
440  qv(:,1,1) = current_state%zq(iqx)%data(:,jcol,icol)
441  dqv(:,1,1) = current_state%sq(iqx)%data(:,jcol,icol)
442 
443  ! Warm microphysical fields
444  IF (nq_l > 0)then
445  iqx = iql
446  qc(:,1,1) = current_state%zq(iqx)%data(:,jcol,icol)
447  dqc(:,1,1) = current_state%sq(iqx)%data(:,jcol,icol)
448  end IF
449  IF (nq_r > 0)then
450  iqx = iqr
451  qr(:,1,1) = current_state%zq(iqx)%data(:,jcol,icol)
452  dqr(:,1,1) = current_state%sq(iqx)%data(:,jcol,icol)
453  end IF
454  IF (nq_l > 1)then
455  iqx = inl
456  nc(:,1,1) = current_state%zq(iqx)%data(:,jcol,icol)
457  dnc(:,1,1) = current_state%sq(iqx)%data(:,jcol,icol)
458  end IF
459  IF (nq_r > 1)then
460  iqx = inr
461  nr(:,1,1) = current_state%zq(iqx)%data(:,jcol,icol)
462  dnr(:,1,1) = current_state%sq(iqx)%data(:,jcol,icol)
463  end IF
464  IF (nq_r > 2)then
465  iqx = i3mr
466  m3r(:,1,1) = current_state%zq(iqx)%data(:,jcol,icol)
467  dm3r(:,1,1) = current_state%sq(iqx)%data(:,jcol,icol)
468  end IF
469 
470  ! Ice microphysical fields
471  IF (nq_i > 0)then
472  iqx = iqi
473  qi(:,1,1) = current_state%zq(iqx)%data(:,jcol,icol)
474  dqi(:,1,1) = current_state%sq(iqx)%data(:,jcol,icol)
475  end IF
476  IF (nq_s > 0)then
477  iqx = iqs
478  qs(:,1,1) = current_state%zq(iqx)%data(:,jcol,icol)
479  dqs(:,1,1) = current_state%sq(iqx)%data(:,jcol,icol)
480  end IF
481  IF (nq_g > 0)then
482  iqx = iqg
483  qg(:,1,1) = current_state%zq(iqx)%data(:,jcol,icol)
484  dqg(:,1,1) = current_state%sq(iqx)%data(:,jcol,icol)
485  end IF
486  IF (nq_i > 1)then
487  iqx = ini
488  ni(:,1,1) = current_state%zq(iqx)%data(:,jcol,icol)
489  dni(:,1,1) = current_state%sq(iqx)%data(:,jcol,icol)
490  end IF
491  IF (nq_s > 1)then
492  iqx = ins
493  ns(:,1,1) = current_state%zq(iqx)%data(:,jcol,icol)
494  dns(:,1,1) = current_state%sq(iqx)%data(:,jcol,icol)
495  end IF
496  IF (nq_g > 1)then
497  iqx = ing
498  ng(:,1,1) = current_state%zq(iqx)%data(:,jcol,icol)
499  dng(:,1,1) = current_state%sq(iqx)%data(:,jcol,icol)
500  end IF
501  IF (nq_s > 2)then
502  iqx = i3ms
503  m3s(:,1,1) = current_state%zq(iqx)%data(:,jcol,icol)
504  dm3s(:,1,1) = current_state%sq(iqx)%data(:,jcol,icol)
505  end IF
506  IF (nq_g > 2)then
507  iqx = i3mg
508  m3g(:,1,1) = current_state%zq(iqx)%data(:,jcol,icol)
509  dm3g(:,1,1) = current_state%sq(iqx)%data(:,jcol,icol)
510  end IF
511 
512  ! Aerosol fields
513 
514  if (i_aitkensolmass>0) aitkensolmass(:,1,1) = current_state%zq(i_aitkensolmass)%data(:,jcol,icol)
515  if (i_aitkensolmass>0) daitkensolmass(:,1,1) = current_state%sq(i_aitkensolmass)%data(:,jcol,icol)
516  if (i_aitkensolnumber>0) aitkensolnumber(:,1,1) = current_state%zq(i_aitkensolnumber)%data(:,jcol,icol)
517  if (i_aitkensolnumber>0) daitkensolnumber(:,1,1) = current_state%sq(i_aitkensolnumber)%data(:,jcol,icol)
518  if (i_accumsolmass>0) accumsolmass(:,1,1) = current_state%zq(i_accumsolmass)%data(:,jcol,icol)
519  if (i_accumsolmass>0) daccumsolmass(:,1,1) = current_state%sq(i_accumsolmass)%data(:,jcol,icol)
520  if (i_accumsolnumber>0) accumsolnumber(:,1,1) = current_state%zq(i_accumsolnumber)%data(:,jcol,icol)
521  if (i_accumsolnumber>0) daccumsolnumber(:,1,1) = current_state%sq(i_accumsolnumber)%data(:,jcol,icol)
522  if (i_coarsesolmass>0) coarsesolmass(:,1,1) = current_state%zq(i_coarsesolmass)%data(:,jcol,icol)
523  if (i_coarsesolmass>0) dcoarsesolmass(:,1,1) = current_state%sq(i_coarsesolmass)%data(:,jcol,icol)
524  if (i_coarsesolnumber>0) coarsesolnumber(:,1,1) = current_state%zq(i_coarsesolnumber)%data(:,jcol,icol)
525  if (i_coarsesolnumber>0) dcoarsesolnumber(:,1,1) = current_state%sq(i_coarsesolnumber)%data(:,jcol,icol)
526  if (i_activesolliquid>0) activesolliquid(:,1,1) = current_state%zq(i_activesolliquid)%data(:,jcol,icol)
527  if (i_activesolliquid>0) dactivesolliquid(:,1,1) = current_state%sq(i_activesolliquid)%data(:,jcol,icol)
528  if (i_coarsedustmass>0) coarsedustmass(:,1,1) = current_state%zq(i_coarsedustmass)%data(:,jcol,icol)
529  if (i_coarsedustmass>0) dcoarsedustmass(:,1,1) = current_state%sq(i_coarsedustmass)%data(:,jcol,icol)
530  if (i_coarsedustnumber>0) coarsedustnumber(:,1,1) = current_state%zq(i_coarsedustnumber)%data(:,jcol,icol)
531  if (i_coarsedustnumber>0) dcoarsedustnumber(:,1,1) = current_state%sq(i_coarsedustnumber)%data(:,jcol,icol)
532  if (i_activeinsolice>0) activeinsolice(:,1,1) = current_state%zq(i_activeinsolice)%data(:,jcol,icol)
533  if (i_activeinsolice>0) dactiveinsolice(:,1,1) = current_state%sq(i_activeinsolice)%data(:,jcol,icol)
534  if (i_activesolice>0) activesolice(:,1,1) = current_state%zq(i_activesolice)%data(:,jcol,icol)
535  if (i_activesolice>0) dactivesolice(:,1,1) = current_state%sq(i_activesolice)%data(:,jcol,icol)
536  if (i_activeinsolliquid>0) activeinsolliquid(:,1,1) = current_state%zq(i_activeinsolliquid)%data(:,jcol,icol)
537  if (i_activeinsolliquid>0)dactiveinsolliquid(:,1,1) = current_state%sq(i_activeinsolliquid)%data(:,jcol,icol)
538  if (i_accuminsolmass>0) accuminsolmass(:,1,1) = current_state%zq(i_accuminsolmass)%data(:,jcol,icol)
539  if (i_accuminsolmass>0) daccuminsolmass(:,1,1) = current_state%sq(i_accuminsolmass)%data(:,jcol,icol)
540  if (i_accuminsolnumber>0) accuminsolnumber(:,1,1) = current_state%zq(i_accuminsolnumber)%data(:,jcol,icol)
541  if (i_accuminsolnumber>0) daccuminsolnumber(:,1,1) = current_state%sq(i_accuminsolnumber)%data(:,jcol,icol)
542  if (i_activesolnumber>0) activesolnumber(:,1,1) = current_state%zq(i_activesolnumber)%data(:,jcol,icol)
543  if (i_activesolnumber>0) dactivesolnumber(:,1,1) = current_state%sq(i_activesolnumber)%data(:,jcol,icol)
544  if (i_activeinsolnumber>0) activeinsolnumber(:,1,1) = current_state%zq(i_activeinsolnumber)%data(:,jcol,icol)
545  if (i_activeinsolnumber>0)dactiveinsolnumber(:,1,1) = current_state%sq(i_activeinsolnumber)%data(:,jcol,icol)
546 
547  CALL shipway_microphysics( &
548  ! in
549  its, ite, &
550  jts, jte, &
551  kts, kte, &
552  dtwp, &
553  qv, qc, qr, &
554  nc, nr, m3r, &
555  qi, qs, qg, &
556  ni, ns, ng, &
557  m3s, m3g, &
558  theta, &
559  aitkensolmass, aitkensolnumber, &
560  accumsolmass, accumsolnumber, &
561  coarsesolmass, coarsesolnumber, &
562  activesolliquid, &
563  activesolrain, &
564  coarsedustmass, coarsedustnumber, &
565  activeinsolice, &
566  activesolice, &
567  activeinsolliquid, &
568  accuminsolmass, &
569  accuminsolnumber, &
570  activesolnumber, &
571  activeinsolnumber, &
572  exner, &
573  pressure, rho, &
574  w, tke, &
575  z_half, z_centre, &
576  dz, &
577  ! in/out
578  dqv, dqc, dqr, dnc, dnr, dm3r, &
579  dqi, dqs, dqg, dni, dns, dng, dm3s, dm3g, &
580  dth, &
581  daitkensolmass, daitkensolnumber, &
582  daccumsolmass, daccumsolnumber, &
583  dcoarsesolmass, dcoarsesolnumber, &
584  dactivesolliquid, &
585  dactivesolrain, &
586  dcoarsedustmass, dcoarsedustnumber, &
587  dactiveinsolice, &
588  dactivesolice, &
589  dactiveinsolliquid, &
590  daccuminsolmass, &
591  daccuminsolnumber, &
592  dactivesolnumber, &
593  dactiveinsolnumber, &
594  ils, ile, &
595  jls, jle, &
596  kls, kle, &
597  l_tendency=.true. &
598  )
599 
600  ! write back the tendencies
601  current_state%sth%data(:,jcol,icol) = current_state%sth%data(:,jcol,icol) + dth(:,1,1)
602 
603  iqx = iqv
604  current_state%sq(iqx)%data(:,jcol,icol) = current_state%sq(iqx)%data(:,jcol,icol) + dqv(:,1,1)
605 
606  ! Warm microphysical fields
607  IF (nq_l > 0)then
608  iqx = iql
609  current_state%sq(iqx)%data(:,jcol,icol) = current_state%sq(iqx)%data(:,jcol,icol) + dqc(:,1,1)
610  end IF
611 
612  IF (nq_r > 0)then
613  iqx = iqr
614  current_state%sq(iqx)%data(:,jcol,icol) = current_state%sq(iqx)%data(:,jcol,icol) + dqr(:,1,1)
615  end IF
616  IF (nq_l > 1)then
617  iqx = inl
618  current_state%sq(iqx)%data(:,jcol,icol) = current_state%sq(iqx)%data(:,jcol,icol) + dnc(:,1,1)
619  end IF
620  IF (nq_r > 1)then
621  iqx = inr
622  current_state%sq(iqx)%data(:,jcol,icol) = current_state%sq(iqx)%data(:,jcol,icol) + dnr(:,1,1)
623  end IF
624  IF (nq_r > 2)then
625  iqx = i3mr
626  current_state%sq(iqx)%data(:,jcol,icol) = current_state%sq(iqx)%data(:,jcol,icol) + dm3r(:,1,1)
627  end IF
628 
629  ! Ice microphysical fields
630  IF (nq_i > 0)then
631  iqx = iqi
632  current_state%sq(iqx)%data(:,jcol,icol) = current_state%sq(iqx)%data(:,jcol,icol) + dqi(:,1,1)
633  end IF
634  IF (nq_s > 0)then
635  iqx = iqs
636  current_state%sq(iqx)%data(:,jcol,icol) = current_state%sq(iqx)%data(:,jcol,icol) + dqs(:,1,1)
637  end IF
638  IF (nq_g > 0)then
639  iqx = iqg
640  current_state%sq(iqx)%data(:,jcol,icol) = current_state%sq(iqx)%data(:,jcol,icol) + dqg(:,1,1)
641  end IF
642  IF (nq_i > 1)then
643  iqx = ini
644  current_state%sq(iqx)%data(:,jcol,icol) = current_state%sq(iqx)%data(:,jcol,icol) + dni(:,1,1)
645  end IF
646  IF (nq_s > 1)then
647  iqx = ins
648  current_state%sq(iqx)%data(:,jcol,icol) = current_state%sq(iqx)%data(:,jcol,icol) + dns(:,1,1)
649  end IF
650  IF (nq_g > 1)then
651  iqx = ing
652  current_state%sq(iqx)%data(:,jcol,icol) = current_state%sq(iqx)%data(:,jcol,icol) + dng(:,1,1)
653  end IF
654  IF (nq_s > 2)then
655  iqx = i3ms
656  current_state%sq(iqx)%data(:,jcol,icol) = current_state%sq(iqx)%data(:,jcol,icol) + dm3s(:,1,1)
657  end IF
658  IF (nq_g > 2)then
659  iqx = i3mg
660  current_state%sq(iqx)%data(:,jcol,icol) = current_state%sq(iqx)%data(:,jcol,icol) + dm3g(:,1,1)
661  end IF
662 
663  ! Aerosol fields
664 
665  if (i_aitkensolmass>0) current_state%sq(i_aitkensolmass)%data(:,jcol,icol) &
666  = current_state%sq(i_aitkensolmass)%data(:,jcol,icol) + daitkensolmass(:,1,1)
667  if (i_aitkensolnumber>0) current_state%sq(i_aitkensolnumber)%data(:,jcol,icol) &
668  = current_state%sq(i_aitkensolnumber)%data(:,jcol,icol) + daitkensolnumber(:,1,1)
669  if (i_accumsolmass>0) current_state%sq(i_accumsolmass)%data(:,jcol,icol) &
670  = current_state%sq(i_accumsolmass)%data(:,jcol,icol) + daccumsolmass(:,1,1)
671  if (i_accumsolnumber>0) current_state%sq(i_accumsolnumber)%data(:,jcol,icol) &
672  = current_state%sq(i_accumsolnumber)%data(:,jcol,icol) + daccumsolnumber(:,1,1)
673  if (i_coarsesolmass>0) current_state%sq(i_coarsesolmass)%data(:,jcol,icol) &
674  = current_state%sq(i_coarsesolmass)%data(:,jcol,icol) + dcoarsesolmass(:,1,1)
675  if (i_coarsesolnumber>0) current_state%sq(i_coarsesolnumber)%data(:,jcol,icol) &
676  = current_state%sq(i_coarsesolnumber)%data(:,jcol,icol) + dcoarsesolnumber(:,1,1)
677  if (i_activesolliquid>0) current_state%sq(i_activesolliquid)%data(:,jcol,icol) &
678  = current_state%sq(i_activesolliquid)%data(:,jcol,icol) + dactivesolliquid(:,1,1)
679  if (i_coarsedustmass>0) current_state%sq(i_coarsedustmass)%data(:,jcol,icol) &
680  = current_state%sq(i_coarsedustmass)%data(:,jcol,icol) + dcoarsedustmass(:,1,1)
681  if (i_coarsedustnumber>0) current_state%sq(i_coarsedustnumber)%data(:,jcol,icol) &
682  = current_state%sq(i_coarsedustnumber)%data(:,jcol,icol) + dcoarsedustnumber(:,1,1)
683  if (i_activeinsolice>0) current_state%sq(i_activeinsolice)%data(:,jcol,icol) &
684  = current_state%sq(i_activeinsolice)%data(:,jcol,icol) + dactiveinsolice(:,1,1)
685  if (i_activesolice>0) current_state%sq(i_activesolice)%data(:,jcol,icol) &
686  = current_state%sq(i_activesolice)%data(:,jcol,icol) + dactivesolice(:,1,1)
687  if (i_activeinsolliquid>0) current_state%sq(i_activeinsolliquid)%data(:,jcol,icol) &
688  = current_state%sq(i_activeinsolliquid)%data(:,jcol,icol) + dactiveinsolliquid(:,1,1)
689  if (i_accuminsolmass>0) current_state%sq(i_accuminsolmass)%data(:,jcol,icol) &
690  = current_state%sq(i_accuminsolmass)%data(:,jcol,icol) + daccuminsolmass(:,1,1)
691  if (i_accuminsolnumber>0) current_state%sq(i_accuminsolnumber)%data(:,jcol,icol) &
692  = current_state%sq(i_accuminsolnumber)%data(:,jcol,icol) + daccuminsolnumber(:,1,1)
693  if (i_activesolnumber>0) current_state%sq(i_activesolnumber)%data(:,jcol,icol) &
694  = current_state%sq(i_activesolnumber)%data(:,jcol,icol) + dactivesolnumber(:,1,1)
695  if (i_activeinsolnumber>0) current_state%sq(i_activeinsolnumber)%data(:,jcol,icol) &
696  = current_state%sq(i_activeinsolnumber)%data(:,jcol,icol) + dactiveinsolnumber(:,1,1)
697 
698  ! for total surface precipitation, sum the surface rain rate (cloud + rain which is precip_r)
699  ! and surface
700  ! snow rate (precip_s), which is the sum of ice, snow and graupel (See micromain.F90 in casim for
701  ! calculation).
702  surface_precip(target_y_index,target_x_index) = &
703  casdiags % SurfaceRainR(1,1) + casdiags % SurfaceSnowR(1,1)
704 
Here is the caller graph for this function:

Variable Documentation

◆ accuminsolmass

real(wp), dimension(:,:,:), allocatable casim_mod::accuminsolmass
private

Definition at line 53 of file casim.F90.

53  REAL(wp), allocatable :: accuminsolmass(:,:,:) ! Accum mode dust mass

◆ accuminsolnumber

real(wp), dimension(:,:,:), allocatable casim_mod::accuminsolnumber
private

Definition at line 54 of file casim.F90.

54  REAL(wp), allocatable :: accuminsolnumber(:,:,:) ! Accum mode dust number

◆ accumsolmass

real(wp), dimension(:,:,:), allocatable casim_mod::accumsolmass
private

Definition at line 44 of file casim.F90.

44  REAL(wp), allocatable :: accumsolmass(:,:,:), accumsolnumber(:,:,:) ! Accumulation mode aerosol

◆ accumsolnumber

real(wp), dimension(:,:,:), allocatable casim_mod::accumsolnumber
private

Definition at line 44 of file casim.F90.

◆ activeinsolice

real(wp), dimension(:,:,:), allocatable casim_mod::activeinsolice
private

Definition at line 50 of file casim.F90.

50  REAL(wp), allocatable :: activeinsolice(:,:,:) ! Activeated dust

◆ activeinsolliquid

real(wp), dimension(:,:,:), allocatable casim_mod::activeinsolliquid
private

Definition at line 52 of file casim.F90.

52  REAL(wp), allocatable :: activeinsolliquid(:,:,:) ! Activeated dust in cloud

◆ activeinsolnumber

real(wp), dimension(:,:,:), allocatable casim_mod::activeinsolnumber
private

Definition at line 56 of file casim.F90.

56  REAL(wp), allocatable :: activeinsolnumber(:,:,:) ! Activated insoluble number (if we need a tracer)

◆ activesolice

real(wp), dimension(:,:,:), allocatable casim_mod::activesolice
private

Definition at line 51 of file casim.F90.

51  REAL(wp), allocatable :: activesolice(:,:,:) ! Activeated aerosol in ice

◆ activesolliquid

real(wp), dimension(:,:,:), allocatable casim_mod::activesolliquid
private

Definition at line 45 of file casim.F90.

45  REAL(wp), allocatable :: activesolliquid(:,:,:) ! Activated aerosol

◆ activesolnumber

real(wp), dimension(:,:,:), allocatable casim_mod::activesolnumber
private

Definition at line 55 of file casim.F90.

55  REAL(wp), allocatable :: activesolnumber(:,:,:) ! Activated soluble number (if we need a tracer)

◆ activesolrain

real(wp), dimension(:,:,:), allocatable casim_mod::activesolrain
private

Definition at line 48 of file casim.F90.

48  REAL(wp), allocatable :: activesolrain(:,:,:) ! Activeated aerosol in rain

◆ aitkensolmass

real(wp), dimension(:,:,:), allocatable casim_mod::aitkensolmass
private

Definition at line 46 of file casim.F90.

46  REAL(wp), allocatable :: aitkensolmass(:,:,:), aitkensolnumber(:,:,:) ! Aitken mode aerosol

◆ aitkensolnumber

real(wp), dimension(:,:,:), allocatable casim_mod::aitkensolnumber
private

Definition at line 46 of file casim.F90.

◆ coarsedustmass

real(wp), dimension(:,:,:), allocatable casim_mod::coarsedustmass
private

Definition at line 49 of file casim.F90.

49  REAL(wp), allocatable :: coarsedustmass(:,:,:), coarsedustnumber(:,:,:) ! Coarse Dust

◆ coarsedustnumber

real(wp), dimension(:,:,:), allocatable casim_mod::coarsedustnumber
private

Definition at line 49 of file casim.F90.

◆ coarsesolmass

real(wp), dimension(:,:,:), allocatable casim_mod::coarsesolmass
private

Definition at line 47 of file casim.F90.

47  REAL(wp), allocatable :: coarsesolmass(:,:,:), coarsesolnumber(:,:,:) ! Course mode aerosol

◆ coarsesolnumber

real(wp), dimension(:,:,:), allocatable casim_mod::coarsesolnumber
private

Definition at line 47 of file casim.F90.

◆ daccuminsolmass

real(wp), dimension(:,:,:), allocatable casim_mod::daccuminsolmass
private

Definition at line 75 of file casim.F90.

75  REAL(wp), allocatable :: daccuminsolmass(:,:,:) ! Accum mode dust mass

◆ daccuminsolnumber

real(wp), dimension(:,:,:), allocatable casim_mod::daccuminsolnumber
private

Definition at line 76 of file casim.F90.

76  REAL(wp), allocatable :: daccuminsolnumber(:,:,:) ! Accum mode dust number

◆ daccumsolmass

real(wp), dimension(:,:,:), allocatable casim_mod::daccumsolmass
private

Definition at line 66 of file casim.F90.

66  REAL(wp), allocatable :: daccumsolmass(:,:,:), daccumsolnumber(:,:,:) ! Accumulation mode aerosol

◆ daccumsolnumber

real(wp), dimension(:,:,:), allocatable casim_mod::daccumsolnumber
private

Definition at line 66 of file casim.F90.

◆ dactiveinsolice

real(wp), dimension(:,:,:), allocatable casim_mod::dactiveinsolice
private

Definition at line 72 of file casim.F90.

72  REAL(wp), allocatable :: dactiveinsolice(:,:,:) ! Activeated dust

◆ dactiveinsolliquid

real(wp), dimension(:,:,:), allocatable casim_mod::dactiveinsolliquid
private

Definition at line 74 of file casim.F90.

74  REAL(wp), allocatable :: dactiveinsolliquid(:,:,:) ! Activeated dust in cloud

◆ dactiveinsolnumber

real(wp), dimension(:,:,:), allocatable casim_mod::dactiveinsolnumber
private

Definition at line 78 of file casim.F90.

78  REAL(wp), allocatable :: dactiveinsolnumber(:,:,:) ! Activated insoluble number (if we need a tracer)

◆ dactivesolice

real(wp), dimension(:,:,:), allocatable casim_mod::dactivesolice
private

Definition at line 73 of file casim.F90.

73  REAL(wp), allocatable :: dactivesolice(:,:,:) ! Activeated aerosol in ice

◆ dactivesolliquid

real(wp), dimension(:,:,:), allocatable casim_mod::dactivesolliquid
private

Definition at line 67 of file casim.F90.

67  REAL(wp), allocatable :: dactivesolliquid(:,:,:) ! Activated aerosol

◆ dactivesolnumber

real(wp), dimension(:,:,:), allocatable casim_mod::dactivesolnumber
private

Definition at line 77 of file casim.F90.

77  REAL(wp), allocatable :: dactivesolnumber(:,:,:) ! Activated soluble number (if we need a tracer)

◆ dactivesolrain

real(wp), dimension(:,:,:), allocatable casim_mod::dactivesolrain
private

Definition at line 70 of file casim.F90.

70  REAL(wp), allocatable :: dactivesolrain(:,:,:) ! Activeated aerosol in rain

◆ daitkensolmass

real(wp), dimension(:,:,:), allocatable casim_mod::daitkensolmass
private

Definition at line 68 of file casim.F90.

68  REAL(wp), allocatable :: daitkensolmass(:,:,:), daitkensolnumber(:,:,:) ! Aitken mode aerosol

◆ daitkensolnumber

real(wp), dimension(:,:,:), allocatable casim_mod::daitkensolnumber
private

Definition at line 68 of file casim.F90.

◆ dcoarsedustmass

real(wp), dimension(:,:,:), allocatable casim_mod::dcoarsedustmass
private

Definition at line 71 of file casim.F90.

71  REAL(wp), allocatable :: dcoarsedustmass(:,:,:), dcoarsedustnumber(:,:,:) ! Dust

◆ dcoarsedustnumber

real(wp), dimension(:,:,:), allocatable casim_mod::dcoarsedustnumber
private

Definition at line 71 of file casim.F90.

◆ dcoarsesolmass

real(wp), dimension(:,:,:), allocatable casim_mod::dcoarsesolmass
private

Definition at line 69 of file casim.F90.

69  REAL(wp), allocatable :: dcoarsesolmass(:,:,:), dcoarsesolnumber(:,:,:) ! Course mode aerosol

◆ dcoarsesolnumber

real(wp), dimension(:,:,:), allocatable casim_mod::dcoarsesolnumber
private

Definition at line 69 of file casim.F90.

◆ dm3g

real(wp), dimension(:,:,:), allocatable casim_mod::dm3g
private

Definition at line 61 of file casim.F90.

◆ dm3r

real(wp), dimension(:,:,:), allocatable casim_mod::dm3r
private

Definition at line 61 of file casim.F90.

◆ dm3s

real(wp), dimension(:,:,:), allocatable casim_mod::dm3s
private

Definition at line 61 of file casim.F90.

◆ dnc

real(wp), dimension(:,:,:), allocatable casim_mod::dnc
private

Definition at line 61 of file casim.F90.

◆ dng

real(wp), dimension(:,:,:), allocatable casim_mod::dng
private

Definition at line 61 of file casim.F90.

◆ dni

real(wp), dimension(:,:,:), allocatable casim_mod::dni
private

Definition at line 61 of file casim.F90.

◆ dnr

real(wp), dimension(:,:,:), allocatable casim_mod::dnr
private

Definition at line 61 of file casim.F90.

◆ dns

real(wp), dimension(:,:,:), allocatable casim_mod::dns
private

Definition at line 61 of file casim.F90.

◆ dqc

real(wp), dimension(:,:,:), allocatable casim_mod::dqc
private

Definition at line 61 of file casim.F90.

◆ dqg

real(wp), dimension(:,:,:), allocatable casim_mod::dqg
private

Definition at line 61 of file casim.F90.

◆ dqi

real(wp), dimension(:,:,:), allocatable casim_mod::dqi
private

Definition at line 61 of file casim.F90.

◆ dqr

real(wp), dimension(:,:,:), allocatable casim_mod::dqr
private

Definition at line 61 of file casim.F90.

◆ dqs

real(wp), dimension(:,:,:), allocatable casim_mod::dqs
private

Definition at line 61 of file casim.F90.

◆ dqv

real(wp), dimension(:,:,:), allocatable casim_mod::dqv
private

Definition at line 61 of file casim.F90.

61  REAL(wp), allocatable :: dqv(:,:,:), dth(:,:,:), dqc(:,:,:), dnc(:,:,:) &
62  , dqr(:,:,:), dnr(:,:,:), dm3r(:,:,:) &
63  , dqi(:,:,:), dni(:,:,:), dqs(:,:,:), dns(:,:,:), dm3s(:,:,:) &
64  , dqg(:,:,:), dng(:,:,:), dm3g(:,:,:)

◆ dth

real(wp), dimension(:,:,:), allocatable casim_mod::dth
private

Definition at line 61 of file casim.F90.

◆ dz

real(wp), dimension(:,:,:), allocatable casim_mod::dz
private

Definition at line 37 of file casim.F90.

◆ exner

real(wp), dimension(:,:,:), allocatable casim_mod::exner
private

Definition at line 37 of file casim.F90.

◆ i3mg

integer casim_mod::i3mg =0
private

Definition at line 87 of file casim.F90.

◆ i3mr

integer casim_mod::i3mr =0
private

Definition at line 87 of file casim.F90.

87  INTEGER :: i3mr=0, i3ms=0, i3mg=0

◆ i3ms

integer casim_mod::i3ms =0
private

Definition at line 87 of file casim.F90.

◆ i_accuminsolmass

integer casim_mod::i_accuminsolmass =0
private

Definition at line 88 of file casim.F90.

◆ i_accuminsolnumber

integer casim_mod::i_accuminsolnumber =0
private

Definition at line 88 of file casim.F90.

◆ i_accumsolmass

integer casim_mod::i_accumsolmass =0
private

Definition at line 88 of file casim.F90.

88  INTEGER :: &
89  i_accumsolmass=0, &
90  i_accumsolnumber=0, &
91  i_activesolliquid=0, &
92  i_aitkensolmass=0, &
93  i_aitkensolnumber=0, &
94  i_coarsesolmass=0, &
95  i_coarsesolnumber=0, &
96  i_activesolrain=0, &
97  i_coarsedustmass=0, &
98  i_coarsedustnumber=0, &
99  i_activeinsolice=0, &
100  i_activesolice=0, &
101  i_activeinsolliquid=0, &
102  i_accuminsolmass=0, &
103  i_accuminsolnumber=0, &
104  i_activesolnumber=0, &
105  i_activeinsolnumber=0

◆ i_accumsolnumber

integer casim_mod::i_accumsolnumber =0
private

Definition at line 88 of file casim.F90.

◆ i_activeinsolice

integer casim_mod::i_activeinsolice =0
private

Definition at line 88 of file casim.F90.

◆ i_activeinsolliquid

integer casim_mod::i_activeinsolliquid =0
private

Definition at line 88 of file casim.F90.

◆ i_activeinsolnumber

integer casim_mod::i_activeinsolnumber =0
private

Definition at line 88 of file casim.F90.

◆ i_activesolice

integer casim_mod::i_activesolice =0
private

Definition at line 88 of file casim.F90.

◆ i_activesolliquid

integer casim_mod::i_activesolliquid =0
private

Definition at line 88 of file casim.F90.

◆ i_activesolnumber

integer casim_mod::i_activesolnumber =0
private

Definition at line 88 of file casim.F90.

◆ i_activesolrain

integer casim_mod::i_activesolrain =0
private

Definition at line 88 of file casim.F90.

◆ i_aitkensolmass

integer casim_mod::i_aitkensolmass =0
private

Definition at line 88 of file casim.F90.

◆ i_aitkensolnumber

integer casim_mod::i_aitkensolnumber =0
private

Definition at line 88 of file casim.F90.

◆ i_coarsedustmass

integer casim_mod::i_coarsedustmass =0
private

Definition at line 88 of file casim.F90.

◆ i_coarsedustnumber

integer casim_mod::i_coarsedustnumber =0
private

Definition at line 88 of file casim.F90.

◆ i_coarsesolmass

integer casim_mod::i_coarsesolmass =0
private

Definition at line 88 of file casim.F90.

◆ i_coarsesolnumber

integer casim_mod::i_coarsesolnumber =0
private

Definition at line 88 of file casim.F90.

◆ ile

integer casim_mod::ile
private

Definition at line 82 of file casim.F90.

◆ ils

integer casim_mod::ils
private

Definition at line 82 of file casim.F90.

82  INTEGER :: ils,ile, jls,jle, kls,kle, &
83  its,ite, jts,jte, kts,kte

◆ ing

integer casim_mod::ing =0
private

Definition at line 86 of file casim.F90.

◆ ini

integer casim_mod::ini =0
private

Definition at line 86 of file casim.F90.

◆ inl

integer casim_mod::inl =0
private

Definition at line 86 of file casim.F90.

86  INTEGER :: inl=0, inr=0, ini=0, ins=0, ing=0

◆ inr

integer casim_mod::inr =0
private

Definition at line 86 of file casim.F90.

◆ ins

integer casim_mod::ins =0
private

Definition at line 86 of file casim.F90.

◆ iqg

integer casim_mod::iqg =0
private

Definition at line 85 of file casim.F90.

◆ iqi

integer casim_mod::iqi =0
private

Definition at line 85 of file casim.F90.

◆ iql

integer casim_mod::iql =0
private

Definition at line 85 of file casim.F90.

◆ iqr

integer casim_mod::iqr =0
private

Definition at line 85 of file casim.F90.

◆ iqs

integer casim_mod::iqs =0
private

Definition at line 85 of file casim.F90.

◆ iqv

integer casim_mod::iqv =0
private

Definition at line 85 of file casim.F90.

85  INTEGER :: iqv=0, iql=0, iqr=0, iqi=0, iqs=0, iqg=0

◆ ite

integer casim_mod::ite
private

Definition at line 82 of file casim.F90.

◆ its

integer casim_mod::its
private

Definition at line 82 of file casim.F90.

◆ jle

integer casim_mod::jle
private

Definition at line 82 of file casim.F90.

◆ jls

integer casim_mod::jls
private

Definition at line 82 of file casim.F90.

◆ jte

integer casim_mod::jte
private

Definition at line 82 of file casim.F90.

◆ jts

integer casim_mod::jts
private

Definition at line 82 of file casim.F90.

◆ kle

integer casim_mod::kle
private

Definition at line 82 of file casim.F90.

◆ kls

integer casim_mod::kls
private

Definition at line 82 of file casim.F90.

◆ kte

integer casim_mod::kte
private

Definition at line 82 of file casim.F90.

◆ kts

integer casim_mod::kts
private

Definition at line 82 of file casim.F90.

◆ m3g

real(wp), dimension(:,:,:), allocatable casim_mod::m3g
private

Definition at line 37 of file casim.F90.

◆ m3r

real(wp), dimension(:,:,:), allocatable casim_mod::m3r
private

Definition at line 37 of file casim.F90.

◆ m3s

real(wp), dimension(:,:,:), allocatable casim_mod::m3s
private

Definition at line 37 of file casim.F90.

◆ nc

real(wp), dimension(:,:,:), allocatable casim_mod::nc
private

Definition at line 37 of file casim.F90.

◆ ng

real(wp), dimension(:,:,:), allocatable casim_mod::ng
private

Definition at line 37 of file casim.F90.

◆ ni

real(wp), dimension(:,:,:), allocatable casim_mod::ni
private

Definition at line 37 of file casim.F90.

◆ nr

real(wp), dimension(:,:,:), allocatable casim_mod::nr
private

Definition at line 37 of file casim.F90.

◆ ns

real(wp), dimension(:,:,:), allocatable casim_mod::ns
private

Definition at line 37 of file casim.F90.

◆ pressure

real(wp), dimension(:,:,:), allocatable casim_mod::pressure
private

Definition at line 37 of file casim.F90.

◆ qc

real(wp), dimension(:,:,:), allocatable casim_mod::qc
private

Definition at line 37 of file casim.F90.

◆ qg

real(wp), dimension(:,:,:), allocatable casim_mod::qg
private

Definition at line 37 of file casim.F90.

◆ qi

real(wp), dimension(:,:,:), allocatable casim_mod::qi
private

Definition at line 37 of file casim.F90.

◆ qr

real(wp), dimension(:,:,:), allocatable casim_mod::qr
private

Definition at line 37 of file casim.F90.

◆ qs

real(wp), dimension(:,:,:), allocatable casim_mod::qs
private

Definition at line 37 of file casim.F90.

◆ qv

real(wp), dimension(:,:,:), allocatable casim_mod::qv
private

Definition at line 37 of file casim.F90.

◆ rho

real(wp), dimension(:,:,:), allocatable casim_mod::rho
private

Definition at line 37 of file casim.F90.

◆ surface_precip

real(wp), dimension(:,:), allocatable casim_mod::surface_precip
private

Definition at line 80 of file casim.F90.

80  REAL(wp), allocatable :: surface_precip(:,:)

◆ theta

real(wp), dimension(:,:,:), allocatable casim_mod::theta
private

Definition at line 37 of file casim.F90.

37  REAL(wp), allocatable :: theta(:,:,:), pressure(:,:,:), &
38  z_half(:,:,:), z_centre(:,:,:), dz(:,:,:), qv(:,:,:),qc(:,:,:) &
39  , nc(:,:,:), qr(:,:,:), nr(:,:,:), m3r(:,:,:),rho(:,:,:) &
40  , exner(:,:,:), w(:,:,:), tke(:,:,:) &
41  , qi(:,:,:), ni(:,:,:), qs(:,:,:), ns(:,:,:), m3s(:,:,:) &
42  , qg(:,:,:), ng(:,:,:), m3g(:,:,:)

◆ tke

real(wp), dimension(:,:,:), allocatable casim_mod::tke
private

Definition at line 37 of file casim.F90.

◆ w

real(wp), dimension(:,:,:), allocatable casim_mod::w
private

Definition at line 37 of file casim.F90.

◆ z_centre

real(wp), dimension(:,:,:), allocatable casim_mod::z_centre
private

Definition at line 37 of file casim.F90.

◆ z_half

real(wp), dimension(:,:,:), allocatable casim_mod::z_half
private

Definition at line 37 of file casim.F90.