Called for each column per timestep this will calculate the microphysical tendencies.
375 type(model_state_type),
target,
intent(inout) :: current_state
378 INTEGER :: icol, jcol, iqx, target_x_index, target_y_index
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)
385 if (current_state%halo_column .or. current_state%timestep < 2)
return 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
391 dtwp = 2.0*current_state%dtm
397 aitkensolnumber = 0.0
398 daitkensolnumber = 0.0
402 daccumsolnumber = 0.0
405 coarsesolnumber = 0.0
406 dcoarsesolnumber = 0.0
407 activesolliquid = 0.0
408 dactivesolliquid = 0.0
410 dcoarsedustmass = 0.0
411 coarsedustnumber = 0.0
412 dcoarsedustnumber = 0.0
414 dactiveinsolice = 0.0
417 activeinsolliquid = 0.0
418 dactiveinsolliquid = 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
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)
440 qv(:,1,1) = current_state%zq(iqx)%data(:,jcol,icol)
441 dqv(:,1,1) = current_state%sq(iqx)%data(:,jcol,icol)
446 qc(:,1,1) = current_state%zq(iqx)%data(:,jcol,icol)
447 dqc(:,1,1) = current_state%sq(iqx)%data(:,jcol,icol)
451 qr(:,1,1) = current_state%zq(iqx)%data(:,jcol,icol)
452 dqr(:,1,1) = current_state%sq(iqx)%data(:,jcol,icol)
456 nc(:,1,1) = current_state%zq(iqx)%data(:,jcol,icol)
457 dnc(:,1,1) = current_state%sq(iqx)%data(:,jcol,icol)
461 nr(:,1,1) = current_state%zq(iqx)%data(:,jcol,icol)
462 dnr(:,1,1) = current_state%sq(iqx)%data(:,jcol,icol)
466 m3r(:,1,1) = current_state%zq(iqx)%data(:,jcol,icol)
467 dm3r(:,1,1) = current_state%sq(iqx)%data(:,jcol,icol)
473 qi(:,1,1) = current_state%zq(iqx)%data(:,jcol,icol)
474 dqi(:,1,1) = current_state%sq(iqx)%data(:,jcol,icol)
478 qs(:,1,1) = current_state%zq(iqx)%data(:,jcol,icol)
479 dqs(:,1,1) = current_state%sq(iqx)%data(:,jcol,icol)
483 qg(:,1,1) = current_state%zq(iqx)%data(:,jcol,icol)
484 dqg(:,1,1) = current_state%sq(iqx)%data(:,jcol,icol)
488 ni(:,1,1) = current_state%zq(iqx)%data(:,jcol,icol)
489 dni(:,1,1) = current_state%sq(iqx)%data(:,jcol,icol)
493 ns(:,1,1) = current_state%zq(iqx)%data(:,jcol,icol)
494 dns(:,1,1) = current_state%sq(iqx)%data(:,jcol,icol)
498 ng(:,1,1) = current_state%zq(iqx)%data(:,jcol,icol)
499 dng(:,1,1) = current_state%sq(iqx)%data(:,jcol,icol)
503 m3s(:,1,1) = current_state%zq(iqx)%data(:,jcol,icol)
504 dm3s(:,1,1) = current_state%sq(iqx)%data(:,jcol,icol)
508 m3g(:,1,1) = current_state%zq(iqx)%data(:,jcol,icol)
509 dm3g(:,1,1) = current_state%sq(iqx)%data(:,jcol,icol)
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)
547 CALL shipway_microphysics( &
559 aitkensolmass, aitkensolnumber, &
560 accumsolmass, accumsolnumber, &
561 coarsesolmass, coarsesolnumber, &
564 coarsedustmass, coarsedustnumber, &
578 dqv, dqc, dqr, dnc, dnr, dm3r, &
579 dqi, dqs, dqg, dni, dns, dng, dm3s, dm3g, &
581 daitkensolmass, daitkensolnumber, &
582 daccumsolmass, daccumsolnumber, &
583 dcoarsesolmass, dcoarsesolnumber, &
586 dcoarsedustmass, dcoarsedustnumber, &
589 dactiveinsolliquid, &
593 dactiveinsolnumber, &
601 current_state%sth%data(:,jcol,icol) = current_state%sth%data(:,jcol,icol) + dth(:,1,1)
604 current_state%sq(iqx)%data(:,jcol,icol) = current_state%sq(iqx)%data(:,jcol,icol) + dqv(:,1,1)
609 current_state%sq(iqx)%data(:,jcol,icol) = current_state%sq(iqx)%data(:,jcol,icol) + dqc(:,1,1)
614 current_state%sq(iqx)%data(:,jcol,icol) = current_state%sq(iqx)%data(:,jcol,icol) + dqr(:,1,1)
618 current_state%sq(iqx)%data(:,jcol,icol) = current_state%sq(iqx)%data(:,jcol,icol) + dnc(:,1,1)
622 current_state%sq(iqx)%data(:,jcol,icol) = current_state%sq(iqx)%data(:,jcol,icol) + dnr(:,1,1)
626 current_state%sq(iqx)%data(:,jcol,icol) = current_state%sq(iqx)%data(:,jcol,icol) + dm3r(:,1,1)
632 current_state%sq(iqx)%data(:,jcol,icol) = current_state%sq(iqx)%data(:,jcol,icol) + dqi(:,1,1)
636 current_state%sq(iqx)%data(:,jcol,icol) = current_state%sq(iqx)%data(:,jcol,icol) + dqs(:,1,1)
640 current_state%sq(iqx)%data(:,jcol,icol) = current_state%sq(iqx)%data(:,jcol,icol) + dqg(:,1,1)
644 current_state%sq(iqx)%data(:,jcol,icol) = current_state%sq(iqx)%data(:,jcol,icol) + dni(:,1,1)
648 current_state%sq(iqx)%data(:,jcol,icol) = current_state%sq(iqx)%data(:,jcol,icol) + dns(:,1,1)
652 current_state%sq(iqx)%data(:,jcol,icol) = current_state%sq(iqx)%data(:,jcol,icol) + dng(:,1,1)
656 current_state%sq(iqx)%data(:,jcol,icol) = current_state%sq(iqx)%data(:,jcol,icol) + dm3s(:,1,1)
660 current_state%sq(iqx)%data(:,jcol,icol) = current_state%sq(iqx)%data(:,jcol,icol) + dm3g(:,1,1)
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)
702 surface_precip(target_y_index,target_x_index) = &
703 casdiags % SurfaceRainR(1,1) + casdiags % SurfaceSnowR(1,1)