Called for each column per timestep this will calculate the microphysical tendencies.
503 type(model_state_type),
target,
intent(inout) :: current_state
506 INTEGER :: icol, jcol, iqx, target_x_index, target_y_index
508 icol=current_state%column_local_x
509 jcol=current_state%column_local_y
510 target_y_index=jcol-current_state%local_grid%halo_size(y_index)
511 target_x_index=icol-current_state%local_grid%halo_size(x_index)
518 if (current_state%halo_column .or. current_state%timestep < 2)
return
520 if (current_state%field_stepping == forward_stepping)
then
522 dtwp = current_state%dtm
524 dtwp = 2.0*current_state%dtm
530 aitkensolnumber = 0.0
531 daitkensolnumber = 0.0
535 daccumsolnumber = 0.0
538 coarsesolnumber = 0.0
539 dcoarsesolnumber = 0.0
540 activesolliquid = 0.0
541 dactivesolliquid = 0.0
543 dcoarsedustmass = 0.0
544 coarsedustnumber = 0.0
545 dcoarsedustnumber = 0.0
547 dactiveinsolice = 0.0
550 activeinsolliquid = 0.0
551 dactiveinsolliquid = 0.0
553 daccuminsolmass = 0.0
554 accuminsolnumber = 0.0
555 daccuminsolnumber = 0.0
556 activesolnumber = 0.0
557 dactivesolnumber = 0.0
558 activeinsolnumber = 0.0
559 dactiveinsolnumber = 0.0
564 theta(:,1,1) = current_state%zth%data(:, jcol, icol) + current_state%global_grid%configuration%vertical%thref(:)
565 dth(:,1,1) = current_state%sth%data(:, jcol, icol)
566 exner(:,1,1) = current_state%global_grid%configuration%vertical%rprefrcp(:)
567 pressure(:,1,1) = current_state%global_grid%configuration%vertical%prefn(:)
568 z_centre(:,1,1) = current_state%global_grid%configuration%vertical%zn(:)
569 dz(:,1,1) = current_state%global_grid%configuration%vertical%dz(:)
570 z_half(:kte-1,1,1) = current_state%global_grid%configuration%vertical%z(:)
571 rho(:,1,1) = current_state%global_grid%configuration%vertical%rhon(:)
572 w(:,1,1) = current_state%zw%data(:, jcol, icol)
576 qv(:,1,1) = current_state%zq(iqx)%data(:,jcol,icol)
577 dqv(:,1,1) = current_state%sq(iqx)%data(:,jcol,icol)
582 qc(:,1,1) = current_state%zq(iqx)%data(:,jcol,icol)
583 dqc(:,1,1) = current_state%sq(iqx)%data(:,jcol,icol)
587 qr(:,1,1) = current_state%zq(iqx)%data(:,jcol,icol)
588 dqr(:,1,1) = current_state%sq(iqx)%data(:,jcol,icol)
592 nc(:,1,1) = current_state%zq(iqx)%data(:,jcol,icol)
593 dnc(:,1,1) = current_state%sq(iqx)%data(:,jcol,icol)
597 nr(:,1,1) = current_state%zq(iqx)%data(:,jcol,icol)
598 dnr(:,1,1) = current_state%sq(iqx)%data(:,jcol,icol)
602 m3r(:,1,1) = current_state%zq(iqx)%data(:,jcol,icol)
603 dm3r(:,1,1) = current_state%sq(iqx)%data(:,jcol,icol)
609 qi(:,1,1) = current_state%zq(iqx)%data(:,jcol,icol)
610 dqi(:,1,1) = current_state%sq(iqx)%data(:,jcol,icol)
614 qs(:,1,1) = current_state%zq(iqx)%data(:,jcol,icol)
615 dqs(:,1,1) = current_state%sq(iqx)%data(:,jcol,icol)
619 qg(:,1,1) = current_state%zq(iqx)%data(:,jcol,icol)
620 dqg(:,1,1) = current_state%sq(iqx)%data(:,jcol,icol)
624 ni(:,1,1) = current_state%zq(iqx)%data(:,jcol,icol)
625 dni(:,1,1) = current_state%sq(iqx)%data(:,jcol,icol)
629 ns(:,1,1) = current_state%zq(iqx)%data(:,jcol,icol)
630 dns(:,1,1) = current_state%sq(iqx)%data(:,jcol,icol)
634 ng(:,1,1) = current_state%zq(iqx)%data(:,jcol,icol)
635 dng(:,1,1) = current_state%sq(iqx)%data(:,jcol,icol)
639 m3s(:,1,1) = current_state%zq(iqx)%data(:,jcol,icol)
640 dm3s(:,1,1) = current_state%sq(iqx)%data(:,jcol,icol)
644 m3g(:,1,1) = current_state%zq(iqx)%data(:,jcol,icol)
645 dm3g(:,1,1) = current_state%sq(iqx)%data(:,jcol,icol)
650 if (i_aitkensolmass>0) aitkensolmass(:,1,1) = current_state%zq(i_aitkensolmass)%data(:,jcol,icol)
651 if (i_aitkensolmass>0) daitkensolmass(:,1,1) = current_state%sq(i_aitkensolmass)%data(:,jcol,icol)
652 if (i_aitkensolnumber>0) aitkensolnumber(:,1,1) = current_state%zq(i_aitkensolnumber)%data(:,jcol,icol)
653 if (i_aitkensolnumber>0) daitkensolnumber(:,1,1) = current_state%sq(i_aitkensolnumber)%data(:,jcol,icol)
654 if (i_accumsolmass>0) accumsolmass(:,1,1) = current_state%zq(i_accumsolmass)%data(:,jcol,icol)
655 if (i_accumsolmass>0) daccumsolmass(:,1,1) = current_state%sq(i_accumsolmass)%data(:,jcol,icol)
656 if (i_accumsolnumber>0) accumsolnumber(:,1,1) = current_state%zq(i_accumsolnumber)%data(:,jcol,icol)
657 if (i_accumsolnumber>0) daccumsolnumber(:,1,1) = current_state%sq(i_accumsolnumber)%data(:,jcol,icol)
658 if (i_coarsesolmass>0) coarsesolmass(:,1,1) = current_state%zq(i_coarsesolmass)%data(:,jcol,icol)
659 if (i_coarsesolmass>0) dcoarsesolmass(:,1,1) = current_state%sq(i_coarsesolmass)%data(:,jcol,icol)
660 if (i_coarsesolnumber>0) coarsesolnumber(:,1,1) = current_state%zq(i_coarsesolnumber)%data(:,jcol,icol)
661 if (i_coarsesolnumber>0) dcoarsesolnumber(:,1,1) = current_state%sq(i_coarsesolnumber)%data(:,jcol,icol)
662 if (i_activesolliquid>0) activesolliquid(:,1,1) = current_state%zq(i_activesolliquid)%data(:,jcol,icol)
663 if (i_activesolliquid>0) dactivesolliquid(:,1,1) = current_state%sq(i_activesolliquid)%data(:,jcol,icol)
664 if (i_coarsedustmass>0) coarsedustmass(:,1,1) = current_state%zq(i_coarsedustmass)%data(:,jcol,icol)
665 if (i_coarsedustmass>0) dcoarsedustmass(:,1,1) = current_state%sq(i_coarsedustmass)%data(:,jcol,icol)
666 if (i_coarsedustnumber>0) coarsedustnumber(:,1,1) = current_state%zq(i_coarsedustnumber)%data(:,jcol,icol)
667 if (i_coarsedustnumber>0) dcoarsedustnumber(:,1,1) = current_state%sq(i_coarsedustnumber)%data(:,jcol,icol)
668 if (i_activeinsolice>0) activeinsolice(:,1,1) = current_state%zq(i_activeinsolice)%data(:,jcol,icol)
669 if (i_activeinsolice>0) dactiveinsolice(:,1,1) = current_state%sq(i_activeinsolice)%data(:,jcol,icol)
670 if (i_activesolice>0) activesolice(:,1,1) = current_state%zq(i_activesolice)%data(:,jcol,icol)
671 if (i_activesolice>0) dactivesolice(:,1,1) = current_state%sq(i_activesolice)%data(:,jcol,icol)
672 if (i_activeinsolliquid>0) activeinsolliquid(:,1,1) = current_state%zq(i_activeinsolliquid)%data(:,jcol,icol)
673 if (i_activeinsolliquid>0)dactiveinsolliquid(:,1,1) = current_state%sq(i_activeinsolliquid)%data(:,jcol,icol)
674 if (i_accuminsolmass>0) accuminsolmass(:,1,1) = current_state%zq(i_accuminsolmass)%data(:,jcol,icol)
675 if (i_accuminsolmass>0) daccuminsolmass(:,1,1) = current_state%sq(i_accuminsolmass)%data(:,jcol,icol)
676 if (i_accuminsolnumber>0) accuminsolnumber(:,1,1) = current_state%zq(i_accuminsolnumber)%data(:,jcol,icol)
677 if (i_accuminsolnumber>0) daccuminsolnumber(:,1,1) = current_state%sq(i_accuminsolnumber)%data(:,jcol,icol)
678 if (i_activesolnumber>0) activesolnumber(:,1,1) = current_state%zq(i_activesolnumber)%data(:,jcol,icol)
679 if (i_activesolnumber>0) dactivesolnumber(:,1,1) = current_state%sq(i_activesolnumber)%data(:,jcol,icol)
680 if (i_activeinsolnumber>0) activeinsolnumber(:,1,1) = current_state%zq(i_activeinsolnumber)%data(:,jcol,icol)
681 if (i_activeinsolnumber>0)dactiveinsolnumber(:,1,1) = current_state%sq(i_activeinsolnumber)%data(:,jcol,icol)
683 CALL shipway_microphysics( &
695 aitkensolmass, aitkensolnumber, &
696 accumsolmass, accumsolnumber, &
697 coarsesolmass, coarsesolnumber, &
700 coarsedustmass, coarsedustnumber, &
717 dqv, dqc, dqr, dnc, dnr, dm3r, &
718 dqi, dqs, dqg, dni, dns, dng, dm3s, dm3g, &
720 daitkensolmass, daitkensolnumber, &
721 daccumsolmass, daccumsolnumber, &
722 dcoarsesolmass, dcoarsesolnumber, &
725 dcoarsedustmass, dcoarsedustnumber, &
728 dactiveinsolliquid, &
732 dactiveinsolnumber, &
740 current_state%sth%data(:,jcol,icol) = current_state%sth%data(:,jcol,icol) + dth(:,1,1)
743 current_state%sq(iqx)%data(:,jcol,icol) = current_state%sq(iqx)%data(:,jcol,icol) + dqv(:,1,1)
748 current_state%sq(iqx)%data(:,jcol,icol) = current_state%sq(iqx)%data(:,jcol,icol) + dqc(:,1,1)
753 current_state%sq(iqx)%data(:,jcol,icol) = current_state%sq(iqx)%data(:,jcol,icol) + dqr(:,1,1)
757 current_state%sq(iqx)%data(:,jcol,icol) = current_state%sq(iqx)%data(:,jcol,icol) + dnc(:,1,1)
761 current_state%sq(iqx)%data(:,jcol,icol) = current_state%sq(iqx)%data(:,jcol,icol) + dnr(:,1,1)
765 current_state%sq(iqx)%data(:,jcol,icol) = current_state%sq(iqx)%data(:,jcol,icol) + dm3r(:,1,1)
771 current_state%sq(iqx)%data(:,jcol,icol) = current_state%sq(iqx)%data(:,jcol,icol) + dqi(:,1,1)
775 current_state%sq(iqx)%data(:,jcol,icol) = current_state%sq(iqx)%data(:,jcol,icol) + dqs(:,1,1)
779 current_state%sq(iqx)%data(:,jcol,icol) = current_state%sq(iqx)%data(:,jcol,icol) + dqg(:,1,1)
783 current_state%sq(iqx)%data(:,jcol,icol) = current_state%sq(iqx)%data(:,jcol,icol) + dni(:,1,1)
787 current_state%sq(iqx)%data(:,jcol,icol) = current_state%sq(iqx)%data(:,jcol,icol) + dns(:,1,1)
791 current_state%sq(iqx)%data(:,jcol,icol) = current_state%sq(iqx)%data(:,jcol,icol) + dng(:,1,1)
795 current_state%sq(iqx)%data(:,jcol,icol) = current_state%sq(iqx)%data(:,jcol,icol) + dm3s(:,1,1)
799 current_state%sq(iqx)%data(:,jcol,icol) = current_state%sq(iqx)%data(:,jcol,icol) + dm3g(:,1,1)
804 if (i_aitkensolmass>0) current_state%sq(i_aitkensolmass)%data(:,jcol,icol) &
805 = current_state%sq(i_aitkensolmass)%data(:,jcol,icol) + daitkensolmass(:,1,1)
806 if (i_aitkensolnumber>0) current_state%sq(i_aitkensolnumber)%data(:,jcol,icol) &
807 = current_state%sq(i_aitkensolnumber)%data(:,jcol,icol) + daitkensolnumber(:,1,1)
808 if (i_accumsolmass>0) current_state%sq(i_accumsolmass)%data(:,jcol,icol) &
809 = current_state%sq(i_accumsolmass)%data(:,jcol,icol) + daccumsolmass(:,1,1)
810 if (i_accumsolnumber>0) current_state%sq(i_accumsolnumber)%data(:,jcol,icol) &
811 = current_state%sq(i_accumsolnumber)%data(:,jcol,icol) + daccumsolnumber(:,1,1)
812 if (i_coarsesolmass>0) current_state%sq(i_coarsesolmass)%data(:,jcol,icol) &
813 = current_state%sq(i_coarsesolmass)%data(:,jcol,icol) + dcoarsesolmass(:,1,1)
814 if (i_coarsesolnumber>0) current_state%sq(i_coarsesolnumber)%data(:,jcol,icol) &
815 = current_state%sq(i_coarsesolnumber)%data(:,jcol,icol) + dcoarsesolnumber(:,1,1)
816 if (i_activesolliquid>0) current_state%sq(i_activesolliquid)%data(:,jcol,icol) &
817 = current_state%sq(i_activesolliquid)%data(:,jcol,icol) + dactivesolliquid(:,1,1)
818 if (i_coarsedustmass>0) current_state%sq(i_coarsedustmass)%data(:,jcol,icol) &
819 = current_state%sq(i_coarsedustmass)%data(:,jcol,icol) + dcoarsedustmass(:,1,1)
820 if (i_coarsedustnumber>0) current_state%sq(i_coarsedustnumber)%data(:,jcol,icol) &
821 = current_state%sq(i_coarsedustnumber)%data(:,jcol,icol) + dcoarsedustnumber(:,1,1)
822 if (i_activeinsolice>0) current_state%sq(i_activeinsolice)%data(:,jcol,icol) &
823 = current_state%sq(i_activeinsolice)%data(:,jcol,icol) + dactiveinsolice(:,1,1)
824 if (i_activesolice>0) current_state%sq(i_activesolice)%data(:,jcol,icol) &
825 = current_state%sq(i_activesolice)%data(:,jcol,icol) + dactivesolice(:,1,1)
826 if (i_activeinsolliquid>0) current_state%sq(i_activeinsolliquid)%data(:,jcol,icol) &
827 = current_state%sq(i_activeinsolliquid)%data(:,jcol,icol) + dactiveinsolliquid(:,1,1)
828 if (i_accuminsolmass>0) current_state%sq(i_accuminsolmass)%data(:,jcol,icol) &
829 = current_state%sq(i_accuminsolmass)%data(:,jcol,icol) + daccuminsolmass(:,1,1)
830 if (i_accuminsolnumber>0) current_state%sq(i_accuminsolnumber)%data(:,jcol,icol) &
831 = current_state%sq(i_accuminsolnumber)%data(:,jcol,icol) + daccuminsolnumber(:,1,1)
832 if (i_activesolnumber>0) current_state%sq(i_activesolnumber)%data(:,jcol,icol) &
833 = current_state%sq(i_activesolnumber)%data(:,jcol,icol) + dactivesolnumber(:,1,1)
834 if (i_activeinsolnumber>0) current_state%sq(i_activeinsolnumber)%data(:,jcol,icol) &
835 = current_state%sq(i_activeinsolnumber)%data(:,jcol,icol) + dactiveinsolnumber(:,1,1)
842 surface_precip(target_y_index,target_x_index) = &
843 casdiags % SurfaceRainR(1,1)
845 surface_precip(target_y_index,target_x_index) = &
846 casdiags % SurfaceRainR(1,1) + casdiags % SurfaceSnowR(1,1)
848 call populate_casim_monc_dg(current_state, casdiags)