386 psat => atmos_saturation_psat_liq
389 file_grads_get_shape, &
394 real(RP),
intent(out) :: velz_org(:,:,:)
395 real(RP),
intent(out) :: velx_org(:,:,:)
396 real(RP),
intent(out) :: vely_org(:,:,:)
397 real(RP),
intent(out) :: pres_org(:,:,:)
398 real(RP),
intent(out) :: dens_org(:,:,:)
399 real(RP),
intent(out) :: temp_org(:,:,:)
400 real(RP),
intent(out) :: qv_org (:,:,:)
401 real(RP),
intent(out) :: qhyd_org(:,:,:,:)
402 real(RP),
intent(out) :: RN222_org(:,:,:)
403 real(RP),
intent(out) :: cz_org(:,:,:)
404 character(len=*),
intent(in) :: basename_num
405 logical,
intent(in) :: sfc_diagnoses
406 logical,
intent(in) :: under_sfc
407 integer,
intent(in) :: KA_org
408 integer,
intent(in) :: KS_org
409 integer,
intent(in) :: KE_org
410 integer,
intent(in) :: IA_org
411 integer,
intent(in) :: IS_org
412 integer,
intent(in) :: IE_org
413 integer,
intent(in) :: JA_org
414 integer,
intent(in) :: JS_org
415 integer,
intent(in) :: JE_org
416 integer,
intent(in) :: dims(6)
417 integer,
intent(in) :: nt
419 character(len=H_SHORT) :: item
421 integer :: lm_layer( IA_org, JA_org )
424 real(RP) :: work( dims(1), dims(2), dims(3) )
426 logical :: pressure_coordinates
427 real(RP) :: p_sat, qm, dz
428 real(RP) :: rh( IA_org, JA_org )
432 integer :: i, j, k, iq, ielem
439 dens_org(k,i,j) = undef
440 pres_org(k,i,j) = undef
441 velz_org(k,i,j) = 0.0_rp
442 qv_org(k,i,j) = 0.0_rp
443 qhyd_org(k,i,j,:) = 0.0_rp
444 rn222_org(k,i,j ) = 0.0_rp
450 loop_inputatmosgrads :
do ielem = 1, num_item_list_atom
452 if ( var_id(ielem,1) < 0 ) cycle
454 item = item_list_atom(ielem)
460 call file_grads_get_shape( file_id_atm, var_id(ielem,1), &
462 if ( ka_org-2 .ne. shape(1) )
then
463 log_error(
"ParentAtmosInputGrADS",*)
'"nz" must be equal to the default nz for ',trim(item), shape(1), ka_org-2
468 pressure_coordinates = .true.
469 call file_grads_get_shape( file_id_atm, var_id(ielem,1), &
471 if ( ka_org-2 .ne. shape(1) )
then
472 log_error(
"ParentAtmosInputGrADS",*)
'lnum must be same as the nz for plev! ',shape(1), ka_org-2
475 call file_grads_read( file_id_atm, var_id(ielem,1), &
476 work(:,dummy,dummy) )
481 pres_org(k+2,i,j) = work(k,dummy,dummy)
486 pressure_coordinates = .false.
487 call file_grads_read( file_id_atm, var_id(ielem,1), &
490 postfix = basename_num )
495 pres_org(k+2,i,j) = work(k,i-1+is_org,j-1+js_org)
502 call file_grads_get_shape( file_id_atm, var_id(ielem,1), &
504 if ( ka_org-2 .ne. shape(1) )
then
505 log_error(
"ParentAtmosInputGrADS",*)
'"nz" must be equal to the default nz for ',trim(item),
'. nz:',shape(1),
'> outer_nz:',ka_org-2
509 call file_grads_read( file_id_atm, var_id(ielem,1), &
512 postfix = basename_num )
517 dens_org(k+2,i,j) = work(k,i-1+is_org,j-1+js_org)
524 call file_grads_get_shape( file_id_atm, var_id(ielem,1), &
526 if ( ka_org-2 .ne. shape(1) )
then
527 log_error(
"ParentAtmosInputGrADS",*)
'"nz" must be equal to the default nz for ',trim(item),
'. nz:',shape(1),
'> outer_nz:',ka_org-2
531 call file_grads_read( file_id_atm, var_id(ielem,1), &
534 postfix = basename_num )
539 velx_org(k+2,i,j) = work(k,i-1+is_org,j-1+js_org)
541 velx_org(1:2,i,j) = 0.0_rp
547 call file_grads_get_shape( file_id_atm, var_id(ielem,1), &
549 if ( ka_org-2 .ne. shape(1) )
then
550 log_error(
"ParentAtmosInputGrADS",*)
'"nz" must be equal to the default nz for ',trim(item),
'. nz:',shape(1),
'> outer_nz:',ka_org-2
554 call file_grads_read( file_id_atm, var_id(ielem,1), &
557 postfix = basename_num )
562 vely_org(k+2,i,j) = work(k,i-1+is_org,j-1+js_org)
564 vely_org(1:2,i,j) = 0.0_rp
570 call file_grads_get_shape( file_id_atm, var_id(ielem,1), &
572 if ( ka_org-2 .ne. shape(1) )
then
573 log_error(
"ParentAtmosInputGrADS",*)
'"nz" must be equal to the default nz for ',trim(item),
'. nz:',shape(1),
'> outer_nz:',ka_org-2
577 call file_grads_read( file_id_atm, var_id(ielem,1), &
580 postfix = basename_num )
585 velz_org(k+2,i,j) = work(k,i-1+is_org,j-1+js_org)
587 velz_org(1:2,i,j) = 0.0_rp
593 call file_grads_get_shape( file_id_atm, var_id(ielem,1), &
595 if ( ka_org-2 .ne. shape(1) )
then
596 log_error(
"ParentAtmosInputGrADS",*)
'"nz" must be equal to the default nz for ',trim(item),
'. nz:',shape(1),
'> outer_nz:',ka_org-2
600 call file_grads_read( file_id_atm, var_id(ielem,1), &
603 postfix = basename_num )
608 temp_org(k+2,i,j) = work(k,i-1+is_org,j-1+js_org)
615 call file_grads_get_shape( file_id_atm, var_id(ielem,1), &
617 if ( ka_org-2 .ne. shape(1) )
then
618 log_error(
"ParentAtmosInputGrADS",*)
'"nz" must be equal to the default nz for ',trim(item),
'. nz:',shape(1),
'> outer_nz:',ka_org-2
623 call file_grads_get_shape( file_id_atm, var_id(ielem,1), &
625 if ( ka_org-2 .ne. shape(1) )
then
626 log_error(
"ParentAtmosInputGrADS",*)
'lnum must be same as the nz for HGT! ',ka_org-2, shape(1)
629 call file_grads_read( file_id_atm, var_id(ielem,1), &
630 work(:,dummy,dummy) )
634 cz_org(1,i,j) = 0.0_rp
636 cz_org(k+2,i,j) = work(k,dummy,dummy)
641 pressure_coordinates = .false.
642 call file_grads_read( file_id_atm, var_id(ielem,1), &
645 postfix = basename_num )
650 cz_org(k+2,i,j) = work(k,i-1+is_org,j-1+js_org)
652 cz_org(1,i,j) = 0.0_rp
659 call file_grads_get_shape( file_id_atm, var_id(ielem,1), &
662 call file_grads_read( file_id_atm, var_id(ielem,1), &
663 work(:shape(1),:,:), &
665 postfix = basename_num )
670 qv_org(k+2,i,j) = work(k,i-1+is_org,j-1+js_org)
675 if( ka_org-2 > shape(1) )
then
676 select case( upper_qv_type )
681 do k = shape(1)+1, ka_org-2
682 qv_org(k+2,i,j) = qv_org(shape(1)+2,i,j)
689 log_error(
"ParentAtmosInputGrADS",*)
'upper_qv_type in PARAM_MKINIT_REAL_GrADS is invalid! ', upper_qv_type
696 call file_grads_get_shape( file_id_atm, var_id(ielem,1), &
699 call file_grads_read( file_id_atm, var_id(ielem,1), &
700 work(:shape(1),:,:), &
702 postfix = basename_num )
707 qhyd_org(k+2,i,j,
i_hc) = work(k,i-1+is_org,j-1+js_org)
716 call file_grads_get_shape( file_id_atm, var_id(ielem,1), &
719 call file_grads_read( file_id_atm, var_id(ielem,1), &
720 work(:shape(1),:,:), &
722 postfix = basename_num )
727 qhyd_org(k+2,i,j,
i_hr) = work(k,i-1+is_org,j-1+js_org)
736 call file_grads_get_shape( file_id_atm, var_id(ielem,1), &
739 call file_grads_read( file_id_atm, var_id(ielem,1), &
740 work(:shape(1),:,:), &
742 postfix = basename_num )
747 qhyd_org(k+2,i,j,
i_hi) = work(k,i-1+is_org,j-1+js_org)
756 call file_grads_get_shape( file_id_atm, var_id(ielem,1), &
759 call file_grads_read( file_id_atm, var_id(ielem,1), &
760 work(:shape(1),:,:), &
762 postfix = basename_num )
767 qhyd_org(k+2,i,j,
i_hs) = work(k,i-1+is_org,j-1+js_org)
776 call file_grads_get_shape( file_id_atm, var_id(ielem,1), &
779 call file_grads_read( file_id_atm, var_id(ielem,1), &
780 work(:shape(1),:,:), &
782 postfix = basename_num )
787 qhyd_org(k+2,i,j,
i_hg) = work(k,i-1+is_org,j-1+js_org)
796 call file_grads_get_shape( file_id_atm, var_id(ielem,1), &
799 call file_grads_read( file_id_atm, var_id(ielem,1), &
800 work(:shape(1),:,:), &
802 postfix = basename_num )
807 qv_org(k+2,i,j) = work(k,i-1+is_org,j-1+js_org)
817 if( qv_org(k+1,i,j) .ne. undef )
then
818 rh(i,j) = qv_org(k+2,i,j) / 100.0_rp
819 call psat( temp_org(k+2,i,j), p_sat )
820 qm = epsvap * rh(i,j) * p_sat &
821 / ( pres_org(k+2,i,j) - rh(i,j) * p_sat )
822 qv_org(k+2,i,j) = qm / ( 1.0_rp + qm )
827 if( ka_org-2 > shape(1) )
then
828 select case( upper_qv_type )
834 do k = shape(1)+1, ka_org-2
835 call psat( temp_org(k+2,i,j), p_sat )
836 qm = epsvap * rh(i,j) * p_sat &
837 / ( pres_org(k+2,i,j) - rh(i,j) * p_sat )
838 qv_org(k+2,i,j) = qm / ( 1.0_rp + qm )
839 qv_org(k+2,i,j) = min(qv_org(k+2,i,j),qv_org(k+1,i,j))
846 log_error(
"ParentAtmosInputGrADS",*)
'upper_qv_type in PARAM_MKINIT_REAL_GrADS is invalid! ', upper_qv_type
853 call file_grads_read( file_id_atm, var_id(ielem,1), &
856 postfix = basename_num )
860 pres_org(1,i,j) = work(dummy,i-1+is_org,j-1+js_org)
866 call file_grads_read( file_id_atm, var_id(ielem,1), &
869 postfix = basename_num )
873 pres_org(2,i,j) = work(dummy,i-1+is_org,j-1+js_org)
879 if ( sfc_diagnoses )
then
880 call file_grads_read( file_id_atm, var_id(ielem,1), &
883 postfix = basename_num )
887 velx_org(2,i,j) = work(dummy,i-1+is_org,j-1+js_org)
894 if ( sfc_diagnoses )
then
895 call file_grads_read( file_id_atm, var_id(ielem,1), &
898 postfix = basename_num )
902 vely_org(2,i,j) = work(dummy,i-1+is_org,j-1+js_org)
909 if ( sfc_diagnoses )
then
910 call file_grads_read( file_id_atm, var_id(ielem,1), &
913 postfix = basename_num )
917 temp_org(2,i,j) = work(dummy,i-1+is_org,j-1+js_org)
924 if ( sfc_diagnoses )
then
925 call file_grads_read( file_id_atm, var_id(ielem,1), &
928 postfix = basename_num )
932 qv_org(2,i,j) = work(dummy,i-1+is_org,j-1+js_org)
939 if ( sfc_diagnoses )
then
940 call file_grads_read( file_id_atm, var_id(ielem,1), &
943 postfix = basename_num )
947 qv_org(2,i,j) = work(dummy,i-1+is_org,j-1+js_org)
954 rh(i,j) = qv_org(2,i,j) / 100.0_rp
955 call psat( temp_org(2,i,j), p_sat )
956 qm = epsvap * rh(i,j) * p_sat &
957 / ( pres_org(2,i,j) - rh(i,j) * p_sat )
958 qv_org(2,i,j) = qm / ( 1.0_rp + qm )
965 call file_grads_read( file_id_atm, var_id(ielem,1), &
967 postfix = basename_num )
971 cz_org(2,i,j) = work(dummy,i-1+is_org,j-1+js_org)
977 call file_grads_get_shape( file_id_atm, var_id(ielem,1), &
980 call file_grads_read( file_id_atm, var_id(ielem,1), &
981 work(:shape(1),:,:), &
983 postfix = basename_num )
988 rn222_org(k+2,i,j) = work(k,i-1+is_org,j-1+js_org)
994 enddo loop_inputatmosgrads
1003 if( abs( pres_org(k,i,j) - undef ) < eps )
then
1004 lm_layer(i,j) = k + 1
1013 if ( var_id(ia_dens,1) < 0 )
then
1018 do k = lm_layer(i,j), ka_org
1019 rtot = rdry * ( 1.0_rp + epstvap * qv_org(k,i,j) )
1020 dens_org(k,i,j) = pres_org(k,i,j) / ( rtot * temp_org(k,i,j) )
1026 if ( sfc_diagnoses )
then
1028 if ( var_id(ia_topo,1) > 0 )
then
1029 if ( .not. under_sfc )
then
1033 do k = lm_layer(i,j), ka_org
1034 if ( cz_org(k,i,j) > cz_org(2,i,j) )
then
1042 if ( var_id(ia_t2,1) > 0 .and. var_id(ia_ps,1) > 0 )
then
1047 rtot = rdry * ( 1.0_rp + epstvap * qv_org(2,i,j) )
1048 dens_org(2,i,j) = pres_org(2,i,j) / ( rtot * temp_org(2,i,j) )
1051 else if ( var_id(ia_ps,1) > 0 )
then
1057 dz = cz_org(k,i,j) - cz_org(2,i,j)
1058 dens_org(2,i,j) = - ( pres_org(k,i,j) - pres_org(2,i,j) ) * 2.0_rp / ( grav * dz ) &
1060 rtot = rdry * ( 1.0_rp + epstvap * qv_org(2,i,j) )
1061 temp_org(2,i,j) = pres_org(2,i,j) / ( rtot * dens_org(2,i,j) )
1064 else if ( var_id(ia_t2,1) > 0 )
then
1070 dz = cz_org(k,i,j) - cz_org(2,i,j)
1071 rtot = rdry * ( 1.0_rp + epstvap * qv_org(2,i,j) )
1072 dens_org(2,i,j) = ( pres_org(k,i,j) + grav * dens_org(k,i,j) * dz * 0.5_rp ) &
1073 / ( rtot * temp_org(2,i,j) - grav * dz * 0.5_rp )
1074 pres_org(2,i,j) = dens_org(2,i,j) * rtot * temp_org(2,i,j)
1083 dz = cz_org(k,i,j) - cz_org(2,i,j)
1084 temp_org(2,i,j) = temp_org(k,i,j) + laps * dz
1085 rtot = rdry * ( 1.0_rp + epstvap * qv_org(2,i,j) )
1086 dens_org(2,i,j) = ( pres_org(k,i,j) + grav * dens_org(k,i,j) * dz * 0.5_rp ) &
1087 / ( rtot * temp_org(2,i,j) - grav * dz * 0.5_rp )
1088 pres_org(2,i,j) = dens_org(2,i,j) * rtot * temp_org(2,i,j)
1099 cz_org(2,i,j) = cz_org(k,i,j)
1100 velz_org(2,i,j) = velz_org(k,i,j)
1101 velx_org(2,i,j) = velx_org(k,i,j)
1102 vely_org(2,i,j) = vely_org(k,i,j)
1103 pres_org(2,i,j) = pres_org(k,i,j)
1104 temp_org(2,i,j) = temp_org(k,i,j)
1105 dens_org(2,i,j) = dens_org(k,i,j)
1106 qv_org(2,i,j) = qv_org(k,i,j)
1107 qhyd_org(2,i,j,:) = qhyd_org(k,i,j,:)
1108 rn222_org(2,i,j) = rn222_org(k,i,j)
1126 if ( var_id(ia_q2,1) < 0 .and. var_id(ia_rh2,1) < 0 )
then
1131 qv_org(2,i,j) = qv_org(k,i,j)
1139 qv_org(1,i,j) = qv_org(k,i,j)
1140 qhyd_org(1,i,j,:) = qhyd_org(k,i,j,:)
1141 qhyd_org(2,i,j,:) = qhyd_org(k,i,j,:)
1142 rn222_org(1,i,j) = rn222_org(k,i,j)
1143 rn222_org(2,i,j) = rn222_org(k,i,j)
1151 temp_org(1,i,j) = temp_org(2,i,j) + laps * cz_org(2,i,j)
1154 if ( var_id(ia_slp,1) > 0 )
then
1158 dens_org(1,i,j) = pres_org(1,i,j) / ( rdry * temp_org(1,i,j) )
1165 dens_org(1,i,j) = ( pres_org(2,i,j) + grav * dens_org(2,i,j) * cz_org(2,i,j) * 0.5_rp ) &
1166 / ( rdry * temp_org(1,i,j) - grav * cz_org(2,i,j) * 0.5_rp )
1167 pres_org(1,i,j) = dens_org(1,i,j) * rdry * temp_org(1,i,j)
1176 velz_org(1:2,i,j) = undef
1177 velx_org(1:2,i,j) = undef
1178 vely_org(1:2,i,j) = undef
1179 dens_org(1:2,i,j) = undef
1180 temp_org(1:2,i,j) = undef
1181 qv_org(1:2,i,j) = undef
1182 qhyd_org(1:2,i,j,:) = undef
1183 rn222_org(1:2,i,j) = undef
1184 pres_org(1 ,i,j) = undef
1185 cz_org(1 ,i,j) = undef
1191 if( pressure_coordinates .and. var_id(ia_ps,1) > 0 )
then
1195 if ( under_sfc )
then
1197 if ( pres_org(1,i,j) < pres_org(k,i,j) )
then
1198 pres_org(1,i,j) = undef
1199 cz_org(1,i,j) = undef
1201 if ( pres_org(2,i,j) < pres_org(k,i,j) )
then
1202 pres_org(2,i,j) = pres_org(1,i,j)
1203 cz_org(2,i,j) = cz_org(1,i,j)
1208 if( pres_org(k,i,j) > pres_org(2,i,j) )
then
1209 if ( sfc_diagnoses )
then
1210 velz_org(k,i,j) = velz_org(2,i,j)
1211 velx_org(k,i,j) = velx_org(2,i,j)
1212 vely_org(k,i,j) = vely_org(2,i,j)
1213 pres_org(k,i,j) = pres_org(2,i,j)
1214 dens_org(k,i,j) = dens_org(2,i,j)
1215 temp_org(k,i,j) = temp_org(2,i,j)
1216 qv_org(k,i,j) = qv_org(2,i,j)
1217 qhyd_org(k,i,j,:) = qhyd_org(2,i,j,:)
1218 cz_org(k,i,j) = cz_org(2,i,j)
1219 rn222_org(k,i,j) = rn222_org(2,i,j)
1221 velz_org(k,i,j) = undef
1222 velx_org(k,i,j) = undef
1223 vely_org(k,i,j) = undef
1224 pres_org(k,i,j) = undef
1225 dens_org(k,i,j) = undef
1226 temp_org(k,i,j) = undef
1227 qv_org(k,i,j) = undef
1228 qhyd_org(k,i,j,:) = undef
1229 cz_org(k,i,j) = undef
1230 rn222_org(k,i,j) = undef
1236 else if ( var_id(ia_topo,1) > 0 )
then
1240 if ( under_sfc )
then
1242 if ( cz_org(1,i,j) < cz_org(k,i,j) )
then
1243 pres_org(1,i,j) = undef
1244 cz_org(1,i,j) = undef
1246 if ( cz_org(1,i,j) < cz_org(k,i,j) )
then
1247 pres_org(2,i,j) = pres_org(1,i,j)
1248 cz_org(2,i,j) = cz_org(1,i,j)
1254 if( cz_org(k,i,j) < cz_org(2,i,j) )
then
1255 if ( sfc_diagnoses )
then
1256 velz_org(k,i,j) = velz_org(2,i,j)
1257 velx_org(k,i,j) = velx_org(2,i,j)
1258 vely_org(k,i,j) = vely_org(2,i,j)
1259 pres_org(k,i,j) = pres_org(2,i,j)
1260 dens_org(k,i,j) = dens_org(2,i,j)
1261 temp_org(k,i,j) = temp_org(2,i,j)
1262 qv_org(k,i,j) = qv_org(2,i,j)
1263 qhyd_org(k,i,j,:) = qhyd_org(2,i,j,:)
1264 cz_org(k,i,j) = cz_org(2,i,j)
1265 rn222_org(k,i,j) = 0.0_rp
1267 velz_org(k,i,j) = undef
1268 velx_org(k,i,j) = undef
1269 vely_org(k,i,j) = undef
1270 pres_org(k,i,j) = undef
1271 dens_org(k,i,j) = undef
1272 temp_org(k,i,j) = undef
1273 qv_org(k,i,j) = undef
1274 qhyd_org(k,i,j,:) = undef
1275 cz_org(k,i,j) = undef
1276 rn222_org(k,i,j) = undef